@budibase/server 1.0.90 → 1.0.91-alpha.2

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 (195) hide show
  1. package/builder/assets/{index.5cea89f7.js → index.d1097f6b.js} +134 -134
  2. package/builder/index.html +1 -1
  3. package/coverage/clover.xml +5 -5
  4. package/coverage/coverage-final.json +3 -3
  5. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  6. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/application.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/index.html +1 -1
  16. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  22. package/coverage/lcov-report/api/controllers/query/index.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/query/validation.js.html +2 -2
  24. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  47. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  48. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  49. package/coverage/lcov-report/api/index.html +1 -1
  50. package/coverage/lcov-report/api/index.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/index.html +1 -1
  63. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  80. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  82. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  83. package/coverage/lcov-report/automations/actions.js.html +1 -1
  84. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  85. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  86. package/coverage/lcov-report/automations/index.html +1 -1
  87. package/coverage/lcov-report/automations/index.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/index.html +1 -1
  97. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  104. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  111. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  112. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  113. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  114. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  115. package/coverage/lcov-report/automations/utils.js.html +1 -1
  116. package/coverage/lcov-report/constants/index.html +1 -1
  117. package/coverage/lcov-report/constants/index.js.html +1 -1
  118. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  119. package/coverage/lcov-report/constants/screens.js.html +1 -1
  120. package/coverage/lcov-report/db/client.js.html +1 -1
  121. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  122. package/coverage/lcov-report/db/index.html +1 -1
  123. package/coverage/lcov-report/db/index.js.html +1 -1
  124. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  125. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  126. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  127. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  128. package/coverage/lcov-report/db/newid.js.html +2 -2
  129. package/coverage/lcov-report/db/utils.js.html +2 -2
  130. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  131. package/coverage/lcov-report/events/index.html +1 -1
  132. package/coverage/lcov-report/events/index.js.html +1 -1
  133. package/coverage/lcov-report/events/utils.js.html +1 -1
  134. package/coverage/lcov-report/index.html +1 -1
  135. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  136. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  137. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  138. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  139. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  140. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  141. package/coverage/lcov-report/middleware/index.html +1 -1
  142. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  143. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  144. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  145. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  146. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  147. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  148. package/coverage/lcov-report/threads/automation.js.html +1 -1
  149. package/coverage/lcov-report/threads/index.html +1 -1
  150. package/coverage/lcov-report/threads/index.js.html +1 -1
  151. package/coverage/lcov-report/threads/query.js.html +1 -1
  152. package/coverage/lcov-report/threads/utils.js.html +1 -1
  153. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  154. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  155. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  156. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  157. package/coverage/lcov-report/utilities/global.js.html +1 -1
  158. package/coverage/lcov-report/utilities/index.html +1 -1
  159. package/coverage/lcov-report/utilities/index.js.html +1 -1
  160. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  161. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  162. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  163. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  164. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  165. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  166. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  167. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  168. package/coverage/lcov-report/utilities/security.js.html +1 -1
  169. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  170. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  171. package/coverage/lcov-report/utilities/usageQuota/index.js.html +1 -1
  172. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  173. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  174. package/coverage/lcov-report/utilities/users.js.html +1 -1
  175. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  176. package/coverage/lcov.info +6 -6
  177. package/dist/api/controllers/query/import/index.js +2 -1
  178. package/dist/api/controllers/query/import/sources/base/index.js +12 -1
  179. package/dist/api/controllers/query/import/sources/curl.js +2 -2
  180. package/dist/api/controllers/query/import/sources/openapi3.js +174 -0
  181. package/dist/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +253 -0
  182. package/dist/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +1225 -0
  183. package/dist/package.json +4 -4
  184. package/dist/tsconfig.tsbuildinfo +1 -1
  185. package/package.json +5 -5
  186. package/src/api/controllers/query/import/index.ts +2 -1
  187. package/src/api/controllers/query/import/sources/base/index.ts +12 -2
  188. package/src/api/controllers/query/import/sources/curl.ts +2 -2
  189. package/src/api/controllers/query/import/sources/openapi3.ts +205 -0
  190. package/src/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +253 -0
  191. package/src/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.yaml +153 -0
  192. package/src/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +1225 -0
  193. package/src/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.yaml +804 -0
  194. package/src/api/controllers/query/import/sources/tests/openapi3/openapi3.spec.js +240 -0
  195. package/src/api/controllers/query/import/tests/index.spec.js +43 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "1.0.90",
