@gitbook/react-openapi 1.0.1 → 1.0.3

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 (53) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/OpenAPICodeSample.jsx +11 -7
  3. package/dist/OpenAPIOperation.jsx +25 -8
  4. package/dist/OpenAPIResponse.jsx +16 -14
  5. package/dist/OpenAPIResponseExample.jsx +157 -47
  6. package/dist/OpenAPISchema.d.ts +2 -2
  7. package/dist/OpenAPISchema.jsx +50 -39
  8. package/dist/OpenAPISchemaName.d.ts +2 -1
  9. package/dist/OpenAPISchemaName.jsx +25 -4
  10. package/dist/OpenAPISpec.jsx +2 -26
  11. package/dist/OpenAPITabs.jsx +6 -2
  12. package/dist/code-samples.js +232 -10
  13. package/dist/contentTypeChecks.d.ts +9 -0
  14. package/dist/contentTypeChecks.js +27 -0
  15. package/dist/generateSchemaExample.d.ts +5 -6
  16. package/dist/generateSchemaExample.js +13 -8
  17. package/dist/json2xml.d.ts +4 -0
  18. package/dist/json2xml.js +7 -0
  19. package/dist/stringifyOpenAPI.d.ts +1 -1
  20. package/dist/stringifyOpenAPI.js +8 -2
  21. package/dist/tsconfig.build.tsbuildinfo +1 -1
  22. package/dist/types.d.ts +18 -2
  23. package/dist/util/server.d.ts +9 -0
  24. package/dist/{OpenAPIServerURL.jsx → util/server.js} +7 -28
  25. package/dist/utils.d.ts +27 -3
  26. package/dist/utils.js +75 -3
  27. package/package.json +3 -2
  28. package/src/OpenAPICodeSample.tsx +11 -7
  29. package/src/OpenAPIOperation.tsx +36 -11
  30. package/src/OpenAPIResponse.tsx +6 -12
  31. package/src/OpenAPIResponseExample.tsx +237 -69
  32. package/src/OpenAPISchema.tsx +81 -58
  33. package/src/OpenAPISchemaName.tsx +37 -5
  34. package/src/OpenAPISpec.tsx +2 -17
  35. package/src/OpenAPITabs.tsx +8 -2
  36. package/src/__snapshots__/json2xml.test.ts.snap +18 -0
  37. package/src/code-samples.test.ts +594 -2
  38. package/src/code-samples.ts +231 -10
  39. package/src/contentTypeChecks.ts +35 -0
  40. package/src/generateSchemaExample.ts +28 -22
  41. package/src/json2xml.test.ts +46 -0
  42. package/src/json2xml.ts +8 -0
  43. package/src/resolveOpenAPIOperation.test.ts +1 -1
  44. package/src/stringifyOpenAPI.ts +13 -2
  45. package/src/types.ts +12 -1
  46. package/src/util/server.test.ts +58 -0
  47. package/src/util/server.ts +48 -0
  48. package/src/utils.ts +86 -6
  49. package/dist/OpenAPIServerURL.d.ts +0 -11
  50. package/dist/OpenAPIServerURLVariable.d.ts +0 -8
  51. package/dist/OpenAPIServerURLVariable.jsx +0 -8
  52. package/src/OpenAPIServerURL.tsx +0 -73
  53. package/src/OpenAPIServerURLVariable.tsx +0 -14
package/src/utils.ts CHANGED
@@ -1,6 +1,8 @@
1
- import type { AnyObject, OpenAPIV3 } from '@gitbook/openapi-parser';
1
+ import type { AnyObject, OpenAPIV3, OpenAPIV3_1 } from '@gitbook/openapi-parser';
2
2
 
