@grafana/openapi-to-k6 0.1.2 → 0.2.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 (121) hide show
  1. package/.github/workflows/publish.yaml +2 -2
  2. package/.github/workflows/tests.yaml +14 -6
  3. package/README.md +54 -14
  4. package/dist/analytics.js +2 -1
  5. package/dist/cli.js +20 -6
  6. package/dist/constants.js +8 -2
  7. package/dist/{generator.js → generator/index.js} +7 -13
  8. package/dist/{k6SdkClient.js → generator/k6Client.js} +148 -161
  9. package/examples/basic_schema/single/k6-script.sample.ts +11 -0
  10. package/examples/basic_schema/single/simpleAPI.ts +87 -0
  11. package/examples/basic_schema/split/k6-script.sample.ts +11 -0
  12. package/examples/basic_schema/split/simpleAPI.schemas.ts +9 -0
  13. package/examples/basic_schema/split/simpleAPI.ts +85 -0
  14. package/examples/basic_schema/tags/default.ts +85 -0
  15. package/examples/basic_schema/tags/k6-script.sample.ts +11 -0
  16. package/examples/basic_schema/tags/simpleAPI.schemas.ts +9 -0
  17. package/examples/form_data_schema/single/formDataAPI.ts +115 -0
  18. package/examples/form_data_schema/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
  19. package/examples/form_data_schema/split/formDataAPI.schemas.ts +24 -0
  20. package/examples/form_data_schema/split/formDataAPI.ts +98 -0
  21. package/examples/form_data_schema/split/k6-script.sample.ts +11 -0
  22. package/examples/form_data_schema/tags/default.ts +98 -0
  23. package/examples/form_data_schema/tags/formDataAPI.schemas.ts +24 -0
  24. package/examples/form_data_schema/tags/k6-script.sample.ts +11 -0
  25. package/examples/form_url_encoded_data_schema/single/formURLEncodedAPI.ts +112 -0
  26. package/examples/form_url_encoded_data_schema/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
  27. package/examples/form_url_encoded_data_schema/split/formURLEncodedAPI.schemas.ts +24 -0
  28. package/examples/form_url_encoded_data_schema/split/formURLEncodedAPI.ts +98 -0
  29. package/examples/form_url_encoded_data_schema/split/k6-script.sample.ts +11 -0
  30. package/examples/form_url_encoded_data_schema/tags/default.ts +98 -0
  31. package/examples/form_url_encoded_data_schema/tags/formURLEncodedAPI.schemas.ts +24 -0
  32. package/examples/form_url_encoded_data_schema/tags/k6-script.sample.ts +11 -0
  33. package/examples/form_url_encoded_data_with_query_params_schema/single/formURLEncodedAPIWithQueryParameters.ts +128 -0
  34. package/examples/form_url_encoded_data_with_query_params_schema/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
  35. package/examples/form_url_encoded_data_with_query_params_schema/split/formURLEncodedAPIWithQueryParameters.schemas.ts +35 -0
  36. package/examples/form_url_encoded_data_with_query_params_schema/split/formURLEncodedAPIWithQueryParameters.ts +104 -0
  37. package/examples/form_url_encoded_data_with_query_params_schema/split/k6-script.sample.ts +14 -0
  38. package/examples/form_url_encoded_data_with_query_params_schema/tags/default.ts +104 -0
  39. package/examples/form_url_encoded_data_with_query_params_schema/tags/formURLEncodedAPIWithQueryParameters.schemas.ts +35 -0
  40. package/examples/form_url_encoded_data_with_query_params_schema/tags/k6-script.sample.ts +14 -0
  41. package/examples/get_request_with_path_parameters_schema/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
  42. package/examples/get_request_with_path_parameters_schema/single/simpleAPI.ts +94 -0
  43. package/examples/get_request_with_path_parameters_schema/split/k6-script.sample.ts +11 -0
  44. package/examples/get_request_with_path_parameters_schema/split/simpleAPI.schemas.ts +12 -0
  45. package/examples/get_request_with_path_parameters_schema/split/simpleAPI.ts +90 -0
  46. package/examples/get_request_with_path_parameters_schema/tags/default.ts +90 -0
  47. package/examples/get_request_with_path_parameters_schema/tags/k6-script.sample.ts +11 -0
  48. package/examples/get_request_with_path_parameters_schema/tags/simpleAPI.schemas.ts +12 -0
  49. package/examples/headers_schema/single/headerDemoAPI.ts +202 -0
  50. package/examples/headers_schema/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
  51. package/examples/headers_schema/split/headerDemoAPI.schemas.ts +32 -0
  52. package/examples/headers_schema/split/headerDemoAPI.ts +184 -0
  53. package/examples/headers_schema/split/k6-script.sample.ts +25 -0
  54. package/examples/headers_schema/tags/default.ts +182 -0
  55. package/examples/headers_schema/tags/headerDemoAPI.schemas.ts +32 -0
  56. package/examples/headers_schema/tags/k6-script.sample.ts +25 -0
  57. package/examples/no_title_schema/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
  58. package/examples/no_title_schema/single/k6Client.ts +87 -0
  59. package/examples/{basic_schema → no_title_schema/split}/k6-script.sample.ts +2 -2
  60. package/examples/no_title_schema/split/k6Client.schemas.ts +9 -0
  61. package/examples/no_title_schema/split/k6Client.ts +85 -0
  62. package/examples/no_title_schema/tags/default.ts +85 -0
  63. package/examples/no_title_schema/tags/k6-script.sample.ts +11 -0
  64. package/examples/no_title_schema/tags/k6Client.schemas.ts +9 -0
  65. package/examples/post_request_with_query_params/single/exampleAPI.ts +126 -0
  66. package/examples/post_request_with_query_params/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
  67. package/examples/post_request_with_query_params/split/exampleAPI.schemas.ts +33 -0
  68. package/examples/post_request_with_query_params/split/exampleAPI.ts +105 -0
  69. package/examples/post_request_with_query_params/split/k6-script.sample.ts +14 -0
  70. package/examples/post_request_with_query_params/tags/default.ts +105 -0
  71. package/examples/post_request_with_query_params/tags/exampleAPI.schemas.ts +33 -0
  72. package/examples/post_request_with_query_params/tags/k6-script.sample.ts +14 -0
  73. package/examples/query_params_schema/single/exampleAPI.ts +120 -0
  74. package/examples/query_params_schema/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
  75. package/examples/query_params_schema/split/exampleAPI.schemas.ts +37 -0
  76. package/examples/query_params_schema/split/exampleAPI.ts +94 -0
  77. package/examples/query_params_schema/split/k6-script.sample.ts +11 -0
  78. package/examples/query_params_schema/tags/default.ts +94 -0
  79. package/examples/query_params_schema/tags/exampleAPI.schemas.ts +37 -0
  80. package/examples/query_params_schema/tags/k6-script.sample.ts +11 -0
  81. package/examples/simple_post_request_schema/{exampleAPI.ts → single/exampleAPI.ts} +49 -49
  82. package/examples/simple_post_request_schema/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
  83. package/examples/simple_post_request_schema/split/exampleAPI.schemas.ts +47 -0
  84. package/examples/simple_post_request_schema/split/exampleAPI.ts +99 -0
  85. package/examples/simple_post_request_schema/split/k6-script.sample.ts +13 -0
  86. package/examples/simple_post_request_schema/tags/default.ts +99 -0
  87. package/examples/simple_post_request_schema/tags/exampleAPI.schemas.ts +47 -0
  88. package/examples/simple_post_request_schema/tags/k6-script.sample.ts +13 -0
  89. package/images/openapi-to-k6.png +0 -0
  90. package/package.json +2 -2
  91. package/src/analytics.ts +3 -1
  92. package/src/cli.ts +34 -8
  93. package/src/constants.ts +7 -1
  94. package/src/{generator.ts → generator/index.ts} +8 -21
  95. package/src/{k6SdkClient.ts → generator/k6Client.ts} +174 -222
  96. package/src/type.d.ts +4 -4
  97. package/tests/e2e/schema.json +8 -0
  98. package/tests/e2e/{k6Script.ts → single/k6Script.ts} +7 -2
  99. package/tests/e2e/split/k6Script.ts +82 -0
  100. package/tests/e2e/tags/k6Script.ts +106 -0
  101. package/tests/functional-tests/fixtures/schemas/basic_schema.json +1 -4
  102. package/tests/functional-tests/fixtures/schemas/form_data_schema.json +4 -4
  103. package/tests/functional-tests/fixtures/schemas/form_url_encoded_data_schema.json +3 -3
  104. package/tests/functional-tests/fixtures/schemas/form_url_encoded_data_with_query_params_schema.json +2 -2
  105. package/tests/functional-tests/fixtures/schemas/get_request_with_path_parameters_schema.json +2 -2
  106. package/tests/functional-tests/fixtures/schemas/headers_schema.json +7 -8
  107. package/tests/functional-tests/fixtures/schemas/no_title_schema.json +2 -5
  108. package/tests/functional-tests/fixtures/schemas/post_request_with_query_params.json +3 -4
  109. package/tests/functional-tests/fixtures/schemas/query_params_schema.json +3 -3
  110. package/tests/functional-tests/fixtures/schemas/simple_post_request_schema.json +3 -5
  111. package/tests/functional-tests/generator.test.ts +46 -5
  112. package/examples/basic_schema/simpleAPI.ts +0 -87
  113. package/examples/form_data_schema/formDataAPI.ts +0 -115
  114. package/examples/form_url_encoded_data_schema/formURLEncodedAPI.ts +0 -114
  115. package/examples/form_url_encoded_data_with_query_params_schema/formURLEncodedAPIWithQueryParameters.ts +0 -130
  116. package/examples/get_request_with_path_parameters_schema/simpleAPI.ts +0 -94
  117. package/examples/headers_schema/headerDemoAPI.ts +0 -196
  118. package/examples/no_title_schema/K6Client.ts +0 -86
  119. package/examples/post_request_with_query_params/exampleAPI.ts +0 -124
  120. package/examples/query_params_schema/exampleAPI.ts +0 -118
  121. package/examples/update_examples.sh +0 -21
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Automatically generated by @grafana/openapi-to-k6: 0.2.0
3
+ * Do not edit manually.
4
+ * Example API
5
+ * API with a POST request having an object as the body and query parameters
6
+ * OpenAPI spec version: 1.0.0
7
+ */
8
+ export type CreateExampleData201 = {
9
+ /** The data from the body */
10
+ data?: string
11
+ /** The active status from the query parameter */
12
+ isActive?: boolean
13
+ /** Response status */
14
+ status?: string
15
+ /** The user ID from the query parameter */
16
+ userId?: string
17
+ }
18
+
19
+ export type CreateExampleDataBody = {
20
+ /** A string field representing data */
21
+ data: string
22
+ }
23
+
24
+ export type CreateExampleDataParams = {
25
+ /**
26
+ * A string query parameter for user ID
27
+ */
28
+ userId: string
29
+ /**
30
+ * A boolean query parameter
31
+ */
32
+ isActive?: boolean
33
+ }
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Automatically generated by @grafana/openapi-to-k6: 0.2.0
3
+ * Do not edit manually.
4
+ * Example API
5
+ * API with a POST request having an object as the body and query parameters
6
+ * OpenAPI spec version: 1.0.0
7
+ */
8
+ import { URL, URLSearchParams } from 'https://jslib.k6.io/url/1.0.0/index.js'
9
+ import http from 'k6/http'
10
+ import type { Params, Response } from 'k6/http'
11
+ import type {
12
+ CreateExampleData201,
13
+ CreateExampleDataBody,
14
+ CreateExampleDataParams,
15
+ } from './exampleAPI.schemas'
16
+
17
+ /**
18
+ * This is the base client to use for interacting with the API.
19
+ */
20
+ export class ExampleAPIClient {
21
+ private cleanBaseUrl: string
22
+ private commonRequestParameters: Params
23
+
24
+ constructor(clientOptions: {
25
+ baseUrl: string
26
+ commonRequestParameters?: Params
27
+ }) {
28
+ this.cleanBaseUrl = clientOptions.baseUrl.replace(/\/+$/, '')
29
+ }
30
+
31
+ /**
32
+ * This endpoint demonstrates a POST request with query parameters and a single field object in the body
33
+ * @summary Create example data
34
+ */
35
+ createExampleData(
36
+ createExampleDataBody: CreateExampleDataBody,
37
+ params: CreateExampleDataParams,
38
+ requestParameters?: Params
39
+ ): {
40
+ response: Response
41
+ data: CreateExampleData201
42
+ } {
43
+ const url = new URL(
44
+ this.cleanBaseUrl +
45
+ `/example` +
46
+ `?${new URLSearchParams(params).toString()}`
47
+ )
48
+ const mergedRequestParameters = this._mergeRequestParameters(
49
+ requestParameters || {},
50
+ this.commonRequestParameters
51
+ )
52
+ const response = http.request(
53
+ 'POST',
54
+ url.toString(),
55
+ JSON.stringify(createExampleDataBody),
56
+ {
57
+ ...mergedRequestParameters,
58
+ headers: {
59
+ 'Content-Type': 'application/json',
60
+ ...mergedRequestParameters?.headers,
61
+ },
62
+ }
63
+ )
64
+ let data
65
+
66
+ try {
67
+ data = response.json()
68
+ } catch {
69
+ data = response.body
70
+ }
71
+ return {
72
+ response,
73
+ data,
74
+ }
75
+ }
76
+
77
+ /**
78
+ * Merges the provided request parameters with default parameters for the client.
79
+ *
80
+ * @param {Params} requestParameters - The parameters provided specifically for the request
81
+ * @param {Params} commonRequestParameters - Common parameters for all requests
82
+ * @returns {Params} - The merged parameters
83
+ */
84
+ private _mergeRequestParameters(
85
+ requestParameters?: Params,
86
+ commonRequestParameters?: Params
87
+ ): Params {
88
+ return {
89
+ ...commonRequestParameters, // Default to common parameters
90
+ ...requestParameters, // Override with request-specific parameters
91
+ headers: {
92
+ ...(commonRequestParameters?.headers || {}), // Ensure headers are defined
93
+ ...(requestParameters?.headers || {}),
94
+ },
95
+ cookies: {
96
+ ...(commonRequestParameters?.cookies || {}), // Ensure cookies are defined
97
+ ...(requestParameters?.cookies || {}),
98
+ },
99
+ tags: {
100
+ ...(commonRequestParameters?.tags || {}), // Ensure tags are defined
101
+ ...(requestParameters?.tags || {}),
102
+ },
103
+ }
104
+ }
105
+ }
@@ -0,0 +1,14 @@
1
+ import { ExampleAPIClient } from './exampleAPI.ts'
2
+
3
+ const baseUrl = '<BASE_URL>'
4
+ const client = new ExampleAPIClient({ baseUrl })
5
+
6
+ export default function () {
7
+ /**
8
+ * Create example data
9
+ */
10
+ const createExampleDataResponseData = client.createExampleData(
11
+ createExampleDataBody,
12
+ params
13
+ )
14
+ }
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Automatically generated by @grafana/openapi-to-k6: 0.2.0
3
+ * Do not edit manually.
4
+ * Example API
5
+ * API with a POST request having an object as the body and query parameters
6
+ * OpenAPI spec version: 1.0.0
7
+ */
8
+ import { URL, URLSearchParams } from 'https://jslib.k6.io/url/1.0.0/index.js'
9
+ import http from 'k6/http'
10
+ import type { Params, Response } from 'k6/http'
11
+ import type {
12
+ CreateExampleData201,
13
+ CreateExampleDataBody,
14
+ CreateExampleDataParams,
15
+ } from './exampleAPI.schemas'
16
+
17
+ /**
18
+ * This is the base client to use for interacting with the API.
19
+ */
20
+ export class DefaultClient {
21
+ private cleanBaseUrl: string
22
+ private commonRequestParameters: Params
23
+
24
+ constructor(clientOptions: {
25
+ baseUrl: string
26
+ commonRequestParameters?: Params
27
+ }) {
28
+ this.cleanBaseUrl = clientOptions.baseUrl.replace(/\/+$/, '')
29
+ }
30
+
31
+ /**
32
+ * This endpoint demonstrates a POST request with query parameters and a single field object in the body
33
+ * @summary Create example data
34
+ */
35
+ createExampleData(
36
+ createExampleDataBody: CreateExampleDataBody,
37
+ params: CreateExampleDataParams,
38
+ requestParameters?: Params
39
+ ): {
40
+ response: Response
41
+ data: CreateExampleData201
42
+ } {
43
+ const url = new URL(
44
+ this.cleanBaseUrl +
45
+ `/example` +
46
+ `?${new URLSearchParams(params).toString()}`
47
+ )
48
+ const mergedRequestParameters = this._mergeRequestParameters(
49
+ requestParameters || {},
50
+ this.commonRequestParameters
51
+ )
52
+ const response = http.request(
53
+ 'POST',
54
+ url.toString(),
55
+ JSON.stringify(createExampleDataBody),
56
+ {
57
+ ...mergedRequestParameters,
58
+ headers: {
59
+ 'Content-Type': 'application/json',
60
+ ...mergedRequestParameters?.headers,
61
+ },
62
+ }
63
+ )
64
+ let data
65
+
66
+ try {
67
+ data = response.json()
68
+ } catch {
69
+ data = response.body
70
+ }
71
+ return {
72
+ response,
73
+ data,
74
+ }
75
+ }
76
+
77
+ /**
78
+ * Merges the provided request parameters with default parameters for the client.
79
+ *
80
+ * @param {Params} requestParameters - The parameters provided specifically for the request
81
+ * @param {Params} commonRequestParameters - Common parameters for all requests
82
+ * @returns {Params} - The merged parameters
83
+ */
84
+ private _mergeRequestParameters(
85
+ requestParameters?: Params,
86
+ commonRequestParameters?: Params
87
+ ): Params {
88
+ return {
89
+ ...commonRequestParameters, // Default to common parameters
90
+ ...requestParameters, // Override with request-specific parameters
91
+ headers: {
92
+ ...(commonRequestParameters?.headers || {}), // Ensure headers are defined
93
+ ...(requestParameters?.headers || {}),
94
+ },
95
+ cookies: {
96
+ ...(commonRequestParameters?.cookies || {}), // Ensure cookies are defined
97
+ ...(requestParameters?.cookies || {}),
98
+ },
99
+ tags: {
100
+ ...(commonRequestParameters?.tags || {}), // Ensure tags are defined
101
+ ...(requestParameters?.tags || {}),
102
+ },
103
+ }
104
+ }
105
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Automatically generated by @grafana/openapi-to-k6: 0.2.0
3
+ * Do not edit manually.
4
+ * Example API
5
+ * API with a POST request having an object as the body and query parameters
6
+ * OpenAPI spec version: 1.0.0
7
+ */
8
+ export type CreateExampleData201 = {
9
+ /** The data from the body */
10
+ data?: string
11
+ /** The active status from the query parameter */
12
+ isActive?: boolean
13
+ /** Response status */
14
+ status?: string
15
+ /** The user ID from the query parameter */
16
+ userId?: string
17
+ }
18
+
19
+ export type CreateExampleDataBody = {
20
+ /** A string field representing data */
21
+ data: string
22
+ }
23
+
24
+ export type CreateExampleDataParams = {
25
+ /**
26
+ * A string query parameter for user ID
27
+ */
28
+ userId: string
29
+ /**
30
+ * A boolean query parameter
31
+ */
32
+ isActive?: boolean
33
+ }
@@ -0,0 +1,14 @@
1
+ import { ExampleAPIClient } from './exampleAPI.ts'
2
+
3
+ const baseUrl = '<BASE_URL>'
4
+ const client = new ExampleAPIClient({ baseUrl })
5
+
6
+ export default function () {
7
+ /**
8
+ * Create example data
9
+ */
10
+ const createExampleDataResponseData = client.createExampleData(
11
+ createExampleDataBody,
12
+ params
13
+ )
14
+ }
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Automatically generated by @grafana/openapi-to-k6: 0.2.0
3
+ * Do not edit manually.
4
+ * Example API
5
+ * API with all formats of query parameters
6
+ * OpenAPI spec version: 1.0.0
7
+ */
8
+ import { URL, URLSearchParams } from 'https://jslib.k6.io/url/1.0.0/index.js'
9
+ import http from 'k6/http'
10
+ import type { Params, Response } from 'k6/http'
11
+ export type GetExampleData200 = {
12
+ age?: number
13
+ date?: string
14
+ isActive?: boolean
15
+ name?: string
16
+ tags?: string[]
17
+ }
18
+
19
+ export type GetExampleDataParams = {
20
+ /**
21
+ * A string parameter
22
+ */
23
+ name: string
24
+ /**
25
+ * An integer parameter
26
+ */
27
+ age?: number
28
+ /**
29
+ * A boolean parameter
30
+ */
31
+ isActive?: boolean
32
+ /**
33
+ * An array of strings parameter
34
+ */
35
+ tags?: string[]
36
+ /**
37
+ * A date parameter in YYYY-MM-DD format
38
+ */
39
+ date?: string
40
+ }
41
+
42
+ /**
43
+ * This is the base client to use for interacting with the API.
44
+ */
45
+ export class ExampleAPIClient {
46
+ private cleanBaseUrl: string
47
+ private commonRequestParameters: Params
48
+
49
+ constructor(clientOptions: {
50
+ baseUrl: string
51
+ commonRequestParameters?: Params
52
+ }) {
53
+ this.cleanBaseUrl = clientOptions.baseUrl.replace(/\/+$/, '')
54
+ }
55
+
56
+ /**
57
+ * This endpoint demonstrates the use of various query parameters
58
+ * @summary Get example data
59
+ */
60
+ getExampleData(
61
+ params: GetExampleDataParams,
62
+ requestParameters?: Params
63
+ ): {
64
+ response: Response
65
+ data: GetExampleData200
66
+ } {
67
+ const url = new URL(
68
+ this.cleanBaseUrl +
69
+ `/example` +
70
+ `?${new URLSearchParams(params).toString()}`
71
+ )
72
+ const mergedRequestParameters = this._mergeRequestParameters(
73
+ requestParameters || {},
74
+ this.commonRequestParameters
75
+ )
76
+ const response = http.request('GET', url.toString(), undefined, {
77
+ ...mergedRequestParameters,
78
+ })
79
+ let data
80
+
81
+ try {
82
+ data = response.json()
83
+ } catch {
84
+ data = response.body
85
+ }
86
+ return {
87
+ response,
88
+ data,
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Merges the provided request parameters with default parameters for the client.
94
+ *
95
+ * @param {Params} requestParameters - The parameters provided specifically for the request
96
+ * @param {Params} commonRequestParameters - Common parameters for all requests
97
+ * @returns {Params} - The merged parameters
98
+ */
99
+ private _mergeRequestParameters(
100
+ requestParameters?: Params,
101
+ commonRequestParameters?: Params
102
+ ): Params {
103
+ return {
104
+ ...commonRequestParameters, // Default to common parameters
105
+ ...requestParameters, // Override with request-specific parameters
106
+ headers: {
107
+ ...(commonRequestParameters?.headers || {}), // Ensure headers are defined
108
+ ...(requestParameters?.headers || {}),
109
+ },
110
+ cookies: {
111
+ ...(commonRequestParameters?.cookies || {}), // Ensure cookies are defined
112
+ ...(requestParameters?.cookies || {}),
113
+ },
114
+ tags: {
115
+ ...(commonRequestParameters?.tags || {}), // Ensure tags are defined
116
+ ...(requestParameters?.tags || {}),
117
+ },
118
+ }
119
+ }
120
+ }
@@ -1,7 +1,7 @@
1
- import { createExampleAPI } from './exampleAPI.ts'
1
+ import { ExampleAPIClient } from './exampleAPI.ts'
2
2
 
3
3
  const baseUrl = '<BASE_URL>'
4
- const client = createExampleAPI({ baseUrl })
4
+ const client = new ExampleAPIClient({ baseUrl })
5
5
 
6
6
  export default function () {
7
7
  /**
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Automatically generated by @grafana/openapi-to-k6: 0.2.0
3
+ * Do not edit manually.
4
+ * Example API
5
+ * API with all formats of query parameters
6
+ * OpenAPI spec version: 1.0.0
7
+ */
8
+ export type GetExampleData200 = {
9
+ age?: number
10
+ date?: string
11
+ isActive?: boolean
12
+ name?: string
13
+ tags?: string[]
14
+ }
15
+
16
+ export type GetExampleDataParams = {
17
+ /**
18
+ * A string parameter
19
+ */
20
+ name: string
21
+ /**
22
+ * An integer parameter
23
+ */
24
+ age?: number
25
+ /**
26
+ * A boolean parameter
27
+ */
28
+ isActive?: boolean
29
+ /**
30
+ * An array of strings parameter
31
+ */
32
+ tags?: string[]
33
+ /**
34
+ * A date parameter in YYYY-MM-DD format
35
+ */
36
+ date?: string
37
+ }
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Automatically generated by @grafana/openapi-to-k6: 0.2.0
3
+ * Do not edit manually.
4
+ * Example API
5
+ * API with all formats of query parameters
6
+ * OpenAPI spec version: 1.0.0
7
+ */
8
+ import { URL, URLSearchParams } from 'https://jslib.k6.io/url/1.0.0/index.js'
9
+ import http from 'k6/http'
10
+ import type { Params, Response } from 'k6/http'
11
+ import type {
12
+ GetExampleData200,
13
+ GetExampleDataParams,
14
+ } from './exampleAPI.schemas'
15
+
16
+ /**
17
+ * This is the base client to use for interacting with the API.
18
+ */
19
+ export class ExampleAPIClient {
20
+ private cleanBaseUrl: string
21
+ private commonRequestParameters: Params
22
+
23
+ constructor(clientOptions: {
24
+ baseUrl: string
25
+ commonRequestParameters?: Params
26
+ }) {
27
+ this.cleanBaseUrl = clientOptions.baseUrl.replace(/\/+$/, '')
28
+ }
29
+
30
+ /**
31
+ * This endpoint demonstrates the use of various query parameters
32
+ * @summary Get example data
33
+ */
34
+ getExampleData(
35
+ params: GetExampleDataParams,
36
+ requestParameters?: Params
37
+ ): {
38
+ response: Response
39
+ data: GetExampleData200
40
+ } {
41
+ const url = new URL(
42
+ this.cleanBaseUrl +
43
+ `/example` +
44
+ `?${new URLSearchParams(params).toString()}`
45
+ )
46
+ const mergedRequestParameters = this._mergeRequestParameters(
47
+ requestParameters || {},
48
+ this.commonRequestParameters
49
+ )
50
+ const response = http.request('GET', url.toString(), undefined, {
51
+ ...mergedRequestParameters,
52
+ })
53
+ let data
54
+
55
+ try {
56
+ data = response.json()
57
+ } catch {
58
+ data = response.body
59
+ }
60
+ return {
61
+ response,
62
+ data,
63
+ }
64
+ }
65
+
66
+ /**
67
+ * Merges the provided request parameters with default parameters for the client.
68
+ *
69
+ * @param {Params} requestParameters - The parameters provided specifically for the request
70
+ * @param {Params} commonRequestParameters - Common parameters for all requests
71
+ * @returns {Params} - The merged parameters
72
+ */
73
+ private _mergeRequestParameters(
74
+ requestParameters?: Params,
75
+ commonRequestParameters?: Params
76
+ ): Params {
77
+ return {
78
+ ...commonRequestParameters, // Default to common parameters
79
+ ...requestParameters, // Override with request-specific parameters
80
+ headers: {
81
+ ...(commonRequestParameters?.headers || {}), // Ensure headers are defined
82
+ ...(requestParameters?.headers || {}),
83
+ },
84
+ cookies: {
85
+ ...(commonRequestParameters?.cookies || {}), // Ensure cookies are defined
86
+ ...(requestParameters?.cookies || {}),
87
+ },
88
+ tags: {
89
+ ...(commonRequestParameters?.tags || {}), // Ensure tags are defined
90
+ ...(requestParameters?.tags || {}),
91
+ },
92
+ }
93
+ }
94
+ }
@@ -0,0 +1,11 @@
1
+ import { ExampleAPIClient } from './exampleAPI.ts'
2
+
3
+ const baseUrl = '<BASE_URL>'
4
+ const client = new ExampleAPIClient({ baseUrl })
5
+
6
+ export default function () {
7
+ /**
8
+ * Get example data
9
+ */
10
+ const getExampleDataResponseData = client.getExampleData(params)
11
+ }
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Automatically generated by @grafana/openapi-to-k6: 0.2.0
3
+ * Do not edit manually.
4
+ * Example API
5
+ * API with all formats of query parameters
6
+ * OpenAPI spec version: 1.0.0
7
+ */
8
+ import { URL, URLSearchParams } from 'https://jslib.k6.io/url/1.0.0/index.js'
9
+ import http from 'k6/http'
10
+ import type { Params, Response } from 'k6/http'
11
+ import type {
12
+ GetExampleData200,
13
+ GetExampleDataParams,
14
+ } from './exampleAPI.schemas'
15
+
16
+ /**
17
+ * This is the base client to use for interacting with the API.
18
+ */
19
+ export class DefaultClient {
20
+ private cleanBaseUrl: string
21
+ private commonRequestParameters: Params
22
+
23
+ constructor(clientOptions: {
24
+ baseUrl: string
25
+ commonRequestParameters?: Params
26
+ }) {
27
+ this.cleanBaseUrl = clientOptions.baseUrl.replace(/\/+$/, '')
28
+ }
29
+
30
+ /**
31
+ * This endpoint demonstrates the use of various query parameters
32
+ * @summary Get example data
33
+ */
34
+ getExampleData(
35
+ params: GetExampleDataParams,
36
+ requestParameters?: Params
37
+ ): {
38
+ response: Response
39
+ data: GetExampleData200
40
+ } {
41
+ const url = new URL(
42
+ this.cleanBaseUrl +
43
+ `/example` +
44
+ `?${new URLSearchParams(params).toString()}`
45
+ )
46
+ const mergedRequestParameters = this._mergeRequestParameters(
47
+ requestParameters || {},
48
+ this.commonRequestParameters
49
+ )
50
+ const response = http.request('GET', url.toString(), undefined, {
51
+ ...mergedRequestParameters,
52
+ })
53
+ let data
54
+
55
+ try {
56
+ data = response.json()
57
+ } catch {
58
+ data = response.body
59
+ }
60
+ return {
61
+ response,
62
+ data,
63
+ }
64
+ }
65
+
66
+ /**
67
+ * Merges the provided request parameters with default parameters for the client.
68
+ *
69
+ * @param {Params} requestParameters - The parameters provided specifically for the request
70
+ * @param {Params} commonRequestParameters - Common parameters for all requests
71
+ * @returns {Params} - The merged parameters
72
+ */
73
+ private _mergeRequestParameters(
74
+ requestParameters?: Params,
75
+ commonRequestParameters?: Params
76
+ ): Params {
77
+ return {
78
+ ...commonRequestParameters, // Default to common parameters
79
+ ...requestParameters, // Override with request-specific parameters
80
+ headers: {
81
+ ...(commonRequestParameters?.headers || {}), // Ensure headers are defined
82
+ ...(requestParameters?.headers || {}),
83
+ },
84
+ cookies: {
85
+ ...(commonRequestParameters?.cookies || {}), // Ensure cookies are defined
86
+ ...(requestParameters?.cookies || {}),
87
+ },
88
+ tags: {
89
+ ...(commonRequestParameters?.tags || {}), // Ensure tags are defined
90
+ ...(requestParameters?.tags || {}),
91
+ },
92
+ }
93
+ }
94
+ }