Use promises when generating public API SDK rather than promisifying after
This commit is contained in:
parent
6e4a525a90
commit
1fb4fcaeeb
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"usePromises": true
|
||||||
|
}
|
|
@ -17,12 +17,13 @@ cp ../../server/specs/openapi.yaml ./
|
||||||
docker run --rm \
|
docker run --rm \
|
||||||
-v ${PWD}/openapi.yaml:/openapi.yml \
|
-v ${PWD}/openapi.yaml:/openapi.yml \
|
||||||
-v ${PWD}/generated:/generated \
|
-v ${PWD}/generated:/generated \
|
||||||
|
-v ${PWD}/config.json:/config.json \
|
||||||
-u $(id -u):$(id -g) \
|
-u $(id -u):$(id -g) \
|
||||||
swaggerapi/swagger-codegen-cli-v3 generate \
|
swaggerapi/swagger-codegen-cli-v3 generate \
|
||||||
-i /openapi.yml \
|
-i /openapi.yml \
|
||||||
-l javascript \
|
-l javascript \
|
||||||
-o /generated
|
-o /generated \
|
||||||
--additional-properties useES6=false
|
-c /config.json
|
||||||
|
|
||||||
# Use a subset of the generated files
|
# Use a subset of the generated files
|
||||||
mv generated/src ../sdk
|
mv generated/src ../sdk
|
||||||
|
|
|
@ -15,37 +15,8 @@ export const configure = ({ apiKey, host }) => {
|
||||||
ApiClient.basePath = `${host || ""}/api/public/v1`
|
ApiClient.basePath = `${host || ""}/api/public/v1`
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
export const ApplicationsApi = new BudibaseApi.ApplicationsApi(ApiClient)
|
||||||
* Promisifies a generated API SDK and turns it into a more traditional async
|
export const QueriesApi = new BudibaseApi.QueriesApi(ApiClient)
|
||||||
* function.
|
export const RowsApi = new BudibaseApi.RowsApi(ApiClient)
|
||||||
* @param apiName the name of the generated API SDK to promisify
|
export const TablesApi = new BudibaseApi.TablesApi(ApiClient)
|
||||||
*/
|
export const UsersApi = new BudibaseApi.UsersApi(ApiClient)
|
||||||
const promisify = apiName => {
|
|
||||||
// Construct an instance of the generated API
|
|
||||||
let api = new BudibaseApi[apiName](ApiClient)
|
|
||||||
|
|
||||||
// Patch each API endpoint and promisify it
|
|
||||||
let fns = Object.getOwnPropertyNames(Object.getPrototypeOf(api))
|
|
||||||
fns = fns.filter(x => x !== "constructor")
|
|
||||||
fns.forEach(fn => {
|
|
||||||
const generated = api[fn].bind(api)
|
|
||||||
api[fn] = async (...params) => {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
generated(...params, (error, data) => {
|
|
||||||
if (error) {
|
|
||||||
reject(error)
|
|
||||||
} else {
|
|
||||||
resolve(data)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return api
|
|
||||||
}
|
|
||||||
|
|
||||||
export const ApplicationsApi = promisify("ApplicationsApi")
|
|
||||||
export const QueriesApi = promisify("QueriesApi")
|
|
||||||
export const RowsApi = promisify("RowsApi")
|
|
||||||
export const TablesApi = promisify("TablesApi")
|
|
||||||
export const UsersApi = promisify("UsersApi")
|
|
||||||
|
|
Loading…
Reference in New Issue