4
+ "version": "1.0.91-alpha.2",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -71,9 +71,9 @@
71
71
  "license": "GPL-3.0",
72
72
  "dependencies": {
73
73
  "@apidevtools/swagger-parser": "^10.0.3",
74
- "@budibase/backend-core": "^1.0.90",
75
- "@budibase/client": "^1.0.90",
76
- "@budibase/string-templates": "^1.0.90",
74
+ "@budibase/backend-core": "^1.0.91-alpha.2",
75
+ "@budibase/client": "^1.0.91-alpha.2",
76
+ "@budibase/string-templates": "^1.0.91-alpha.2",
77
77
  "@bull-board/api": "^3.7.0",
78
78
  "@bull-board/koa": "^3.7.0",
79
79
  "@elastic/elasticsearch": "7.10.0",
@@ -175,5 +175,5 @@
175
175
  "optionalDependencies": {
176
176
  "oracledb": "^5.3.0"
177
177
  },
178
- "gitHead": "b5c5488e8ac7c0390f5f066813eae13d08cccbf0"
178
+ "gitHead": "b25cacf6b86fe7551b3eb63707e2505d78394783"
179
179
  }
@@ -2,6 +2,7 @@ import { queryValidation } from "../validation"
2
2
  import { generateQueryID } from "../../../../db/utils"
3
3
  import { ImportInfo, ImportSource } from "./sources/base"
4
4
  import { OpenAPI2 } from "./sources/openapi2"
5
+ import { OpenAPI3 } from "./sources/openapi3"
5
6
  import { Query } from "./../../../../definitions/common"
6
7
  import { Curl } from "./sources/curl"
7
8
  // @ts-ignore
