cdk-common 2.0.900 → 2.0.902

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 (96) hide show
  1. package/.jsii +2 -2
  2. package/lib/main.js +1 -1
  3. package/node_modules/fast-uri/.gitattributes +2 -0
  4. package/node_modules/fast-uri/.github/.stale.yml +21 -0
  5. package/node_modules/fast-uri/.github/dependabot.yml +13 -0
  6. package/node_modules/fast-uri/.github/tests_checker.yml +8 -0
  7. package/node_modules/fast-uri/.github/workflows/ci.yml +23 -0
  8. package/node_modules/fast-uri/.github/workflows/package-manager-ci.yml +20 -0
  9. package/node_modules/fast-uri/.taprc +3 -0
  10. package/node_modules/fast-uri/LICENSE +30 -0
  11. package/node_modules/fast-uri/README.md +125 -0
  12. package/node_modules/fast-uri/benchmark.js +105 -0
  13. package/node_modules/fast-uri/index.js +309 -0
  14. package/node_modules/fast-uri/lib/schemes.js +188 -0
  15. package/node_modules/fast-uri/lib/scopedChars.js +30 -0
  16. package/node_modules/fast-uri/lib/utils.js +242 -0
  17. package/node_modules/fast-uri/package.json +39 -0
  18. package/node_modules/fast-uri/test/.gitkeep +0 -0
  19. package/node_modules/fast-uri/test/ajv.test.js +39 -0
  20. package/node_modules/fast-uri/test/compatibility.test.js +130 -0
  21. package/node_modules/fast-uri/test/equal.test.js +104 -0
  22. package/node_modules/fast-uri/test/parse.test.js +319 -0
  23. package/node_modules/fast-uri/test/resolve.test.js +76 -0
  24. package/node_modules/fast-uri/test/serialize.test.js +144 -0
  25. package/node_modules/fast-uri/test/uri-js.test.js +940 -0
  26. package/node_modules/fast-uri/test/util.test.js +24 -0
  27. package/node_modules/fast-uri/types/index.d.ts +53 -0
  28. package/node_modules/fast-uri/types/index.test-d.ts +17 -0
  29. package/node_modules/table/node_modules/ajv/dist/compile/codegen/code.js +1 -0
  30. package/node_modules/table/node_modules/ajv/dist/compile/codegen/code.js.map +1 -1
  31. package/node_modules/table/node_modules/ajv/dist/compile/index.js.map +1 -1
  32. package/node_modules/table/node_modules/ajv/dist/compile/resolve.d.ts +2 -2
  33. package/node_modules/table/node_modules/ajv/dist/compile/resolve.js.map +1 -1
  34. package/node_modules/table/node_modules/ajv/dist/runtime/uri.d.ts +1 -1
  35. package/node_modules/table/node_modules/ajv/dist/runtime/uri.js +1 -1
  36. package/node_modules/table/node_modules/ajv/dist/runtime/uri.js.map +1 -1
  37. package/node_modules/table/node_modules/ajv/dist/types/index.d.ts +3 -3
  38. package/node_modules/table/node_modules/ajv/dist/types/json-schema.d.ts +10 -10
  39. package/node_modules/table/node_modules/ajv/lib/compile/codegen/code.ts +1 -0
  40. package/node_modules/table/node_modules/ajv/lib/compile/index.ts +2 -2
  41. package/node_modules/table/node_modules/ajv/lib/compile/resolve.ts +2 -2
  42. package/node_modules/table/node_modules/ajv/lib/runtime/uri.ts +1 -1
  43. package/node_modules/table/node_modules/ajv/lib/types/index.ts +3 -3
  44. package/node_modules/table/node_modules/ajv/lib/types/json-schema.ts +10 -10
  45. package/node_modules/table/node_modules/ajv/package.json +5 -5
  46. package/package.json +1 -1
  47. package/node_modules/punycode/LICENSE-MIT.txt +0 -20
  48. package/node_modules/punycode/README.md +0 -148
  49. package/node_modules/punycode/package.json +0 -58
  50. package/node_modules/punycode/punycode.es6.js +0 -444
  51. package/node_modules/punycode/punycode.js +0 -443
  52. package/node_modules/uri-js/LICENSE +0 -11
  53. package/node_modules/uri-js/README.md +0 -203
  54. package/node_modules/uri-js/dist/es5/uri.all.d.ts +0 -59
  55. package/node_modules/uri-js/dist/es5/uri.all.js +0 -1443
  56. package/node_modules/uri-js/dist/es5/uri.all.js.map +0 -1
  57. package/node_modules/uri-js/dist/es5/uri.all.min.d.ts +0 -59
  58. package/node_modules/uri-js/dist/es5/uri.all.min.js +0 -3
  59. package/node_modules/uri-js/dist/es5/uri.all.min.js.map +0 -1
  60. package/node_modules/uri-js/dist/esnext/index.d.ts +0 -1
  61. package/node_modules/uri-js/dist/esnext/index.js +0 -17
  62. package/node_modules/uri-js/dist/esnext/index.js.map +0 -1
  63. package/node_modules/uri-js/dist/esnext/regexps-iri.d.ts +0 -3
  64. package/node_modules/uri-js/dist/esnext/regexps-iri.js +0 -3
  65. package/node_modules/uri-js/dist/esnext/regexps-iri.js.map +0 -1
  66. package/node_modules/uri-js/dist/esnext/regexps-uri.d.ts +0 -4
  67. package/node_modules/uri-js/dist/esnext/regexps-uri.js +0 -42
  68. package/node_modules/uri-js/dist/esnext/regexps-uri.js.map +0 -1
  69. package/node_modules/uri-js/dist/esnext/schemes/http.d.ts +0 -3
  70. package/node_modules/uri-js/dist/esnext/schemes/http.js +0 -28
  71. package/node_modules/uri-js/dist/esnext/schemes/http.js.map +0 -1
  72. package/node_modules/uri-js/dist/esnext/schemes/https.d.ts +0 -3
  73. package/node_modules/uri-js/dist/esnext/schemes/https.js +0 -9
  74. package/node_modules/uri-js/dist/esnext/schemes/https.js.map +0 -1
  75. package/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts +0 -12
  76. package/node_modules/uri-js/dist/esnext/schemes/mailto.js +0 -148
  77. package/node_modules/uri-js/dist/esnext/schemes/mailto.js.map +0 -1
  78. package/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts +0 -7
  79. package/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js +0 -23
  80. package/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map +0 -1
  81. package/node_modules/uri-js/dist/esnext/schemes/urn.d.ts +0 -10
  82. package/node_modules/uri-js/dist/esnext/schemes/urn.js +0 -49
  83. package/node_modules/uri-js/dist/esnext/schemes/urn.js.map +0 -1
  84. package/node_modules/uri-js/dist/esnext/schemes/ws.d.ts +0 -7
  85. package/node_modules/uri-js/dist/esnext/schemes/ws.js +0 -41
  86. package/node_modules/uri-js/dist/esnext/schemes/ws.js.map +0 -1
  87. package/node_modules/uri-js/dist/esnext/schemes/wss.d.ts +0 -3
  88. package/node_modules/uri-js/dist/esnext/schemes/wss.js +0 -9
  89. package/node_modules/uri-js/dist/esnext/schemes/wss.js.map +0 -1
  90. package/node_modules/uri-js/dist/esnext/uri.d.ts +0 -59
  91. package/node_modules/uri-js/dist/esnext/uri.js +0 -480
  92. package/node_modules/uri-js/dist/esnext/uri.js.map +0 -1
  93. package/node_modules/uri-js/dist/esnext/util.d.ts +0 -6
  94. package/node_modules/uri-js/dist/esnext/util.js +0 -36
  95. package/node_modules/uri-js/dist/esnext/util.js.map +0 -1
  96. package/node_modules/uri-js/package.json +0 -77