3
- export function checkIsReference(input: unknown): input is OpenAPIV3.ReferenceObject {
3
+ export function checkIsReference(
4
+ input: unknown,
5
+ ): input is OpenAPIV3.ReferenceObject | OpenAPIV3_1.ReferenceObject {
4
6
  return typeof input === 'object' && !!input && '$ref' in input;
5
7
  }
6
8
 
@@ -11,10 +13,88 @@ export function createStateKey(key: string, scope?: string) {
11
13
  /**
12
14
  * Resolve the description of an object.
13
15
  */
14
- export function resolveDescription(object: AnyObject) {
15
- return 'x-description-html' in object && typeof object['x-description-html'] === 'string'
16
- ? object['x-description-html']
16
+ export function resolveDescription(object: OpenAPIV3.SchemaObject | AnyObject) {
17
+ if ('items' in object && object.items) {
18
+ return resolveDescription(object.items);
19
+ }
20
+
21
+ return 'x-gitbook-description-html' in object &&
22
+ typeof object['x-gitbook-description-html'] === 'string'
23
+ ? object['x-gitbook-description-html'].trim()
17
24
  : typeof object.description === 'string'
18
- ? object.description
25
+ ? object.description.trim()
19
26
  : undefined;
20
27
  }
28
+
29
+ /**
30
+ * Extract descriptions from an object.
31
+ */
32
+ export function extractDescriptions(object: AnyObject) {
33
+ return {
34
+ description: object.description,
35
+ ['x-gitbook-description-html']:
36
+ 'x-gitbook-description-html' in object
37
+ ? object['x-gitbook-description-html']
38
+ : undefined,
39
+ };
40
+ }
41
+
42
+ /**
43
+ * Resolve the first example from an object.
44
+ */
45
+ export function resolveFirstExample(object: AnyObject) {
46
+ if ('examples' in object && typeof object.examples === 'object' && object.examples) {
47
+ const keys = Object.keys(object.examples);
48
+ const firstKey = keys[0];
49
+ if (firstKey && object.examples[firstKey]) {
50
+ return object.examples[firstKey];
51
+ }
52
+ }
53
+ if ('example' in object && object.example !== undefined) {
54
+ return object.example;
55
+ }
56
+ return undefined;
57
+ }
58
+
59
+ /**
60
+ * Resolve the schema of a parameter.
61
+ * Extract the description, example and deprecated from parameter.
62
+ */
63
+ export function resolveParameterSchema(
64
+ parameter: OpenAPIV3.ParameterBaseObject,
65
+ ): OpenAPIV3.SchemaObject {
66
+ const schema = checkIsReference(parameter.schema) ? undefined : parameter.schema;
67
+ return {
68
+ // Description of the parameter is defined at the parameter level
69
+ // we use display it if the schema doesn't override it
70
+ ...extractDescriptions(parameter),
71
+ example: resolveFirstExample(parameter),
72
+ // Deprecated can be defined at the parameter level
73
+ deprecated: parameter.deprecated,
74
+ ...schema,
75
+ };
76
+ }
77
+
78
+ /**
79
+ * Transform a parameter object to a property object.
80
+ */
81
+ export function parameterToProperty(
82
+ parameter: OpenAPIV3.ParameterObject | OpenAPIV3.ReferenceObject | OpenAPIV3_1.ReferenceObject,
83
+ ): {
84
+ propertyName: string | undefined;
85
+ schema: OpenAPIV3.SchemaObject;
86
+ required: boolean | undefined;
87
+ } {
88
+ if (checkIsReference(parameter)) {
89
+ return {
90
+ propertyName: parameter.$ref ?? 'Unknown ref',
91
+ schema: {},
92
+ required: undefined,
93
+ };
94
+ }
95
+ return {
96
+ propertyName: parameter.name,
97
+ schema: resolveParameterSchema(parameter),
98
+ required: parameter.required,
99
+ };
100
+ }
@@ -1,11 +0,0 @@
1
- import type { OpenAPIV3 } from '@gitbook/openapi-parser';
2
- /**
3
- * Show the url of the server with variables replaced by their default values.
4
- */
5
- export declare function OpenAPIServerURL(props: {
6
- servers: OpenAPIV3.ServerObject[];
7
- }): import("react").JSX.Element | null;
8
- /**
9
- * Get the default URL for the server.
10
- */
11
- export declare function getServersURL(servers: OpenAPIV3.ServerObject[]): string;
@@ -1,8 +0,0 @@
1
- import type { OpenAPIV3 } from '@gitbook/openapi-parser';
2
- /**
3
- * Interactive component to show the value of a server variable and let the user change it.
4
- */
5
- export declare function OpenAPIServerURLVariable(props: {
6
- name: string;
7
- variable: OpenAPIV3.ServerVariableObject;
8
- }): import("react").JSX.Element;
@@ -1,8 +0,0 @@
1
- 'use client';
2
- /**
3
- * Interactive component to show the value of a server variable and let the user change it.
4
- */
5
- export function OpenAPIServerURLVariable(props) {
6
- var variable = props.variable;
7
- return <span className="openapi-url-var">{variable.default}</span>;
8
- }
@@ -1,73 +0,0 @@
1
- import type { OpenAPIV3 } from '@gitbook/openapi-parser';
2
- import { OpenAPIServerURLVariable } from './OpenAPIServerURLVariable';
3
-
4
- /**
5
- * Show the url of the server with variables replaced by their default values.
6
- */
7
- export function OpenAPIServerURL(props: { servers: OpenAPIV3.ServerObject[] }) {
8
- const { servers } = props;
9
- const server = servers[0];
10
-
11
- if (!server) {
12
- return null;
13
- }
14
-
15
- const parts = parseServerURL(server?.url ?? '');
16
-
17
- return (
18
- <span>
19
- {parts.map((part, i) => {
20
- if (part.kind === 'text') {
21
- return <span key={i}>{part.text}</span>;
22
- } else {
23
- const variable = server.variables?.[part.name];
24
- if (!variable) {
25
- return <span key={i}>{`{${part.name}}`}</span>;
26
- }
27
-
28
- return (
29
- <OpenAPIServerURLVariable key={i} name={part.name} variable={variable} />
30
- );
31
- }
32
- })}
33
- </span>
34
- );
35
- }
36
-
37
- /**
38
- * Get the default URL for the server.
39
- */
40
- export function getServersURL(servers: OpenAPIV3.ServerObject[]): string {
41
- const server = servers[0];
42
- if (!server) {
43
- return '';
44
- }
45
- const parts = parseServerURL(server?.url ?? '');
46
-
47
- return parts
48
- .map((part) => {
49
- if (part.kind === 'text') {
50
- return part.text;
51
- } else {
52
- return server.variables?.[part.name]?.default ?? `{${part.name}}`;
53
- }
54
- })
55
- .join('');
56
- }
57
-
58
- function parseServerURL(url: string) {
59
- const parts = url.split(/{([^}]+)}/g);
60
- const result: Array<{ kind: 'variable'; name: string } | { kind: 'text'; text: string }> = [];
61
- for (let i = 0; i < parts.length; i++) {
62
- const part = parts[i];
63
- if (!part) {
64
- continue;
65
- }
66
- if (i % 2 === 0) {
67
- result.push({ kind: 'text', text: part });
68
- } else {
69
- result.push({ kind: 'variable', name: part });
70
- }
71
- }
72
- return result;
73
- }
@@ -1,14 +0,0 @@
1
- 'use client';
2
-
3
- import type { OpenAPIV3 } from '@gitbook/openapi-parser';
4
-
5
- /**
6
- * Interactive component to show the value of a server variable and let the user change it.
7
- */
8
- export function OpenAPIServerURLVariable(props: {
9
- name: string;
10
- variable: OpenAPIV3.ServerVariableObject;
11
- }) {
12
- const { variable } = props;
13
- return <span className="openapi-url-var">{variable.default}</span>;
14
- }