@scalar/oas-utils 0.3.2 → 0.4.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.
Files changed (80) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/entities/spec/collection.d.ts +6 -12
  3. package/dist/entities/spec/collection.d.ts.map +1 -1
  4. package/dist/entities/spec/collection.js +1 -1
  5. package/dist/entities/spec/collection.js.map +2 -2
  6. package/dist/helpers/http-methods.js +9 -9
  7. package/dist/helpers/http-methods.js.map +1 -1
  8. package/dist/helpers/pretty-print-json.d.ts.map +1 -1
  9. package/dist/helpers/pretty-print-json.js.map +2 -2
  10. package/dist/transforms/import-spec.d.ts +8 -3
  11. package/dist/transforms/import-spec.d.ts.map +1 -1
  12. package/dist/transforms/import-spec.js +30 -9
  13. package/dist/transforms/import-spec.js.map +2 -2
  14. package/package.json +5 -5
  15. package/dist/entities/spec/operation.test.js +0 -43
  16. package/dist/entities/spec/operation.test.js.map +0 -7
  17. package/dist/entities/spec/parameters.test.js +0 -80
  18. package/dist/entities/spec/parameters.test.js.map +0 -7
  19. package/dist/entities/spec/request-example.test.js +0 -633
  20. package/dist/entities/spec/request-example.test.js.map +0 -7
  21. package/dist/entities/spec/server.test.js +0 -120
  22. package/dist/entities/spec/server.test.js.map +0 -7
  23. package/dist/entities/spec/spec-objects.test.js +0 -205
  24. package/dist/entities/spec/spec-objects.test.js.map +0 -7
  25. package/dist/entities/spec/x-scalar-environments.test.js +0 -11
  26. package/dist/entities/spec/x-scalar-environments.test.js.map +0 -7
  27. package/dist/entities/spec/x-scalar-secrets.test.js +0 -11
  28. package/dist/entities/spec/x-scalar-secrets.test.js.map +0 -7
  29. package/dist/helpers/ensure-protocol.test.js +0 -70
  30. package/dist/helpers/ensure-protocol.test.js.map +0 -7
  31. package/dist/helpers/fetch-document.test.js +0 -63
  32. package/dist/helpers/fetch-document.test.js.map +0 -7
  33. package/dist/helpers/find-variables.test.js +0 -20
  34. package/dist/helpers/find-variables.test.js.map +0 -7
  35. package/dist/helpers/is-defined.test.js +0 -37
  36. package/dist/helpers/is-defined.test.js.map +0 -7
  37. package/dist/helpers/is-local-url.test.js +0 -40
  38. package/dist/helpers/is-local-url.test.js.map +0 -7
  39. package/dist/helpers/is-valid-url.test.js +0 -17
  40. package/dist/helpers/is-valid-url.test.js.map +0 -7
  41. package/dist/helpers/json2xml.test.js +0 -19
  42. package/dist/helpers/json2xml.test.js.map +0 -7
  43. package/dist/helpers/make-url-absolute.test.js +0 -61
  44. package/dist/helpers/make-url-absolute.test.js.map +0 -7
  45. package/dist/helpers/merge-urls.test.js +0 -339
  46. package/dist/helpers/merge-urls.test.js.map +0 -7
  47. package/dist/helpers/normalize-mime-type-object.test.js +0 -53
  48. package/dist/helpers/normalize-mime-type-object.test.js.map +0 -7
  49. package/dist/helpers/normalize-mime-type.test.js +0 -33
  50. package/dist/helpers/normalize-mime-type.test.js.map +0 -7
  51. package/dist/helpers/omit-undefined-values.test.js +0 -89
  52. package/dist/helpers/omit-undefined-values.test.js.map +0 -7
  53. package/dist/helpers/parse.test.js +0 -45
  54. package/dist/helpers/parse.test.js.map +0 -7
  55. package/dist/helpers/pretty-print-json.test.js +0 -28
  56. package/dist/helpers/pretty-print-json.test.js.map +0 -7
  57. package/dist/helpers/redirect-to-proxy.test.js +0 -54
  58. package/dist/helpers/redirect-to-proxy.test.js.map +0 -7
  59. package/dist/helpers/regex-helpers.test.js +0 -154
  60. package/dist/helpers/regex-helpers.test.js.map +0 -7
  61. package/dist/helpers/replace-variables.test.js +0 -30
  62. package/dist/helpers/replace-variables.test.js.map +0 -7
  63. package/dist/helpers/security/get-schemes.test.js +0 -71
  64. package/dist/helpers/security/get-schemes.test.js.map +0 -7
  65. package/dist/helpers/security/has-token.test.js +0 -157
  66. package/dist/helpers/security/has-token.test.js.map +0 -7
  67. package/dist/migrations/semver.test.js +0 -21
  68. package/dist/migrations/semver.test.js.map +0 -7
  69. package/dist/migrations/v-2.4.0/migration.test.js +0 -90
  70. package/dist/migrations/v-2.4.0/migration.test.js.map +0 -7
  71. package/dist/migrations/v-2.5.0/migration.test.js +0 -108
  72. package/dist/migrations/v-2.5.0/migration.test.js.map +0 -7
  73. package/dist/spec-getters/get-example-from-schema.test.js +0 -1092
  74. package/dist/spec-getters/get-example-from-schema.test.js.map +0 -7
  75. package/dist/spec-getters/get-parameters-from-operation.test.js +0 -178
  76. package/dist/spec-getters/get-parameters-from-operation.test.js.map +0 -7
  77. package/dist/spec-getters/get-request-body-from-operation.test.js +0 -289
  78. package/dist/spec-getters/get-request-body-from-operation.test.js.map +0 -7
  79. package/dist/transforms/import-spec.test.js +0 -1124
  80. package/dist/transforms/import-spec.test.js.map +0 -7