@@ -18,7 +19,7 @@ export class RestImporter {
18
19
 
19
20
  constructor(data: string) {
20
21
  this.data = data
21
- this.sources = [new OpenAPI2(), new Curl()]
22
+ this.sources = [new OpenAPI2(), new OpenAPI3(), new Curl()]
22
23
  }
23
24
 
24
25
  init = async () => {
@@ -23,7 +23,7 @@ export abstract class ImportSource {
23
23
  name: string,
24
24
  method: string,
25
25
  path: string,
26
- url: URL,
26
+ url: URL | string | undefined,
27
27
  queryString: string,
28
28
  headers: object = {},
29
29
  parameters: QueryParameter[] = [],
@@ -34,7 +34,17 @@ export abstract class ImportSource {
34
34
  const transformer = "return data"
35
35
  const schema = {}
36
36
  path = this.processPath(path)
37
- path = `${url.origin}/${path}`
37
+ if (url) {
38
+ if (typeof url === "string") {
39
+ path = `${url}/${path}`
40
+ } else {
41
+ let href = url.href
42
+ if (href.endsWith("/")) {
43
+ href = href.slice(0, -1)
44
+ }
45
+ path = `${href}/${path}`
46
+ }
47
+ }
38
48
  queryString = this.processQuery(queryString)
39
49
  const requestBody = JSON.stringify(body, null, 2)
40
50
 
@@ -74,7 +74,7 @@ export class Curl extends ImportSource {
74
74
  getQueries = async (datasourceId: string): Promise<Query[]> => {
75
75
  const url = this.getUrl()
76
76
  const name = url.pathname
77
- const path = url.pathname
77
+ const path = url.origin + url.pathname
78
78
  const method = this.curl.method
79
79
  const queryString = url.search
80
80
  const headers = this.curl.headers
@@ -90,7 +90,7 @@ export class Curl extends ImportSource {
90
90
  name,
91
91
  method,
92
92
  path,
93
- url,
93
+ undefined,
94
94
  queryString,
95
95
  headers,
96
96
  [],
@@ -0,0 +1,205 @@
1
+ import { ImportInfo } from "./base"
2
+ import { Query, QueryParameter } from "../../../../../definitions/datasource"
3
+ import { OpenAPIV3 } from "openapi-types"
4
+ import { OpenAPISource } from "./base/openapi"
5
+ import { URL } from "url"
6
+
7
+ const parameterNotRef = (
8
+ param: OpenAPIV3.ParameterObject | OpenAPIV3.ReferenceObject
9
+ ): param is OpenAPIV3.ParameterObject => {
10
+ // all refs are deferenced by parser library
11
+ return true
12
+ }
13
+
14
+ const requestBodyNotRef = (
15
+ param: OpenAPIV3.RequestBodyObject | OpenAPIV3.ReferenceObject | undefined
16
+ ): param is OpenAPIV3.RequestBodyObject => {
17
+ // all refs are deferenced by parser library
18
+ return param !== undefined
19
+ }
20
+
21
+ const schemaNotRef = (
22
+ param: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject | undefined
23
+ ): param is OpenAPIV3.SchemaObject => {
24
+ // all refs are deferenced by parser library
25
+ return param !== undefined
26
+ }
27
+
28
+ const isOpenAPI3 = (document: any): document is OpenAPIV3.Document => {
29
+ return document.openapi.includes("3.0")
30
+ }
31
+
32
+ const methods: string[] = Object.values(OpenAPIV3.HttpMethods)
33
+
34
+ const isOperation = (
35
+ key: string,
36
+ pathItem: any
37
+ ): pathItem is OpenAPIV3.OperationObject => {
38
+ return methods.includes(key)
39
+ }
40
+
41
+ const isParameter = (
42
+ key: string,
43
+ pathItem: any
44
+ ): pathItem is OpenAPIV3.ParameterObject => {
45
+ return !isOperation(key, pathItem)
46
+ }
47
+
48
+ const getRequestBody = (operation: OpenAPIV3.OperationObject) => {
49
+ if (requestBodyNotRef(operation.requestBody)) {
50
+ const request: OpenAPIV3.RequestBodyObject = operation.requestBody
51
+ const supportedMimeTypes = getMimeTypes(operation)
52
+ if (supportedMimeTypes.length > 0) {
53
+ const mimeType = supportedMimeTypes[0]
54
+
55
+ // try get example from request
56
+ const content = request.content[mimeType]
57
+ if (content.example) {
58
+ return content.example
59
+ }
60
+
61
+ // try get example from schema
62
+ if (schemaNotRef(content.schema)) {
63
+ const schema = content.schema
64
+ if (schema.example) {
65
+ return schema.example
66
+ }
67
+ }
68
+ }
69
+ }
70
+ return undefined
71
+ }
72
+
73
+ const getMimeTypes = (operation: OpenAPIV3.OperationObject): string[] => {
74
+ if (requestBodyNotRef(operation.requestBody)) {
75
+ const request: OpenAPIV3.RequestBodyObject = operation.requestBody
76
+ return Object.keys(request.content)
77
+ }
78
+ return []
79
+ }
80
+
81
+ /**
82
+ * OpenAPI Version 3.0
83
+ * https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md
84
+ */
85
+ export class OpenAPI3 extends OpenAPISource {
86
+ document!: OpenAPIV3.Document
87
+
88
+ isSupported = async (data: string): Promise<boolean> => {
89
+ try {
90
+ const document: any = await this.parseData(data)
91
+ if (isOpenAPI3(document)) {
92
+ this.document = document
93
+ return true
94
+ } else {
95
+ return false
96
+ }
97
+ } catch (err) {
98
+ return false
99
+ }
100
+ }
101
+
102
+ getInfo = async (): Promise<ImportInfo> => {
103
+ const name = this.document.info.title || "OpenAPI Import"
104
+ return {
105
+ name,
106
+ }
107
+ }
108
+
109
+ getQueries = async (datasourceId: string): Promise<Query[]> => {
110
+ let url: string | URL | undefined
111
+ if (this.document.servers?.length) {
112
+ url = this.document.servers[0].url
113
+ try {
114
+ url = new URL(url)
115
+ } catch (err) {
116
+ // unable to construct url, e.g. with variables
117
+ // proceed with string form of url
118
+ }
119
+ }
120
+
121
+ const queries: Query[] = []
122
+
123
+ for (let [path, pathItemObject] of Object.entries(this.document.paths)) {
124
+ // parameters that apply to every operation in the path
125
+ let pathParams: OpenAPIV3.ParameterObject[] = []
126
+
127
+ // pathItemObject can be undefined
128
+ if (!pathItemObject) {
129
+ continue
130
+ }
131
+
132
+ for (let [key, opOrParams] of Object.entries(pathItemObject)) {
133
+ if (isParameter(key, opOrParams)) {
134
+ const pathParameters = opOrParams as OpenAPIV3.ParameterObject[]
135
+ pathParams.push(...pathParameters)
136
+ continue
137
+ }
138
+ // can not be a parameter, must be an operation
139
+ const operation = opOrParams as OpenAPIV3.OperationObject
140
+
141
+ const methodName = key
142
+ const name = operation.operationId || path
143
+ let queryString = ""
144
+ const headers: any = {}
145
+ let requestBody = getRequestBody(operation)
146
+ const parameters: QueryParameter[] = []
147
+ const mimeTypes = getMimeTypes(operation)
148
+
149
+ if (mimeTypes.length > 0) {
150
+ headers["Content-Type"] = mimeTypes[0]
151
+ }
152
+
153
+ // combine the path parameters with the operation parameters
154
+ const operationParams = operation.parameters || []
155
+ const allParams = [...pathParams, ...operationParams]
156
+
157
+ for (let param of allParams) {
158
+ if (parameterNotRef(param)) {
159
+ switch (param.in) {
160
+ case "query":
161
+ let prefix = ""
162
+ if (queryString) {
163
+ prefix = "&"
164
+ }
165
+ queryString = `${queryString}${prefix}${param.name}={{${param.name}}}`
166
+ break
167
+ case "header":
168
+ headers[param.name] = `{{${param.name}}}`
169
+ break
170
+ case "path":
171
+ // do nothing: param is already in the path
172
+ break
173
+ case "formData":
174
+ // future enhancement
175
+ break
176
+ }
177
+
178
+ // add the parameter if it can be bound in our config
179
+ if (["query", "header", "path"].includes(param.in)) {
180
+ parameters.push({
181
+ name: param.name,
182
+ default: "",
183
+ })
184
+ }
185
+ }
186
+ }
187
+
188
+ const query = this.constructQuery(
189
+ datasourceId,
190
+ name,
191
+ methodName,
192
+ path,
193
+ url,
194
+ queryString,
195
+ headers,
196
+ parameters,
197
+ requestBody
198
+ )
199
+ queries.push(query)
200
+ }
201
+ }
202
+
203
+ return queries
204
+ }
205
+ }
@@ -0,0 +1,253 @@
1
+ {
2
+ "openapi": "3.0.2",
3
+ "info": {
4
+ "description": "A basic swagger file",
5
+ "version": "1.0.0",
6
+ "title": "CRUD"
7
+ },
8
+ "servers": [
9
+ {
10
+ "url": "http://example.com"
11
+ }
12
+ ],
13
+ "tags": [
14
+ {
15
+ "name": "entity"
16
+ }
17
+ ],
18
+ "paths": {
19
+ "/entities": {
20
+ "post": {
21
+ "tags": [
22
+ "entity"
23
+ ],
24
+ "operationId": "createEntity",
25
+ "requestBody": {
26
+ "content": {
27
+ "application/json": {
28
+ "schema": {
29
+ "$ref": "#/components/schemas/CreateEntity"
30
+ }
31
+ }
32
+ }
33
+ },
34
+ "responses": {
35
+ "200": {
36
+ "description": "successful operation",
37
+ "content": {
38
+ "application/json": {
39
+ "schema": {
40
+ "$ref": "#/components/schemas/Entity"
41
+ }
42
+ }
43
+ }
44
+ }
45
+ }
46
+ },
47
+ "get": {
48
+ "tags": [
49
+ "entity"
50
+ ],
51
+ "operationId": "getEntities",
52
+ "parameters": [
53
+ {
54
+ "$ref": "#/components/parameters/PageParameter"
55
+ },
56
+ {
57
+ "$ref": "#/components/parameters/SizeParameter"
58
+ }
59
+ ],
60
+ "responses": {
61
+ "200": {
62
+ "description": "successful operation",
63
+ "content": {
64
+ "application/json": {
65
+ "schema": {
66
+ "$ref": "#/components/schemas/Entities"
67
+ }
68
+ }
69
+ }
70
+ }
71
+ }
72
+ }
73
+ },
74
+ "/entities/{entityId}": {
75
+ "parameters": [
76
+ {
77
+ "$ref": "#/components/parameters/EntityIdParameter"
78
+ }
79
+ ],
80
+ "get": {
81
+ "tags": [
82
+ "entity"
83
+ ],
84
+ "operationId": "getEntity",
85
+ "responses": {
86
+ "200": {
87
+ "description": "successful operation",
88
+ "content": {
89
+ "application/json": {
90
+ "schema": {
91
+ "$ref": "#/components/schemas/Entity"
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
97
+ },
98
+ "put": {
99
+ "tags": [
100
+ "entity"
101
+ ],
102
+ "operationId": "updateEntity",
103
+ "requestBody": {
104
+ "content": {
105
+ "application/json": {
106
+ "schema": {
107
+ "$ref": "#/components/schemas/Entity"
108
+ }
109
+ }
110
+ }
111
+ },
112
+ "responses": {
113
+ "200": {
114
+ "description": "successful operation",
115
+ "content": {
116
+ "application/json": {
117
+ "schema": {
118
+ "$ref": "#/components/schemas/Entity"
119
+ }
120
+ }
121
+ }
122
+ }
123
+ }
124
+ },
125
+ "patch": {
126
+ "tags": [
127
+ "entity"
128
+ ],
129
+ "operationId": "patchEntity",
130
+ "requestBody": {
131
+ "content": {
132
+ "application/json": {
133
+ "schema": {
134
+ "$ref": "#/components/schemas/Entity"
135
+ }
136
+ }
137
+ }
138
+ },
139
+ "responses": {
140
+ "200": {
141
+ "description": "successful operation",
142
+ "content": {
143
+ "application/json": {
144
+ "schema": {
145
+ "$ref": "#/components/schemas/Entity"
146
+ }
147
+ }
148
+ }
149
+ }
150
+ }
151
+ },
152
+ "delete": {
153
+ "tags": [
154
+ "entity"
155
+ ],
156
+ "parameters": [
157
+ {
158
+ "$ref": "#/components/parameters/APIKeyParameter"
159
+ }
160
+ ],
161
+ "operationId": "deleteEntity",
162
+ "responses": {
163
+ "204": {
164
+ "description": "successful operation"
165
+ }
166
+ }
167
+ }
168
+ }
169
+ },
170
+ "components": {
171
+ "parameters": {
172
+ "EntityIdParameter": {
173
+ "schema": {
174
+ "type": "integer",
175
+ "format": "int64"
176
+ },
177
+ "name": "entityId",
178
+ "in": "path",
179
+ "required": true
180
+ },
181
+ "PageParameter": {
182
+ "schema": {
183
+ "type": "integer",
184
+ "format": "int32"
185
+ },
186
+ "name": "page",
187
+ "in": "query",
188
+ "required": false
189
+ },
190
+ "SizeParameter": {
191
+ "schema": {
192
+ "type": "integer",
193
+ "format": "int32"
194
+ },
195
+ "name": "size",
196
+ "in": "query",
197
+ "required": false
198
+ },
199
+ "APIKeyParameter": {
200
+ "schema": {
201
+ "type": "string"
202
+ },
203
+ "name": "x-api-key",
204
+ "in": "header",
205
+ "required": false
206
+ }
207
+ },
208
+ "schemas": {
209
+ "CreateEntity": {
210
+ "type": "object",
211
+ "properties": {
212
+ "name": {
213
+ "type": "string"
214
+ },
215
+ "type": {
216
+ "type": "string"
217
+ }
218
+ },
219
+ "example": {
220
+ "name": "name",
221
+ "type": "type"
222
+ }
223
+ },
224
+ "Entity": {
225
+ "allOf": [
226
+ {
227
+ "type": "object",
228
+ "properties": {
229
+ "id": {
230
+ "type": "integer",
231
+ "format": "int64"
232
+ }
233
+ }
234
+ },
235
+ {
236
+ "$ref": "#/components/schemas/CreateEntity"
237
+ }
238
+ ],
239
+ "example": {
240
+ "id": 1,
241
+ "name": "name",
242
+ "type": "type"
243
+ }
244
+ },
245
+ "Entities" : {
246
+ "type": "array",
247
+ "items": {
248
+ "$ref": "#/components/schemas/Entity"
249
+ }
250
+ }
251
+ }
252
+ }
253
+ }
@@ -0,0 +1,153 @@
1
+ ---
2
+ openapi: 3.0.2
3
+ info:
4
+ description: A basic swagger file
5
+ version: 1.0.0
6
+ title: CRUD
7
+ servers:
8
+ - url: http://example.com
9
+ tags:
10
+ - name: entity
11
+ paths:
12
+ "/entities":
13
+ post:
14
+ tags:
15
+ - entity
16
+ operationId: createEntity
17
+ requestBody:
18
+ content:
19
+ application/json:
20
+ schema:
21
+ "$ref": "#/components/schemas/CreateEntity"
22
+ responses:
23
+ '200':
24
+ description: successful operation
25
+ content:
26
+ application/json:
27
+ schema:
28
+ "$ref": "#/components/schemas/Entity"
29
+ get:
30
+ tags:
31
+ - entity
32
+ operationId: getEntities
33
+ parameters:
34
+ - "$ref": "#/components/parameters/PageParameter"
35
+ - "$ref": "#/components/parameters/SizeParameter"
36
+ responses:
37
+ '200':
38
+ description: successful operation
39
+ content:
40
+ application/json:
41
+ schema:
42
+ "$ref": "#/components/schemas/Entities"
43
+ "/entities/{entityId}":
44
+ parameters:
45
+ - "$ref": "#/components/parameters/EntityIdParameter"
46
+ get:
47
+ tags:
48
+ - entity
49
+ operationId: getEntity
50
+ responses:
51
+ '200':
52
+ description: successful operation
53
+ content:
54
+ application/json:
55
+ schema:
56
+ "$ref": "#/components/schemas/Entity"
57
+ put:
58
+ tags:
59
+ - entity
60
+ operationId: updateEntity
61
+ requestBody:
62
+ content:
63
+ application/json:
64
+ schema:
65
+ "$ref": "#/components/schemas/Entity"
66
+ responses:
67
+ '200':
68
+ description: successful operation
69
+ content:
70
+ application/json:
71
+ schema:
72
+ "$ref": "#/components/schemas/Entity"
73
+ patch:
74
+ tags:
75
+ - entity
76
+ operationId: patchEntity
77
+ requestBody:
78
+ content:
79
+ application/json:
80
+ schema:
81
+ "$ref": "#/components/schemas/Entity"
82
+ responses:
83
+ '200':
84
+ description: successful operation
85
+ content:
86
+ application/json:
87
+ schema:
88
+ "$ref": "#/components/schemas/Entity"
89
+ delete:
90
+ tags:
91
+ - entity
92
+ parameters:
93
+ - "$ref": "#/components/parameters/APIKeyParameter"
94
+ operationId: deleteEntity
95
+ responses:
96
+ '204':
97
+ description: successful operation
98
+ components:
99
+ parameters:
100
+ EntityIdParameter:
101
+ schema:
102
+ type: integer
103
+ format: int64
104
+ name: entityId
105
+ in: path
106
+ required: true
107
+ PageParameter:
108
+ schema:
109
+ type: integer
110
+ format: int32
111
+ name: page
112
+ in: query
113
+ required: false
114
+ SizeParameter:
115
+ schema:
116
+ type: integer
117
+ format: int32
118
+ name: size
119
+ in: query
120
+ required: false
121
+ APIKeyParameter:
122
+ schema:
123
+ type: string
124
+ name: x-api-key
125
+ in: header
126
+ required: false
127
+ schemas:
128
+ CreateEntity:
129
+ type: object
130
+ properties:
131
+ name:
132
+ type: string
133
+ type:
134
+ type: string
135
+ example:
136
+ name: name
137
+ type: type
138
+ Entity:
139
+ allOf:
140
+ - type: object
141
+ properties:
142
+ id:
143
+ type: integer
144
+ format: int64
145
+ - "$ref": "#/components/schemas/CreateEntity"
146
+ example:
147
+ id: 1
148
+ name: name
149
+ type: type
150
+ Entities:
151
+ type: array
152
+ items:
153
+ "$ref": "#/components/schemas/Entity"