Schemas.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. Copyright (C) 2017 Cloudbase Solutions SRL
  3. This program is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU Affero General Public License as
  5. published by the Free Software Foundation, either version 3 of the
  6. License, or (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU Affero General Public License for more details.
  11. You should have received a copy of the GNU Affero General Public License
  12. along with this program. If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. import { SchemaPlugin } from '../plugins/endpoint'
  15. import { defaultSchemaToFields } from '../plugins/endpoint/default/SchemaPlugin'
  16. class SchemaParser {
  17. static storedConnectionsSchemas = {}
  18. static connectionSchemaToFields(provider, schema) {
  19. if (!this.storedConnectionsSchemas[provider]) {
  20. this.storedConnectionsSchemas[provider] = schema
  21. }
  22. let parsers = SchemaPlugin[provider] || SchemaPlugin.default
  23. let fields = parsers.parseSchemaToFields(schema)
  24. return fields
  25. }
  26. static optionsSchemaToFields(provider, schema) {
  27. let fields = defaultSchemaToFields(schema.oneOf[0])
  28. fields.sort((a, b) => {
  29. if (a.required && !b.required) {
  30. return -1
  31. }
  32. if (!a.required && b.required) {
  33. return 1
  34. }
  35. return a.name.localeCompare(b.name)
  36. })
  37. return fields
  38. }
  39. static fieldsToPayload(data) {
  40. let storedSchema = this.storedConnectionsSchemas[data.type] || this.storedConnectionsSchemas.general
  41. let parsers = SchemaPlugin[data.type] || SchemaPlugin.default
  42. let payload = parsers.parseFieldsToPayload(data, storedSchema)
  43. return payload
  44. }
  45. }
  46. export { SchemaParser }