@@ -1,633 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { operationSchema } from "./operation.js";
3
- import {
4
- convertExampleToXScalar,
5
- createExampleFromRequest,
6
- createParamInstance,
7
- parameterArrayToObject,
8
- requestExampleSchema
9
- } from "./request-examples.js";
10
- describe("createParamInstance", () => {
11
- it("works with schema enum type number", () => {
12
- const result = createParamInstance({
13
- in: "path",
14
- name: "foo",
15
- required: true,
16
- deprecated: false,
17
- schema: {
18
- default: 1.2,
19
- type: "number",
20
- enum: [1.2, 2.1, 3]
21
- }
22
- });
23
- expect(result).toEqual({
24
- key: "foo",
25
- value: "1.2",
26
- enabled: true,
27
- description: void 0,
28
- required: true,
29
- enum: ["1.2", "2.1", "3"],
30
- type: "number",
31
- default: 1.2
32
- });
33
- });
34
- it("works with schema enum type string", () => {
35
- const result = createParamInstance({
36
- in: "path",
37
- name: "foo",
38
- required: true,
39
- deprecated: false,
40
- schema: {
41
- default: "foo",
42
- type: "string",
43
- enum: ["foo", "bar"]
44
- }
45
- });
46
- expect(result).toEqual({
47
- key: "foo",
48
- value: "foo",
49
- enabled: true,
50
- description: void 0,
51
- required: true,
52
- enum: ["foo", "bar"],
53
- type: "string",
54
- default: "foo"
55
- });
56
- });
57
- it("works with schema enum type integer", () => {
58
- const result = createParamInstance({
59
- in: "query",
60
- name: "foo",
61
- required: true,
62
- deprecated: false,
63
- schema: {
64
- default: 1,
65
- type: "integer",
66
- enum: [1, 2, 3]
67
- }
68
- });
69
- expect(result).toEqual({
70
- key: "foo",
71
- value: "1",
72
- enabled: true,
73
- description: void 0,
74
- required: true,
75
- enum: ["1", "2", "3"],
76
- type: "integer",
77
- default: 1
78
- });
79
- });
80
- it("works with schema enum type boolean", () => {
81
- const result = createParamInstance({
82
- in: "query",
83
- name: "foo",
84
- required: true,
85
- deprecated: false,
86
- schema: {
87
- default: false,
88
- type: "boolean",
89
- enum: [true, false]
90
- }
91
- });
92
- expect(result).toEqual({
93
- key: "foo",
94
- value: "false",
95
- enabled: true,
96
- description: void 0,
97
- required: true,
98
- enum: ["true", "false"],
99
- type: "boolean",
100
- default: false
101
- });
102
- });
103
- it("works with schema examples type number", () => {
104
- const result = createParamInstance({
105
- in: "path",
106
- name: "foo",
107
- required: true,
108
- deprecated: false,
109
- schema: {
110
- default: 1.2,
111
- type: "number",
112
- examples: [1.2, 2.1, 3]
113
- }
114
- });
115
- expect(result).toEqual({
116
- key: "foo",
117
- value: "1.2",
118
- enabled: true,
119
- description: void 0,
120
- required: true,
121
- examples: ["1.2", "2.1", "3"],
122
- type: "number",
123
- default: 1.2
124
- });
125
- });
126
- it("works with schema examples type string", () => {
127
- const result = createParamInstance({
128
- in: "query",
129
- name: "foo",
130
- required: true,
131
- deprecated: false,
132
- schema: {
133
- default: false,
134
- type: "boolean",
135
- examples: ["foo", "bar"]
136
- }
137
- });
138
- expect(result).toEqual({
139
- key: "foo",
140
- value: "false",
141
- enabled: true,
142
- description: void 0,
143
- required: true,
144
- type: "boolean",
145
- default: false,
146
- examples: ["foo", "bar"]
147
- });
148
- });
149
- it("works with schema examples type integer", () => {
150
- const result = createParamInstance({
151
- in: "query",
152
- name: "foo",
153
- required: true,
154
- deprecated: false,
155
- schema: {
156
- default: 1,
157
- type: "integer",
158
- examples: [1, 2, 3]
159
- }
160
- });
161
- expect(result).toEqual({
162
- key: "foo",
163
- value: "1",
164
- enabled: true,
165
- description: void 0,
166
- required: true,
167
- examples: ["1", "2", "3"],
168
- type: "integer",
169
- default: 1
170
- });
171
- });
172
- it("works with schema examples type boolean", () => {
173
- const result = createParamInstance({
174
- in: "query",
175
- name: "foo",
176
- required: true,
177
- deprecated: false,
178
- schema: {
179
- default: false,
180
- type: "boolean",
181
- examples: [true, false]
182
- }
183
- });
184
- expect(result).toEqual({
185
- key: "foo",
186
- value: "false",
187
- enabled: true,
188
- description: void 0,
189
- required: true,
190
- examples: ["true", "false"],
191
- type: "boolean",
192
- default: false
193
- });
194
- });
195
- it("works with array of types", () => {
196
- const result = createParamInstance({
197
- in: "path",
198
- name: "foo",
199
- required: true,
200
- deprecated: false,
201
- schema: {
202
- type: ["string", "null"]
203
- }
204
- });
205
- expect(result).toEqual({
206
- key: "foo",
207
- enabled: true,
208
- enum: void 0,
209
- examples: void 0,
210
- description: void 0,
211
- required: true,
212
- type: "string",
213
- nullable: true,
214
- value: ""
215
- });
216
- });
217
- it("works with content examples", () => {
218
- const result = createParamInstance({
219
- in: "query",
220
- name: "foo",
221
- required: false,
222
- deprecated: false,
223
- content: {
224
- "application/json": {
225
- schema: { type: "integer", maximum: 50 },
226
- examples: {
227
- zero: { value: 0 },
228
- max: { value: 50 }
229
- }
230
- }
231
- }
232
- });
233
- expect(result).toEqual({
234
- key: "foo",
235
- value: "0",
236
- enabled: false,
237
- description: void 0,
238
- required: false
239
- });
240
- });
241
- it("works with content example", () => {
242
- const result = createParamInstance({
243
- in: "query",
244
- name: "foo",
245
- required: false,
246
- deprecated: false,
247
- content: {
248
- "application/json": {
249
- schema: { type: "integer" },
250
- example: 42
251
- }
252
- }
253
- });
254
- expect(result).toEqual({
255
- key: "foo",
256
- value: "42",
257
- enabled: false,
258
- description: void 0,
259
- required: false
260
- });
261
- });
262
- it("works with parameter example", () => {
263
- const result = createParamInstance({
264
- in: "query",
265
- name: "foo",
266
- required: false,
267
- deprecated: false,
268
- example: 42,
269
- schema: {
270
- type: "integer",
271
- example: 1
272
- }
273
- });
274
- expect(result).toEqual({
275
- key: "foo",
276
- value: "42",
277
- enabled: false,
278
- description: void 0,
279
- required: false,
280
- type: "integer"
281
- });
282
- });
283
- });
284
- describe("parameterArrayToObject", () => {
285
- it("converts array of parameters to key-value object", () => {
286
- const params = [
287
- { key: "foo", value: "bar", enabled: true },
288
- { key: "hello", value: "world", enabled: false }
289
- ];
290
- const result = parameterArrayToObject(params);
291
- expect(result).toEqual({
292
- foo: "bar",
293
- hello: "world"
294
- });
295
- });
296
- it("handles empty array", () => {
297
- const result = parameterArrayToObject([]);
298
- expect(result).toEqual({});
299
- });
300
- });
301
- describe("convertExampleToXScalar", () => {
302
- it("converts raw JSON body", () => {
303
- const example = requestExampleSchema.parse({
304
- uid: "test-uid",
305
- requestUid: "req-uid",
306
- body: {
307
- activeBody: "raw",
308
- raw: {
309
- encoding: "json",
310
- value: '{"test": true}'
311
- }
312
- },
313
- parameters: {
314
- path: [{ key: "id", value: "123", enabled: true }],
315
- headers: [{ key: "Accept", value: "*/*", enabled: true }]
316
- }
317
- });
318
- const result = convertExampleToXScalar(example);
319
- expect(result).toEqual({
320
- body: {
321
- encoding: "application/json",
322
- content: '{"test": true}'
323
- },
324
- parameters: {
325
- path: { id: "123" },
326
- headers: { Accept: "*/*" }
327
- }
328
- });
329
- });
330
- it("converts form data body", () => {
331
- const example = requestExampleSchema.parse({
332
- uid: "test-uid",
333
- requestUid: "req-uid",
334
- body: {
335
- activeBody: "formData",
336
- formData: {
337
- encoding: "form-data",
338
- value: [
339
- { key: "field1", value: "value1", enabled: true },
340
- {
341
- key: "file1",
342
- value: "ignore this",
343
- file: new File(["test content"], "test.txt", { type: "text/plain" }),
344
- enabled: true
345
- }
346
- ]
347
- }
348
- }
349
- });
350
- const result = convertExampleToXScalar(example);
351
- expect(result).toEqual({
352
- body: {
353
- encoding: "multipart/form-data",
354
- content: {
355
- field1: { type: "string", value: "value1" },
356
- file1: { type: "file", file: null }
357
- }
358
- },
359
- parameters: {
360
- headers: {
361
- Accept: "*/*"
362
- }
363
- }
364
- });
365
- });
366
- it("converts binary body", () => {
367
- const example = requestExampleSchema.parse({
368
- uid: "test-uid",
369
- requestUid: "req-uid",
370
- body: {
371
- activeBody: "binary",
372
- binary: new Blob(["test"])
373
- }
374
- });
375
- const result = convertExampleToXScalar(example);
376
- expect(result).toEqual({
377
- body: {
378
- encoding: "binary",
379
- content: "",
380
- file: null
381
- },
382
- parameters: {
383
- headers: {
384
- Accept: "*/*"
385
- }
386
- }
387
- });
388
- });
389
- });
390
- describe("createExampleFromRequest", () => {
391
- it("creates example with JSON request body", () => {
392
- const operation = operationSchema.parse({
393
- uid: "request-1",
394
- path: "/test",
395
- parameters: [
396
- {
397
- in: "path",
398
- name: "id",
399
- required: true,
400
- deprecated: false,
401
- schema: { type: "string", default: "123" }
402
- }
403
- ],
404
- requestBody: {
405
- content: {
406
- "application/json": {
407
- schema: {},
408
- example: '{"test": true}'
409
- }
410
- }
411
- }
412
- });
413
- const result = createExampleFromRequest(operation, "Test Example");
414
- expect(result).toMatchObject({
415
- requestUid: "request-1",
416
- name: "Test Example",
417
- body: {
418
- activeBody: "raw",
419
- raw: {
420
- encoding: "json",
421
- value: '{"test": true}'
422
- }
423
- },
424
- parameters: {
425
- path: [
426
- {
427
- key: "id",
428
- value: "123",
429
- enabled: true,
430
- required: true
431
- }
432
- ],
433
- headers: [
434
- { key: "Accept", value: "*/*", enabled: true },
435
- { key: "Content-Type", value: "application/json", enabled: true }
436
- ],
437
- query: [],
438
- cookies: []
439
- }
440
- });
441
- });
442
- it("does not overwrite the content-type header if it exists", () => {
443
- const operation = operationSchema.parse({
444
- uid: "request-1",
445
- path: "/test",
446
- parameters: [
447
- {
448
- in: "path",
449
- name: "id",
450
- required: true,
451
- deprecated: false,
452
- schema: { type: "string", default: "123" }
453
- },
454
- {
455
- in: "header",
456
- name: "Content-Type",
457
- required: true,
458
- deprecated: false,
459
- schema: { type: "string", default: "application/testing" }
460
- }
461
- ],
462
- requestBody: {
463
- content: {
464
- "application/json": {
465
- schema: {},
466
- example: '{"test": true}'
467
- }
468
- }
469
- }
470
- });
471
- const result = createExampleFromRequest(operation, "Test Example");
472
- expect(result).toMatchObject({
473
- requestUid: "request-1",
474
- name: "Test Example",
475
- body: {
476
- activeBody: "raw",
477
- raw: {
478
- encoding: "json",
479
- value: '{"test": true}'
480
- }
481
- },
482
- parameters: {
483
- path: [
484
- {
485
- key: "id",
486
- value: "123",
487
- enabled: true,
488
- required: true
489
- }
490
- ],
491
- headers: [{ key: "Content-Type", value: "application/testing", enabled: true }],
492
- query: [],
493
- cookies: []
494
- }
495
- });
496
- });
497
- it("creates example with form-data request body", () => {
498
- const operation = operationSchema.parse({
499
- uid: "request-1",
500
- path: "/test",
501
- parameters: [],
502
- requestBody: {
503
- content: {
504
- "multipart/form-data": {
505
- schema: {
506
- type: "object",
507
- properties: {
508
- image: {
509
- type: "string",
510
- format: "binary",
511
- description: "The pet's image file"
512
- },
513
- additionalImages: {
514
- type: "array",
515
- items: {
516
- type: "string",
517
- format: "binary"
518
- },
519
- description: "Additional pet images"
520
- },
521
- metadata: {
522
- type: "object",
523
- properties: {
524
- caption: {
525
- type: "string"
526
- },
527
- tags: {
528
- type: "array",
529
- items: {
530
- type: "string"
531
- }
532
- }
533
- }
534
- }
535
- }
536
- }
537
- }
538
- }
539
- }
540
- });
541
- const result = createExampleFromRequest(operation, "Form Example");
542
- expect(result).toMatchObject({
543
- requestUid: "request-1",
544
- name: "Form Example",
545
- body: {
546
- activeBody: "formData",
547
- formData: {
548
- encoding: "form-data",
549
- value: [
550
- { key: "image", value: "BINARY", file: expect.any(File), enabled: true },
551
- { key: "additionalImages", value: "BINARY", file: expect.any(File), enabled: true },
552
- { key: "metadata", value: '{"caption":"","tags":[""]}', enabled: true }
553
- ]
554
- }
555
- },
556
- parameters: {
557
- headers: [{ key: "Accept", value: "*/*", enabled: true }],
558
- path: [],
559
- query: [],
560
- cookies: []
561
- }
562
- });
563
- });
564
- });
565
- describe("createExampleFromRequest with default body when Content-Type header is exists", () => {
566
- it.each([
567
- { contentType: "application/json", defaultBody: { activeBody: "raw", raw: { encoding: "json", value: "{}" } } },
568
- { contentType: "application/xml", defaultBody: { activeBody: "raw", raw: { encoding: "xml", value: "" } } },
569
- { contentType: "application/octet-stream", defaultBody: { activeBody: "binary", binary: void 0 } },
570
- {
571
- contentType: "application/x-www-form-urlencoded",
572
- defaultBody: { activeBody: "formData", formData: { encoding: "urlencoded", value: [] } }
573
- },
574
- {
575
- contentType: "multipart/form-data",
576
- defaultBody: { activeBody: "formData", formData: { encoding: "form-data", value: [] } }
577
- }
578
- ])("when Content-Type header is $contentType", ({ contentType, defaultBody }) => {
579
- const operation = operationSchema.parse({
580
- uid: "request-1",
581
- path: "/test",
582
- parameters: [
583
- {
584
- in: "header",
585
- name: "Content-Type",
586
- required: true,
587
- deprecated: false,
588
- schema: { type: "string", default: contentType }
589
- }
590
- ]
591
- });
592
- const result = createExampleFromRequest(operation, "Test Example");
593
- expect(result).toMatchObject({
594
- requestUid: "request-1",
595
- name: "Test Example",
596
- body: defaultBody,
597
- parameters: {
598
- headers: [{ key: "Content-Type", value: contentType, enabled: true }],
599
- query: [],
600
- cookies: []
601
- }
602
- });
603
- });
604
- it("when Content-Type header is not exists", () => {
605
- const operation = operationSchema.parse({
606
- uid: "request-1",
607
- path: "/test",
608
- parameters: [
609
- {
610
- in: "header",
611
- name: "Content-Type",
612
- required: true,
613
- deprecated: false,
614
- schema: { type: "string" }
615
- }
616
- ]
617
- });
618
- const result = createExampleFromRequest(operation, "Test Example");
619
- expect(result).toMatchObject({
620
- requestUid: "request-1",
621
- name: "Test Example",
622
- body: {
623
- activeBody: "raw"
624
- },
625
- parameters: {
626
- headers: [{ key: "Content-Type", value: "", enabled: true }],
627
- query: [],
628
- cookies: []
629
- }
630
- });
631
- });
632
- });
633
- //# sourceMappingURL=request-example.test.js.map