@@ -0,0 +1,242 @@
1
+ 'use strict'
2
+
3
+ const { HEX } = require('./scopedChars')
4
+
5
+ function normalizeIPv4 (host) {
6
+ if (findToken(host, '.') < 3) { return { host, isIPV4: false } }
7
+ const matches = host.match(/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/u) || []
8
+ const [address] = matches
9
+ if (address) {
10
+ return { host: stripLeadingZeros(address, '.'), isIPV4: true }
11
+ } else {
12
+ return { host, isIPV4: false }
13
+ }
14
+ }
15
+
16
+ /**
17
+ * @param {string[]} input
18
+ * @param {boolean} [keepZero=false]
19
+ * @returns {string|undefined}
20
+ */
21
+ function stringArrayToHexStripped (input, keepZero = false) {
22
+ let acc = ''
23
+ let strip = true
24
+ for (const c of input) {
25
+ if (HEX[c] === undefined) return undefined
26
+ if (c !== '0' && strip === true) strip = false
27
+ if (!strip) acc += c
28
+ }
29
+ if (keepZero && acc.length === 0) acc = '0'
30
+ return acc
31
+ }
32
+
33
+ function getIPV6 (input) {
34
+ let tokenCount = 0
35
+ const output = { error: false, address: '', zone: '' }
36
+ const address = []
37
+ const buffer = []
38
+ let isZone = false
39
+ let endipv6Encountered = false
40
+ let endIpv6 = false
41
+
42
+ function consume () {
43
+ if (buffer.length) {
44
+ if (isZone === false) {
45
+ const hex = stringArrayToHexStripped(buffer)
46
+ if (hex !== undefined) {
47
+ address.push(hex)
48
+ } else {
49
+ output.error = true
50
+ return false
51
+ }
52
+ }
53
+ buffer.length = 0
54
+ }
55
+ return true
56
+ }
57
+
58
+ for (let i = 0; i < input.length; i++) {
59
+ const cursor = input[i]
60
+ if (cursor === '[' || cursor === ']') { continue }
61
+ if (cursor === ':') {
62
+ if (endipv6Encountered === true) {
63
+ endIpv6 = true
64
+ }
65
+ if (!consume()) { break }
66
+ tokenCount++
67
+ address.push(':')
68
+ if (tokenCount > 7) {
69
+ // not valid
70
+ output.error = true
71
+ break
72
+ }
73
+ if (i - 1 >= 0 && input[i - 1] === ':') {
74
+ endipv6Encountered = true
75
+ }
76
+ continue
77
+ } else if (cursor === '%') {
78
+ if (!consume()) { break }
79
+ // switch to zone detection
80
+ isZone = true
81
+ } else {
82
+ buffer.push(cursor)
83
+ continue
84
+ }
85
+ }
86
+ if (buffer.length) {
87
+ if (isZone) {
88
+ output.zone = buffer.join('')
89
+ } else if (endIpv6) {
90
+ address.push(buffer.join(''))
91
+ } else {
92
+ address.push(stringArrayToHexStripped(buffer))
93
+ }
94
+ }
95
+ output.address = address.join('')
96
+ return output
97
+ }
98
+
99
+ function normalizeIPv6 (host, opts = {}) {
100
+ if (findToken(host, ':') < 2) { return { host, isIPV6: false } }
101
+ const ipv6 = getIPV6(host)
102
+
103
+ if (!ipv6.error) {
104
+ let newHost = ipv6.address
105
+ let escapedHost = ipv6.address
106
+ if (ipv6.zone) {
107
+ newHost += '%' + ipv6.zone
108
+ escapedHost += '%25' + ipv6.zone
109
+ }
110
+ return { host: newHost, escapedHost, isIPV6: true }
111
+ } else {
112
+ return { host, isIPV6: false }
113
+ }
114
+ }
115
+
116
+ function stripLeadingZeros (str, token) {
117
+ let out = ''
118
+ let skip = true
119
+ const l = str.length
120
+ for (let i = 0; i < l; i++) {
121
+ const c = str[i]
122
+ if (c === '0' && skip) {
123
+ if ((i + 1 <= l && str[i + 1] === token) || i + 1 === l) {
124
+ out += c
125
+ skip = false
126
+ }
127
+ } else {
128
+ if (c === token) {
129
+ skip = true
130
+ } else {
131
+ skip = false
132
+ }
133
+ out += c
134
+ }
135
+ }
136
+ return out
137
+ }
138
+
139
+ function findToken (str, token) {
140
+ let ind = 0
141
+ for (let i = 0; i < str.length; i++) {
142
+ if (str[i] === token) ind++
143
+ }
144
+ return ind
145
+ }
146
+
147
+ const RDS1 = /^\.\.?\//u
148
+ const RDS2 = /^\/\.(?:\/|$)/u
149
+ const RDS3 = /^\/\.\.(?:\/|$)/u
150
+ const RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/u
151
+
152
+ function removeDotSegments (input) {
153
+ const output = []
154
+
155
+ while (input.length) {
156
+ if (input.match(RDS1)) {
157
+ input = input.replace(RDS1, '')
158
+ } else if (input.match(RDS2)) {
159
+ input = input.replace(RDS2, '/')
160
+ } else if (input.match(RDS3)) {
161
+ input = input.replace(RDS3, '/')
162
+ output.pop()
163
+ } else if (input === '.' || input === '..') {
164
+ input = ''
165
+ } else {
166
+ const im = input.match(RDS5)
167
+ if (im) {
168
+ const s = im[0]
169
+ input = input.slice(s.length)
170
+ output.push(s)
171
+ } else {
172
+ throw new Error('Unexpected dot segment condition')
173
+ }
174
+ }
175
+ }
176
+ return output.join('')
177
+ }
178
+
179
+ function normalizeComponentEncoding (components, esc) {
180
+ const func = esc !== true ? escape : unescape
181
+ if (components.scheme !== undefined) {
182
+ components.scheme = func(components.scheme)
183
+ }
184
+ if (components.userinfo !== undefined) {
185
+ components.userinfo = func(components.userinfo)
186
+ }
187
+ if (components.host !== undefined) {
188
+ components.host = func(components.host)
189
+ }
190
+ if (components.path !== undefined) {
191
+ components.path = func(components.path)
192
+ }
193
+ if (components.query !== undefined) {
194
+ components.query = func(components.query)
195
+ }
196
+ if (components.fragment !== undefined) {
197
+ components.fragment = func(components.fragment)
198
+ }
199
+ return components
200
+ }
201
+
202
+ function recomposeAuthority (components, options) {
203
+ const uriTokens = []
204
+
205
+ if (components.userinfo !== undefined) {
206
+ uriTokens.push(components.userinfo)
207
+ uriTokens.push('@')
208
+ }
209
+
210
+ if (components.host !== undefined) {
211
+ let host = unescape(components.host)
212
+ const ipV4res = normalizeIPv4(host)
213
+
214
+ if (ipV4res.isIPV4) {
215
+ host = ipV4res.host
216
+ } else {
217
+ const ipV6res = normalizeIPv6(ipV4res.host, { isIPV4: false })
218
+ if (ipV6res.isIPV6 === true) {
219
+ host = `[${ipV6res.escapedHost}]`
220
+ } else {
221
+ host = components.host
222
+ }
223
+ }
224
+ uriTokens.push(host)
225
+ }
226
+
227
+ if (typeof components.port === 'number' || typeof components.port === 'string') {
228
+ uriTokens.push(':')
229
+ uriTokens.push(String(components.port))
230
+ }
231
+
232
+ return uriTokens.length ? uriTokens.join('') : undefined
233
+ };
234
+
235
+ module.exports = {
236
+ recomposeAuthority,
237
+ normalizeComponentEncoding,
238
+ removeDotSegments,
239
+ normalizeIPv4,
240
+ normalizeIPv6,
241
+ stringArrayToHexStripped
242
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "fast-uri",
3
+ "description": "Dependency free RFC 3986 URI toolbox",
4
+ "version": "3.0.1",
5
+ "main": "index.js",
6
+ "type": "commonjs",
7
+ "types": "types/index.d.ts",
8
+ "license": "MIT",
9
+ "author": "Vincent Le Goff <vince.legoff@gmail.com> (https://github.com/zekth)",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/fastify/fast-uri.git"
13
+ },
14
+ "bugs": {
15
+ "url": "https://github.com/fastify/fast-uri/issues"
16
+ },
17
+ "homepage": "https://github.com/fastify/fast-uri",
18
+ "scripts": {
19
+ "bench": "node benchmark.js",
20
+ "lint": "standard | snazzy",
21
+ "lint:fix": "standard --fix",
22
+ "test": "npm run lint && npm run test:unit && npm run test:typescript",
23
+ "test:ci": "npm run lint && npm run test:unit -- --coverage-report=lcovonly && npm run test:typescript",
24
+ "test:unit": "tap",
25
+ "test:unit:dev": "npm run test:unit -- --coverage-report=html",
26
+ "test:typescript": "tsd"
27
+ },
28
+ "devDependencies": {
29
+ "@fastify/pre-commit": "^2.1.0",
30
+ "ajv": "^8.16.0",
31
+ "benchmark": "^2.1.4",
32
+ "coveralls": "^3.1.1",
33
+ "snazzy": "^9.0.0",
34
+ "standard": "^17.1.0",
35
+ "tap": "^18.7.2",
36
+ "tsd": "^0.31.0",
37
+ "uri-js": "^4.4.1"
38
+ }
39
+ }
File without changes
@@ -0,0 +1,39 @@
1
+ const AJV = require('ajv')
2
+ const fastUri = require('../')
3
+ const ajv = new AJV({
4
+ uriResolver: fastUri // comment this line to see it works with uri-js
5
+ })
6
+ const { test } = require('tap')
7
+
8
+ test('ajv', t => {
9
+ t.plan(1)
10
+ const schema = {
11
+ $ref: '#/definitions/Record%3Cstring%2CPerson%3E',
12
+ definitions: {
13
+ Person: {
14
+ type: 'object',
15
+ properties: {
16
+ firstName: {
17
+ type: 'string'
18
+ }
19
+ }
20
+ },
21
+ 'Record<string,Person>': {
22
+ type: 'object',
23
+ additionalProperties: {
24
+ $ref: '#/definitions/Person'
25
+ }
26
+ }
27
+ }
28
+ }
29
+
30
+ const data = {
31
+ joe: {
32
+ firstName: 'Joe'
33
+ }
34
+
35
+ }
36
+
37
+ const validate = ajv.compile(schema)
38
+ t.ok(validate(data))
39
+ })
@@ -0,0 +1,130 @@
1
+ 'use strict'
2
+
3
+ const tap = require('tap')
4
+ const test = tap.test
5
+ const fastifyURI = require('../')
6
+ const urijs = require('uri-js')
7
+
8
+ test('compatibility Parse', (t) => {
9
+ const toParse = [
10
+ '//www.g.com/error\n/bleh/bleh',
11
+ 'https://fastify.org',
12
+ '/definitions/Record%3Cstring%2CPerson%3E',
13
+ '//10.10.10.10',
14
+ // '//10.10.000.10', <-- not a valid URI per URI spec: https://datatracker.ietf.org/doc/html/rfc5954#section-4.1
15
+ '//[2001:db8::7%en0]',
16
+ '//[2001:dbZ::1]:80',
17
+ '//[2001:db8::1]:80',
18
+ '//[2001:db8::001]:80',
19
+ 'uri://user:pass@example.com:123/one/two.three?q1=a1&q2=a2#body',
20
+ 'http://user:pass@example.com:123/one/space in.url?q1=a1&q2=a2#body',
21
+ '//[::ffff:129.144.52.38]',
22
+ 'uri://10.10.10.10.example.com/en/process',
23
+ '//[2606:2800:220:1:248:1893:25c8:1946]/test',
24
+ 'ws://example.com/chat',
25
+ 'ws://example.com/foo?bar=baz',
26
+ 'wss://example.com/?bar=baz',
27
+ 'wss://example.com/chat',
28
+ 'wss://example.com/foo?bar=baz',
29
+ 'wss://example.com/?bar=baz',
30
+ 'urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6',
31
+ 'urn:uuid:notauuid-7dec-11d0-a765-00a0c91e6bf6',
32
+ 'urn:example:%D0%B0123,z456',
33
+ '//[2606:2800:220:1:248:1893:25c8:1946:43209]',
34
+ 'http://foo.bar',
35
+ 'http://',
36
+ '#/$defs/stringMap',
37
+ '#/$defs/string%20Map',
38
+ '#/$defs/string Map',
39
+ '//?json=%7B%22foo%22%3A%22bar%22%7D'
40
+ // 'mailto:chris@example.com'-203845,
41
+ // 'mailto:infobot@example.com?subject=current-issue',
42
+ // 'mailto:infobot@example.com?body=send%20current-issue',
43
+ // 'mailto:infobot@example.com?body=send%20current-issue%0D%0Asend%20index',
44
+ // 'mailto:list@example.org?In-Reply-To=%3C3469A91.D10AF4C@example.com%3E',
45
+ // 'mailto:majordomo@example.com?body=subscribe%20bamboo-l',
46
+ // 'mailto:joe@example.com?cc=bob@example.com&body=hello',
47
+ // 'mailto:gorby%25kremvax@example.com',
48
+ // 'mailto:unlikely%3Faddress@example.com?blat=foop',
49
+ // 'mailto:Mike%26family@example.org',
50
+ // 'mailto:%22not%40me%22@example.org',
51
+ // 'mailto:%22oh%5C%5Cno%22@example.org',
52
+ // 'mailto:%22%5C%5C%5C%22it\'s%5C%20ugly%5C%5C%5C%22%22@example.org',
53
+ // 'mailto:user@example.org?subject=caf%C3%A9',
54
+ // 'mailto:user@example.org?subject=%3D%3Futf-8%3FQ%3Fcaf%3DC3%3DA9%3F%3D',
55
+ // 'mailto:user@example.org?subject=%3D%3Fiso-8859-1%3FQ%3Fcaf%3DE9%3F%3D',
56
+ // 'mailto:user@example.org?subject=caf%C3%A9&body=caf%C3%A9',
57
+ // 'mailto:user@%E7%B4%8D%E8%B1%86.example.org?subject=Test&body=NATTO'
58
+ ]
59
+ toParse.forEach((x) => {
60
+ t.same(fastifyURI.parse(x), urijs.parse(x), 'Compatibility parse: ' + x)
61
+ })
62
+ t.end()
63
+ })
64
+
65
+ test('compatibility serialize', (t) => {
66
+ const toSerialize = [
67
+ { host: '10.10.10.10.example.com' },
68
+ { host: '2001:db8::7' },
69
+ { host: '::ffff:129.144.52.38' },
70
+ { host: '2606:2800:220:1:248:1893:25c8:1946' },
71
+ { host: '10.10.10.10.example.com' },
72
+ { host: '10.10.10.10' },
73
+ { path: '?query' },
74
+ { path: 'foo:bar' },
75
+ { path: '//path' },
76
+ {
77
+ scheme: 'uri',
78
+ host: 'example.com',
79
+ port: '9000'
80
+ },
81
+ {
82
+ scheme: 'uri',
83
+ userinfo: 'foo:bar',
84
+ host: 'example.com',
85
+ port: 1,
86
+ path: 'path',
87
+ query: 'query',
88
+ fragment: 'fragment'
89
+ },
90
+ {
91
+ scheme: '',
92
+ userinfo: '',
93
+ host: '',
94
+ port: 0,
95
+ path: '',
96
+ query: '',
97
+ fragment: ''
98
+ },
99
+ {
100
+ scheme: undefined,
101
+ userinfo: undefined,
102
+ host: undefined,
103
+ port: undefined,
104
+ path: undefined,
105
+ query: undefined,
106
+ fragment: undefined
107
+ },
108
+ { host: 'fe80::a%en1' },
109
+ { host: 'fe80::a%25en1' },
110
+ {
111
+ scheme: 'ws',
112
+ host: 'example.com',
113
+ resourceName: '/foo?bar',
114
+ secure: true
115
+ },
116
+ {
117
+ scheme: 'scheme',
118
+ path: 'with:colon'
119
+ }
120
+ ]
121
+ toSerialize.forEach((x) => {
122
+ const r = JSON.stringify(x)
123
+ t.same(
124
+ fastifyURI.serialize(x),
125
+ urijs.serialize(x),
126
+ 'Compatibility serialize: ' + JSON.stringify(r)
127
+ )
128
+ })
129
+ t.end()
130
+ })
@@ -0,0 +1,104 @@
1
+ 'use strict'
2
+
3
+ const tap = require('tap')
4
+ const test = tap.test
5
+ const URI = require('../')
6
+
7
+ const fn = URI.equal
8
+ const runTest = (t, suite) => {
9
+ suite.forEach(s => {
10
+ const operator = s.result ? '==' : '!='
11
+ t.equal(fn(s.pair[0], s.pair[1]), s.result, `${s.pair[0]} ${operator} ${s.pair[1]}`)
12
+ t.equal(fn(s.pair[1], s.pair[0]), s.result, `${s.pair[1]} ${operator} ${s.pair[0]}`)
13
+ })
14
+ }
15
+
16
+ test('URI Equals', (t) => {
17
+ const suite = [
18
+ { pair: ['example://a/b/c/%7Bfoo%7D', 'eXAMPLE://a/./b/../b/%63/%7bfoo%7d'], result: true }, // test from RFC 3986
19
+ { pair: ['http://example.org/~user', 'http://example.org/%7euser'], result: true } // test from RFC 3987
20
+ ]
21
+ runTest(t, suite)
22
+ t.end()
23
+ })
24
+
25
+ // test('IRI Equals', (t) => {
26
+ // // example from RFC 3987
27
+ // t.equal(URI.equal('example://a/b/c/%7Bfoo%7D/ros\xE9', 'eXAMPLE://a/./b/../b/%63/%7bfoo%7d/ros%C3%A9', IRI_OPTION), true)
28
+ // t.end()
29
+ // })
30
+
31
+ test('HTTP Equals', (t) => {
32
+ const suite = [
33
+ // test from RFC 2616
34
+ { pair: ['http://abc.com:80/~smith/home.html', 'http://abc.com/~smith/home.html'], result: true },
35
+ { pair: [{ scheme: 'http', host: 'abc.com', port: 80, path: '/~smith/home.html' }, 'http://abc.com/~smith/home.html'], result: true },
36
+ { pair: ['http://ABC.com/%7Esmith/home.html', 'http://abc.com/~smith/home.html'], result: true },
37
+ { pair: ['http://ABC.com:/%7esmith/home.html', 'http://abc.com/~smith/home.html'], result: true },
38
+ { pair: ['HTTP://ABC.COM', 'http://abc.com/'], result: true },
39
+ // test from RFC 3986
40
+ { pair: ['http://example.com:/', 'http://example.com:80/'], result: true }
41
+ ]
42
+ runTest(t, suite)
43
+ t.end()
44
+ })
45
+
46
+ test('HTTPS Equals', (t) => {
47
+ const suite = [
48
+ { pair: ['https://example.com', 'https://example.com:443/'], result: true },
49
+ { pair: ['https://example.com:/', 'https://example.com:443/'], result: true }
50
+ ]
51
+ runTest(t, suite)
52
+ t.end()
53
+ })
54
+
55
+ test('URN Equals', (t) => {
56
+ const suite = [
57
+ // test from RFC 2141
58
+ { pair: ['urn:foo:a123,456', 'urn:foo:a123,456'], result: true },
59
+ { pair: ['urn:foo:a123,456', 'URN:foo:a123,456'], result: true },
60
+ { pair: ['urn:foo:a123,456', 'urn:FOO:a123,456'], result: true }
61
+ ]
62
+
63
+ // Disabling for now as the whole equal logic might need
64
+ // to be refactored
65
+ // t.equal(URI.equal('urn:foo:a123,456', 'urn:foo:A123,456'), false)
66
+ // t.equal(URI.equal('urn:foo:a123%2C456', 'URN:FOO:a123%2c456'), true)
67
+
68
+ runTest(t, suite)
69
+ t.end()
70
+ })
71
+
72
+ test('UUID Equals', (t) => {
73
+ const suite = [
74
+ { pair: ['URN:UUID:F81D4FAE-7DEC-11D0-A765-00A0C91E6BF6', 'urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6'], result: true }
75
+ ]
76
+
77
+ runTest(t, suite)
78
+ t.end()
79
+ })
80
+
81
+ // test('Mailto Equals', (t) => {
82
+ // // tests from RFC 6068
83
+ // t.equal(URI.equal('mailto:addr1@an.example,addr2@an.example', 'mailto:?to=addr1@an.example,addr2@an.example'), true)
84
+ // t.equal(URI.equal('mailto:?to=addr1@an.example,addr2@an.example', 'mailto:addr1@an.example?to=addr2@an.example'), true)
85
+ // t.end()
86
+ // })
87
+
88
+ test('WS Equal', (t) => {
89
+ const suite = [
90
+ { pair: ['WS://ABC.COM:80/chat#one', 'ws://abc.com/chat'], result: true }
91
+ ]
92
+
93
+ runTest(t, suite)
94
+ t.end()
95
+ })
96
+
97
+ test('WSS Equal', (t) => {
98
+ const suite = [
99
+ { pair: ['WSS://ABC.COM:443/chat#one', 'wss://abc.com/chat'], result: true }
100
+ ]
101
+
102
+ runTest(t, suite)
103
+ t.end()
104
+ })