jtd-schema.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const shared = (root) => {
  4. const sch = {
  5. nullable: { type: "boolean" },
  6. metadata: {
  7. optionalProperties: {
  8. union: { elements: { ref: "schema" } },
  9. },
  10. additionalProperties: true,
  11. },
  12. };
  13. if (root)
  14. sch.definitions = { values: { ref: "schema" } };
  15. return sch;
  16. };
  17. const emptyForm = (root) => ({
  18. optionalProperties: shared(root),
  19. });
  20. const refForm = (root) => ({
  21. properties: {
  22. ref: { type: "string" },
  23. },
  24. optionalProperties: shared(root),
  25. });
  26. const typeForm = (root) => ({
  27. properties: {
  28. type: {
  29. enum: [
  30. "boolean",
  31. "timestamp",
  32. "string",
  33. "float32",
  34. "float64",
  35. "int8",
  36. "uint8",
  37. "int16",
  38. "uint16",
  39. "int32",
  40. "uint32",
  41. ],
  42. },
  43. },
  44. optionalProperties: shared(root),
  45. });
  46. const enumForm = (root) => ({
  47. properties: {
  48. enum: { elements: { type: "string" } },
  49. },
  50. optionalProperties: shared(root),
  51. });
  52. const elementsForm = (root) => ({
  53. properties: {
  54. elements: { ref: "schema" },
  55. },
  56. optionalProperties: shared(root),
  57. });
  58. const propertiesForm = (root) => ({
  59. properties: {
  60. properties: { values: { ref: "schema" } },
  61. },
  62. optionalProperties: {
  63. optionalProperties: { values: { ref: "schema" } },
  64. additionalProperties: { type: "boolean" },
  65. ...shared(root),
  66. },
  67. });
  68. const optionalPropertiesForm = (root) => ({
  69. properties: {
  70. optionalProperties: { values: { ref: "schema" } },
  71. },
  72. optionalProperties: {
  73. additionalProperties: { type: "boolean" },
  74. ...shared(root),
  75. },
  76. });
  77. const discriminatorForm = (root) => ({
  78. properties: {
  79. discriminator: { type: "string" },
  80. mapping: {
  81. values: {
  82. metadata: {
  83. union: [propertiesForm(false), optionalPropertiesForm(false)],
  84. },
  85. },
  86. },
  87. },
  88. optionalProperties: shared(root),
  89. });
  90. const valuesForm = (root) => ({
  91. properties: {
  92. values: { ref: "schema" },
  93. },
  94. optionalProperties: shared(root),
  95. });
  96. const schema = (root) => ({
  97. metadata: {
  98. union: [
  99. emptyForm,
  100. refForm,
  101. typeForm,
  102. enumForm,
  103. elementsForm,
  104. propertiesForm,
  105. optionalPropertiesForm,
  106. discriminatorForm,
  107. valuesForm,
  108. ].map((s) => s(root)),
  109. },
  110. });
  111. const jtdMetaSchema = {
  112. definitions: {
  113. schema: schema(false),
  114. },
  115. ...schema(true),
  116. };
  117. exports.default = jtdMetaSchema;
  118. //# sourceMappingURL=jtd-schema.js.map