@contember/schema-utils 2.1.0-beta.2 → 2.2.0-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 (247) hide show
  1. package/dist/development/index.cjs +11 -0
  2. package/dist/development/index.cjs.map +1 -1
  3. package/dist/development/index.js +11 -0
  4. package/dist/development/index.js.map +1 -1
  5. package/dist/development/src/acl/PredicateDefinitionProcessor.cjs.map +1 -1
  6. package/dist/development/src/acl/PredicateDefinitionProcessor.js.map +1 -1
  7. package/dist/development/src/dataUtils.cjs +1 -0
  8. package/dist/development/src/dataUtils.cjs.map +1 -1
  9. package/dist/development/src/dataUtils.js +1 -0
  10. package/dist/development/src/dataUtils.js.map +1 -1
  11. package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.cjs.map +1 -1
  12. package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.js.map +1 -1
  13. package/dist/development/src/definition-generator/DefinitionCodeGenerator.cjs +37 -2
  14. package/dist/development/src/definition-generator/DefinitionCodeGenerator.cjs.map +1 -1
  15. package/dist/development/src/definition-generator/DefinitionCodeGenerator.js +37 -2
  16. package/dist/development/src/definition-generator/DefinitionCodeGenerator.js.map +1 -1
  17. package/dist/development/src/definition-generator/TsDefinitionGenerator.cjs.map +1 -1
  18. package/dist/development/src/definition-generator/TsDefinitionGenerator.js.map +1 -1
  19. package/dist/development/src/json-schema/collectUnsupportedKeywords.cjs +45 -0
  20. package/dist/development/src/json-schema/collectUnsupportedKeywords.cjs.map +1 -0
  21. package/dist/development/src/json-schema/collectUnsupportedKeywords.js +45 -0
  22. package/dist/development/src/json-schema/collectUnsupportedKeywords.js.map +1 -0
  23. package/dist/development/src/json-schema/jsonSchemaToTsType.cjs +138 -0
  24. package/dist/development/src/json-schema/jsonSchemaToTsType.cjs.map +1 -0
  25. package/dist/development/src/json-schema/jsonSchemaToTsType.js +138 -0
  26. package/dist/development/src/json-schema/jsonSchemaToTsType.js.map +1 -0
  27. package/dist/development/src/json-schema/keywords.cjs +57 -0
  28. package/dist/development/src/json-schema/keywords.cjs.map +1 -0
  29. package/dist/development/src/json-schema/keywords.js +57 -0
  30. package/dist/development/src/json-schema/keywords.js.map +1 -0
  31. package/dist/development/src/lax/LaxSchemaConverter.cjs.map +1 -1
  32. package/dist/development/src/lax/LaxSchemaConverter.js.map +1 -1
  33. package/dist/development/src/model/modelUtils.cjs.map +1 -1
  34. package/dist/development/src/model/modelUtils.js.map +1 -1
  35. package/dist/development/src/model/resolveDefaultColumnType.cjs +2 -0
  36. package/dist/development/src/model/resolveDefaultColumnType.cjs.map +1 -1
  37. package/dist/development/src/model/resolveDefaultColumnType.js +2 -0
  38. package/dist/development/src/model/resolveDefaultColumnType.js.map +1 -1
  39. package/dist/development/src/schemaNormalizer.cjs.map +1 -1
  40. package/dist/development/src/schemaNormalizer.js.map +1 -1
  41. package/dist/development/src/type-schema/acl.cjs.map +1 -1
  42. package/dist/development/src/type-schema/acl.js.map +1 -1
  43. package/dist/development/src/type-schema/condition.cjs +6 -1
  44. package/dist/development/src/type-schema/condition.cjs.map +1 -1
  45. package/dist/development/src/type-schema/condition.js +6 -1
  46. package/dist/development/src/type-schema/condition.js.map +1 -1
  47. package/dist/development/src/type-schema/model.cjs +14 -2
  48. package/dist/development/src/type-schema/model.cjs.map +1 -1
  49. package/dist/development/src/type-schema/model.js +14 -2
  50. package/dist/development/src/type-schema/model.js.map +1 -1
  51. package/dist/development/src/type-schema/settings.cjs +1 -0
  52. package/dist/development/src/type-schema/settings.cjs.map +1 -1
  53. package/dist/development/src/type-schema/settings.js +1 -0
  54. package/dist/development/src/type-schema/settings.js.map +1 -1
  55. package/dist/development/src/type-schema/where.cjs.map +1 -1
  56. package/dist/development/src/type-schema/where.js.map +1 -1
  57. package/dist/development/src/validation/AclValidator.cjs.map +1 -1
  58. package/dist/development/src/validation/AclValidator.js.map +1 -1
  59. package/dist/development/src/validation/ActionsValidator.cjs.map +1 -1
  60. package/dist/development/src/validation/ActionsValidator.js.map +1 -1
  61. package/dist/development/src/validation/MembershipResolver.cjs.map +1 -1
  62. package/dist/development/src/validation/MembershipResolver.js.map +1 -1
  63. package/dist/development/src/validation/ModelValidator.cjs +66 -0
  64. package/dist/development/src/validation/ModelValidator.cjs.map +1 -1
  65. package/dist/development/src/validation/ModelValidator.js +66 -0
  66. package/dist/development/src/validation/ModelValidator.js.map +1 -1
  67. package/dist/development/src/validation/SchemaValidator.cjs.map +1 -1
  68. package/dist/development/src/validation/SchemaValidator.js.map +1 -1
  69. package/dist/development/src/validation/ValidationValidator.cjs.map +1 -1
  70. package/dist/development/src/validation/ValidationValidator.js.map +1 -1
  71. package/dist/development/src/validation/errors.cjs.map +1 -1
  72. package/dist/development/src/validation/errors.js.map +1 -1
  73. package/dist/production/index.cjs +11 -0
  74. package/dist/production/index.cjs.map +1 -1
  75. package/dist/production/index.js +11 -0
  76. package/dist/production/index.js.map +1 -1
  77. package/dist/production/src/acl/PredicateDefinitionProcessor.cjs.map +1 -1
  78. package/dist/production/src/acl/PredicateDefinitionProcessor.js.map +1 -1
  79. package/dist/production/src/dataUtils.cjs +1 -0
  80. package/dist/production/src/dataUtils.cjs.map +1 -1
  81. package/dist/production/src/dataUtils.js +1 -0
  82. package/dist/production/src/dataUtils.js.map +1 -1
  83. package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.cjs.map +1 -1
  84. package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.js.map +1 -1
  85. package/dist/production/src/definition-generator/DefinitionCodeGenerator.cjs +37 -2
  86. package/dist/production/src/definition-generator/DefinitionCodeGenerator.cjs.map +1 -1
  87. package/dist/production/src/definition-generator/DefinitionCodeGenerator.js +37 -2
  88. package/dist/production/src/definition-generator/DefinitionCodeGenerator.js.map +1 -1
  89. package/dist/production/src/definition-generator/TsDefinitionGenerator.cjs.map +1 -1
  90. package/dist/production/src/definition-generator/TsDefinitionGenerator.js.map +1 -1
  91. package/dist/production/src/json-schema/collectUnsupportedKeywords.cjs +45 -0
  92. package/dist/production/src/json-schema/collectUnsupportedKeywords.cjs.map +1 -0
  93. package/dist/production/src/json-schema/collectUnsupportedKeywords.js +45 -0
  94. package/dist/production/src/json-schema/collectUnsupportedKeywords.js.map +1 -0
  95. package/dist/production/src/json-schema/jsonSchemaToTsType.cjs +138 -0
  96. package/dist/production/src/json-schema/jsonSchemaToTsType.cjs.map +1 -0
  97. package/dist/production/src/json-schema/jsonSchemaToTsType.js +138 -0
  98. package/dist/production/src/json-schema/jsonSchemaToTsType.js.map +1 -0
  99. package/dist/production/src/json-schema/keywords.cjs +57 -0
  100. package/dist/production/src/json-schema/keywords.cjs.map +1 -0
  101. package/dist/production/src/json-schema/keywords.js +57 -0
  102. package/dist/production/src/json-schema/keywords.js.map +1 -0
  103. package/dist/production/src/lax/LaxSchemaConverter.cjs.map +1 -1
  104. package/dist/production/src/lax/LaxSchemaConverter.js.map +1 -1
  105. package/dist/production/src/model/modelUtils.cjs.map +1 -1
  106. package/dist/production/src/model/modelUtils.js.map +1 -1
  107. package/dist/production/src/model/resolveDefaultColumnType.cjs +2 -0
  108. package/dist/production/src/model/resolveDefaultColumnType.cjs.map +1 -1
  109. package/dist/production/src/model/resolveDefaultColumnType.js +2 -0
  110. package/dist/production/src/model/resolveDefaultColumnType.js.map +1 -1
  111. package/dist/production/src/schemaNormalizer.cjs.map +1 -1
  112. package/dist/production/src/schemaNormalizer.js.map +1 -1
  113. package/dist/production/src/type-schema/acl.cjs.map +1 -1
  114. package/dist/production/src/type-schema/acl.js.map +1 -1
  115. package/dist/production/src/type-schema/condition.cjs +6 -1
  116. package/dist/production/src/type-schema/condition.cjs.map +1 -1
  117. package/dist/production/src/type-schema/condition.js +6 -1
  118. package/dist/production/src/type-schema/condition.js.map +1 -1
  119. package/dist/production/src/type-schema/model.cjs +14 -2
  120. package/dist/production/src/type-schema/model.cjs.map +1 -1
  121. package/dist/production/src/type-schema/model.js +14 -2
  122. package/dist/production/src/type-schema/model.js.map +1 -1
  123. package/dist/production/src/type-schema/settings.cjs +1 -0
  124. package/dist/production/src/type-schema/settings.cjs.map +1 -1
  125. package/dist/production/src/type-schema/settings.js +1 -0
  126. package/dist/production/src/type-schema/settings.js.map +1 -1
  127. package/dist/production/src/type-schema/where.cjs.map +1 -1
  128. package/dist/production/src/type-schema/where.js.map +1 -1
  129. package/dist/production/src/validation/AclValidator.cjs.map +1 -1
  130. package/dist/production/src/validation/AclValidator.js.map +1 -1
  131. package/dist/production/src/validation/ActionsValidator.cjs.map +1 -1
  132. package/dist/production/src/validation/ActionsValidator.js.map +1 -1
  133. package/dist/production/src/validation/MembershipResolver.cjs.map +1 -1
  134. package/dist/production/src/validation/MembershipResolver.js.map +1 -1
  135. package/dist/production/src/validation/ModelValidator.cjs +66 -0
  136. package/dist/production/src/validation/ModelValidator.cjs.map +1 -1
  137. package/dist/production/src/validation/ModelValidator.js +66 -0
  138. package/dist/production/src/validation/ModelValidator.js.map +1 -1
  139. package/dist/production/src/validation/SchemaValidator.cjs.map +1 -1
  140. package/dist/production/src/validation/SchemaValidator.js.map +1 -1
  141. package/dist/production/src/validation/ValidationValidator.cjs.map +1 -1
  142. package/dist/production/src/validation/ValidationValidator.js.map +1 -1
  143. package/dist/production/src/validation/errors.cjs.map +1 -1
  144. package/dist/production/src/validation/errors.js.map +1 -1
  145. package/dist/tests/cases/unit/jsonSchemaKeywords.test.d.ts +2 -0
  146. package/dist/tests/cases/unit/jsonSchemaKeywords.test.d.ts.map +1 -0
  147. package/dist/tests/cases/unit/jsonSchemaToTsType.test.d.ts +2 -0
  148. package/dist/tests/cases/unit/jsonSchemaToTsType.test.d.ts.map +1 -0
  149. package/dist/tests/cases/unit/numericColumnCodeGenerator.test.d.ts +2 -0
  150. package/dist/tests/cases/unit/numericColumnCodeGenerator.test.d.ts.map +1 -0
  151. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  152. package/dist/types/acl/index.d.ts +3 -3
  153. package/dist/types/acl/index.d.ts.map +1 -1
  154. package/dist/types/dataUtils.d.ts.map +1 -1
  155. package/dist/types/definition-generator/AclDefinitionCodeGenerator.d.ts +1 -1
  156. package/dist/types/definition-generator/AclDefinitionCodeGenerator.d.ts.map +1 -1
  157. package/dist/types/definition-generator/DefinitionCodeGenerator.d.ts +3 -3
  158. package/dist/types/definition-generator/DefinitionCodeGenerator.d.ts.map +1 -1
  159. package/dist/types/definition-generator/TsDefinitionGenerator.d.ts +1 -1
  160. package/dist/types/definition-generator/TsDefinitionGenerator.d.ts.map +1 -1
  161. package/dist/types/definition-generator/index.d.ts +4 -4
  162. package/dist/types/definition-generator/index.d.ts.map +1 -1
  163. package/dist/types/index.d.ts +11 -10
  164. package/dist/types/index.d.ts.map +1 -1
  165. package/dist/types/json-schema/collectUnsupportedKeywords.d.ts +20 -0
  166. package/dist/types/json-schema/collectUnsupportedKeywords.d.ts.map +1 -0
  167. package/dist/types/json-schema/index.d.ts +4 -0
  168. package/dist/types/json-schema/index.d.ts.map +1 -0
  169. package/dist/types/json-schema/jsonSchemaToTsType.d.ts +24 -0
  170. package/dist/types/json-schema/jsonSchemaToTsType.d.ts.map +1 -0
  171. package/dist/types/json-schema/keywords.d.ts +28 -0
  172. package/dist/types/json-schema/keywords.d.ts.map +1 -0
  173. package/dist/types/lax/LaxSchemaConverter.d.ts +2 -2
  174. package/dist/types/lax/LaxSchemaConverter.d.ts.map +1 -1
  175. package/dist/types/lax/index.d.ts +2 -2
  176. package/dist/types/lax/index.d.ts.map +1 -1
  177. package/dist/types/model/index.d.ts +3 -3
  178. package/dist/types/model/index.d.ts.map +1 -1
  179. package/dist/types/model/resolveDefaultColumnType.d.ts.map +1 -1
  180. package/dist/types/tsconfig.tsbuildinfo +1 -1
  181. package/dist/types/type-schema/index.d.ts +5 -5
  182. package/dist/types/type-schema/index.d.ts.map +1 -1
  183. package/dist/types/type-schema/model.d.ts.map +1 -1
  184. package/dist/types/type-schema/settings.d.ts +3 -0
  185. package/dist/types/type-schema/settings.d.ts.map +1 -1
  186. package/dist/types/utils/index.d.ts +3 -3
  187. package/dist/types/utils/index.d.ts.map +1 -1
  188. package/dist/types/validation/AclValidator.d.ts +1 -1
  189. package/dist/types/validation/AclValidator.d.ts.map +1 -1
  190. package/dist/types/validation/ActionsValidator.d.ts +1 -1
  191. package/dist/types/validation/ActionsValidator.d.ts.map +1 -1
  192. package/dist/types/validation/ModelValidator.d.ts +3 -1
  193. package/dist/types/validation/ModelValidator.d.ts.map +1 -1
  194. package/dist/types/validation/SchemaValidator.d.ts +1 -1
  195. package/dist/types/validation/SchemaValidator.d.ts.map +1 -1
  196. package/dist/types/validation/ValidationValidator.d.ts +1 -1
  197. package/dist/types/validation/ValidationValidator.d.ts.map +1 -1
  198. package/dist/types/validation/errors.d.ts +1 -1
  199. package/dist/types/validation/errors.d.ts.map +1 -1
  200. package/dist/types/validation/index.d.ts +6 -6
  201. package/dist/types/validation/index.d.ts.map +1 -1
  202. package/package.json +4 -4
  203. package/src/acl/PredicateDefinitionProcessor.ts +1 -1
  204. package/src/acl/index.ts +3 -3
  205. package/src/dataUtils.ts +1 -0
  206. package/src/definition-generator/AclDefinitionCodeGenerator.ts +3 -3
  207. package/src/definition-generator/DefinitionCodeGenerator.ts +44 -7
  208. package/src/definition-generator/TsDefinitionGenerator.ts +2 -2
  209. package/src/definition-generator/index.ts +4 -4
  210. package/src/index.ts +14 -13
  211. package/src/json-schema/collectUnsupportedKeywords.ts +74 -0
  212. package/src/json-schema/index.ts +3 -0
  213. package/src/json-schema/jsonSchemaToTsType.ts +188 -0
  214. package/src/json-schema/keywords.ts +79 -0
  215. package/src/lax/LaxSchemaConverter.ts +3 -3
  216. package/src/lax/index.ts +2 -2
  217. package/src/model/index.ts +3 -3
  218. package/src/model/modelUtils.ts +1 -1
  219. package/src/model/resolveDefaultColumnType.ts +3 -1
  220. package/src/schemaNormalizer.ts +1 -1
  221. package/src/type-schema/acl.ts +1 -1
  222. package/src/type-schema/condition.ts +5 -0
  223. package/src/type-schema/index.ts +5 -5
  224. package/src/type-schema/model.ts +12 -0
  225. package/src/type-schema/settings.ts +1 -0
  226. package/src/type-schema/where.ts +2 -2
  227. package/src/utils/index.ts +3 -3
  228. package/src/validation/AclValidator.ts +4 -4
  229. package/src/validation/ActionsValidator.ts +4 -4
  230. package/src/validation/MembershipResolver.ts +3 -3
  231. package/src/validation/ModelValidator.ts +80 -2
  232. package/src/validation/SchemaValidator.ts +5 -5
  233. package/src/validation/ValidationValidator.ts +2 -2
  234. package/src/validation/errors.ts +2 -0
  235. package/src/validation/index.ts +6 -6
  236. package/tests/cases/unit/conditionSchema.test.ts +1 -1
  237. package/tests/cases/unit/deepCompare.test.ts +1 -1
  238. package/tests/cases/unit/jsonSchemaKeywords.test.ts +91 -0
  239. package/tests/cases/unit/jsonSchemaToTsType.test.ts +55 -0
  240. package/tests/cases/unit/laxSchemaConverter.test.ts +1 -1
  241. package/tests/cases/unit/membershipResolver.test.ts +1 -1
  242. package/tests/cases/unit/modelSchema.test.ts +1 -1
  243. package/tests/cases/unit/modelValidator.test.ts +246 -1
  244. package/tests/cases/unit/numericColumnCodeGenerator.test.ts +69 -0
  245. package/tests/cases/unit/printJsvalue.test.ts +1 -1
  246. package/tests/cases/unit/tsDefinitionGenerator.test.ts +46 -9
  247. package/tests/cases/unit/whereSchema.test.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/type-schema/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/type-schema/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/type-schema/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAuOzC,eAAO,MAAM,WAAW;;;;;;;;;;;;;kCA7Je,OAAO;;;;;;;;;;;;;EAgK5C,CAAA"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/type-schema/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAmPzC,eAAO,MAAM,WAAW;;;;;;;;;;;;;kCAzKe,OAAO;;;;;;;;;;;;;EA4K5C,CAAA"}
