trusty-cms 5.0.6 → 5.0.7

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.
Files changed (156) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +60 -59
  3. data/app/models/asset.rb +8 -2
  4. data/app/views/admin/assets/_asset_table.html.haml +1 -1
  5. data/app/views/admin/assets/_search.html.haml +1 -1
  6. data/app/views/admin/assets/_search_results.html.haml +2 -2
  7. data/app/views/admin/assets/edit.html.haml +5 -5
  8. data/app/views/admin/assets/index.html.haml +1 -1
  9. data/app/views/admin/configuration/_clipped_show.html.haml +1 -1
  10. data/app/views/admin/pages/_asset_popups.html.haml +5 -5
  11. data/app/views/admin/removed/_assets_bucket.html.haml +2 -2
  12. data/app/views/admin/removed/_assets_container.html.haml +6 -6
  13. data/app/views/admin/removed/_bucket.html.haml +1 -1
  14. data/app/views/admin/removed/_upload_to_page.html.haml +1 -1
  15. data/app/views/admin/sites/_form.haml +2 -2
  16. data/app/views/admin/snippets/edit.html.haml +1 -1
  17. data/app/views/admin/snippets/new.html.haml +1 -1
  18. data/config/database.yml +4 -0
  19. data/coverage/index.html +154 -154
  20. data/lib/generators/extension_controller/templates/view_spec.rb +1 -1
  21. data/lib/generators/generator_base_extension.rb +0 -1
  22. data/lib/generators/instance/instance_generator.rb +1 -1
  23. data/lib/generators/language_extension/language_extension_generator.rb +0 -1
  24. data/lib/generators/language_extension/templates/test_helper.rb +0 -1
  25. data/lib/generators/trusty_cms/trusty_cms_generator.rb +0 -2
  26. data/lib/trusty_cms.rb +1 -1
  27. data/node_modules/ajv/README.md +158 -72
  28. data/node_modules/ajv/dist/ajv.bundle.js +136 -112
  29. data/node_modules/ajv/dist/ajv.min.js +2 -2
  30. data/node_modules/ajv/dist/ajv.min.js.map +1 -1
  31. data/node_modules/ajv/lib/ajv.d.ts +3 -1
  32. data/node_modules/ajv/lib/compile/equal.js +1 -1
  33. data/node_modules/ajv/lib/compile/formats.js +4 -4
  34. data/node_modules/ajv/lib/compile/index.js +1 -1
  35. data/node_modules/ajv/lib/compile/util.js +9 -44
  36. data/node_modules/ajv/lib/data.js +1 -1
  37. data/node_modules/ajv/lib/definition_schema.js +1 -1
  38. data/node_modules/ajv/lib/dot/_limit.jst +9 -0
  39. data/node_modules/ajv/lib/dot/_limitItems.jst +2 -0
  40. data/node_modules/ajv/lib/dot/_limitLength.jst +2 -0
  41. data/node_modules/ajv/lib/dot/_limitProperties.jst +2 -0
  42. data/node_modules/ajv/lib/dot/allOf.jst +0 -2
  43. data/node_modules/ajv/lib/dot/anyOf.jst +0 -2
  44. data/node_modules/ajv/lib/dot/coerce.def +18 -28
  45. data/node_modules/ajv/lib/dot/contains.jst +0 -2
  46. data/node_modules/ajv/lib/dot/definitions.def +9 -7
  47. data/node_modules/ajv/lib/dot/dependencies.jst +1 -2
  48. data/node_modules/ajv/lib/dot/if.jst +0 -2
  49. data/node_modules/ajv/lib/dot/items.jst +0 -2
  50. data/node_modules/ajv/lib/dot/multipleOf.jst +2 -0
  51. data/node_modules/ajv/lib/dot/properties.jst +6 -5
  52. data/node_modules/ajv/lib/dot/propertyNames.jst +0 -2
  53. data/node_modules/ajv/lib/dot/uniqueItems.jst +1 -1
  54. data/node_modules/ajv/lib/dot/validate.jst +3 -9
  55. data/node_modules/ajv/lib/dotjs/_limit.js +6 -0
  56. data/node_modules/ajv/lib/dotjs/_limitItems.js +3 -0
  57. data/node_modules/ajv/lib/dotjs/_limitLength.js +3 -0
  58. data/node_modules/ajv/lib/dotjs/_limitProperties.js +3 -0
  59. data/node_modules/ajv/lib/dotjs/allOf.js +1 -2
  60. data/node_modules/ajv/lib/dotjs/anyOf.js +1 -2
  61. data/node_modules/ajv/lib/dotjs/contains.js +1 -2
  62. data/node_modules/ajv/lib/dotjs/dependencies.js +2 -2
  63. data/node_modules/ajv/lib/dotjs/if.js +2 -3
  64. data/node_modules/ajv/lib/dotjs/items.js +3 -4
  65. data/node_modules/ajv/lib/dotjs/multipleOf.js +3 -0
  66. data/node_modules/ajv/lib/dotjs/not.js +1 -1
  67. data/node_modules/ajv/lib/dotjs/oneOf.js +1 -1
  68. data/node_modules/ajv/lib/dotjs/properties.js +11 -6
  69. data/node_modules/ajv/lib/dotjs/propertyNames.js +1 -2
  70. data/node_modules/ajv/lib/dotjs/required.js +1 -1
  71. data/node_modules/ajv/lib/dotjs/uniqueItems.js +1 -1
  72. data/node_modules/ajv/lib/dotjs/validate.js +13 -25
  73. data/node_modules/ajv/lib/keyword.js +1 -1
  74. data/node_modules/ajv/lib/refs/data.json +1 -1
  75. data/node_modules/ajv/lib/refs/json-schema-secure.json +1 -1
  76. data/node_modules/ajv/package.json +18 -10
  77. data/node_modules/ajv/scripts/info +0 -0
  78. data/node_modules/ajv/scripts/prepare-tests +0 -0
  79. data/node_modules/ajv/scripts/publish-built-version +1 -1
  80. data/node_modules/ajv/scripts/travis-gh-pages +1 -1
  81. data/node_modules/fast-deep-equal/es6/index.d.ts +1 -1
  82. data/node_modules/fast-deep-equal/es6/react.d.ts +1 -1
  83. data/node_modules/fast-deep-equal/package.json +7 -7
  84. data/node_modules/fast-deep-equal/react.d.ts +1 -1
  85. data/node_modules/uri-js/LICENSE +11 -0
  86. data/node_modules/uri-js/README.md +22 -18
  87. data/node_modules/uri-js/dist/es5/uri.all.d.ts +59 -59
  88. data/node_modules/uri-js/dist/es5/uri.all.js +61 -7
  89. data/node_modules/uri-js/dist/es5/uri.all.js.map +1 -1
  90. data/node_modules/uri-js/dist/es5/uri.all.min.d.ts +59 -59
  91. data/node_modules/uri-js/dist/es5/uri.all.min.js +2 -2
  92. data/node_modules/uri-js/dist/es5/uri.all.min.js.map +1 -1
  93. data/node_modules/uri-js/dist/esnext/index.d.ts +1 -1
  94. data/node_modules/uri-js/dist/esnext/index.js +16 -12
  95. data/node_modules/uri-js/dist/esnext/index.js.map +1 -1
  96. data/node_modules/uri-js/dist/esnext/regexps-iri.d.ts +3 -3
  97. data/node_modules/uri-js/dist/esnext/regexps-iri.js +2 -2
  98. data/node_modules/uri-js/dist/esnext/regexps-iri.js.map +0 -0
  99. data/node_modules/uri-js/dist/esnext/regexps-uri.d.ts +4 -4
  100. data/node_modules/uri-js/dist/esnext/regexps-uri.js +41 -41
  101. data/node_modules/uri-js/dist/esnext/regexps-uri.js.map +0 -0
  102. data/node_modules/uri-js/dist/esnext/schemes/http.d.ts +3 -3
  103. data/node_modules/uri-js/dist/esnext/schemes/http.js +27 -26
  104. data/node_modules/uri-js/dist/esnext/schemes/http.js.map +1 -1
  105. data/node_modules/uri-js/dist/esnext/schemes/https.d.ts +3 -3
  106. data/node_modules/uri-js/dist/esnext/schemes/https.js +8 -8
  107. data/node_modules/uri-js/dist/esnext/schemes/https.js.map +0 -0
  108. data/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts +12 -12
  109. data/node_modules/uri-js/dist/esnext/schemes/mailto.js +0 -0
  110. data/node_modules/uri-js/dist/esnext/schemes/mailto.js.map +0 -0
  111. data/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts +7 -7
  112. data/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js +22 -22
  113. data/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map +0 -0
  114. data/node_modules/uri-js/dist/esnext/schemes/urn.d.ts +10 -10
  115. data/node_modules/uri-js/dist/esnext/schemes/urn.js +48 -48
  116. data/node_modules/uri-js/dist/esnext/schemes/urn.js.map +0 -0
  117. data/node_modules/uri-js/dist/esnext/schemes/ws.d.ts +7 -0
  118. data/node_modules/uri-js/dist/esnext/schemes/ws.js +41 -0
  119. data/node_modules/uri-js/dist/esnext/schemes/ws.js.map +1 -0
  120. data/node_modules/uri-js/dist/esnext/schemes/wss.d.ts +3 -0
  121. data/node_modules/uri-js/dist/esnext/schemes/wss.js +9 -0
  122. data/node_modules/uri-js/dist/esnext/schemes/wss.js.map +1 -0
  123. data/node_modules/uri-js/dist/esnext/uri.d.ts +59 -59
  124. data/node_modules/uri-js/dist/esnext/uri.js +2 -2
  125. data/node_modules/uri-js/dist/esnext/uri.js.map +1 -1
  126. data/node_modules/uri-js/dist/esnext/util.d.ts +6 -6
  127. data/node_modules/uri-js/dist/esnext/util.js +35 -35
  128. data/node_modules/uri-js/dist/esnext/util.js.map +0 -0
  129. data/node_modules/uri-js/package.json +19 -7
  130. data/node_modules/uri-js/yarn.lock +1271 -615
  131. data/spec/dummy/log/test.log +635 -0
  132. data/spec/dummy/tmp/cache/747/A70/TrustyCms%3A%3AConfig +0 -0
  133. data/spec/dummy/tmp/cache/85C/FA0/TrustyCms.cache_mtime +1 -0
  134. data/trusty_cms.gemspec +2 -1
  135. data/yarn.lock +9 -9
  136. metadata +48 -57
  137. data/node_modules/uri-js/bower.json +0 -47
  138. data/node_modules/uri-js/rollup.config.js +0 -32
  139. data/node_modules/uri-js/src/index.ts +0 -18
  140. data/node_modules/uri-js/src/punycode.d.ts +0 -24
  141. data/node_modules/uri-js/src/regexps-iri.ts +0 -4
  142. data/node_modules/uri-js/src/regexps-uri.ts +0 -89
  143. data/node_modules/uri-js/src/schemes/http.ts +0 -36
  144. data/node_modules/uri-js/src/schemes/https.ts +0 -11
  145. data/node_modules/uri-js/src/schemes/mailto.ts +0 -182
  146. data/node_modules/uri-js/src/schemes/urn-uuid.ts +0 -36
  147. data/node_modules/uri-js/src/schemes/urn.ts +0 -69
  148. data/node_modules/uri-js/src/uri.ts +0 -556
  149. data/node_modules/uri-js/src/util.ts +0 -40
  150. data/node_modules/uri-js/tests/qunit.css +0 -118
  151. data/node_modules/uri-js/tests/qunit.js +0 -1042
  152. data/node_modules/uri-js/tests/test-es5-min.html +0 -17
  153. data/node_modules/uri-js/tests/test-es5.html +0 -17
  154. data/node_modules/uri-js/tests/tests.js +0 -774
  155. data/node_modules/uri-js/tsconfig.json +0 -20
  156. data/spec/dummy/log/development.log +0 -456
@@ -1,556 +0,0 @@
1
- /**
2
- * URI.js
3
- *
4
- * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.
5
- * @author <a href="mailto:gary.court@gmail.com">Gary Court</a>
6
- * @see http://github.com/garycourt/uri-js
7
- */
8
-
9
- /**
10
- * Copyright 2011 Gary Court. All rights reserved.
11
- *
12
- * Redistribution and use in source and binary forms, with or without modification, are
13
- * permitted provided that the following conditions are met:
14
- *
15
- * 1. Redistributions of source code must retain the above copyright notice, this list of
16
- * conditions and the following disclaimer.
17
- *
18
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
19
- * of conditions and the following disclaimer in the documentation and/or other materials
20
- * provided with the distribution.
21
- *
22
- * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED
23
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
24
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR
25
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
28
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
30
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
- *
32
- * The views and conclusions contained in the software and documentation are those of the
33
- * authors and should not be interpreted as representing official policies, either expressed
34
- * or implied, of Gary Court.
35
- */
36
-
37
- import URI_PROTOCOL from "./regexps-uri";
38
- import IRI_PROTOCOL from "./regexps-iri";
39
- import punycode from "punycode";
40
- import { toUpperCase, typeOf, assign } from "./util";
41
-
42
- export interface URIComponents {
43
- scheme?:string;
44
- userinfo?:string;
45
- host?:string;
46
- port?:number|string;
47
- path?:string;
48
- query?:string;
49
- fragment?:string;
50
- reference?:string;
51
- error?:string;
52
- }
53
-
54
- export interface URIOptions {
55
- scheme?:string;
56
- reference?:string;
57
- tolerant?:boolean;
58
- absolutePath?:boolean;
59
- iri?:boolean;
60
- unicodeSupport?:boolean;
61
- domainHost?:boolean;
62
- }
63
-
64
- export interface URISchemeHandler<Components extends URIComponents = URIComponents, Options extends URIOptions = URIOptions, ParentComponents extends URIComponents = URIComponents> {
65
- scheme:string;
66
- parse(components:ParentComponents, options:Options):Components;
67
- serialize(components:Components, options:Options):ParentComponents;
68
- unicodeSupport?:boolean;
69
- domainHost?:boolean;
70
- absolutePath?:boolean;
71
- }
72
-
73
- export interface URIRegExps {
74
- NOT_SCHEME : RegExp,
75
- NOT_USERINFO : RegExp,
76
- NOT_HOST : RegExp,
77
- NOT_PATH : RegExp,
78
- NOT_PATH_NOSCHEME : RegExp,
79
- NOT_QUERY : RegExp,
80
- NOT_FRAGMENT : RegExp,
81
- ESCAPE : RegExp,
82
- UNRESERVED : RegExp,
83
- OTHER_CHARS : RegExp,
84
- PCT_ENCODED : RegExp,
85
- IPV4ADDRESS : RegExp,
86
- IPV6ADDRESS : RegExp,
87
- }
88
-
89
- export const SCHEMES:{[scheme:string]:URISchemeHandler} = {};
90
-
91
- export function pctEncChar(chr:string):string {
92
- const c = chr.charCodeAt(0);
93
- let e:string;
94
-
95
- if (c < 16) e = "%0" + c.toString(16).toUpperCase();
96
- else if (c < 128) e = "%" + c.toString(16).toUpperCase();
97
- else if (c < 2048) e = "%" + ((c >> 6) | 192).toString(16).toUpperCase() + "%" + ((c & 63) | 128).toString(16).toUpperCase();
98
- else e = "%" + ((c >> 12) | 224).toString(16).toUpperCase() + "%" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + "%" + ((c & 63) | 128).toString(16).toUpperCase();
99
-
100
- return e;
101
- }
102
-
103
- export function pctDecChars(str:string):string {
104
- let newStr = "";
105
- let i = 0;
106
- const il = str.length;
107
-
108
- while (i < il) {
109
- const c = parseInt(str.substr(i + 1, 2), 16);
110
-
111
- if (c < 128) {
112
- newStr += String.fromCharCode(c);
113
- i += 3;
114
- }
115
- else if (c >= 194 && c < 224) {
116
- if ((il - i) >= 6) {
117
- const c2 = parseInt(str.substr(i + 4, 2), 16);
118
- newStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
119
- } else {
120
- newStr += str.substr(i, 6);
121
- }
122
- i += 6;
123
- }
124
- else if (c >= 224) {
125
- if ((il - i) >= 9) {
126
- const c2 = parseInt(str.substr(i + 4, 2), 16);
127
- const c3 = parseInt(str.substr(i + 7, 2), 16);
128
- newStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
129
- } else {
130
- newStr += str.substr(i, 9);
131
- }
132
- i += 9;
133
- }
134
- else {
135
- newStr += str.substr(i, 3);
136
- i += 3;
137
- }
138
- }
139
-
140
- return newStr;
141
- }
142
-
143
- function _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {
144
- function decodeUnreserved(str:string):string {
145
- const decStr = pctDecChars(str);
146
- return (!decStr.match(protocol.UNRESERVED) ? str : decStr);
147
- }
148
-
149
- if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, "");
150
- if (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);
151
- if (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);
152
- if (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);
153
- if (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);
154
- if (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);
155
-
156
- return components;
157
- };
158
-
159
- function _stripLeadingZeros(str:string):string {
160
- return str.replace(/^0*(.*)/, "$1") || "0";
161
- }
162
-
163
- function _normalizeIPv4(host:string, protocol:URIRegExps):string {
164
- const matches = host.match(protocol.IPV4ADDRESS) || [];
165
- const [, address] = matches;
166
-
167
- if (address) {
168
- return address.split(".").map(_stripLeadingZeros).join(".");
169
- } else {
170
- return host;
171
- }
172
- }
173
-
174
- function _normalizeIPv6(host:string, protocol:URIRegExps):string {
175
- const matches = host.match(protocol.IPV6ADDRESS) || [];
176
- const [, address, zone] = matches;
177
-
178
- if (address) {
179
- const [last, first] = address.toLowerCase().split('::').reverse();
180
- const firstFields = first ? first.split(":").map(_stripLeadingZeros) : [];
181
- const lastFields = last.split(":").map(_stripLeadingZeros);
182
- const isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);
183
- const fieldCount = isLastFieldIPv4Address ? 7 : 8;
184
- const lastFieldsStart = lastFields.length - fieldCount;
185
- const fields = Array<string>(fieldCount);
186
-
187
- for (let x = 0; x < fieldCount; ++x) {
188
- fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';
189
- }
190
-
191
- if (isLastFieldIPv4Address) {
192
- fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);
193
- }
194
-
195
- const allZeroFields = fields.reduce<Array<{index:number,length:number}>>((acc, field, index) => {
196
- if (!field || field === "0") {
197
- const lastLongest = acc[acc.length - 1];
198
- if (lastLongest && lastLongest.index + lastLongest.length === index) {
199
- lastLongest.length++;
200
- } else {
201
- acc.push({ index, length : 1 });
202
- }
203
- }
204
- return acc;
205
- }, []);
206
-
207
- const longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];
208
-
209
- let newHost:string;
210
- if (longestZeroFields && longestZeroFields.length > 1) {
211
- const newFirst = fields.slice(0, longestZeroFields.index) ;
212
- const newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);
213
- newHost = newFirst.join(":") + "::" + newLast.join(":");
214
- } else {
215
- newHost = fields.join(":");
216
- }
217
-
218
- if (zone) {
219
- newHost += "%" + zone;
220
- }
221
-
222
- return newHost;
223
- } else {
224
- return host;
225
- }
226
- }
227
-
228
- const URI_PARSE = /^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i;
229
- const NO_MATCH_IS_UNDEFINED = (<RegExpMatchArray>("").match(/(){0}/))[1] === undefined;
230
-
231
- export function parse(uriString:string, options:URIOptions = {}):URIComponents {
232
- const components:URIComponents = {};
233
- const protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);
234
-
235
- if (options.reference === "suffix") uriString = (options.scheme ? options.scheme + ":" : "") + "//" + uriString;
236
-
237
- const matches = uriString.match(URI_PARSE);
238
-
239
- if (matches) {
240
- if (NO_MATCH_IS_UNDEFINED) {
241
- //store each component
242
- components.scheme = matches[1];
243
- components.userinfo = matches[3];
244
- components.host = matches[4];
245
- components.port = parseInt(matches[5], 10);
246
- components.path = matches[6] || "";
247
- components.query = matches[7];
248
- components.fragment = matches[8];
249
-
250
- //fix port number
251
- if (isNaN(components.port)) {
252
- components.port = matches[5];
253
- }
254
- } else { //IE FIX for improper RegExp matching
255
- //store each component
256
- components.scheme = matches[1] || undefined;
257
- components.userinfo = (uriString.indexOf("@") !== -1 ? matches[3] : undefined);
258
- components.host = (uriString.indexOf("//") !== -1 ? matches[4] : undefined);
259
- components.port = parseInt(matches[5], 10);
260
- components.path = matches[6] || "";
261
- components.query = (uriString.indexOf("?") !== -1 ? matches[7] : undefined);
262
- components.fragment = (uriString.indexOf("#") !== -1 ? matches[8] : undefined);
263
-
264
- //fix port number
265
- if (isNaN(components.port)) {
266
- components.port = (uriString.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/) ? matches[4] : undefined);
267
- }
268
- }
269
-
270
- if (components.host) {
271
- //normalize IP hosts
272
- components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);
273
- }
274
-
275
- //determine reference type
276
- if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {
277
- components.reference = "same-document";
278
- } else if (components.scheme === undefined) {
279
- components.reference = "relative";
280
- } else if (components.fragment === undefined) {
281
- components.reference = "absolute";
282
- } else {
283
- components.reference = "uri";
284
- }
285
-
286
- //check for reference errors
287
- if (options.reference && options.reference !== "suffix" && options.reference !== components.reference) {
288
- components.error = components.error || "URI is not a " + options.reference + " reference.";
289
- }
290
-
291
- //find scheme handler
292
- const schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()];
293
-
294
- //check if scheme can't handle IRIs
295
- if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {
296
- //if host component is a domain name
297
- if (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {
298
- //convert Unicode IDN -> ASCII IDN
299
- try {
300
- components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());
301
- } catch (e) {
302
- components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e;
303
- }
304
- }
305
- //convert IRI -> URI
306
- _normalizeComponentEncoding(components, URI_PROTOCOL);
307
- } else {
308
- //normalize encodings
309
- _normalizeComponentEncoding(components, protocol);
310
- }
311
-
312
- //perform scheme specific parsing
313
- if (schemeHandler && schemeHandler.parse) {
314
- schemeHandler.parse(components, options);
315
- }
316
- } else {
317
- components.error = components.error || "URI can not be parsed.";
318
- }
319
-
320
- return components;
321
- };
322
-
323
- function _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {
324
- const protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);
325
- const uriTokens:Array<string> = [];
326
-
327
- if (components.userinfo !== undefined) {
328
- uriTokens.push(components.userinfo);
329
- uriTokens.push("@");
330
- }
331
-
332
- if (components.host !== undefined) {
333
- //normalize IP hosts, add brackets and escape zone separator for IPv6
334
- uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => "[" + $1 + ($2 ? "%25" + $2 : "") + "]"));
335
- }
336
-
337
- if (typeof components.port === "number") {
338
- uriTokens.push(":");
339
- uriTokens.push(components.port.toString(10));
340
- }
341
-
342
- return uriTokens.length ? uriTokens.join("") : undefined;
343
- };
344
-
345
- const RDS1 = /^\.\.?\//;
346
- const RDS2 = /^\/\.(\/|$)/;
347
- const RDS3 = /^\/\.\.(\/|$)/;
348
- const RDS4 = /^\.\.?$/;
349
- const RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/;
350
-
351
- export function removeDotSegments(input:string):string {
352
- const output:Array<string> = [];
353
-
354
- while (input.length) {
355
- if (input.match(RDS1)) {
356
- input = input.replace(RDS1, "");
357
- } else if (input.match(RDS2)) {
358
- input = input.replace(RDS2, "/");
359
- } else if (input.match(RDS3)) {
360
- input = input.replace(RDS3, "/");
361
- output.pop();
362
- } else if (input === "." || input === "..") {
363
- input = "";
364
- } else {
365
- const im = input.match(RDS5);
366
- if (im) {
367
- const s = im[0];
368
- input = input.slice(s.length);
369
- output.push(s);
370
- } else {
371
- throw new Error("Unexpected dot segment condition");
372
- }
373
- }
374
- }
375
-
376
- return output.join("");
377
- };
378
-
379
- export function serialize(components:URIComponents, options:URIOptions = {}):string {
380
- const protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);
381
- const uriTokens:Array<string> = [];
382
-
383
- //find scheme handler
384
- const schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()];
385
-
386
- //perform scheme specific serialization
387
- if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);
388
-
389
- if (components.host) {
390
- //if host component is an IPv6 address
391
- if (protocol.IPV6ADDRESS.test(components.host)) {
392
- //TODO: normalize IPv6 address as per RFC 5952
393
- }
394
-
395
- //if host component is a domain name
396
- else if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {
397
- //convert IDN via punycode
398
- try {
399
- components.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));
400
- } catch (e) {
401
- components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e;
402
- }
403
- }
404
- }
405
-
406
- //normalize encoding
407
- _normalizeComponentEncoding(components, protocol);
408
-
409
- if (options.reference !== "suffix" && components.scheme) {
410
- uriTokens.push(components.scheme);
411
- uriTokens.push(":");
412
- }
413
-
414
- const authority = _recomposeAuthority(components, options);
415
- if (authority !== undefined) {
416
- if (options.reference !== "suffix") {
417
- uriTokens.push("//");
418
- }
419
-
420
- uriTokens.push(authority);
421
-
422
- if (components.path && components.path.charAt(0) !== "/") {
423
- uriTokens.push("/");
424
- }
425
- }
426
-
427
- if (components.path !== undefined) {
428
- let s = components.path;
429
-
430
- if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {
431
- s = removeDotSegments(s);
432
- }
433
-
434
- if (authority === undefined) {
435
- s = s.replace(/^\/\//, "/%2F"); //don't allow the path to start with "//"
436
- }
437
-
438
- uriTokens.push(s);
439
- }
440
-
441
- if (components.query !== undefined) {
442
- uriTokens.push("?");
443
- uriTokens.push(components.query);
444
- }
445
-
446
- if (components.fragment !== undefined) {
447
- uriTokens.push("#");
448
- uriTokens.push(components.fragment);
449
- }
450
-
451
- return uriTokens.join(""); //merge tokens into a string
452
- };
453
-
454
- export function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {
455
- const target:URIComponents = {};
456
-
457
- if (!skipNormalization) {
458
- base = parse(serialize(base, options), options); //normalize base components
459
- relative = parse(serialize(relative, options), options); //normalize relative components
460
- }
461
- options = options || {};
462
-
463
- if (!options.tolerant && relative.scheme) {
464
- target.scheme = relative.scheme;
465
- //target.authority = relative.authority;
466
- target.userinfo = relative.userinfo;
467
- target.host = relative.host;
468
- target.port = relative.port;
469
- target.path = removeDotSegments(relative.path || "");
470
- target.query = relative.query;
471
- } else {
472
- if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {
473
- //target.authority = relative.authority;
474
- target.userinfo = relative.userinfo;
475
- target.host = relative.host;
476
- target.port = relative.port;
477
- target.path = removeDotSegments(relative.path || "");
478
- target.query = relative.query;
479
- } else {
480
- if (!relative.path) {
481
- target.path = base.path;
482
- if (relative.query !== undefined) {
483
- target.query = relative.query;
484
- } else {
485
- target.query = base.query;
486
- }
487
- } else {
488
- if (relative.path.charAt(0) === "/") {
489
- target.path = removeDotSegments(relative.path);
490
- } else {
491
- if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {
492
- target.path = "/" + relative.path;
493
- } else if (!base.path) {
494
- target.path = relative.path;
495
- } else {
496
- target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path;
497
- }
498
- target.path = removeDotSegments(target.path);
499
- }
500
- target.query = relative.query;
501
- }
502
- //target.authority = base.authority;
503
- target.userinfo = base.userinfo;
504
- target.host = base.host;
505
- target.port = base.port;
506
- }
507
- target.scheme = base.scheme;
508
- }
509
-
510
- target.fragment = relative.fragment;
511
-
512
- return target;
513
- };
514
-
515
- export function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {
516
- const schemelessOptions = assign({ scheme : 'null' }, options);
517
- return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);
518
- };
519
-
520
- export function normalize(uri:string, options?:URIOptions):string;
521
- export function normalize(uri:URIComponents, options?:URIOptions):URIComponents;
522
- export function normalize(uri:any, options?:URIOptions):any {
523
- if (typeof uri === "string") {
524
- uri = serialize(parse(uri, options), options);
525
- } else if (typeOf(uri) === "object") {
526
- uri = parse(serialize(<URIComponents>uri, options), options);
527
- }
528
-
529
- return uri;
530
- };
531
-
532
- export function equal(uriA:string, uriB:string, options?: URIOptions):boolean;
533
- export function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;
534
- export function equal(uriA:any, uriB:any, options?:URIOptions):boolean {
535
- if (typeof uriA === "string") {
536
- uriA = serialize(parse(uriA, options), options);
537
- } else if (typeOf(uriA) === "object") {
538
- uriA = serialize(<URIComponents>uriA, options);
539
- }
540
-
541
- if (typeof uriB === "string") {
542
- uriB = serialize(parse(uriB, options), options);
543
- } else if (typeOf(uriB) === "object") {
544
- uriB = serialize(<URIComponents>uriB, options);
545
- }
546
-
547
- return uriA === uriB;
548
- };
549
-
550
- export function escapeComponent(str:string, options?:URIOptions):string {
551
- return str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);
552
- };
553
-
554
- export function unescapeComponent(str:string, options?:URIOptions):string {
555
- return str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);
556
- };
@@ -1,40 +0,0 @@
1
- export function merge(...sets:Array<string>):string {
2
- if (sets.length > 1) {
3
- sets[0] = sets[0].slice(0, -1);
4
- const xl = sets.length - 1;
5
- for (let x = 1; x < xl; ++x) {
6
- sets[x] = sets[x].slice(1, -1);
7
- }
8
- sets[xl] = sets[xl].slice(1);
9
- return sets.join('');
10
- } else {
11
- return sets[0];
12
- }
13
- }
14
-
15
- export function subexp(str:string):string {
16
- return "(?:" + str + ")";
17
- }
18
-
19
- export function typeOf(o:any):string {
20
- return o === undefined ? "undefined" : (o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase());
21
- }
22
-
23
- export function toUpperCase(str:string):string {
24
- return str.toUpperCase();
25
- }
26
-
27
- export function toArray(obj:any):Array<any> {
28
- return obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];
29
- }
30
-
31
-
32
- export function assign(target: object, source: any): any {
33
- const obj = target as any;
34
- if (source) {
35
- for (const key in source) {
36
- obj[key] = source[key];
37
- }
38
- }
39
- return obj;
40
- }