@@ -8,6 +8,7 @@ export declare const settingsSchema: {
8
8
  readonly content?: {
9
9
  readonly useExistsInHasManyFilter?: boolean | undefined;
10
10
  readonly fullDateTimeResponse?: boolean | undefined;
11
+ readonly dateTimeResponseFormat?: "legacy" | "iso8601" | undefined;
11
12
  readonly shortDateResponse?: boolean | undefined;
12
13
  readonly uuidVersion?: 4 | 7 | undefined;
13
14
  } | undefined;
@@ -29,12 +30,14 @@ export declare const settingsSchema: {
29
30
  (input: unknown, path?: PropertyKey[]): {
30
31
  readonly useExistsInHasManyFilter?: boolean | undefined;
31
32
  readonly fullDateTimeResponse?: boolean | undefined;
33
+ readonly dateTimeResponseFormat?: "legacy" | "iso8601" | undefined;
32
34
  readonly shortDateResponse?: boolean | undefined;
33
35
  readonly uuidVersion?: 4 | 7 | undefined;
34
36
  };
35
37
  inner: {
36
38
  useExistsInHasManyFilter: Typesafe.Type<boolean>;
37
39
  fullDateTimeResponse: Typesafe.Type<boolean>;
40
+ dateTimeResponseFormat: Typesafe.Type<"legacy" | "iso8601">;
38
41
  shortDateResponse: Typesafe.Type<boolean>;
39
42
  uuidVersion: Typesafe.Type<4 | 7>;
40
43
  };
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/type-schema/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAG/C,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAezB,CAAA"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/type-schema/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAG/C,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgBzB,CAAA"}
@@ -1,4 +1,4 @@
1
- export * from './assertNever';
2
- export * from './isIt';
3
- export * from './deepCompare';
1
+ export * from './assertNever.js';
2
+ export * from './isIt.js';
3
+ export * from './deepCompare.js';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,QAAQ,CAAA;AACtB,cAAc,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,WAAW,CAAA;AACzB,cAAc,kBAAkB,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { Acl, Model } from '@contember/schema';
2
- import { ValidationError } from './errors';
2
+ import { ValidationError } from './errors.js';
3
3
  export declare class AclValidator {
4
4
  private readonly model;
5
5
  constructor(model: Model.Schema);
@@ -1 +1 @@
1
- {"version":3,"file":"AclValidator.d.ts","sourceRoot":"","sources":["../../../src/validation/AclValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAG9C,OAAO,EAAgB,eAAe,EAAE,MAAM,UAAU,CAAA;AAGxD,qBAAa,YAAY;IACZ,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK,CAAC,MAAM;IAEzC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,eAAe,EAAE;IAMtD,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,yBAAyB;IAoBjC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,2BAA2B;IAmCnC,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,wBAAwB;IAiBhC,OAAO,CAAC,iBAAiB;CAYzB"}
1
+ {"version":3,"file":"AclValidator.d.ts","sourceRoot":"","sources":["../../../src/validation/AclValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAG9C,OAAO,EAAgB,eAAe,EAAE,MAAM,aAAa,CAAA;AAG3D,qBAAa,YAAY;IACZ,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK,CAAC,MAAM;IAEzC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,eAAe,EAAE;IAMtD,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,yBAAyB;IAoBjC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,2BAA2B;IAmCnC,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,wBAAwB;IAiBhC,OAAO,CAAC,iBAAiB;CAYzB"}
@@ -1,5 +1,5 @@
1
1
  import { Actions, Model } from '@contember/schema';
2
- import { ValidationError } from './errors';
2
+ import { ValidationError } from './errors.js';
3
3
  export declare class ActionsValidator {
4
4
  private readonly model;
5
5
  constructor(model: Model.Schema);
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsValidator.d.ts","sourceRoot":"","sources":["../../../src/validation/ActionsValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,EAAgB,eAAe,EAAE,MAAM,UAAU,CAAA;AAaxD,qBAAa,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK,CAAC,MAAM;IAEzC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,eAAe,EAAE;IAM1D,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,iBAAiB;CAyCzB"}
1
+ {"version":3,"file":"ActionsValidator.d.ts","sourceRoot":"","sources":["../../../src/validation/ActionsValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,EAAgB,eAAe,EAAE,MAAM,aAAa,CAAA;AAa3D,qBAAa,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK,CAAC,MAAM;IAEzC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,eAAe,EAAE;IAM1D,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,iBAAiB;CAyCzB"}
@@ -1,5 +1,5 @@
1
1
  import { Model } from '@contember/schema';
2
- import { ValidationError } from './errors';
2
+ import { ValidationError } from './errors.js';
3
3
  export declare class ModelValidator {
4
4
  private readonly model;
5
5
  constructor(model: Model.Schema);
@@ -7,9 +7,11 @@ export declare class ModelValidator {
7
7
  private validateEnums;
8
8
  private validateEntities;
9
9
  private validateEntity;
10
+ private validateIndexes;
10
11
  private validateUniqueConstraints;
11
12
  private validateColumnNamesCollision;
12
13
  private validateField;
14
+ private validateColumnJsonSchema;
13
15
  private validateRelation;
14
16
  private validateIdentifier;
15
17
  private validateEntityName;
@@ -1 +1 @@
1
- {"version":3,"file":"ModelValidator.d.ts","sourceRoot":"","sources":["../../../src/validation/ModelValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAgB,eAAe,EAAE,MAAM,UAAU,CAAA;AAMxD,qBAAa,cAAc;IACd,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK,CAAC,MAAM;IAEzC,QAAQ,IAAI,eAAe,EAAE;IAQpC,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,yBAAyB;IAgBjC,OAAO,CAAC,4BAA4B;IA4BpC,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,gBAAgB;IAgIxB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,4BAA4B;IAgBpC,OAAO,CAAC,2BAA2B;IAwCnC,OAAO,CAAC,6BAA6B;CAwBrC"}
1
+ {"version":3,"file":"ModelValidator.d.ts","sourceRoot":"","sources":["../../../src/validation/ModelValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAgB,eAAe,EAAE,MAAM,aAAa,CAAA;AAS3D,qBAAa,cAAc;IACd,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK,CAAC,MAAM;IAEzC,QAAQ,IAAI,eAAe,EAAE;IAQpC,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,eAAe;IAwDvB,OAAO,CAAC,yBAAyB;IAgBjC,OAAO,CAAC,4BAA4B;IA4BpC,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,gBAAgB;IAgIxB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,4BAA4B;IAgBpC,OAAO,CAAC,2BAA2B;IAwCnC,OAAO,CAAC,6BAA6B;CAwBrC"}
@@ -1,5 +1,5 @@
1
1
  import { Schema } from '@contember/schema';
2
- import { ValidationError, ValidationErrorCode } from './errors';
2
+ import { ValidationError, ValidationErrorCode } from './errors.js';
3
3
  export interface SchemaValidatorSkippedErrors {
4
4
  readonly code: ValidationErrorCode;
5
5
  readonly skipUntil?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaValidator.d.ts","sourceRoot":"","sources":["../../../src/validation/SchemaValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAM/D,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAA;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,qBAAa,eAAe;WACb,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,GAAE,4BAA4B,EAAO,GAAG,eAAe,EAAE;CA0B7G"}
1
+ {"version":3,"file":"SchemaValidator.d.ts","sourceRoot":"","sources":["../../../src/validation/SchemaValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAMlE,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAA;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,qBAAa,eAAe;WACb,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,GAAE,4BAA4B,EAAO,GAAG,eAAe,EAAE;CA0B7G"}
@@ -1,5 +1,5 @@
1
1
  import { Model, Validation } from '@contember/schema';
2
- import { ValidationError } from './errors';
2
+ import { ValidationError } from './errors.js';
3
3
  export declare class ValidationValidator {
4
4
  private readonly model;
5
5
  constructor(model: Model.Schema);
@@ -1 +1 @@
1
- {"version":3,"file":"ValidationValidator.d.ts","sourceRoot":"","sources":["../../../src/validation/ValidationValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAgB,eAAe,EAAE,MAAM,UAAU,CAAA;AAGxD,qBAAa,mBAAmB;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK,CAAC,MAAM;IAEzC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,eAAe,EAAE;IAc7D,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,iBAAiB;IA4DzB,OAAO,CAAC,yBAAyB;IASjC,OAAO,CAAC,oBAAoB;CAe5B"}
1
+ {"version":3,"file":"ValidationValidator.d.ts","sourceRoot":"","sources":["../../../src/validation/ValidationValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAgB,eAAe,EAAE,MAAM,aAAa,CAAA;AAG3D,qBAAa,mBAAmB;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK,CAAC,MAAM;IAEzC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,eAAe,EAAE;IAc7D,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,iBAAiB;IA4DzB,OAAO,CAAC,yBAAyB;IASjC,OAAO,CAAC,oBAAoB;CAe5B"}
@@ -1,4 +1,4 @@
1
- export type ValidationErrorCode = 'MODEL_NAME_MISMATCH' | 'MODEL_UNDEFINED_FIELD' | 'MODEL_INVALID_FIELD' | 'MODEL_UNDEFINED_ENTITY' | 'MODEL_RELATION_REQUIRED' | 'MODEL_INVALID_RELATION_DEFINITION' | 'MODEL_INVALID_COLUMN_DEFINITION' | 'MODEL_INVALID_VIEW_USAGE' | 'MODEL_INVALID_IDENTIFIER' | 'MODEL_INVALID_ENTITY_NAME' | 'MODEL_INVALID_CONSTRAINT' | 'MODEL_NAME_COLLISION' | 'ACL_INVALID_CONDITION' | 'ACL_UNDEFINED_VARIABLE' | 'ACL_UNDEFINED_FIELD' | 'ACL_UNDEFINED_PREDICATE' | 'ACL_UNDEFINED_ROLE' | 'ACL_UNDEFINED_ENTITY' | 'ACTIONS_NAME_MISMATCH' | 'ACTIONS_INVALID_CONDITION' | 'ACTIONS_UNDEFINED_FIELD' | 'ACTIONS_UNDEFINED_ENTITY' | 'ACTIONS_UNDEFINED_TRIGGER_TARGET' | 'ACTIONS_INVALID_SELECTION' | 'VALIDATION_UNDEFINED_ENTITY' | 'VALIDATION_UNDEFINED_FIELD' | 'VALIDATION_NOT_IMPLEMENTED';
1
+ export type ValidationErrorCode = 'MODEL_NAME_MISMATCH' | 'MODEL_UNDEFINED_FIELD' | 'MODEL_INVALID_FIELD' | 'MODEL_UNDEFINED_ENTITY' | 'MODEL_RELATION_REQUIRED' | 'MODEL_INVALID_RELATION_DEFINITION' | 'MODEL_INVALID_COLUMN_DEFINITION' | 'MODEL_INVALID_JSON_SCHEMA' | 'MODEL_INVALID_VIEW_USAGE' | 'MODEL_INVALID_IDENTIFIER' | 'MODEL_INVALID_ENTITY_NAME' | 'MODEL_INVALID_CONSTRAINT' | 'MODEL_INVALID_INDEX' | 'MODEL_NAME_COLLISION' | 'ACL_INVALID_CONDITION' | 'ACL_UNDEFINED_VARIABLE' | 'ACL_UNDEFINED_FIELD' | 'ACL_UNDEFINED_PREDICATE' | 'ACL_UNDEFINED_ROLE' | 'ACL_UNDEFINED_ENTITY' | 'ACTIONS_NAME_MISMATCH' | 'ACTIONS_INVALID_CONDITION' | 'ACTIONS_UNDEFINED_FIELD' | 'ACTIONS_UNDEFINED_ENTITY' | 'ACTIONS_UNDEFINED_TRIGGER_TARGET' | 'ACTIONS_INVALID_SELECTION' | 'VALIDATION_UNDEFINED_ENTITY' | 'VALIDATION_UNDEFINED_FIELD' | 'VALIDATION_NOT_IMPLEMENTED';
2
2
  export interface ValidationError {
3
3
  path: (string | number)[];
4
4
  message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/validation/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAC5B,qBAAqB,GACrB,uBAAuB,GACvB,qBAAqB,GACrB,wBAAwB,GACxB,yBAAyB,GACzB,mCAAmC,GACnC,iCAAiC,GACjC,0BAA0B,GAC1B,0BAA0B,GAC1B,2BAA2B,GAC3B,0BAA0B,GAC1B,sBAAsB,GACtB,uBAAuB,GACvB,wBAAwB,GACxB,qBAAqB,GACrB,yBAAyB,GACzB,oBAAoB,GACpB,sBAAsB,GACtB,uBAAuB,GACvB,2BAA2B,GAC3B,yBAAyB,GACzB,0BAA0B,GAC1B,kCAAkC,GAClC,2BAA2B,GAC3B,6BAA6B,GAC7B,4BAA4B,GAC5B,4BAA4B,CAAA;AAE/B,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,mBAAmB,CAAA;CACzB;AAED,qBAAa,YAAY;aACI,MAAM,EAAE,eAAe,EAAE;IAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAhD,MAAM,EAAE,eAAe,EAAE,EAAmB,IAAI,GAAE,MAAM,EAAO;IAE3F,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY;IAIpC,GAAG,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;CAGrD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/validation/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAC5B,qBAAqB,GACrB,uBAAuB,GACvB,qBAAqB,GACrB,wBAAwB,GACxB,yBAAyB,GACzB,mCAAmC,GACnC,iCAAiC,GACjC,2BAA2B,GAC3B,0BAA0B,GAC1B,0BAA0B,GAC1B,2BAA2B,GAC3B,0BAA0B,GAC1B,qBAAqB,GACrB,sBAAsB,GACtB,uBAAuB,GACvB,wBAAwB,GACxB,qBAAqB,GACrB,yBAAyB,GACzB,oBAAoB,GACpB,sBAAsB,GACtB,uBAAuB,GACvB,2BAA2B,GAC3B,yBAAyB,GACzB,0BAA0B,GAC1B,kCAAkC,GAClC,2BAA2B,GAC3B,6BAA6B,GAC7B,4BAA4B,GAC5B,4BAA4B,CAAA;AAE/B,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,mBAAmB,CAAA;CACzB;AAED,qBAAa,YAAY;aACI,MAAM,EAAE,eAAe,EAAE;IAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAhD,MAAM,EAAE,eAAe,EAAE,EAAmB,IAAI,GAAE,MAAM,EAAO;IAE3F,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY;IAIpC,GAAG,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;CAGrD"}
@@ -1,7 +1,7 @@
1
- export * from './AclValidator';
2
- export * from './ModelValidator';
3
- export * from './ValidationValidator';
4
- export * from './errors';
5
- export * from './SchemaValidator';
6
- export * from './MembershipResolver';
1
+ export * from './AclValidator.js';
2
+ export * from './ModelValidator.js';
3
+ export * from './ValidationValidator.js';
4
+ export * from './errors.js';
5
+ export * from './SchemaValidator.js';
6
+ export * from './MembershipResolver.js';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/validation/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/validation/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,aAAa,CAAA;AAC3B,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contember/schema-utils",
3
- "version": "2.1.0-beta.2",
3
+ "version": "2.2.0-alpha.2",
4
4
  "license": "Apache-2.0",
5
5
  "main": "./dist/production/index.js",
6
6
  "typings": "./dist/types/index.d.ts",
@@ -23,11 +23,11 @@
23
23
  }
24
24
  },
25
25
  "dependencies": {
26
- "@contember/schema": "2.1.0-beta.1",
27
- "@contember/typesafe": "2.1.0-beta.1"
26
+ "@contember/schema": "2.1.0-beta.2",
27
+ "@contember/typesafe": "2.1.0-beta.2"
28
28
  },
29
29
  "devDependencies": {
30
- "@contember/schema-definition": "2.1.0-beta.1",
30
+ "@contember/schema-definition": "2.1.0-beta.2",
31
31
  "@types/node": "^24.12.0"
32
32
  },
33
33
  "type": "module",
@@ -1,4 +1,4 @@
1
- import { acceptFieldVisitor } from '../model'
1
+ import { acceptFieldVisitor } from '../model/index.js'
2
2
  import { Acl, Input, Model, Writable } from '@contember/schema'
3
3
 
4
4
  class PredicateDefinitionProcessor {
package/src/acl/index.ts CHANGED
@@ -1,3 +1,3 @@
1
- export * from './AllowAllPermissionFactory'
2
- export * from './PredicateDefinitionProcessor'
3
- export * from './schemaUtils'
1
+ export * from './AllowAllPermissionFactory.js'
2
+ export * from './PredicateDefinitionProcessor.js'
3
+ export * from './schemaUtils.js'
package/src/dataUtils.ts CHANGED
@@ -17,6 +17,7 @@ export const resolveDefaultValue = (column: Model.AnyColumn, providers: Pick<Pro
17
17
  case Model.ColumnType.Int:
18
18
  case Model.ColumnType.Enum:
19
19
  case Model.ColumnType.Double:
20
+ case Model.ColumnType.Numeric:
20
21
  case Model.ColumnType.Bool:
21
22
  case Model.ColumnType.Json:
22
23
  if (typeof column.default !== 'undefined') {
@@ -1,7 +1,7 @@
1
- import { PredicateDefinitionProcessor } from '../acl'
2
- import { IndentDecider, Literal, printJsValue } from '../utils/printJsValue'
1
+ import { PredicateDefinitionProcessor } from '../acl/index.js'
2
+ import { IndentDecider, Literal, printJsValue } from '../utils/printJsValue.js'
3
3
  import { Acl, Model, Schema } from '@contember/schema'
4
- import { DefinitionNamingConventions } from './DefinitionNamingConventions'
4
+ import { DefinitionNamingConventions } from './DefinitionNamingConventions.js'
5
5
 
6
6
  const indentFirstLevel: IndentDecider = (val, path) => path.length === 0
7
7
 
@@ -1,8 +1,8 @@
1
1
  import { Model, Schema, Writable } from '@contember/schema'
2
- import { acceptFieldVisitor, DefaultNamingConventions, isInverseRelation, NamingConventions, resolveDefaultColumnType } from '../model'
3
- import { printJsValue } from '../utils/printJsValue'
4
- import { DefinitionNamingConventions } from './DefinitionNamingConventions'
5
- import { AclDefinitionCodeGenerator } from './AclDefinitionCodeGenerator'
2
+ import { acceptFieldVisitor, DefaultNamingConventions, isInverseRelation, NamingConventions, resolveDefaultColumnType } from '../model/index.js'
3
+ import { printJsValue } from '../utils/printJsValue.js'
4
+ import { DefinitionNamingConventions } from './DefinitionNamingConventions.js'
5
+ import { AclDefinitionCodeGenerator } from './AclDefinitionCodeGenerator.js'
6
6
 
7
7
  export class DefinitionCodeGenerator {
8
8
  constructor(
@@ -45,9 +45,31 @@ ${Object.values(entity.fields).map(field => this.generateField({ field, entity,
45
45
  }
46
46
 
47
47
  private generateIndex({ entity, index }: { entity: Model.Entity; index: Model.Index }): string {
48
- const fieldsList = `${index.fields.map(it => printJsValue(it)).join(', ')}`
49
-
50
- return `@c.Index(${fieldsList})`
48
+ const hasColumnOptions = index.columnOptions !== undefined && Object.keys(index.columnOptions).length > 0
49
+ if (!index.method && !index.opClass && !index.where && !index.include?.length && !hasColumnOptions) {
50
+ return `@c.Index(${index.fields.map(it => printJsValue(it)).join(', ')})`
51
+ }
52
+ const options: Record<string, unknown> = {
53
+ fields: hasColumnOptions
54
+ ? index.fields.map(field => {
55
+ const columnOption = index.columnOptions?.[field]
56
+ return columnOption && Object.keys(columnOption).length > 0 ? { field, ...columnOption } : field
57
+ })
58
+ : index.fields,
59
+ }
60
+ if (index.method) {
61
+ options.method = index.method
62
+ }
63
+ if (index.opClass) {
64
+ options.opClass = index.opClass
65
+ }
66
+ if (index.include?.length) {
67
+ options.include = index.include
68
+ }
69
+ if (index.where) {
70
+ options.where = index.where
71
+ }
72
+ return `@c.Index(${printJsValue(options)})`
51
73
  }
52
74
 
53
75
  private generateView({ entity }: { entity: Model.Entity }): string | undefined {
@@ -190,6 +212,17 @@ ${Object.values(entity.fields).map(field => this.generateField({ field, entity,
190
212
  let parts: string[] = []
191
213
  if (column.type === Model.ColumnType.Enum) {
192
214
  parts.push(`enumColumn(${column.columnType})`)
215
+ } else if (column.type === Model.ColumnType.Numeric) {
216
+ // numericColumn requires precision and scale, parsed from e.g. "numeric(10, 2)"
217
+ const match = /numeric\s*\(\s*(\d+)\s*,\s*(\d+)\s*\)/i.exec(column.columnType)
218
+ if (match) {
219
+ parts.push(`numericColumn(${match[1]}, ${match[2]})`)
220
+ } else {
221
+ parts.push('numericColumn(30, 10)')
222
+ if (resolveDefaultColumnType(column.type) !== column.columnType) {
223
+ parts.push(`columnType(${printJsValue(column.columnType)})`)
224
+ }
225
+ }
193
226
  } else {
194
227
  parts.push(`${ColumnToMethodMapping[column.type]}()`)
195
228
  const defaultColumnType = resolveDefaultColumnType(column.type)
@@ -210,6 +243,9 @@ ${Object.values(entity.fields).map(field => this.generateField({ field, entity,
210
243
  if (column.typeAlias) {
211
244
  parts.push(`typeAlias(${printJsValue(column.typeAlias)})`)
212
245
  }
246
+ if (column.type === Model.ColumnType.Json && column.schema !== undefined) {
247
+ parts.push(`schema(${printJsValue(column.schema)})`)
248
+ }
213
249
 
214
250
  // todo: sequence
215
251
  // todo: maybe single column unique()
@@ -231,6 +267,7 @@ const ColumnToMethodMapping: {
231
267
  [Model.ColumnType.Time]: 'timeColumn',
232
268
  [Model.ColumnType.Json]: 'jsonColumn',
233
269
  [Model.ColumnType.Double]: 'doubleColumn',
270
+ [Model.ColumnType.Numeric]: 'numericColumn',
234
271
  [Model.ColumnType.Uuid]: 'uuidColumn',
235
272
  [Model.ColumnType.Int]: 'intColumn',
236
273
  [Model.ColumnType.String]: 'stringColumn',
@@ -1,6 +1,6 @@
1
1
  import { Schema } from '@contember/schema'
2
- import { DefaultNamingConventions, NamingConventions } from '../model'
3
- import { DefinitionCodeGenerator } from './DefinitionCodeGenerator'
2
+ import { DefaultNamingConventions, NamingConventions } from '../model/index.js'
3
+ import { DefinitionCodeGenerator } from './DefinitionCodeGenerator.js'
4
4
 
5
5
  /**
6
6
  * @deprecated use {@link DefinitionCodeGenerator}
@@ -1,4 +1,4 @@
1
- export * from './TsDefinitionGenerator'
2
- export * from './AclDefinitionCodeGenerator'
3
- export * from './DefinitionCodeGenerator'
4
- export * from './DefinitionNamingConventions'
1
+ export * from './TsDefinitionGenerator.js'
2
+ export * from './AclDefinitionCodeGenerator.js'
3
+ export * from './DefinitionCodeGenerator.js'
4
+ export * from './DefinitionNamingConventions.js'
package/src/index.ts CHANGED
@@ -1,19 +1,20 @@
1
1
  import { Schema } from '@contember/schema'
2
- import { emptyModelSchema } from './model'
2
+ import { emptyModelSchema } from './model/index.js'
3
3
  import * as Typesafe from '@contember/typesafe'
4
- import { aclSchema, modelSchema, settingsSchema, validationSchema } from './type-schema'
5
- import { actionsSchema } from './type-schema/actions'
4
+ import { aclSchema, modelSchema, settingsSchema, validationSchema } from './type-schema/index.js'
5
+ import { actionsSchema } from './type-schema/actions.js'
6
6
 
7
- export * from './definition-generator'
8
- export * from './lax'
9
- export * from './model'
10
- export * from './acl'
11
- export * from './dataUtils'
12
- export * from './validation'
13
- export * from './schemaNormalizer'
14
- export * from './schemaFilter'
15
- export * from './schemaChecksum'
16
- export { compareArraysIgnoreOrder, deepCompare } from './utils'
7
+ export * from './definition-generator/index.js'
8
+ export * from './json-schema/index.js'
9
+ export * from './lax/index.js'
10
+ export * from './model/index.js'
11
+ export * from './acl/index.js'
12
+ export * from './dataUtils.js'
13
+ export * from './validation/index.js'
14
+ export * from './schemaNormalizer.js'
15
+ export * from './schemaFilter.js'
16
+ export * from './schemaChecksum.js'
17
+ export { compareArraysIgnoreOrder, deepCompare } from './utils/index.js'
17
18
 
18
19
  export const emptySchema: Schema = {
19
20
  model: emptyModelSchema,
@@ -0,0 +1,74 @@
1
+ import { JSONValue } from '@contember/schema'
2
+ import { isRecognizedJsonSchemaKeyword } from './keywords.js'
3
+
4
+ export interface UnsupportedJsonSchemaKeyword {
5
+ /** The offending keyword, e.g. `$ref` or `format`. */
6
+ keyword: string
7
+ /** JSON pointer to the (sub)schema that contains the keyword, e.g. `` (root), `/properties/foo`. */
8
+ path: string
9
+ }
10
+
11
+ const isPlainObject = (value: JSONValue): value is { readonly [key: string]: JSONValue } =>
12
+ typeof value === 'object' && value !== null && !Array.isArray(value)
13
+
14
+ /**
15
+ * Recursively walks a supplied JSON Schema and collects every keyword that is neither
16
+ * {@link SUPPORTED_JSON_SCHEMA_KEYWORDS supported} nor an
17
+ * {@link ALLOWED_JSON_SCHEMA_ANNOTATION_KEYWORDS allowed annotation}.
18
+ *
19
+ * Descends into the applicator keywords the validator itself understands — `properties`, `items`,
20
+ * `additionalProperties`, `allOf`, `anyOf`, `oneOf`, `not` — so that an unsupported keyword buried in
21
+ * a nested subschema is still reported (with a JSON pointer to its location).
22
+ *
23
+ * A boolean schema (`true`/`false`) is valid and yields no findings.
24
+ */
25
+ export const collectUnsupportedJsonSchemaKeywords = (schema: JSONValue): UnsupportedJsonSchemaKeyword[] => {
26
+ const result: UnsupportedJsonSchemaKeyword[] = []
27
+ walk(schema, '', result)
28
+ return result
29
+ }
30
+
31
+ const walk = (schema: JSONValue, path: string, result: UnsupportedJsonSchemaKeyword[]): void => {
32
+ if (!isPlainObject(schema)) {
33
+ // boolean schema, or a non-schema leaf reached via a forgiving descent – nothing to check
34
+ return
35
+ }
36
+
37
+ for (const keyword of Object.keys(schema)) {
38
+ if (!isRecognizedJsonSchemaKeyword(keyword)) {
39
+ result.push({ keyword, path })
40
+ }
41
+ }
42
+
43
+ // object subschemas
44
+ const properties = schema.properties
45
+ if (isPlainObject(properties)) {
46
+ for (const key of Object.keys(properties)) {
47
+ walk(properties[key], `${path}/properties/${key}`, result)
48
+ }
49
+ }
50
+
51
+ // `additionalProperties` may be a boolean or a subschema
52
+ if (isPlainObject(schema.additionalProperties)) {
53
+ walk(schema.additionalProperties, `${path}/additionalProperties`, result)
54
+ }
55
+
56
+ // `items` (draft-07 single schema). Tolerate an array form too so we still descend.
57
+ const items = schema.items
58
+ if (Array.isArray(items)) {
59
+ items.forEach((item, index) => walk(item, `${path}/items/${index}`, result))
60
+ } else if (items !== undefined) {
61
+ walk(items, `${path}/items`, result)
62
+ }
63
+
64
+ // combinators
65
+ for (const combinator of ['allOf', 'anyOf', 'oneOf'] as const) {
66
+ const subSchemas = schema[combinator]
67
+ if (Array.isArray(subSchemas)) {
68
+ subSchemas.forEach((sub, index) => walk(sub, `${path}/${combinator}/${index}`, result))
69
+ }
70
+ }
71
+ if (schema.not !== undefined) {
72
+ walk(schema.not, `${path}/not`, result)
73
+ }
74
+ }
@@ -0,0 +1,3 @@
1
+ export * from './keywords.js'
2
+ export * from './collectUnsupportedKeywords.js'
3
+ export * from './jsonSchemaToTsType.js'