@contember/schema-utils 2.0.2 → 2.1.0-alpha.10

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 (126) hide show
  1. package/dist/development/index.cjs +0 -1
  2. package/dist/development/index.cjs.map +1 -1
  3. package/dist/development/index.js +1 -2
  4. package/dist/development/src/dataUtils.cjs +9 -9
  5. package/dist/development/src/dataUtils.cjs.map +1 -1
  6. package/dist/development/src/dataUtils.js +10 -10
  7. package/dist/development/src/dataUtils.js.map +1 -1
  8. package/dist/development/src/definition-generator/DefinitionCodeGenerator.cjs +1 -0
  9. package/dist/development/src/definition-generator/DefinitionCodeGenerator.cjs.map +1 -1
  10. package/dist/development/src/definition-generator/DefinitionCodeGenerator.js +1 -0
  11. package/dist/development/src/definition-generator/DefinitionCodeGenerator.js.map +1 -1
  12. package/dist/development/src/model/modelUtils.cjs +1 -1
  13. package/dist/development/src/model/modelUtils.cjs.map +1 -1
  14. package/dist/development/src/model/modelUtils.js +1 -1
  15. package/dist/development/src/model/modelUtils.js.map +1 -1
  16. package/dist/development/src/model/resolveDefaultColumnType.cjs +2 -0
  17. package/dist/development/src/model/resolveDefaultColumnType.cjs.map +1 -1
  18. package/dist/development/src/model/resolveDefaultColumnType.js +2 -0
  19. package/dist/development/src/model/resolveDefaultColumnType.js.map +1 -1
  20. package/dist/development/src/schemaNormalizer.cjs +2 -0
  21. package/dist/development/src/schemaNormalizer.cjs.map +1 -1
  22. package/dist/development/src/schemaNormalizer.js +2 -0
  23. package/dist/development/src/schemaNormalizer.js.map +1 -1
  24. package/dist/development/src/type-schema/acl.cjs +3 -1
  25. package/dist/development/src/type-schema/acl.cjs.map +1 -1
  26. package/dist/development/src/type-schema/acl.js +3 -1
  27. package/dist/development/src/type-schema/acl.js.map +1 -1
  28. package/dist/development/src/type-schema/condition.cjs +2 -0
  29. package/dist/development/src/type-schema/condition.cjs.map +1 -1
  30. package/dist/development/src/type-schema/condition.js +2 -0
  31. package/dist/development/src/type-schema/condition.js.map +1 -1
  32. package/dist/development/src/type-schema/model.cjs +25 -8
  33. package/dist/development/src/type-schema/model.cjs.map +1 -1
  34. package/dist/development/src/type-schema/model.js +25 -8
  35. package/dist/development/src/type-schema/model.js.map +1 -1
  36. package/dist/development/src/type-schema/settings.cjs +2 -1
  37. package/dist/development/src/type-schema/settings.cjs.map +1 -1
  38. package/dist/development/src/type-schema/settings.js +2 -1
  39. package/dist/development/src/type-schema/settings.js.map +1 -1
  40. package/dist/development/src/validation/ModelValidator.cjs +10 -10
  41. package/dist/development/src/validation/ModelValidator.cjs.map +1 -1
  42. package/dist/development/src/validation/ModelValidator.js +11 -11
  43. package/dist/development/src/validation/ModelValidator.js.map +1 -1
  44. package/dist/development/src/validation/errors.cjs.map +1 -1
  45. package/dist/development/src/validation/errors.js.map +1 -1
  46. package/dist/production/index.cjs +0 -1
  47. package/dist/production/index.cjs.map +1 -1
  48. package/dist/production/index.js +1 -2
  49. package/dist/production/src/dataUtils.cjs +9 -9
  50. package/dist/production/src/dataUtils.cjs.map +1 -1
  51. package/dist/production/src/dataUtils.js +10 -10
  52. package/dist/production/src/dataUtils.js.map +1 -1
  53. package/dist/production/src/definition-generator/DefinitionCodeGenerator.cjs +1 -0
  54. package/dist/production/src/definition-generator/DefinitionCodeGenerator.cjs.map +1 -1
  55. package/dist/production/src/definition-generator/DefinitionCodeGenerator.js +1 -0
  56. package/dist/production/src/definition-generator/DefinitionCodeGenerator.js.map +1 -1
  57. package/dist/production/src/model/modelUtils.cjs +1 -1
  58. package/dist/production/src/model/modelUtils.cjs.map +1 -1
  59. package/dist/production/src/model/modelUtils.js +1 -1
  60. package/dist/production/src/model/modelUtils.js.map +1 -1
  61. package/dist/production/src/model/resolveDefaultColumnType.cjs +2 -0
  62. package/dist/production/src/model/resolveDefaultColumnType.cjs.map +1 -1
  63. package/dist/production/src/model/resolveDefaultColumnType.js +2 -0
  64. package/dist/production/src/model/resolveDefaultColumnType.js.map +1 -1
  65. package/dist/production/src/schemaNormalizer.cjs +2 -0
  66. package/dist/production/src/schemaNormalizer.cjs.map +1 -1
  67. package/dist/production/src/schemaNormalizer.js +2 -0
  68. package/dist/production/src/schemaNormalizer.js.map +1 -1
  69. package/dist/production/src/type-schema/acl.cjs +3 -1
  70. package/dist/production/src/type-schema/acl.cjs.map +1 -1
  71. package/dist/production/src/type-schema/acl.js +3 -1
  72. package/dist/production/src/type-schema/acl.js.map +1 -1
  73. package/dist/production/src/type-schema/condition.cjs +2 -0
  74. package/dist/production/src/type-schema/condition.cjs.map +1 -1
  75. package/dist/production/src/type-schema/condition.js +2 -0
  76. package/dist/production/src/type-schema/condition.js.map +1 -1
  77. package/dist/production/src/type-schema/model.cjs +25 -8
  78. package/dist/production/src/type-schema/model.cjs.map +1 -1
  79. package/dist/production/src/type-schema/model.js +25 -8
  80. package/dist/production/src/type-schema/model.js.map +1 -1
  81. package/dist/production/src/type-schema/settings.cjs +2 -1
  82. package/dist/production/src/type-schema/settings.cjs.map +1 -1
  83. package/dist/production/src/type-schema/settings.js +2 -1
  84. package/dist/production/src/type-schema/settings.js.map +1 -1
  85. package/dist/production/src/validation/ModelValidator.cjs +10 -10
  86. package/dist/production/src/validation/ModelValidator.cjs.map +1 -1
  87. package/dist/production/src/validation/ModelValidator.js +11 -11
  88. package/dist/production/src/validation/ModelValidator.js.map +1 -1
  89. package/dist/production/src/validation/errors.cjs.map +1 -1
  90. package/dist/production/src/validation/errors.js.map +1 -1
  91. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  92. package/dist/types/acl/schemaUtils.d.ts.map +1 -1
  93. package/dist/types/dataUtils.d.ts +7 -4
  94. package/dist/types/dataUtils.d.ts.map +1 -1
  95. package/dist/types/model/modelUtils.d.ts.map +1 -1
  96. package/dist/types/model/resolveDefaultColumnType.d.ts.map +1 -1
  97. package/dist/types/schemaChecksum.d.ts.map +1 -1
  98. package/dist/types/schemaFilter.d.ts.map +1 -1
  99. package/dist/types/schemaNormalizer.d.ts.map +1 -1
  100. package/dist/types/tsconfig.tsbuildinfo +1 -1
  101. package/dist/types/type-schema/acl.d.ts.map +1 -1
  102. package/dist/types/type-schema/condition.d.ts.map +1 -1
  103. package/dist/types/type-schema/model.d.ts +1 -1
  104. package/dist/types/type-schema/model.d.ts.map +1 -1
  105. package/dist/types/type-schema/settings.d.ts +3 -0
  106. package/dist/types/type-schema/settings.d.ts.map +1 -1
  107. package/dist/types/type-schema/where.d.ts.map +1 -1
  108. package/dist/types/utils/deepCompare.d.ts.map +1 -1
  109. package/dist/types/utils/isIt.d.ts.map +1 -1
  110. package/dist/types/utils/printJsValue.d.ts.map +1 -1
  111. package/dist/types/validation/ModelValidator.d.ts.map +1 -1
  112. package/dist/types/validation/errors.d.ts +1 -1
  113. package/dist/types/validation/errors.d.ts.map +1 -1
  114. package/package.json +5 -5
  115. package/src/dataUtils.ts +12 -9
  116. package/src/definition-generator/DefinitionCodeGenerator.ts +2 -1
  117. package/src/model/modelUtils.ts +1 -1
  118. package/src/model/resolveDefaultColumnType.ts +2 -0
  119. package/src/schemaNormalizer.ts +2 -0
  120. package/src/type-schema/acl.ts +2 -0
  121. package/src/type-schema/condition.ts +1 -0
  122. package/src/type-schema/model.ts +25 -6
  123. package/src/type-schema/settings.ts +1 -0
  124. package/src/validation/ModelValidator.ts +11 -11
  125. package/src/validation/errors.ts +2 -0
  126. package/tests/cases/unit/modelValidator.test.ts +19 -0
@@ -1 +1 @@
1
- {"version":3,"file":"schemaNormalizer.cjs","sources":["../../../../packages/schema-utils/src/schemaNormalizer.ts"],"sourcesContent":["import { Acl, ProjectRole, Schema } from '@contember/schema'\nimport { AllowAllPermissionFactory } from './acl'\n\nexport const normalizeSchema = <S extends Schema>(schema: S): S => {\n\tconst adminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.ADMIN] ?? {}\n\tconst contentAdminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.CONTENT_ADMIN] ?? {}\n\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: {\n\t\t\t\t...schema.acl.roles,\n\t\t\t\t[ProjectRole.ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\tdebug: true,\n\t\t\t\t\t...adminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.CONTENT_ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\thistory: true,\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\t...contentAdminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.DEPLOYER]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tentities: {},\n\t\t\t\t\tvariables: {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"],"names":["schema","ProjectRole","AllowAllPermissionFactory"],"mappings":";;;;AAGa,MAAA,kBAAkB,CAAmBA,aAAiB;AAClE,QAAM,sBAAoDA,SAAO,IAAI,QAAQC,OAAY,YAAA,KAAK,KAAK,CAAC;AACpG,QAAM,6BAA2DD,SAAO,IAAI,QAAQC,OAAY,YAAA,aAAa,KAAK,CAAC;AAE5G,SAAA;AAAA,IACN,GAAGD;AAAAA,IACH,KAAK;AAAA,MACJ,GAAGA,SAAO;AAAA,MACV,OAAO;AAAA,QACN,GAAGA,SAAO,IAAI;AAAA,QACd,CAACC,OAAAA,YAAY,KAAK,GAAG;AAAA,UACpB,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAIC,0BAAA,0BAAA,EAA4B,OAAOF,SAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,QAAQ;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,OAAO;AAAA,UACP,GAAG;AAAA,QACJ;AAAA,QACA,CAACC,OAAAA,YAAY,aAAa,GAAG;AAAA,UAC5B,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAIC,0BAAA,0BAAA,EAA4B,OAAOF,SAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,QAAQ;AAAA,YACP,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,GAAG;AAAA,QACJ;AAAA,QACA,CAACC,OAAAA,YAAY,QAAQ,GAAG;AAAA,UACvB,QAAQ;AAAA,UACR,UAAU,CAAC;AAAA,UACX,WAAW,CAAA;AAAA,QAAC;AAAA,MACb;AAAA,IACD;AAAA,EAEF;AACD;;"}
1
+ {"version":3,"file":"schemaNormalizer.cjs","sources":["../../../../packages/schema-utils/src/schemaNormalizer.ts"],"sourcesContent":["import { Acl, ProjectRole, Schema } from '@contember/schema'\nimport { AllowAllPermissionFactory } from './acl'\n\nexport const normalizeSchema = <S extends Schema>(schema: S): S => {\n\tconst adminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.ADMIN] ?? {}\n\tconst contentAdminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.CONTENT_ADMIN] ?? {}\n\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: {\n\t\t\t\t...schema.acl.roles,\n\t\t\t\t[ProjectRole.ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\trefreshMaterializedView: true,\n\t\t\t\t\t\t...adminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\tdebug: true,\n\t\t\t\t\t...adminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.CONTENT_ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\trefreshMaterializedView: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\thistory: true,\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\t...contentAdminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.DEPLOYER]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tentities: {},\n\t\t\t\t\tvariables: {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"],"names":["schema","ProjectRole","AllowAllPermissionFactory"],"mappings":";;;;AAGa,MAAA,kBAAkB,CAAmBA,aAAiB;AAClE,QAAM,sBAAoDA,SAAO,IAAI,QAAQC,OAAY,YAAA,KAAK,KAAK,CAAC;AACpG,QAAM,6BAA2DD,SAAO,IAAI,QAAQC,OAAY,YAAA,aAAa,KAAK,CAAC;AAE5G,SAAA;AAAA,IACN,GAAGD;AAAAA,IACH,KAAK;AAAA,MACJ,GAAGA,SAAO;AAAA,MACV,OAAO;AAAA,QACN,GAAGA,SAAO,IAAI;AAAA,QACd,CAACC,OAAAA,YAAY,KAAK,GAAG;AAAA,UACpB,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAIC,0BAAA,0BAAA,EAA4B,OAAOF,SAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,yBAAyB;AAAA,YACzB,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,QAAQ;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,OAAO;AAAA,UACP,GAAG;AAAA,QACJ;AAAA,QACA,CAACC,OAAAA,YAAY,aAAa,GAAG;AAAA,UAC5B,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAIC,0BAAA,0BAAA,EAA4B,OAAOF,SAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,yBAAyB;AAAA,YACzB,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,QAAQ;AAAA,YACP,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,GAAG;AAAA,QACJ;AAAA,QACA,CAACC,OAAAA,YAAY,QAAQ,GAAG;AAAA,UACvB,QAAQ;AAAA,UACR,UAAU,CAAC;AAAA,UACX,WAAW,CAAA;AAAA,QAAC;AAAA,MACb;AAAA,IACD;AAAA,EAEF;AACD;;"}
@@ -22,6 +22,7 @@ const normalizeSchema = (schema) => {
22
22
  content: {
23
23
  export: true,
24
24
  import: true,
25
+ refreshMaterializedView: true,
25
26
  ...adminRoleDefinition.content
26
27
  },
27
28
  system: {
@@ -45,6 +46,7 @@ const normalizeSchema = (schema) => {
45
46
  content: {
46
47
  export: true,
47
48
  import: true,
49
+ refreshMaterializedView: true,
48
50
  ...contentAdminRoleDefinition.content
49
51
  },
50
52
  system: {
@@ -1 +1 @@
1
- {"version":3,"file":"schemaNormalizer.js","sources":["../../../../packages/schema-utils/src/schemaNormalizer.ts"],"sourcesContent":["import { Acl, ProjectRole, Schema } from '@contember/schema'\nimport { AllowAllPermissionFactory } from './acl'\n\nexport const normalizeSchema = <S extends Schema>(schema: S): S => {\n\tconst adminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.ADMIN] ?? {}\n\tconst contentAdminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.CONTENT_ADMIN] ?? {}\n\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: {\n\t\t\t\t...schema.acl.roles,\n\t\t\t\t[ProjectRole.ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\tdebug: true,\n\t\t\t\t\t...adminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.CONTENT_ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\thistory: true,\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\t...contentAdminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.DEPLOYER]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tentities: {},\n\t\t\t\t\tvariables: {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"],"names":[],"mappings":";;AAGa,MAAA,kBAAkB,CAAmB,WAAiB;AAClE,QAAM,sBAAoD,OAAO,IAAI,QAAQ,YAAY,KAAK,KAAK,CAAC;AACpG,QAAM,6BAA2D,OAAO,IAAI,QAAQ,YAAY,aAAa,KAAK,CAAC;AAE5G,SAAA;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,MACJ,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,QACN,GAAG,OAAO,IAAI;AAAA,QACd,CAAC,YAAY,KAAK,GAAG;AAAA,UACpB,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAI,0BAAA,EAA4B,OAAO,OAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,QAAQ;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,OAAO;AAAA,UACP,GAAG;AAAA,QACJ;AAAA,QACA,CAAC,YAAY,aAAa,GAAG;AAAA,UAC5B,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAI,0BAAA,EAA4B,OAAO,OAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,QAAQ;AAAA,YACP,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,GAAG;AAAA,QACJ;AAAA,QACA,CAAC,YAAY,QAAQ,GAAG;AAAA,UACvB,QAAQ;AAAA,UACR,UAAU,CAAC;AAAA,UACX,WAAW,CAAA;AAAA,QAAC;AAAA,MACb;AAAA,IACD;AAAA,EAEF;AACD;"}
1
+ {"version":3,"file":"schemaNormalizer.js","sources":["../../../../packages/schema-utils/src/schemaNormalizer.ts"],"sourcesContent":["import { Acl, ProjectRole, Schema } from '@contember/schema'\nimport { AllowAllPermissionFactory } from './acl'\n\nexport const normalizeSchema = <S extends Schema>(schema: S): S => {\n\tconst adminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.ADMIN] ?? {}\n\tconst contentAdminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.CONTENT_ADMIN] ?? {}\n\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: {\n\t\t\t\t...schema.acl.roles,\n\t\t\t\t[ProjectRole.ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\trefreshMaterializedView: true,\n\t\t\t\t\t\t...adminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\tdebug: true,\n\t\t\t\t\t...adminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.CONTENT_ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\trefreshMaterializedView: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\thistory: true,\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\t...contentAdminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.DEPLOYER]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tentities: {},\n\t\t\t\t\tvariables: {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"],"names":[],"mappings":";;AAGa,MAAA,kBAAkB,CAAmB,WAAiB;AAClE,QAAM,sBAAoD,OAAO,IAAI,QAAQ,YAAY,KAAK,KAAK,CAAC;AACpG,QAAM,6BAA2D,OAAO,IAAI,QAAQ,YAAY,aAAa,KAAK,CAAC;AAE5G,SAAA;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,MACJ,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,QACN,GAAG,OAAO,IAAI;AAAA,QACd,CAAC,YAAY,KAAK,GAAG;AAAA,UACpB,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAI,0BAAA,EAA4B,OAAO,OAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,yBAAyB;AAAA,YACzB,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,QAAQ;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,OAAO;AAAA,UACP,GAAG;AAAA,QACJ;AAAA,QACA,CAAC,YAAY,aAAa,GAAG;AAAA,UAC5B,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAI,0BAAA,EAA4B,OAAO,OAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,yBAAyB;AAAA,YACzB,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,QAAQ;AAAA,YACP,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,GAAG;AAAA,QACJ;AAAA,QACA,CAAC,YAAY,QAAQ,GAAG;AAAA,UACvB,QAAQ;AAAA,UACR,UAAU,CAAC;AAAA,UACX,WAAW,CAAA;AAAA,QAAC;AAAA,MACb;AAAA,IACD;AAAA,EAEF;AACD;"}
@@ -51,7 +51,8 @@ const systemPermissionsSchema = Typesafe__namespace.partial({
51
51
  const contentPermissionsSchema = Typesafe__namespace.partial({
52
52
  assumeMembership: membershipMatchRuleSchema,
53
53
  export: Typesafe__namespace.boolean,
54
- import: Typesafe__namespace.boolean
54
+ import: Typesafe__namespace.boolean,
55
+ refreshMaterializedView: Typesafe__namespace.boolean
55
56
  });
56
57
  const entityVariableSchema = Typesafe__namespace.intersection(
57
58
  Typesafe__namespace.object({
@@ -96,6 +97,7 @@ const entityOperationsSchema = Typesafe__namespace.partial({
96
97
  update: fieldPermissionsSchema,
97
98
  delete: Typesafe__namespace.union(Typesafe__namespace.string, Typesafe__namespace.boolean),
98
99
  customPrimary: Typesafe__namespace.boolean,
100
+ refreshMaterializedView: Typesafe__namespace.boolean,
99
101
  noRoot: Typesafe__namespace.array(Typesafe__namespace.enumeration("create", "read", "update", "delete"))
100
102
  });
101
103
  const entitiesSchema = Typesafe__namespace.record(
@@ -1 +1 @@
1
- {"version":3,"file":"acl.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/acl.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport * as Typesafe from '@contember/typesafe'\nimport { conditionSchema } from './condition'\n\nconst membershipMatchRuleSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tTypesafe.literal(true),\n\t\tTypesafe.partial({\n\t\t\tvariables: Typesafe.union(\n\t\t\t\tTypesafe.literal(true),\n\t\t\t\tTypesafe.record(\n\t\t\t\t\tTypesafe.string,\n\t\t\t\t\tTypesafe.union(Typesafe.literal(true), Typesafe.string),\n\t\t\t\t),\n\t\t\t),\n\t\t}),\n\t),\n)\n\nconst tenantPermissionsSchema = Typesafe.partial({\n\tinvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tunmanagedInvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tmanage: membershipMatchRuleSchema,\n\tview: membershipMatchRuleSchema,\n})\nconst tenantSchemaCheck: Typesafe.Equals<Acl.TenantPermissions, ReturnType<typeof tenantPermissionsSchema>> = true\n\nconst systemPermissionsSchema = Typesafe.partial({\n\thistory: Typesafe.union(Typesafe.boolean, Typesafe.enumeration('any', 'none')),\n\tmigrate: Typesafe.boolean,\n\tassumeIdentity: Typesafe.boolean,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst systemSchemaCheck: Typesafe.Equals<Acl.SystemPermissions, ReturnType<typeof systemPermissionsSchema>> = true\n\nconst contentPermissionsSchema = Typesafe.partial({\n\tassumeMembership: membershipMatchRuleSchema,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst contentSchemaCheck: Typesafe.Equals<Acl.ContentPermissions, ReturnType<typeof contentPermissionsSchema>> = true\n\nconst entityVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.entity),\n\t\tentityName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst entityVariableSchemaCheck: Typesafe.Equals<Acl.EntityVariable, ReturnType<typeof entityVariableSchema>> = true\n\nconst predefinedVariableSchema = Typesafe.object({\n\ttype: Typesafe.literal(Acl.VariableType.predefined),\n\tvalue: Typesafe.enumeration('identityID', 'personID'),\n})\nconst conditionVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.condition),\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst conditionVariableSchemaCheck: Typesafe.Equals<Acl.ConditionVariable, ReturnType<typeof conditionVariableSchema>> = true\n\nconst variablesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tentityVariableSchema as Typesafe.Type<Acl.EntityVariable>,\n\t\tpredefinedVariableSchema,\n\t\tconditionVariableSchema as Typesafe.Type<Acl.ConditionVariable>,\n\t),\n)\n\nconst variableSchemaCheck: Typesafe.Equals<Acl.Variables, ReturnType<typeof variablesSchema>> = true\n\nconst fieldPermissionsSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(Typesafe.string, Typesafe.boolean),\n)\nconst predicatesSchema = Typesafe.record(\n\tTypesafe.string,\n\t(v, p): Acl.PredicateDefinition => Typesafe.anyJsonObject(v, p) as Acl.PredicateDefinition,\n)\n\nconst predicatesSchemaCheck: Typesafe.Equals<Acl.PredicateMap, ReturnType<typeof predicatesSchema>> = true\n\nconst entityOperationsSchema = Typesafe.partial({\n\tread: fieldPermissionsSchema,\n\tcreate: fieldPermissionsSchema,\n\tupdate: fieldPermissionsSchema,\n\tdelete: Typesafe.union(Typesafe.string, Typesafe.boolean),\n\tcustomPrimary: Typesafe.boolean,\n\tnoRoot: Typesafe.array(Typesafe.enumeration('create', 'read', 'update', 'delete')),\n})\n\nconst opSchemaCheck: Typesafe.Equals<Acl.EntityOperations, ReturnType<typeof entityOperationsSchema>> = true\nconst entitiesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.object({\n\t\tpredicates: predicatesSchema,\n\t\toperations: entityOperationsSchema,\n\t}),\n)\nconst entitiesSchemaCheck: Typesafe.Equals<Acl.Permissions, ReturnType<typeof entitiesSchema>> = true\n\nconst baseRolePermissionsSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvariables: variablesSchema,\n\t\tentities: entitiesSchema,\n\t}),\n\tTypesafe.partial({\n\t\tinherits: Typesafe.array(Typesafe.string),\n\t\timplicit: Typesafe.boolean,\n\t\tstages: Typesafe.union(\n\t\t\tTypesafe.literal('*'),\n\t\t\tTypesafe.array(Typesafe.string),\n\t\t),\n\t\ttenant: tenantPermissionsSchema,\n\t\tsystem: systemPermissionsSchema,\n\t\tcontent: contentPermissionsSchema,\n\t\tdebug: Typesafe.boolean,\n\t}),\n)\nconst baseRolePermissionsCheck: Typesafe.Equals<Acl.BaseRolePermissions, ReturnType<typeof baseRolePermissionsSchema>> = true\n\nexport const aclSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\troles: Typesafe.record(\n\t\t\tTypesafe.string,\n\t\t\t(v, p): Acl.RolePermissions => {\n\t\t\t\tconst main: Acl.BaseRolePermissions = baseRolePermissionsSchema(v, p)\n\t\t\t\treturn {\n\t\t\t\t\t...(v as any),\n\t\t\t\t\t...main,\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t}),\n\tTypesafe.partial({\n\t\tcustomPrimary: Typesafe.boolean,\n\t}),\n)\nconst aclSchemaCheck: Typesafe.Equals<Acl.Schema, ReturnType<typeof aclSchema>> = true\n"],"names":["Typesafe","Acl","conditionSchema"],"mappings":"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"}
1
+ {"version":3,"file":"acl.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/acl.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport * as Typesafe from '@contember/typesafe'\nimport { conditionSchema } from './condition'\n\nconst membershipMatchRuleSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tTypesafe.literal(true),\n\t\tTypesafe.partial({\n\t\t\tvariables: Typesafe.union(\n\t\t\t\tTypesafe.literal(true),\n\t\t\t\tTypesafe.record(\n\t\t\t\t\tTypesafe.string,\n\t\t\t\t\tTypesafe.union(Typesafe.literal(true), Typesafe.string),\n\t\t\t\t),\n\t\t\t),\n\t\t}),\n\t),\n)\n\nconst tenantPermissionsSchema = Typesafe.partial({\n\tinvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tunmanagedInvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tmanage: membershipMatchRuleSchema,\n\tview: membershipMatchRuleSchema,\n})\nconst tenantSchemaCheck: Typesafe.Equals<Acl.TenantPermissions, ReturnType<typeof tenantPermissionsSchema>> = true\n\nconst systemPermissionsSchema = Typesafe.partial({\n\thistory: Typesafe.union(Typesafe.boolean, Typesafe.enumeration('any', 'none')),\n\tmigrate: Typesafe.boolean,\n\tassumeIdentity: Typesafe.boolean,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst systemSchemaCheck: Typesafe.Equals<Acl.SystemPermissions, ReturnType<typeof systemPermissionsSchema>> = true\n\nconst contentPermissionsSchema = Typesafe.partial({\n\tassumeMembership: membershipMatchRuleSchema,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n\trefreshMaterializedView: Typesafe.boolean,\n})\nconst contentSchemaCheck: Typesafe.Equals<Acl.ContentPermissions, ReturnType<typeof contentPermissionsSchema>> = true\n\nconst entityVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.entity),\n\t\tentityName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst entityVariableSchemaCheck: Typesafe.Equals<Acl.EntityVariable, ReturnType<typeof entityVariableSchema>> = true\n\nconst predefinedVariableSchema = Typesafe.object({\n\ttype: Typesafe.literal(Acl.VariableType.predefined),\n\tvalue: Typesafe.enumeration('identityID', 'personID'),\n})\nconst conditionVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.condition),\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst conditionVariableSchemaCheck: Typesafe.Equals<Acl.ConditionVariable, ReturnType<typeof conditionVariableSchema>> = true\n\nconst variablesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tentityVariableSchema as Typesafe.Type<Acl.EntityVariable>,\n\t\tpredefinedVariableSchema,\n\t\tconditionVariableSchema as Typesafe.Type<Acl.ConditionVariable>,\n\t),\n)\n\nconst variableSchemaCheck: Typesafe.Equals<Acl.Variables, ReturnType<typeof variablesSchema>> = true\n\nconst fieldPermissionsSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(Typesafe.string, Typesafe.boolean),\n)\nconst predicatesSchema = Typesafe.record(\n\tTypesafe.string,\n\t(v, p): Acl.PredicateDefinition => Typesafe.anyJsonObject(v, p) as Acl.PredicateDefinition,\n)\n\nconst predicatesSchemaCheck: Typesafe.Equals<Acl.PredicateMap, ReturnType<typeof predicatesSchema>> = true\n\nconst entityOperationsSchema = Typesafe.partial({\n\tread: fieldPermissionsSchema,\n\tcreate: fieldPermissionsSchema,\n\tupdate: fieldPermissionsSchema,\n\tdelete: Typesafe.union(Typesafe.string, Typesafe.boolean),\n\tcustomPrimary: Typesafe.boolean,\n\trefreshMaterializedView: Typesafe.boolean,\n\tnoRoot: Typesafe.array(Typesafe.enumeration('create', 'read', 'update', 'delete')),\n})\n\nconst opSchemaCheck: Typesafe.Equals<Acl.EntityOperations, ReturnType<typeof entityOperationsSchema>> = true\nconst entitiesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.object({\n\t\tpredicates: predicatesSchema,\n\t\toperations: entityOperationsSchema,\n\t}),\n)\nconst entitiesSchemaCheck: Typesafe.Equals<Acl.Permissions, ReturnType<typeof entitiesSchema>> = true\n\nconst baseRolePermissionsSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvariables: variablesSchema,\n\t\tentities: entitiesSchema,\n\t}),\n\tTypesafe.partial({\n\t\tinherits: Typesafe.array(Typesafe.string),\n\t\timplicit: Typesafe.boolean,\n\t\tstages: Typesafe.union(\n\t\t\tTypesafe.literal('*'),\n\t\t\tTypesafe.array(Typesafe.string),\n\t\t),\n\t\ttenant: tenantPermissionsSchema,\n\t\tsystem: systemPermissionsSchema,\n\t\tcontent: contentPermissionsSchema,\n\t\tdebug: Typesafe.boolean,\n\t}),\n)\nconst baseRolePermissionsCheck: Typesafe.Equals<Acl.BaseRolePermissions, ReturnType<typeof baseRolePermissionsSchema>> = true\n\nexport const aclSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\troles: Typesafe.record(\n\t\t\tTypesafe.string,\n\t\t\t(v, p): Acl.RolePermissions => {\n\t\t\t\tconst main: Acl.BaseRolePermissions = baseRolePermissionsSchema(v, p)\n\t\t\t\treturn {\n\t\t\t\t\t...(v as any),\n\t\t\t\t\t...main,\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t}),\n\tTypesafe.partial({\n\t\tcustomPrimary: Typesafe.boolean,\n\t}),\n)\nconst aclSchemaCheck: Typesafe.Equals<Acl.Schema, ReturnType<typeof aclSchema>> = true\n"],"names":["Typesafe","Acl","conditionSchema"],"mappings":"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"}
@@ -32,7 +32,8 @@ const systemPermissionsSchema = Typesafe.partial({
32
32
  const contentPermissionsSchema = Typesafe.partial({
33
33
  assumeMembership: membershipMatchRuleSchema,
34
34
  export: Typesafe.boolean,
35
- import: Typesafe.boolean
35
+ import: Typesafe.boolean,
36
+ refreshMaterializedView: Typesafe.boolean
36
37
  });
37
38
  const entityVariableSchema = Typesafe.intersection(
38
39
  Typesafe.object({
@@ -77,6 +78,7 @@ const entityOperationsSchema = Typesafe.partial({
77
78
  update: fieldPermissionsSchema,
78
79
  delete: Typesafe.union(Typesafe.string, Typesafe.boolean),
79
80
  customPrimary: Typesafe.boolean,
81
+ refreshMaterializedView: Typesafe.boolean,
80
82
  noRoot: Typesafe.array(Typesafe.enumeration("create", "read", "update", "delete"))
81
83
  });
82
84
  const entitiesSchema = Typesafe.record(
@@ -1 +1 @@
1
- {"version":3,"file":"acl.js","sources":["../../../../../packages/schema-utils/src/type-schema/acl.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport * as Typesafe from '@contember/typesafe'\nimport { conditionSchema } from './condition'\n\nconst membershipMatchRuleSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tTypesafe.literal(true),\n\t\tTypesafe.partial({\n\t\t\tvariables: Typesafe.union(\n\t\t\t\tTypesafe.literal(true),\n\t\t\t\tTypesafe.record(\n\t\t\t\t\tTypesafe.string,\n\t\t\t\t\tTypesafe.union(Typesafe.literal(true), Typesafe.string),\n\t\t\t\t),\n\t\t\t),\n\t\t}),\n\t),\n)\n\nconst tenantPermissionsSchema = Typesafe.partial({\n\tinvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tunmanagedInvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tmanage: membershipMatchRuleSchema,\n\tview: membershipMatchRuleSchema,\n})\nconst tenantSchemaCheck: Typesafe.Equals<Acl.TenantPermissions, ReturnType<typeof tenantPermissionsSchema>> = true\n\nconst systemPermissionsSchema = Typesafe.partial({\n\thistory: Typesafe.union(Typesafe.boolean, Typesafe.enumeration('any', 'none')),\n\tmigrate: Typesafe.boolean,\n\tassumeIdentity: Typesafe.boolean,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst systemSchemaCheck: Typesafe.Equals<Acl.SystemPermissions, ReturnType<typeof systemPermissionsSchema>> = true\n\nconst contentPermissionsSchema = Typesafe.partial({\n\tassumeMembership: membershipMatchRuleSchema,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst contentSchemaCheck: Typesafe.Equals<Acl.ContentPermissions, ReturnType<typeof contentPermissionsSchema>> = true\n\nconst entityVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.entity),\n\t\tentityName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst entityVariableSchemaCheck: Typesafe.Equals<Acl.EntityVariable, ReturnType<typeof entityVariableSchema>> = true\n\nconst predefinedVariableSchema = Typesafe.object({\n\ttype: Typesafe.literal(Acl.VariableType.predefined),\n\tvalue: Typesafe.enumeration('identityID', 'personID'),\n})\nconst conditionVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.condition),\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst conditionVariableSchemaCheck: Typesafe.Equals<Acl.ConditionVariable, ReturnType<typeof conditionVariableSchema>> = true\n\nconst variablesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tentityVariableSchema as Typesafe.Type<Acl.EntityVariable>,\n\t\tpredefinedVariableSchema,\n\t\tconditionVariableSchema as Typesafe.Type<Acl.ConditionVariable>,\n\t),\n)\n\nconst variableSchemaCheck: Typesafe.Equals<Acl.Variables, ReturnType<typeof variablesSchema>> = true\n\nconst fieldPermissionsSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(Typesafe.string, Typesafe.boolean),\n)\nconst predicatesSchema = Typesafe.record(\n\tTypesafe.string,\n\t(v, p): Acl.PredicateDefinition => Typesafe.anyJsonObject(v, p) as Acl.PredicateDefinition,\n)\n\nconst predicatesSchemaCheck: Typesafe.Equals<Acl.PredicateMap, ReturnType<typeof predicatesSchema>> = true\n\nconst entityOperationsSchema = Typesafe.partial({\n\tread: fieldPermissionsSchema,\n\tcreate: fieldPermissionsSchema,\n\tupdate: fieldPermissionsSchema,\n\tdelete: Typesafe.union(Typesafe.string, Typesafe.boolean),\n\tcustomPrimary: Typesafe.boolean,\n\tnoRoot: Typesafe.array(Typesafe.enumeration('create', 'read', 'update', 'delete')),\n})\n\nconst opSchemaCheck: Typesafe.Equals<Acl.EntityOperations, ReturnType<typeof entityOperationsSchema>> = true\nconst entitiesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.object({\n\t\tpredicates: predicatesSchema,\n\t\toperations: entityOperationsSchema,\n\t}),\n)\nconst entitiesSchemaCheck: Typesafe.Equals<Acl.Permissions, ReturnType<typeof entitiesSchema>> = true\n\nconst baseRolePermissionsSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvariables: variablesSchema,\n\t\tentities: entitiesSchema,\n\t}),\n\tTypesafe.partial({\n\t\tinherits: Typesafe.array(Typesafe.string),\n\t\timplicit: Typesafe.boolean,\n\t\tstages: Typesafe.union(\n\t\t\tTypesafe.literal('*'),\n\t\t\tTypesafe.array(Typesafe.string),\n\t\t),\n\t\ttenant: tenantPermissionsSchema,\n\t\tsystem: systemPermissionsSchema,\n\t\tcontent: contentPermissionsSchema,\n\t\tdebug: Typesafe.boolean,\n\t}),\n)\nconst baseRolePermissionsCheck: Typesafe.Equals<Acl.BaseRolePermissions, ReturnType<typeof baseRolePermissionsSchema>> = true\n\nexport const aclSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\troles: Typesafe.record(\n\t\t\tTypesafe.string,\n\t\t\t(v, p): Acl.RolePermissions => {\n\t\t\t\tconst main: Acl.BaseRolePermissions = baseRolePermissionsSchema(v, p)\n\t\t\t\treturn {\n\t\t\t\t\t...(v as any),\n\t\t\t\t\t...main,\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t}),\n\tTypesafe.partial({\n\t\tcustomPrimary: Typesafe.boolean,\n\t}),\n)\nconst aclSchemaCheck: Typesafe.Equals<Acl.Schema, ReturnType<typeof aclSchema>> = true\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acl.js","sources":["../../../../../packages/schema-utils/src/type-schema/acl.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport * as Typesafe from '@contember/typesafe'\nimport { conditionSchema } from './condition'\n\nconst membershipMatchRuleSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tTypesafe.literal(true),\n\t\tTypesafe.partial({\n\t\t\tvariables: Typesafe.union(\n\t\t\t\tTypesafe.literal(true),\n\t\t\t\tTypesafe.record(\n\t\t\t\t\tTypesafe.string,\n\t\t\t\t\tTypesafe.union(Typesafe.literal(true), Typesafe.string),\n\t\t\t\t),\n\t\t\t),\n\t\t}),\n\t),\n)\n\nconst tenantPermissionsSchema = Typesafe.partial({\n\tinvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tunmanagedInvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tmanage: membershipMatchRuleSchema,\n\tview: membershipMatchRuleSchema,\n})\nconst tenantSchemaCheck: Typesafe.Equals<Acl.TenantPermissions, ReturnType<typeof tenantPermissionsSchema>> = true\n\nconst systemPermissionsSchema = Typesafe.partial({\n\thistory: Typesafe.union(Typesafe.boolean, Typesafe.enumeration('any', 'none')),\n\tmigrate: Typesafe.boolean,\n\tassumeIdentity: Typesafe.boolean,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst systemSchemaCheck: Typesafe.Equals<Acl.SystemPermissions, ReturnType<typeof systemPermissionsSchema>> = true\n\nconst contentPermissionsSchema = Typesafe.partial({\n\tassumeMembership: membershipMatchRuleSchema,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n\trefreshMaterializedView: Typesafe.boolean,\n})\nconst contentSchemaCheck: Typesafe.Equals<Acl.ContentPermissions, ReturnType<typeof contentPermissionsSchema>> = true\n\nconst entityVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.entity),\n\t\tentityName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst entityVariableSchemaCheck: Typesafe.Equals<Acl.EntityVariable, ReturnType<typeof entityVariableSchema>> = true\n\nconst predefinedVariableSchema = Typesafe.object({\n\ttype: Typesafe.literal(Acl.VariableType.predefined),\n\tvalue: Typesafe.enumeration('identityID', 'personID'),\n})\nconst conditionVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.condition),\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst conditionVariableSchemaCheck: Typesafe.Equals<Acl.ConditionVariable, ReturnType<typeof conditionVariableSchema>> = true\n\nconst variablesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tentityVariableSchema as Typesafe.Type<Acl.EntityVariable>,\n\t\tpredefinedVariableSchema,\n\t\tconditionVariableSchema as Typesafe.Type<Acl.ConditionVariable>,\n\t),\n)\n\nconst variableSchemaCheck: Typesafe.Equals<Acl.Variables, ReturnType<typeof variablesSchema>> = true\n\nconst fieldPermissionsSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(Typesafe.string, Typesafe.boolean),\n)\nconst predicatesSchema = Typesafe.record(\n\tTypesafe.string,\n\t(v, p): Acl.PredicateDefinition => Typesafe.anyJsonObject(v, p) as Acl.PredicateDefinition,\n)\n\nconst predicatesSchemaCheck: Typesafe.Equals<Acl.PredicateMap, ReturnType<typeof predicatesSchema>> = true\n\nconst entityOperationsSchema = Typesafe.partial({\n\tread: fieldPermissionsSchema,\n\tcreate: fieldPermissionsSchema,\n\tupdate: fieldPermissionsSchema,\n\tdelete: Typesafe.union(Typesafe.string, Typesafe.boolean),\n\tcustomPrimary: Typesafe.boolean,\n\trefreshMaterializedView: Typesafe.boolean,\n\tnoRoot: Typesafe.array(Typesafe.enumeration('create', 'read', 'update', 'delete')),\n})\n\nconst opSchemaCheck: Typesafe.Equals<Acl.EntityOperations, ReturnType<typeof entityOperationsSchema>> = true\nconst entitiesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.object({\n\t\tpredicates: predicatesSchema,\n\t\toperations: entityOperationsSchema,\n\t}),\n)\nconst entitiesSchemaCheck: Typesafe.Equals<Acl.Permissions, ReturnType<typeof entitiesSchema>> = true\n\nconst baseRolePermissionsSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvariables: variablesSchema,\n\t\tentities: entitiesSchema,\n\t}),\n\tTypesafe.partial({\n\t\tinherits: Typesafe.array(Typesafe.string),\n\t\timplicit: Typesafe.boolean,\n\t\tstages: Typesafe.union(\n\t\t\tTypesafe.literal('*'),\n\t\t\tTypesafe.array(Typesafe.string),\n\t\t),\n\t\ttenant: tenantPermissionsSchema,\n\t\tsystem: systemPermissionsSchema,\n\t\tcontent: contentPermissionsSchema,\n\t\tdebug: Typesafe.boolean,\n\t}),\n)\nconst baseRolePermissionsCheck: Typesafe.Equals<Acl.BaseRolePermissions, ReturnType<typeof baseRolePermissionsSchema>> = true\n\nexport const aclSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\troles: Typesafe.record(\n\t\t\tTypesafe.string,\n\t\t\t(v, p): Acl.RolePermissions => {\n\t\t\t\tconst main: Acl.BaseRolePermissions = baseRolePermissionsSchema(v, p)\n\t\t\t\treturn {\n\t\t\t\t\t...(v as any),\n\t\t\t\t\t...main,\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t}),\n\tTypesafe.partial({\n\t\tcustomPrimary: Typesafe.boolean,\n\t}),\n)\nconst aclSchemaCheck: Typesafe.Equals<Acl.Schema, ReturnType<typeof aclSchema>> = true\n"],"names":[],"mappings":"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"}
@@ -69,8 +69,10 @@ const resolveColumnTypeSchema = (type) => {
69
69
  switch (type) {
70
70
  case schema.Model.ColumnType.Bool:
71
71
  return Typesafe__namespace.boolean;
72
+ // todo: validate format of string-like inputs uuid, date, enum
72
73
  case schema.Model.ColumnType.Date:
73
74
  case schema.Model.ColumnType.DateTime:
75
+ case schema.Model.ColumnType.Time:
74
76
  case schema.Model.ColumnType.Uuid:
75
77
  case schema.Model.ColumnType.Enum:
76
78
  case schema.Model.ColumnType.String:
@@ -1 +1 @@
1
- {"version":3,"file":"condition.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/condition.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Json, Type } from '@contember/typesafe'\nimport { Input, Model, Value } from '@contember/schema'\n\nexport const conditionSchema = <T extends Value.FieldValue>(type?: Model.ColumnType): Type<Input.Condition<T>> => {\n\tconst metadata = type ? resolveColumnMetadata(type) : { type: Typesafe.scalar }\n\treturn conditionSchemaInner(metadata)\n}\n\ninterface ResolvedColumnMetadata<T extends Json> {\n\ttype: Typesafe.Type<T>\n\tisJson?: boolean\n\tisString?: boolean\n}\n\nconst conditionSchemaInner = <T extends Json>(metadata: ResolvedColumnMetadata<T>): Type<Input.Condition<T>> => {\n\treturn (input: unknown, path: PropertyKey[] = []): Input.Condition<T> => {\n\t\tconst self = conditionSchemaInner(metadata)\n\t\tconst inner = metadata.type\n\t\tconst objectSchema = Typesafe.noExtraProps(Typesafe.partial({\n\t\t\tand: Typesafe.array(self),\n\t\t\tor: Typesafe.array(self),\n\t\t\tnot: self,\n\t\t\tnull: Typesafe.boolean,\n\t\t\tisNull: Typesafe.boolean,\n\t\t\tnever: Typesafe.true_,\n\t\t\talways: Typesafe.true_,\n\t\t\t...(metadata.isJson !== true ? {\n\t\t\t\teq: inner,\n\t\t\t\tnotEq: inner,\n\t\t\t\tin: Typesafe.array(inner),\n\t\t\t\tnotIn: Typesafe.array(inner),\n\t\t\t\tlt: inner,\n\t\t\t\tlte: inner,\n\t\t\t\tgt: inner,\n\t\t\t\tgte: inner,\n\t\t\t} : {}),\n\t\t\t...(metadata.isString !== false ? {\n\t\t\t\tcontains: Typesafe.string,\n\t\t\t\tstartsWith: Typesafe.string,\n\t\t\t\tendsWith: Typesafe.string,\n\t\t\t\tcontainsCI: Typesafe.string,\n\t\t\t\tstartsWithCI: Typesafe.string,\n\t\t\t\tendsWithCI: Typesafe.string,\n\t\t\t} : {}),\n\t\t}))\n\t\treturn objectSchema(input, path) as Input.Condition<T>\n\t}\n}\n\nconst resolveColumnMetadata = (type: Model.ColumnType): ResolvedColumnMetadata<any> => {\n\tconst resolvedType = Typesafe.nullable(resolveColumnTypeSchema(type))\n\treturn {\n\t\ttype: resolvedType,\n\t\tisJson: type === Model.ColumnType.Json,\n\t\tisString: type === Model.ColumnType.String,\n\n\t}\n}\n\n\nconst resolveColumnTypeSchema = (type: Model.ColumnType) => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn Typesafe.boolean\n\n\t\t// todo: validate format of string-like inputs uuid, date, enum\n\t\tcase Model.ColumnType.Date:\n\t\tcase Model.ColumnType.DateTime:\n\t\tcase Model.ColumnType.Uuid:\n\t\tcase Model.ColumnType.Enum:\n\t\tcase Model.ColumnType.String:\n\t\t\treturn Typesafe.string\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn Typesafe.number\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn Typesafe.integer\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn Typesafe.anyJson\n\t}\n}\n"],"names":["Typesafe","Model"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAIa,MAAA,kBAAkB,CAA6B,SAAsD;AAC3G,QAAA,WAAW,OAAO,sBAAsB,IAAI,IAAI,EAAE,MAAMA,oBAAS,OAAO;AAC9E,SAAO,qBAAqB,QAAQ;AACrC;AAQA,MAAM,uBAAuB,CAAiB,aAAkE;AAC/G,SAAO,CAAC,OAAgB,OAAsB,OAA2B;AAClE,UAAA,OAAO,qBAAqB,QAAQ;AAC1C,UAAM,QAAQ,SAAS;AACvB,UAAM,eAAeA,oBAAS,aAAaA,oBAAS,QAAQ;AAAA,MAC3D,KAAKA,oBAAS,MAAM,IAAI;AAAA,MACxB,IAAIA,oBAAS,MAAM,IAAI;AAAA,MACvB,KAAK;AAAA,MACL,MAAMA,oBAAS;AAAA,MACf,QAAQA,oBAAS;AAAA,MACjB,OAAOA,oBAAS;AAAA,MAChB,QAAQA,oBAAS;AAAA,MACjB,GAAI,SAAS,WAAW,OAAO;AAAA,QAC9B,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,IAAIA,oBAAS,MAAM,KAAK;AAAA,QACxB,OAAOA,oBAAS,MAAM,KAAK;AAAA,QAC3B,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,IAAI;AAAA,QACJ,KAAK;AAAA,MAAA,IACF,CAAC;AAAA,MACL,GAAI,SAAS,aAAa,QAAQ;AAAA,QACjC,UAAUA,oBAAS;AAAA,QACnB,YAAYA,oBAAS;AAAA,QACrB,UAAUA,oBAAS;AAAA,QACnB,YAAYA,oBAAS;AAAA,QACrB,cAAcA,oBAAS;AAAA,QACvB,YAAYA,oBAAS;AAAA,MAAA,IAClB,CAAA;AAAA,IAAC,CACL,CAAC;AACK,WAAA,aAAa,OAAO,IAAI;AAAA,EAChC;AACD;AAEA,MAAM,wBAAwB,CAAC,SAAwD;AACtF,QAAM,eAAeA,oBAAS,SAAS,wBAAwB,IAAI,CAAC;AAC7D,SAAA;AAAA,IACN,MAAM;AAAA,IACN,QAAQ,SAASC,aAAM,WAAW;AAAA,IAClC,UAAU,SAASA,OAAA,MAAM,WAAW;AAAA,EAErC;AACD;AAGA,MAAM,0BAA0B,CAAC,SAA2B;AAC3D,UAAQ,MAAM;AAAA,IACb,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,IAGjB,KAAKC,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,IACjB,KAAKC,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,IACjB,KAAKC,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,IACjB,KAAKC,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,EAAA;AAEnB;;"}
1
+ {"version":3,"file":"condition.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/condition.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Json, Type } from '@contember/typesafe'\nimport { Input, Model, Value } from '@contember/schema'\n\nexport const conditionSchema = <T extends Value.FieldValue>(type?: Model.ColumnType): Type<Input.Condition<T>> => {\n\tconst metadata = type ? resolveColumnMetadata(type) : { type: Typesafe.scalar }\n\treturn conditionSchemaInner(metadata)\n}\n\ninterface ResolvedColumnMetadata<T extends Json> {\n\ttype: Typesafe.Type<T>\n\tisJson?: boolean\n\tisString?: boolean\n}\n\nconst conditionSchemaInner = <T extends Json>(metadata: ResolvedColumnMetadata<T>): Type<Input.Condition<T>> => {\n\treturn (input: unknown, path: PropertyKey[] = []): Input.Condition<T> => {\n\t\tconst self = conditionSchemaInner(metadata)\n\t\tconst inner = metadata.type\n\t\tconst objectSchema = Typesafe.noExtraProps(Typesafe.partial({\n\t\t\tand: Typesafe.array(self),\n\t\t\tor: Typesafe.array(self),\n\t\t\tnot: self,\n\t\t\tnull: Typesafe.boolean,\n\t\t\tisNull: Typesafe.boolean,\n\t\t\tnever: Typesafe.true_,\n\t\t\talways: Typesafe.true_,\n\t\t\t...(metadata.isJson !== true ? {\n\t\t\t\teq: inner,\n\t\t\t\tnotEq: inner,\n\t\t\t\tin: Typesafe.array(inner),\n\t\t\t\tnotIn: Typesafe.array(inner),\n\t\t\t\tlt: inner,\n\t\t\t\tlte: inner,\n\t\t\t\tgt: inner,\n\t\t\t\tgte: inner,\n\t\t\t} : {}),\n\t\t\t...(metadata.isString !== false ? {\n\t\t\t\tcontains: Typesafe.string,\n\t\t\t\tstartsWith: Typesafe.string,\n\t\t\t\tendsWith: Typesafe.string,\n\t\t\t\tcontainsCI: Typesafe.string,\n\t\t\t\tstartsWithCI: Typesafe.string,\n\t\t\t\tendsWithCI: Typesafe.string,\n\t\t\t} : {}),\n\t\t}))\n\t\treturn objectSchema(input, path) as Input.Condition<T>\n\t}\n}\n\nconst resolveColumnMetadata = (type: Model.ColumnType): ResolvedColumnMetadata<any> => {\n\tconst resolvedType = Typesafe.nullable(resolveColumnTypeSchema(type))\n\treturn {\n\t\ttype: resolvedType,\n\t\tisJson: type === Model.ColumnType.Json,\n\t\tisString: type === Model.ColumnType.String,\n\n\t}\n}\n\n\nconst resolveColumnTypeSchema = (type: Model.ColumnType) => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn Typesafe.boolean\n\n\t\t// todo: validate format of string-like inputs uuid, date, enum\n\t\tcase Model.ColumnType.Date:\n\t\tcase Model.ColumnType.DateTime:\n\t\tcase Model.ColumnType.Time:\n\t\tcase Model.ColumnType.Uuid:\n\t\tcase Model.ColumnType.Enum:\n\t\tcase Model.ColumnType.String:\n\t\t\treturn Typesafe.string\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn Typesafe.number\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn Typesafe.integer\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn Typesafe.anyJson\n\t}\n}\n"],"names":["Typesafe","Model"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAIa,MAAA,kBAAkB,CAA6B,SAAsD;AAC3G,QAAA,WAAW,OAAO,sBAAsB,IAAI,IAAI,EAAE,MAAMA,oBAAS,OAAO;AAC9E,SAAO,qBAAqB,QAAQ;AACrC;AAQA,MAAM,uBAAuB,CAAiB,aAAkE;AAC/G,SAAO,CAAC,OAAgB,OAAsB,OAA2B;AAClE,UAAA,OAAO,qBAAqB,QAAQ;AAC1C,UAAM,QAAQ,SAAS;AACvB,UAAM,eAAeA,oBAAS,aAAaA,oBAAS,QAAQ;AAAA,MAC3D,KAAKA,oBAAS,MAAM,IAAI;AAAA,MACxB,IAAIA,oBAAS,MAAM,IAAI;AAAA,MACvB,KAAK;AAAA,MACL,MAAMA,oBAAS;AAAA,MACf,QAAQA,oBAAS;AAAA,MACjB,OAAOA,oBAAS;AAAA,MAChB,QAAQA,oBAAS;AAAA,MACjB,GAAI,SAAS,WAAW,OAAO;AAAA,QAC9B,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,IAAIA,oBAAS,MAAM,KAAK;AAAA,QACxB,OAAOA,oBAAS,MAAM,KAAK;AAAA,QAC3B,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,IAAI;AAAA,QACJ,KAAK;AAAA,MAAA,IACF,CAAC;AAAA,MACL,GAAI,SAAS,aAAa,QAAQ;AAAA,QACjC,UAAUA,oBAAS;AAAA,QACnB,YAAYA,oBAAS;AAAA,QACrB,UAAUA,oBAAS;AAAA,QACnB,YAAYA,oBAAS;AAAA,QACrB,cAAcA,oBAAS;AAAA,QACvB,YAAYA,oBAAS;AAAA,MAAA,IAClB,CAAA;AAAA,IAAC,CACL,CAAC;AACK,WAAA,aAAa,OAAO,IAAI;AAAA,EAChC;AACD;AAEA,MAAM,wBAAwB,CAAC,SAAwD;AACtF,QAAM,eAAeA,oBAAS,SAAS,wBAAwB,IAAI,CAAC;AAC7D,SAAA;AAAA,IACN,MAAM;AAAA,IACN,QAAQ,SAASC,aAAM,WAAW;AAAA,IAClC,UAAU,SAASA,OAAA,MAAM,WAAW;AAAA,EAErC;AACD;AAGA,MAAM,0BAA0B,CAAC,SAA2B;AAC3D,UAAQ,MAAM;AAAA,IACb,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA;AAAA,IAGjB,KAAKC,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,IACjB,KAAKC,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,IACjB,KAAKC,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,IACjB,KAAKC,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,EAAA;AAEnB;;"}
@@ -50,8 +50,10 @@ const resolveColumnTypeSchema = (type) => {
50
50
  switch (type) {
51
51
  case Model.ColumnType.Bool:
52
52
  return Typesafe.boolean;
53
+ // todo: validate format of string-like inputs uuid, date, enum
53
54
  case Model.ColumnType.Date:
54
55
  case Model.ColumnType.DateTime:
56
+ case Model.ColumnType.Time:
55
57
  case Model.ColumnType.Uuid:
56
58
  case Model.ColumnType.Enum:
57
59
  case Model.ColumnType.String:
@@ -1 +1 @@
1
- {"version":3,"file":"condition.js","sources":["../../../../../packages/schema-utils/src/type-schema/condition.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Json, Type } from '@contember/typesafe'\nimport { Input, Model, Value } from '@contember/schema'\n\nexport const conditionSchema = <T extends Value.FieldValue>(type?: Model.ColumnType): Type<Input.Condition<T>> => {\n\tconst metadata = type ? resolveColumnMetadata(type) : { type: Typesafe.scalar }\n\treturn conditionSchemaInner(metadata)\n}\n\ninterface ResolvedColumnMetadata<T extends Json> {\n\ttype: Typesafe.Type<T>\n\tisJson?: boolean\n\tisString?: boolean\n}\n\nconst conditionSchemaInner = <T extends Json>(metadata: ResolvedColumnMetadata<T>): Type<Input.Condition<T>> => {\n\treturn (input: unknown, path: PropertyKey[] = []): Input.Condition<T> => {\n\t\tconst self = conditionSchemaInner(metadata)\n\t\tconst inner = metadata.type\n\t\tconst objectSchema = Typesafe.noExtraProps(Typesafe.partial({\n\t\t\tand: Typesafe.array(self),\n\t\t\tor: Typesafe.array(self),\n\t\t\tnot: self,\n\t\t\tnull: Typesafe.boolean,\n\t\t\tisNull: Typesafe.boolean,\n\t\t\tnever: Typesafe.true_,\n\t\t\talways: Typesafe.true_,\n\t\t\t...(metadata.isJson !== true ? {\n\t\t\t\teq: inner,\n\t\t\t\tnotEq: inner,\n\t\t\t\tin: Typesafe.array(inner),\n\t\t\t\tnotIn: Typesafe.array(inner),\n\t\t\t\tlt: inner,\n\t\t\t\tlte: inner,\n\t\t\t\tgt: inner,\n\t\t\t\tgte: inner,\n\t\t\t} : {}),\n\t\t\t...(metadata.isString !== false ? {\n\t\t\t\tcontains: Typesafe.string,\n\t\t\t\tstartsWith: Typesafe.string,\n\t\t\t\tendsWith: Typesafe.string,\n\t\t\t\tcontainsCI: Typesafe.string,\n\t\t\t\tstartsWithCI: Typesafe.string,\n\t\t\t\tendsWithCI: Typesafe.string,\n\t\t\t} : {}),\n\t\t}))\n\t\treturn objectSchema(input, path) as Input.Condition<T>\n\t}\n}\n\nconst resolveColumnMetadata = (type: Model.ColumnType): ResolvedColumnMetadata<any> => {\n\tconst resolvedType = Typesafe.nullable(resolveColumnTypeSchema(type))\n\treturn {\n\t\ttype: resolvedType,\n\t\tisJson: type === Model.ColumnType.Json,\n\t\tisString: type === Model.ColumnType.String,\n\n\t}\n}\n\n\nconst resolveColumnTypeSchema = (type: Model.ColumnType) => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn Typesafe.boolean\n\n\t\t// todo: validate format of string-like inputs uuid, date, enum\n\t\tcase Model.ColumnType.Date:\n\t\tcase Model.ColumnType.DateTime:\n\t\tcase Model.ColumnType.Uuid:\n\t\tcase Model.ColumnType.Enum:\n\t\tcase Model.ColumnType.String:\n\t\t\treturn Typesafe.string\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn Typesafe.number\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn Typesafe.integer\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn Typesafe.anyJson\n\t}\n}\n"],"names":[],"mappings":";;AAIa,MAAA,kBAAkB,CAA6B,SAAsD;AAC3G,QAAA,WAAW,OAAO,sBAAsB,IAAI,IAAI,EAAE,MAAM,SAAS,OAAO;AAC9E,SAAO,qBAAqB,QAAQ;AACrC;AAQA,MAAM,uBAAuB,CAAiB,aAAkE;AAC/G,SAAO,CAAC,OAAgB,OAAsB,OAA2B;AAClE,UAAA,OAAO,qBAAqB,QAAQ;AAC1C,UAAM,QAAQ,SAAS;AACvB,UAAM,eAAe,SAAS,aAAa,SAAS,QAAQ;AAAA,MAC3D,KAAK,SAAS,MAAM,IAAI;AAAA,MACxB,IAAI,SAAS,MAAM,IAAI;AAAA,MACvB,KAAK;AAAA,MACL,MAAM,SAAS;AAAA,MACf,QAAQ,SAAS;AAAA,MACjB,OAAO,SAAS;AAAA,MAChB,QAAQ,SAAS;AAAA,MACjB,GAAI,SAAS,WAAW,OAAO;AAAA,QAC9B,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,IAAI,SAAS,MAAM,KAAK;AAAA,QACxB,OAAO,SAAS,MAAM,KAAK;AAAA,QAC3B,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,IAAI;AAAA,QACJ,KAAK;AAAA,MAAA,IACF,CAAC;AAAA,MACL,GAAI,SAAS,aAAa,QAAQ;AAAA,QACjC,UAAU,SAAS;AAAA,QACnB,YAAY,SAAS;AAAA,QACrB,UAAU,SAAS;AAAA,QACnB,YAAY,SAAS;AAAA,QACrB,cAAc,SAAS;AAAA,QACvB,YAAY,SAAS;AAAA,MAAA,IAClB,CAAA;AAAA,IAAC,CACL,CAAC;AACK,WAAA,aAAa,OAAO,IAAI;AAAA,EAChC;AACD;AAEA,MAAM,wBAAwB,CAAC,SAAwD;AACtF,QAAM,eAAe,SAAS,SAAS,wBAAwB,IAAI,CAAC;AAC7D,SAAA;AAAA,IACN,MAAM;AAAA,IACN,QAAQ,SAAS,MAAM,WAAW;AAAA,IAClC,UAAU,SAAS,MAAM,WAAW;AAAA,EAErC;AACD;AAGA,MAAM,0BAA0B,CAAC,SAA2B;AAC3D,UAAQ,MAAM;AAAA,IACb,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,IAGjB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,IACjB,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,IACjB,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,IACjB,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,EAAA;AAEnB;"}
1
+ {"version":3,"file":"condition.js","sources":["../../../../../packages/schema-utils/src/type-schema/condition.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Json, Type } from '@contember/typesafe'\nimport { Input, Model, Value } from '@contember/schema'\n\nexport const conditionSchema = <T extends Value.FieldValue>(type?: Model.ColumnType): Type<Input.Condition<T>> => {\n\tconst metadata = type ? resolveColumnMetadata(type) : { type: Typesafe.scalar }\n\treturn conditionSchemaInner(metadata)\n}\n\ninterface ResolvedColumnMetadata<T extends Json> {\n\ttype: Typesafe.Type<T>\n\tisJson?: boolean\n\tisString?: boolean\n}\n\nconst conditionSchemaInner = <T extends Json>(metadata: ResolvedColumnMetadata<T>): Type<Input.Condition<T>> => {\n\treturn (input: unknown, path: PropertyKey[] = []): Input.Condition<T> => {\n\t\tconst self = conditionSchemaInner(metadata)\n\t\tconst inner = metadata.type\n\t\tconst objectSchema = Typesafe.noExtraProps(Typesafe.partial({\n\t\t\tand: Typesafe.array(self),\n\t\t\tor: Typesafe.array(self),\n\t\t\tnot: self,\n\t\t\tnull: Typesafe.boolean,\n\t\t\tisNull: Typesafe.boolean,\n\t\t\tnever: Typesafe.true_,\n\t\t\talways: Typesafe.true_,\n\t\t\t...(metadata.isJson !== true ? {\n\t\t\t\teq: inner,\n\t\t\t\tnotEq: inner,\n\t\t\t\tin: Typesafe.array(inner),\n\t\t\t\tnotIn: Typesafe.array(inner),\n\t\t\t\tlt: inner,\n\t\t\t\tlte: inner,\n\t\t\t\tgt: inner,\n\t\t\t\tgte: inner,\n\t\t\t} : {}),\n\t\t\t...(metadata.isString !== false ? {\n\t\t\t\tcontains: Typesafe.string,\n\t\t\t\tstartsWith: Typesafe.string,\n\t\t\t\tendsWith: Typesafe.string,\n\t\t\t\tcontainsCI: Typesafe.string,\n\t\t\t\tstartsWithCI: Typesafe.string,\n\t\t\t\tendsWithCI: Typesafe.string,\n\t\t\t} : {}),\n\t\t}))\n\t\treturn objectSchema(input, path) as Input.Condition<T>\n\t}\n}\n\nconst resolveColumnMetadata = (type: Model.ColumnType): ResolvedColumnMetadata<any> => {\n\tconst resolvedType = Typesafe.nullable(resolveColumnTypeSchema(type))\n\treturn {\n\t\ttype: resolvedType,\n\t\tisJson: type === Model.ColumnType.Json,\n\t\tisString: type === Model.ColumnType.String,\n\n\t}\n}\n\n\nconst resolveColumnTypeSchema = (type: Model.ColumnType) => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn Typesafe.boolean\n\n\t\t// todo: validate format of string-like inputs uuid, date, enum\n\t\tcase Model.ColumnType.Date:\n\t\tcase Model.ColumnType.DateTime:\n\t\tcase Model.ColumnType.Time:\n\t\tcase Model.ColumnType.Uuid:\n\t\tcase Model.ColumnType.Enum:\n\t\tcase Model.ColumnType.String:\n\t\t\treturn Typesafe.string\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn Typesafe.number\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn Typesafe.integer\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn Typesafe.anyJson\n\t}\n}\n"],"names":[],"mappings":";;AAIa,MAAA,kBAAkB,CAA6B,SAAsD;AAC3G,QAAA,WAAW,OAAO,sBAAsB,IAAI,IAAI,EAAE,MAAM,SAAS,OAAO;AAC9E,SAAO,qBAAqB,QAAQ;AACrC;AAQA,MAAM,uBAAuB,CAAiB,aAAkE;AAC/G,SAAO,CAAC,OAAgB,OAAsB,OAA2B;AAClE,UAAA,OAAO,qBAAqB,QAAQ;AAC1C,UAAM,QAAQ,SAAS;AACvB,UAAM,eAAe,SAAS,aAAa,SAAS,QAAQ;AAAA,MAC3D,KAAK,SAAS,MAAM,IAAI;AAAA,MACxB,IAAI,SAAS,MAAM,IAAI;AAAA,MACvB,KAAK;AAAA,MACL,MAAM,SAAS;AAAA,MACf,QAAQ,SAAS;AAAA,MACjB,OAAO,SAAS;AAAA,MAChB,QAAQ,SAAS;AAAA,MACjB,GAAI,SAAS,WAAW,OAAO;AAAA,QAC9B,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,IAAI,SAAS,MAAM,KAAK;AAAA,QACxB,OAAO,SAAS,MAAM,KAAK;AAAA,QAC3B,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,IAAI;AAAA,QACJ,KAAK;AAAA,MAAA,IACF,CAAC;AAAA,MACL,GAAI,SAAS,aAAa,QAAQ;AAAA,QACjC,UAAU,SAAS;AAAA,QACnB,YAAY,SAAS;AAAA,QACrB,UAAU,SAAS;AAAA,QACnB,YAAY,SAAS;AAAA,QACrB,cAAc,SAAS;AAAA,QACvB,YAAY,SAAS;AAAA,MAAA,IAClB,CAAA;AAAA,IAAC,CACL,CAAC;AACK,WAAA,aAAa,OAAO,IAAI;AAAA,EAChC;AACD;AAEA,MAAM,wBAAwB,CAAC,SAAwD;AACtF,QAAM,eAAe,SAAS,SAAS,wBAAwB,IAAI,CAAC;AAC7D,SAAA;AAAA,IACN,MAAM;AAAA,IACN,QAAQ,SAAS,MAAM,WAAW;AAAA,IAClC,UAAU,SAAS,MAAM,WAAW;AAAA,EAErC;AACD;AAGA,MAAM,0BAA0B,CAAC,SAA2B;AAC3D,UAAQ,MAAM;AAAA,IACb,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA;AAAA,IAGjB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,IACjB,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,IACjB,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,IACjB,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,EAAA;AAEnB;"}
@@ -129,8 +129,10 @@ const columnSchema = Typesafe__namespace.intersection(
129
129
  }),
130
130
  Typesafe__namespace.partial({
131
131
  typeAlias: Typesafe__namespace.string,
132
- default: Typesafe__namespace.union(Typesafe__namespace.string, Typesafe__namespace.number, Typesafe__namespace.boolean, Typesafe__namespace.null_),
133
- sequence: intersectionSchema
132
+ list: Typesafe__namespace.boolean,
133
+ default: Typesafe__namespace.anyJson,
134
+ sequence: intersectionSchema,
135
+ collation: Typesafe__namespace.string
134
136
  })
135
137
  );
136
138
  const fieldSchema = Typesafe__namespace.partiallyDiscriminatedUnion(
@@ -148,11 +150,13 @@ const viewSchemaInner = Typesafe__namespace.intersection(
148
150
  sql: Typesafe__namespace.string
149
151
  }),
150
152
  Typesafe__namespace.partial({
151
- dependencies: Typesafe__namespace.array(Typesafe__namespace.string)
153
+ dependencies: Typesafe__namespace.array(Typesafe__namespace.string),
154
+ idSource: Typesafe__namespace.array(Typesafe__namespace.string),
155
+ materialized: Typesafe__namespace.boolean
152
156
  })
153
157
  );
154
158
  const viewSchema = viewSchemaInner;
155
- const indexLike = Typesafe__namespace.intersection(
159
+ const indexSchemaBase = Typesafe__namespace.intersection(
156
160
  Typesafe__namespace.object({
157
161
  fields: Typesafe__namespace.array(Typesafe__namespace.string)
158
162
  }),
@@ -162,15 +166,28 @@ const indexLike = Typesafe__namespace.intersection(
162
166
  );
163
167
  const indexesSchema = Typesafe__namespace.coalesce(
164
168
  Typesafe__namespace.preprocess(
165
- Typesafe__namespace.array(indexLike),
169
+ Typesafe__namespace.array(indexSchemaBase),
166
170
  (it) => it?.constructor === Object ? Object.values(it) : it
167
171
  ),
168
172
  []
169
173
  );
170
174
  const uniqueConstraint = Typesafe__namespace.intersection(
171
- indexLike,
175
+ Typesafe__namespace.object({
176
+ fields: Typesafe__namespace.array(Typesafe__namespace.string)
177
+ }),
178
+ Typesafe__namespace.partial({
179
+ timing: Typesafe__namespace.enumeration("deferrable", "deferred"),
180
+ name: Typesafe__namespace.string,
181
+ index: Typesafe__namespace.literal(false)
182
+ })
183
+ );
184
+ const uniqueIndex = Typesafe__namespace.intersection(
185
+ Typesafe__namespace.object({
186
+ fields: Typesafe__namespace.array(Typesafe__namespace.string),
187
+ index: Typesafe__namespace.literal(true)
188
+ }),
172
189
  Typesafe__namespace.partial({
173
- timing: Typesafe__namespace.enumeration("deferrable", "deferred")
190
+ nulls: Typesafe__namespace.enumeration("distinct", "not distinct")
174
191
  })
175
192
  );
176
193
  const entitySchema = Typesafe__namespace.intersection(
@@ -181,7 +198,7 @@ const entitySchema = Typesafe__namespace.intersection(
181
198
  tableName: Typesafe__namespace.string,
182
199
  fields: Typesafe__namespace.record(Typesafe__namespace.string, fieldSchema),
183
200
  unique: Typesafe__namespace.preprocess(
184
- Typesafe__namespace.array(uniqueConstraint),
201
+ Typesafe__namespace.array(Typesafe__namespace.union(uniqueConstraint, uniqueIndex)),
185
202
  (it) => it?.constructor === Object ? Object.values(it) : it
186
203
  ),
187
204
  indexes: indexesSchema,
@@ -1 +1 @@
1
- {"version":3,"file":"model.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/model.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Model } from '@contember/schema'\nimport { ParseError } from '@contember/typesafe'\n\nconst orderBySchema = Typesafe.array(Typesafe.object({\n\tpath: Typesafe.array(Typesafe.string),\n\tdirection: Typesafe.enumeration<Model.OrderDirection>(\n\t\tModel.OrderDirection.asc,\n\t\tModel.OrderDirection.desc,\n\t\tModel.OrderDirection.ascNullsFirst,\n\t\tModel.OrderDirection.descNullsLast,\n\t),\n}))\nconst joiningColumnSchema = Typesafe.object({\n\tcolumnName: Typesafe.string,\n\tonDelete: Typesafe.enumeration<Model.OnDelete>(Model.OnDelete.cascade, Model.OnDelete.restrict, Model.OnDelete.setNull),\n})\nconst oneHasManyRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.OneHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\townedBy: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst oneHasManyRelationSchemaCheck: Typesafe.Equals<Model.OneHasManyRelation, ReturnType<typeof oneHasManyRelationSchema>> = true\n\nconst manyHasOneRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasOne),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningColumn: joiningColumnSchema,\n\t\tnullable: Typesafe.boolean,\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t}),\n)\n\nconst manyHasOneRelationSchemaCheck: Typesafe.Equals<Model.ManyHasOneRelation, ReturnType<typeof manyHasOneRelationSchema>> = true\n\nconst oneHasOneInverseRelationSchema = Typesafe.object({\n\ttype: Typesafe.literal(Model.RelationType.OneHasOne),\n\tname: Typesafe.string,\n\ttarget: Typesafe.string,\n\townedBy: Typesafe.string,\n\tnullable: Typesafe.boolean,\n})\nconst oneHasOneInverseRelationSchemaCheck: Typesafe.Equals<Model.OneHasOneInverseRelation, ReturnType<typeof oneHasOneInverseRelationSchema>> = true\n\n\nconst oneHasOneOwningRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.OneHasOne),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningColumn: joiningColumnSchema,\n\t\tnullable: Typesafe.boolean,\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t\torphanRemoval: Typesafe.literal(true),\n\t}),\n)\n\nconst oneHasOneOwningRelationSchemaCheck: Typesafe.Equals<Model.OneHasOneOwningRelation, ReturnType<typeof oneHasOneOwningRelationSchema>> = true\n\nconst eventLogSchema = Typesafe.coalesce(Typesafe.object({\n\tenabled: Typesafe.boolean,\n}), { enabled: true }) as Typesafe.Type<{ readonly enabled: boolean }>\n\nconst manyHasManyOwningRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningTable: Typesafe.object({\n\t\t\ttableName: Typesafe.string,\n\t\t\tjoiningColumn: joiningColumnSchema,\n\t\t\tinverseJoiningColumn: joiningColumnSchema,\n\t\t\teventLog: eventLogSchema,\n\t\t}),\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst manyHasManyOwningRelationSchemaCheck: Typesafe.Equals<Model.ManyHasManyOwningRelation, ReturnType<typeof manyHasManyOwningRelationSchema>> = true\n\nconst manyHasManyInverseRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\townedBy: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst manyHasManyInverseRelationSchemaCheck: Typesafe.Equals<Model.ManyHasManyInverseRelation, ReturnType<typeof manyHasManyInverseRelationSchema>> = true\n\nconst intersectionSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tprecedence: Typesafe.enumeration('ALWAYS', 'BY DEFAULT'),\n\t}),\n\tTypesafe.partial({\n\t\tstart: Typesafe.number,\n\t}),\n)\nconst intersectionSchemaCheck: Typesafe.Equals<Model.AnyColumn['sequence'], ReturnType<typeof intersectionSchema>> = true\n\nconst columnSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tname: Typesafe.string,\n\t\tcolumnName: Typesafe.string,\n\t\tcolumnType: Typesafe.transform(Typesafe.string, (it, raw, path) => {\n\t\t\tif (!it.replaceAll(/\\s+/g, '').match(/^[\\w_]+(?:\\(\\w+(?:,\\w+)*\\))?\\w*(?:\"[^\"]+\")?(\\[])*$/)) {\n\t\t\t\tthrow ParseError.format(it, path, 'valid column type')\n\t\t\t}\n\t\t\treturn it\n\t\t}),\n\t\tnullable: Typesafe.boolean,\n\t\ttype: Typesafe.enumeration<Model.ColumnType>(...Object.values(Model.ColumnType)),\n\t}),\n\tTypesafe.partial({\n\t\ttypeAlias: Typesafe.string,\n\t\tdefault: Typesafe.union(Typesafe.string, Typesafe.number, Typesafe.boolean, Typesafe.null_),\n\t\tsequence: intersectionSchema as Typesafe.Type<Model.AnyColumn['sequence']>,\n\t}),\n)\nconst columnSchemaCheck: Typesafe.Equals<Model.AnyColumn, ReturnType<typeof columnSchema>> = true\n\nconst fieldSchema: Typesafe.Type<Model.AnyField> = Typesafe.partiallyDiscriminatedUnion(\n\t'type',\n\toneHasOneInverseRelationSchema,\n\toneHasOneOwningRelationSchema,\n\toneHasManyRelationSchema,\n\tmanyHasOneRelationSchema,\n\tmanyHasManyInverseRelationSchema,\n\tmanyHasManyOwningRelationSchema,\n\tcolumnSchema,\n)\n\nconst viewSchemaInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\tsql: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tdependencies: Typesafe.array(Typesafe.string),\n\t}),\n)\nconst viewSchemaCheck: Typesafe.Equals<Model.View, ReturnType<typeof viewSchemaInner>> = true\nconst viewSchema: Typesafe.Type<Model.View> = viewSchemaInner\n\n\nconst indexLike: Typesafe.Type<{readonly fields: readonly string[]; readonly name?: string | undefined}> = Typesafe.intersection(\n\tTypesafe.object({\n\t\tfields: Typesafe.array(Typesafe.string),\n\t}),\n\tTypesafe.partial({\n\t\tname: Typesafe.string,\n\t}),\n)\n\nconst indexesSchema = Typesafe.coalesce<Model.Indexes, Model.Indexes>(\n\tTypesafe.preprocess(\n\t\tTypesafe.array(indexLike),\n\t\tit => it?.constructor === Object ? Object.values(it) : it,\n\t),\n\t[],\n)\n\nconst uniqueConstraint = Typesafe.intersection(\n\tindexLike,\n\tTypesafe.partial({\n\t\ttiming: Typesafe.enumeration('deferrable', 'deferred'),\n\t}),\n)\nconst uniqueConstraintCheck: Typesafe.Equals<Model.UniqueConstraint, ReturnType<typeof uniqueConstraint>> = true\n\nconst entitySchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tname: Typesafe.string,\n\t\tprimary: Typesafe.string,\n\t\tprimaryColumn: Typesafe.string,\n\t\ttableName: Typesafe.string,\n\t\tfields: Typesafe.record(Typesafe.string, fieldSchema),\n\t\tunique: Typesafe.preprocess<Model.UniqueConstraints>(\n\t\t\tTypesafe.array(uniqueConstraint),\n\t\t\tit => it?.constructor === Object ? Object.values(it) : it,\n\t\t),\n\t\tindexes: indexesSchema,\n\t\teventLog: eventLogSchema,\n\t}),\n\tTypesafe.partial({\n\t\tview: viewSchema,\n\t\torderBy: orderBySchema,\n\t}),\n)\n\nconst entitySchemaCheck: Typesafe.Equals<Model.Entity, ReturnType<typeof entitySchema>> = true\n\nexport const modelSchema = Typesafe.object({\n\tentities: Typesafe.record(Typesafe.string, entitySchema),\n\tenums: Typesafe.record(Typesafe.string, Typesafe.array(Typesafe.string)),\n})\n\n"],"names":["Typesafe","Model","ParseError"],"mappings":"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"}
1
+ {"version":3,"file":"model.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/model.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Model } from '@contember/schema'\nimport { ParseError } from '@contember/typesafe'\n\nconst orderBySchema = Typesafe.array(Typesafe.object({\n\tpath: Typesafe.array(Typesafe.string),\n\tdirection: Typesafe.enumeration<Model.OrderDirection>(\n\t\tModel.OrderDirection.asc,\n\t\tModel.OrderDirection.desc,\n\t\tModel.OrderDirection.ascNullsFirst,\n\t\tModel.OrderDirection.descNullsLast,\n\t),\n}))\nconst joiningColumnSchema = Typesafe.object({\n\tcolumnName: Typesafe.string,\n\tonDelete: Typesafe.enumeration<Model.OnDelete>(Model.OnDelete.cascade, Model.OnDelete.restrict, Model.OnDelete.setNull),\n})\nconst oneHasManyRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.OneHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\townedBy: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst oneHasManyRelationSchemaCheck: Typesafe.Equals<Model.OneHasManyRelation, ReturnType<typeof oneHasManyRelationSchema>> = true\n\nconst manyHasOneRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasOne),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningColumn: joiningColumnSchema,\n\t\tnullable: Typesafe.boolean,\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t}),\n)\n\nconst manyHasOneRelationSchemaCheck: Typesafe.Equals<Model.ManyHasOneRelation, ReturnType<typeof manyHasOneRelationSchema>> = true\n\nconst oneHasOneInverseRelationSchema = Typesafe.object({\n\ttype: Typesafe.literal(Model.RelationType.OneHasOne),\n\tname: Typesafe.string,\n\ttarget: Typesafe.string,\n\townedBy: Typesafe.string,\n\tnullable: Typesafe.boolean,\n})\nconst oneHasOneInverseRelationSchemaCheck: Typesafe.Equals<Model.OneHasOneInverseRelation, ReturnType<typeof oneHasOneInverseRelationSchema>> = true\n\n\nconst oneHasOneOwningRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.OneHasOne),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningColumn: joiningColumnSchema,\n\t\tnullable: Typesafe.boolean,\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t\torphanRemoval: Typesafe.literal(true),\n\t}),\n)\n\nconst oneHasOneOwningRelationSchemaCheck: Typesafe.Equals<Model.OneHasOneOwningRelation, ReturnType<typeof oneHasOneOwningRelationSchema>> = true\n\nconst eventLogSchema = Typesafe.coalesce(Typesafe.object({\n\tenabled: Typesafe.boolean,\n}), { enabled: true }) as Typesafe.Type<{ readonly enabled: boolean }>\n\nconst manyHasManyOwningRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningTable: Typesafe.object({\n\t\t\ttableName: Typesafe.string,\n\t\t\tjoiningColumn: joiningColumnSchema,\n\t\t\tinverseJoiningColumn: joiningColumnSchema,\n\t\t\teventLog: eventLogSchema,\n\t\t}),\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst manyHasManyOwningRelationSchemaCheck: Typesafe.Equals<Model.ManyHasManyOwningRelation, ReturnType<typeof manyHasManyOwningRelationSchema>> = true\n\nconst manyHasManyInverseRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\townedBy: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst manyHasManyInverseRelationSchemaCheck: Typesafe.Equals<Model.ManyHasManyInverseRelation, ReturnType<typeof manyHasManyInverseRelationSchema>> = true\n\nconst intersectionSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tprecedence: Typesafe.enumeration('ALWAYS', 'BY DEFAULT'),\n\t}),\n\tTypesafe.partial({\n\t\tstart: Typesafe.number,\n\t}),\n)\nconst intersectionSchemaCheck: Typesafe.Equals<Model.AnyColumn['sequence'], ReturnType<typeof intersectionSchema>> = true\n\nconst columnSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tname: Typesafe.string,\n\t\tcolumnName: Typesafe.string,\n\t\tcolumnType: Typesafe.transform(Typesafe.string, (it, raw, path) => {\n\t\t\tif (!it.replaceAll(/\\s+/g, '').match(/^[\\w_]+(?:\\(\\w+(?:,\\w+)*\\))?\\w*(?:\"[^\"]+\")?(\\[])*$/)) {\n\t\t\t\tthrow ParseError.format(it, path, 'valid column type')\n\t\t\t}\n\t\t\treturn it\n\t\t}),\n\t\tnullable: Typesafe.boolean,\n\t\ttype: Typesafe.enumeration<Model.ColumnType>(...Object.values(Model.ColumnType)),\n\t}),\n\tTypesafe.partial({\n\t\ttypeAlias: Typesafe.string,\n\t\tlist: Typesafe.boolean,\n\t\tdefault: Typesafe.anyJson,\n\t\tsequence: intersectionSchema as Typesafe.Type<Model.AnyColumn['sequence']>,\n\t\tcollation: Typesafe.string as Typesafe.Type<Model.AnyColumn['collation']>,\n\t}),\n)\nconst columnSchemaCheck: Typesafe.Equals<Model.AnyColumn, ReturnType<typeof columnSchema>> = true\n\nconst fieldSchema: Typesafe.Type<Model.AnyField> = Typesafe.partiallyDiscriminatedUnion(\n\t'type',\n\toneHasOneInverseRelationSchema,\n\toneHasOneOwningRelationSchema,\n\toneHasManyRelationSchema,\n\tmanyHasOneRelationSchema,\n\tmanyHasManyInverseRelationSchema,\n\tmanyHasManyOwningRelationSchema,\n\tcolumnSchema,\n)\n\nconst viewSchemaInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\tsql: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tdependencies: Typesafe.array(Typesafe.string),\n\t\tidSource: Typesafe.array(Typesafe.string),\n\t\tmaterialized: Typesafe.boolean,\n\t}),\n)\nconst viewSchemaCheck: Typesafe.Equals<Model.View, ReturnType<typeof viewSchemaInner>> = true\nconst viewSchema: Typesafe.Type<Model.View> = viewSchemaInner\n\n\nconst indexSchemaBase = Typesafe.intersection(\n\tTypesafe.object({\n\t\tfields: Typesafe.array(Typesafe.string),\n\t}),\n\tTypesafe.partial({\n\t\tname: Typesafe.string,\n\t}),\n)\nconst indexCheck: Typesafe.Equals<Model.Index, ReturnType<typeof indexSchemaBase>> = true\n\nconst indexesSchema = Typesafe.coalesce<Model.Indexes, Model.Indexes>(\n\tTypesafe.preprocess(\n\t\tTypesafe.array(indexSchemaBase),\n\t\tit => it?.constructor === Object ? Object.values(it) : it,\n\t),\n\t[],\n)\n\nconst uniqueConstraint = Typesafe.intersection(\n\tTypesafe.object({\n\t\tfields: Typesafe.array(Typesafe.string),\n\t}),\n\tTypesafe.partial({\n\t\ttiming: Typesafe.enumeration('deferrable', 'deferred'),\n\t\tname: Typesafe.string,\n\t\tindex: Typesafe.literal(false),\n\t}),\n)\nconst uniqueIndex = Typesafe.intersection(\n\tTypesafe.object({\n\t\tfields: Typesafe.array(Typesafe.string),\n\t\tindex: Typesafe.literal(true),\n\t}),\n\tTypesafe.partial({\n\t\tnulls: Typesafe.enumeration('distinct', 'not distinct'),\n\t}),\n)\nconst uniqueConstraintCheck: Typesafe.Equals<Model.UniqueConstraint, ReturnType<typeof uniqueConstraint>> = true\nconst uniqueIndexCheck: Typesafe.Equals<Model.UniqueIndex, ReturnType<typeof uniqueIndex>> = true\n\nconst entitySchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tname: Typesafe.string,\n\t\tprimary: Typesafe.string,\n\t\tprimaryColumn: Typesafe.string,\n\t\ttableName: Typesafe.string,\n\t\tfields: Typesafe.record(Typesafe.string, fieldSchema),\n\t\tunique: Typesafe.preprocess<Model.Uniques>(\n\t\t\tTypesafe.array(Typesafe.union(uniqueConstraint, uniqueIndex)),\n\t\t\tit => it?.constructor === Object ? Object.values(it) : it,\n\t\t),\n\t\tindexes: indexesSchema,\n\t\teventLog: eventLogSchema,\n\t}),\n\tTypesafe.partial({\n\t\tview: viewSchema,\n\t\torderBy: orderBySchema,\n\t}),\n)\n\nconst entitySchemaCheck: Typesafe.Equals<Model.Entity, ReturnType<typeof entitySchema>> = true\n\nexport const modelSchema = Typesafe.object({\n\tentities: Typesafe.record(Typesafe.string, entitySchema),\n\tenums: Typesafe.record(Typesafe.string, Typesafe.array(Typesafe.string)),\n})\n\n"],"names":["Typesafe","Model","ParseError"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAIA,MAAM,gBAAgBA,oBAAS,MAAMA,oBAAS,OAAO;AAAA,EACpD,MAAMA,oBAAS,MAAMA,oBAAS,MAAM;AAAA,EACpC,WAAWA,oBAAS;AAAA,IACnBC,aAAM,eAAe;AAAA,IACrBA,aAAM,eAAe;AAAA,IACrBA,aAAM,eAAe;AAAA,IACrBA,OAAAA,MAAM,eAAe;AAAA,EAAA;AAEvB,CAAC,CAAC;AACF,MAAM,sBAAsBD,oBAAS,OAAO;AAAA,EAC3C,YAAYA,oBAAS;AAAA,EACrB,UAAUA,oBAAS,YAA4BC,OAAAA,MAAM,SAAS,SAASA,OAAA,MAAM,SAAS,UAAUA,OAAM,MAAA,SAAS,OAAO;AACvH,CAAC;AACD,MAAM,2BAA2BD,oBAAS;AAAA,EACzCA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQC,OAAAA,MAAM,aAAa,UAAU;AAAA,IACpD,MAAMD,oBAAS;AAAA,IACf,QAAQA,oBAAS;AAAA,IACjB,SAASA,oBAAS;AAAA,EAAA,CAClB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,SAAS;AAAA,EACT,CAAA;AACF;AAGA,MAAM,2BAA2BA,oBAAS;AAAA,EACzCA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQC,OAAAA,MAAM,aAAa,UAAU;AAAA,IACpD,MAAMD,oBAAS;AAAA,IACf,QAAQA,oBAAS;AAAA,IACjB,eAAe;AAAA,IACf,UAAUA,oBAAS;AAAA,EAAA,CACnB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,YAAYA,oBAAS;AAAA,EACrB,CAAA;AACF;AAIA,MAAM,iCAAiCA,oBAAS,OAAO;AAAA,EACtD,MAAMA,oBAAS,QAAQC,OAAAA,MAAM,aAAa,SAAS;AAAA,EACnD,MAAMD,oBAAS;AAAA,EACf,QAAQA,oBAAS;AAAA,EACjB,SAASA,oBAAS;AAAA,EAClB,UAAUA,oBAAS;AACpB,CAAC;AAID,MAAM,gCAAgCA,oBAAS;AAAA,EAC9CA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQC,OAAAA,MAAM,aAAa,SAAS;AAAA,IACnD,MAAMD,oBAAS;AAAA,IACf,QAAQA,oBAAS;AAAA,IACjB,eAAe;AAAA,IACf,UAAUA,oBAAS;AAAA,EAAA,CACnB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,YAAYA,oBAAS;AAAA,IACrB,eAAeA,oBAAS,QAAQ,IAAI;AAAA,EACpC,CAAA;AACF;AAIA,MAAM,iBAAiBA,oBAAS,SAASA,oBAAS,OAAO;AAAA,EACxD,SAASA,oBAAS;AACnB,CAAC,GAAG,EAAE,SAAS,MAAM;AAErB,MAAM,kCAAkCA,oBAAS;AAAA,EAChDA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQC,OAAAA,MAAM,aAAa,WAAW;AAAA,IACrD,MAAMD,oBAAS;AAAA,IACf,QAAQA,oBAAS;AAAA,IACjB,cAAcA,oBAAS,OAAO;AAAA,MAC7B,WAAWA,oBAAS;AAAA,MACpB,eAAe;AAAA,MACf,sBAAsB;AAAA,MACtB,UAAU;AAAA,IACV,CAAA;AAAA,EAAA,CACD;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,YAAYA,oBAAS;AAAA,IACrB,SAAS;AAAA,EACT,CAAA;AACF;AAGA,MAAM,mCAAmCA,oBAAS;AAAA,EACjDA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQC,OAAAA,MAAM,aAAa,WAAW;AAAA,IACrD,MAAMD,oBAAS;AAAA,IACf,QAAQA,oBAAS;AAAA,IACjB,SAASA,oBAAS;AAAA,EAAA,CAClB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,SAAS;AAAA,EACT,CAAA;AACF;AAGA,MAAM,qBAAqBA,oBAAS;AAAA,EACnCA,oBAAS,OAAO;AAAA,IACf,YAAYA,oBAAS,YAAY,UAAU,YAAY;AAAA,EAAA,CACvD;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,OAAOA,oBAAS;AAAA,EAChB,CAAA;AACF;AAGA,MAAM,eAAeA,oBAAS;AAAA,EAC7BA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS;AAAA,IACf,YAAYA,oBAAS;AAAA,IACrB,YAAYA,oBAAS,UAAUA,oBAAS,QAAQ,CAAC,IAAI,KAAK,SAAS;AAC9D,UAAA,CAAC,GAAG,WAAW,QAAQ,EAAE,EAAE,MAAM,oDAAoD,GAAG;AAC3F,cAAME,SAAW,WAAA,OAAO,IAAI,MAAM,mBAAmB;AAAA,MAAA;AAE/C,aAAA;AAAA,IAAA,CACP;AAAA,IACD,UAAUF,oBAAS;AAAA,IACnB,MAAMA,oBAAS,YAA8B,GAAG,OAAO,OAAOC,OAAA,MAAM,UAAU,CAAC;AAAA,EAAA,CAC/E;AAAA,EACDD,oBAAS,QAAQ;AAAA,IAChB,WAAWA,oBAAS;AAAA,IACpB,MAAMA,oBAAS;AAAA,IACf,SAASA,oBAAS;AAAA,IAClB,UAAU;AAAA,IACV,WAAWA,oBAAS;AAAA,EACpB,CAAA;AACF;AAGA,MAAM,cAA6CA,oBAAS;AAAA,EAC3D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAEA,MAAM,kBAAkBA,oBAAS;AAAA,EAChCA,oBAAS,OAAO;AAAA,IACf,KAAKA,oBAAS;AAAA,EAAA,CACd;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,cAAcA,oBAAS,MAAMA,oBAAS,MAAM;AAAA,IAC5C,UAAUA,oBAAS,MAAMA,oBAAS,MAAM;AAAA,IACxC,cAAcA,oBAAS;AAAA,EACvB,CAAA;AACF;AAEA,MAAM,aAAwC;AAG9C,MAAM,kBAAkBA,oBAAS;AAAA,EAChCA,oBAAS,OAAO;AAAA,IACf,QAAQA,oBAAS,MAAMA,oBAAS,MAAM;AAAA,EAAA,CACtC;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,MAAMA,oBAAS;AAAA,EACf,CAAA;AACF;AAGA,MAAM,gBAAgBA,oBAAS;AAAA,EAC9BA,oBAAS;AAAA,IACRA,oBAAS,MAAM,eAAe;AAAA,IAC9B,QAAM,IAAI,gBAAgB,SAAS,OAAO,OAAO,EAAE,IAAI;AAAA,EACxD;AAAA,EACA,CAAA;AACD;AAEA,MAAM,mBAAmBA,oBAAS;AAAA,EACjCA,oBAAS,OAAO;AAAA,IACf,QAAQA,oBAAS,MAAMA,oBAAS,MAAM;AAAA,EAAA,CACtC;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,QAAQA,oBAAS,YAAY,cAAc,UAAU;AAAA,IACrD,MAAMA,oBAAS;AAAA,IACf,OAAOA,oBAAS,QAAQ,KAAK;AAAA,EAC7B,CAAA;AACF;AACA,MAAM,cAAcA,oBAAS;AAAA,EAC5BA,oBAAS,OAAO;AAAA,IACf,QAAQA,oBAAS,MAAMA,oBAAS,MAAM;AAAA,IACtC,OAAOA,oBAAS,QAAQ,IAAI;AAAA,EAAA,CAC5B;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,OAAOA,oBAAS,YAAY,YAAY,cAAc;AAAA,EACtD,CAAA;AACF;AAIA,MAAM,eAAeA,oBAAS;AAAA,EAC7BA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS;AAAA,IACf,SAASA,oBAAS;AAAA,IAClB,eAAeA,oBAAS;AAAA,IACxB,WAAWA,oBAAS;AAAA,IACpB,QAAQA,oBAAS,OAAOA,oBAAS,QAAQ,WAAW;AAAA,IACpD,QAAQA,oBAAS;AAAA,MAChBA,oBAAS,MAAMA,oBAAS,MAAM,kBAAkB,WAAW,CAAC;AAAA,MAC5D,QAAM,IAAI,gBAAgB,SAAS,OAAO,OAAO,EAAE,IAAI;AAAA,IACxD;AAAA,IACA,SAAS;AAAA,IACT,UAAU;AAAA,EAAA,CACV;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,MAAM;AAAA,IACN,SAAS;AAAA,EACT,CAAA;AACF;AAIa,MAAA,cAAcA,oBAAS,OAAO;AAAA,EAC1C,UAAUA,oBAAS,OAAOA,oBAAS,QAAQ,YAAY;AAAA,EACvD,OAAOA,oBAAS,OAAOA,oBAAS,QAAQA,oBAAS,MAAMA,oBAAS,MAAM,CAAC;AACxE,CAAC;;"}
@@ -111,8 +111,10 @@ const columnSchema = Typesafe.intersection(
111
111
  }),
112
112
  Typesafe.partial({
113
113
  typeAlias: Typesafe.string,
114
- default: Typesafe.union(Typesafe.string, Typesafe.number, Typesafe.boolean, Typesafe.null_),
115
- sequence: intersectionSchema
114
+ list: Typesafe.boolean,
115
+ default: Typesafe.anyJson,
116
+ sequence: intersectionSchema,
117
+ collation: Typesafe.string
116
118
  })
117
119
  );
118
120
  const fieldSchema = Typesafe.partiallyDiscriminatedUnion(
@@ -130,11 +132,13 @@ const viewSchemaInner = Typesafe.intersection(
130
132
  sql: Typesafe.string
131
133
  }),
132
134
  Typesafe.partial({
133
- dependencies: Typesafe.array(Typesafe.string)
135
+ dependencies: Typesafe.array(Typesafe.string),
136
+ idSource: Typesafe.array(Typesafe.string),
137
+ materialized: Typesafe.boolean
134
138
  })
135
139
  );
136
140
  const viewSchema = viewSchemaInner;
137
- const indexLike = Typesafe.intersection(
141
+ const indexSchemaBase = Typesafe.intersection(
138
142
  Typesafe.object({
139
143
  fields: Typesafe.array(Typesafe.string)
140
144
  }),
@@ -144,15 +148,28 @@ const indexLike = Typesafe.intersection(
144
148
  );
145
149
  const indexesSchema = Typesafe.coalesce(
146
150
  Typesafe.preprocess(
147
- Typesafe.array(indexLike),
151
+ Typesafe.array(indexSchemaBase),
148
152
  (it) => it?.constructor === Object ? Object.values(it) : it
149
153
  ),
150
154
  []
151
155
  );
152
156
  const uniqueConstraint = Typesafe.intersection(
153
- indexLike,
157
+ Typesafe.object({
158
+ fields: Typesafe.array(Typesafe.string)
159
+ }),
160
+ Typesafe.partial({
161
+ timing: Typesafe.enumeration("deferrable", "deferred"),
162
+ name: Typesafe.string,
163
+ index: Typesafe.literal(false)
164
+ })
165
+ );
166
+ const uniqueIndex = Typesafe.intersection(
167
+ Typesafe.object({
168
+ fields: Typesafe.array(Typesafe.string),
169
+ index: Typesafe.literal(true)
170
+ }),
154
171
  Typesafe.partial({
155
- timing: Typesafe.enumeration("deferrable", "deferred")
172
+ nulls: Typesafe.enumeration("distinct", "not distinct")
156
173
  })
157
174
  );
158
175
  const entitySchema = Typesafe.intersection(
@@ -163,7 +180,7 @@ const entitySchema = Typesafe.intersection(
163
180
  tableName: Typesafe.string,
164
181
  fields: Typesafe.record(Typesafe.string, fieldSchema),
165
182
  unique: Typesafe.preprocess(
166
- Typesafe.array(uniqueConstraint),
183
+ Typesafe.array(Typesafe.union(uniqueConstraint, uniqueIndex)),
167
184
  (it) => it?.constructor === Object ? Object.values(it) : it
168
185
  ),
169
186
  indexes: indexesSchema,
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sources":["../../../../../packages/schema-utils/src/type-schema/model.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Model } from '@contember/schema'\nimport { ParseError } from '@contember/typesafe'\n\nconst orderBySchema = Typesafe.array(Typesafe.object({\n\tpath: Typesafe.array(Typesafe.string),\n\tdirection: Typesafe.enumeration<Model.OrderDirection>(\n\t\tModel.OrderDirection.asc,\n\t\tModel.OrderDirection.desc,\n\t\tModel.OrderDirection.ascNullsFirst,\n\t\tModel.OrderDirection.descNullsLast,\n\t),\n}))\nconst joiningColumnSchema = Typesafe.object({\n\tcolumnName: Typesafe.string,\n\tonDelete: Typesafe.enumeration<Model.OnDelete>(Model.OnDelete.cascade, Model.OnDelete.restrict, Model.OnDelete.setNull),\n})\nconst oneHasManyRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.OneHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\townedBy: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst oneHasManyRelationSchemaCheck: Typesafe.Equals<Model.OneHasManyRelation, ReturnType<typeof oneHasManyRelationSchema>> = true\n\nconst manyHasOneRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasOne),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningColumn: joiningColumnSchema,\n\t\tnullable: Typesafe.boolean,\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t}),\n)\n\nconst manyHasOneRelationSchemaCheck: Typesafe.Equals<Model.ManyHasOneRelation, ReturnType<typeof manyHasOneRelationSchema>> = true\n\nconst oneHasOneInverseRelationSchema = Typesafe.object({\n\ttype: Typesafe.literal(Model.RelationType.OneHasOne),\n\tname: Typesafe.string,\n\ttarget: Typesafe.string,\n\townedBy: Typesafe.string,\n\tnullable: Typesafe.boolean,\n})\nconst oneHasOneInverseRelationSchemaCheck: Typesafe.Equals<Model.OneHasOneInverseRelation, ReturnType<typeof oneHasOneInverseRelationSchema>> = true\n\n\nconst oneHasOneOwningRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.OneHasOne),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningColumn: joiningColumnSchema,\n\t\tnullable: Typesafe.boolean,\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t\torphanRemoval: Typesafe.literal(true),\n\t}),\n)\n\nconst oneHasOneOwningRelationSchemaCheck: Typesafe.Equals<Model.OneHasOneOwningRelation, ReturnType<typeof oneHasOneOwningRelationSchema>> = true\n\nconst eventLogSchema = Typesafe.coalesce(Typesafe.object({\n\tenabled: Typesafe.boolean,\n}), { enabled: true }) as Typesafe.Type<{ readonly enabled: boolean }>\n\nconst manyHasManyOwningRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningTable: Typesafe.object({\n\t\t\ttableName: Typesafe.string,\n\t\t\tjoiningColumn: joiningColumnSchema,\n\t\t\tinverseJoiningColumn: joiningColumnSchema,\n\t\t\teventLog: eventLogSchema,\n\t\t}),\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst manyHasManyOwningRelationSchemaCheck: Typesafe.Equals<Model.ManyHasManyOwningRelation, ReturnType<typeof manyHasManyOwningRelationSchema>> = true\n\nconst manyHasManyInverseRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\townedBy: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst manyHasManyInverseRelationSchemaCheck: Typesafe.Equals<Model.ManyHasManyInverseRelation, ReturnType<typeof manyHasManyInverseRelationSchema>> = true\n\nconst intersectionSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tprecedence: Typesafe.enumeration('ALWAYS', 'BY DEFAULT'),\n\t}),\n\tTypesafe.partial({\n\t\tstart: Typesafe.number,\n\t}),\n)\nconst intersectionSchemaCheck: Typesafe.Equals<Model.AnyColumn['sequence'], ReturnType<typeof intersectionSchema>> = true\n\nconst columnSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tname: Typesafe.string,\n\t\tcolumnName: Typesafe.string,\n\t\tcolumnType: Typesafe.transform(Typesafe.string, (it, raw, path) => {\n\t\t\tif (!it.replaceAll(/\\s+/g, '').match(/^[\\w_]+(?:\\(\\w+(?:,\\w+)*\\))?\\w*(?:\"[^\"]+\")?(\\[])*$/)) {\n\t\t\t\tthrow ParseError.format(it, path, 'valid column type')\n\t\t\t}\n\t\t\treturn it\n\t\t}),\n\t\tnullable: Typesafe.boolean,\n\t\ttype: Typesafe.enumeration<Model.ColumnType>(...Object.values(Model.ColumnType)),\n\t}),\n\tTypesafe.partial({\n\t\ttypeAlias: Typesafe.string,\n\t\tdefault: Typesafe.union(Typesafe.string, Typesafe.number, Typesafe.boolean, Typesafe.null_),\n\t\tsequence: intersectionSchema as Typesafe.Type<Model.AnyColumn['sequence']>,\n\t}),\n)\nconst columnSchemaCheck: Typesafe.Equals<Model.AnyColumn, ReturnType<typeof columnSchema>> = true\n\nconst fieldSchema: Typesafe.Type<Model.AnyField> = Typesafe.partiallyDiscriminatedUnion(\n\t'type',\n\toneHasOneInverseRelationSchema,\n\toneHasOneOwningRelationSchema,\n\toneHasManyRelationSchema,\n\tmanyHasOneRelationSchema,\n\tmanyHasManyInverseRelationSchema,\n\tmanyHasManyOwningRelationSchema,\n\tcolumnSchema,\n)\n\nconst viewSchemaInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\tsql: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tdependencies: Typesafe.array(Typesafe.string),\n\t}),\n)\nconst viewSchemaCheck: Typesafe.Equals<Model.View, ReturnType<typeof viewSchemaInner>> = true\nconst viewSchema: Typesafe.Type<Model.View> = viewSchemaInner\n\n\nconst indexLike: Typesafe.Type<{readonly fields: readonly string[]; readonly name?: string | undefined}> = Typesafe.intersection(\n\tTypesafe.object({\n\t\tfields: Typesafe.array(Typesafe.string),\n\t}),\n\tTypesafe.partial({\n\t\tname: Typesafe.string,\n\t}),\n)\n\nconst indexesSchema = Typesafe.coalesce<Model.Indexes, Model.Indexes>(\n\tTypesafe.preprocess(\n\t\tTypesafe.array(indexLike),\n\t\tit => it?.constructor === Object ? Object.values(it) : it,\n\t),\n\t[],\n)\n\nconst uniqueConstraint = Typesafe.intersection(\n\tindexLike,\n\tTypesafe.partial({\n\t\ttiming: Typesafe.enumeration('deferrable', 'deferred'),\n\t}),\n)\nconst uniqueConstraintCheck: Typesafe.Equals<Model.UniqueConstraint, ReturnType<typeof uniqueConstraint>> = true\n\nconst entitySchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tname: Typesafe.string,\n\t\tprimary: Typesafe.string,\n\t\tprimaryColumn: Typesafe.string,\n\t\ttableName: Typesafe.string,\n\t\tfields: Typesafe.record(Typesafe.string, fieldSchema),\n\t\tunique: Typesafe.preprocess<Model.UniqueConstraints>(\n\t\t\tTypesafe.array(uniqueConstraint),\n\t\t\tit => it?.constructor === Object ? Object.values(it) : it,\n\t\t),\n\t\tindexes: indexesSchema,\n\t\teventLog: eventLogSchema,\n\t}),\n\tTypesafe.partial({\n\t\tview: viewSchema,\n\t\torderBy: orderBySchema,\n\t}),\n)\n\nconst entitySchemaCheck: Typesafe.Equals<Model.Entity, ReturnType<typeof entitySchema>> = true\n\nexport const modelSchema = Typesafe.object({\n\tentities: Typesafe.record(Typesafe.string, entitySchema),\n\tenums: Typesafe.record(Typesafe.string, Typesafe.array(Typesafe.string)),\n})\n\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sources":["../../../../../packages/schema-utils/src/type-schema/model.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Model } from '@contember/schema'\nimport { ParseError } from '@contember/typesafe'\n\nconst orderBySchema = Typesafe.array(Typesafe.object({\n\tpath: Typesafe.array(Typesafe.string),\n\tdirection: Typesafe.enumeration<Model.OrderDirection>(\n\t\tModel.OrderDirection.asc,\n\t\tModel.OrderDirection.desc,\n\t\tModel.OrderDirection.ascNullsFirst,\n\t\tModel.OrderDirection.descNullsLast,\n\t),\n}))\nconst joiningColumnSchema = Typesafe.object({\n\tcolumnName: Typesafe.string,\n\tonDelete: Typesafe.enumeration<Model.OnDelete>(Model.OnDelete.cascade, Model.OnDelete.restrict, Model.OnDelete.setNull),\n})\nconst oneHasManyRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.OneHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\townedBy: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst oneHasManyRelationSchemaCheck: Typesafe.Equals<Model.OneHasManyRelation, ReturnType<typeof oneHasManyRelationSchema>> = true\n\nconst manyHasOneRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasOne),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningColumn: joiningColumnSchema,\n\t\tnullable: Typesafe.boolean,\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t}),\n)\n\nconst manyHasOneRelationSchemaCheck: Typesafe.Equals<Model.ManyHasOneRelation, ReturnType<typeof manyHasOneRelationSchema>> = true\n\nconst oneHasOneInverseRelationSchema = Typesafe.object({\n\ttype: Typesafe.literal(Model.RelationType.OneHasOne),\n\tname: Typesafe.string,\n\ttarget: Typesafe.string,\n\townedBy: Typesafe.string,\n\tnullable: Typesafe.boolean,\n})\nconst oneHasOneInverseRelationSchemaCheck: Typesafe.Equals<Model.OneHasOneInverseRelation, ReturnType<typeof oneHasOneInverseRelationSchema>> = true\n\n\nconst oneHasOneOwningRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.OneHasOne),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningColumn: joiningColumnSchema,\n\t\tnullable: Typesafe.boolean,\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t\torphanRemoval: Typesafe.literal(true),\n\t}),\n)\n\nconst oneHasOneOwningRelationSchemaCheck: Typesafe.Equals<Model.OneHasOneOwningRelation, ReturnType<typeof oneHasOneOwningRelationSchema>> = true\n\nconst eventLogSchema = Typesafe.coalesce(Typesafe.object({\n\tenabled: Typesafe.boolean,\n}), { enabled: true }) as Typesafe.Type<{ readonly enabled: boolean }>\n\nconst manyHasManyOwningRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningTable: Typesafe.object({\n\t\t\ttableName: Typesafe.string,\n\t\t\tjoiningColumn: joiningColumnSchema,\n\t\t\tinverseJoiningColumn: joiningColumnSchema,\n\t\t\teventLog: eventLogSchema,\n\t\t}),\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst manyHasManyOwningRelationSchemaCheck: Typesafe.Equals<Model.ManyHasManyOwningRelation, ReturnType<typeof manyHasManyOwningRelationSchema>> = true\n\nconst manyHasManyInverseRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\townedBy: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst manyHasManyInverseRelationSchemaCheck: Typesafe.Equals<Model.ManyHasManyInverseRelation, ReturnType<typeof manyHasManyInverseRelationSchema>> = true\n\nconst intersectionSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tprecedence: Typesafe.enumeration('ALWAYS', 'BY DEFAULT'),\n\t}),\n\tTypesafe.partial({\n\t\tstart: Typesafe.number,\n\t}),\n)\nconst intersectionSchemaCheck: Typesafe.Equals<Model.AnyColumn['sequence'], ReturnType<typeof intersectionSchema>> = true\n\nconst columnSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tname: Typesafe.string,\n\t\tcolumnName: Typesafe.string,\n\t\tcolumnType: Typesafe.transform(Typesafe.string, (it, raw, path) => {\n\t\t\tif (!it.replaceAll(/\\s+/g, '').match(/^[\\w_]+(?:\\(\\w+(?:,\\w+)*\\))?\\w*(?:\"[^\"]+\")?(\\[])*$/)) {\n\t\t\t\tthrow ParseError.format(it, path, 'valid column type')\n\t\t\t}\n\t\t\treturn it\n\t\t}),\n\t\tnullable: Typesafe.boolean,\n\t\ttype: Typesafe.enumeration<Model.ColumnType>(...Object.values(Model.ColumnType)),\n\t}),\n\tTypesafe.partial({\n\t\ttypeAlias: Typesafe.string,\n\t\tlist: Typesafe.boolean,\n\t\tdefault: Typesafe.anyJson,\n\t\tsequence: intersectionSchema as Typesafe.Type<Model.AnyColumn['sequence']>,\n\t\tcollation: Typesafe.string as Typesafe.Type<Model.AnyColumn['collation']>,\n\t}),\n)\nconst columnSchemaCheck: Typesafe.Equals<Model.AnyColumn, ReturnType<typeof columnSchema>> = true\n\nconst fieldSchema: Typesafe.Type<Model.AnyField> = Typesafe.partiallyDiscriminatedUnion(\n\t'type',\n\toneHasOneInverseRelationSchema,\n\toneHasOneOwningRelationSchema,\n\toneHasManyRelationSchema,\n\tmanyHasOneRelationSchema,\n\tmanyHasManyInverseRelationSchema,\n\tmanyHasManyOwningRelationSchema,\n\tcolumnSchema,\n)\n\nconst viewSchemaInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\tsql: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tdependencies: Typesafe.array(Typesafe.string),\n\t\tidSource: Typesafe.array(Typesafe.string),\n\t\tmaterialized: Typesafe.boolean,\n\t}),\n)\nconst viewSchemaCheck: Typesafe.Equals<Model.View, ReturnType<typeof viewSchemaInner>> = true\nconst viewSchema: Typesafe.Type<Model.View> = viewSchemaInner\n\n\nconst indexSchemaBase = Typesafe.intersection(\n\tTypesafe.object({\n\t\tfields: Typesafe.array(Typesafe.string),\n\t}),\n\tTypesafe.partial({\n\t\tname: Typesafe.string,\n\t}),\n)\nconst indexCheck: Typesafe.Equals<Model.Index, ReturnType<typeof indexSchemaBase>> = true\n\nconst indexesSchema = Typesafe.coalesce<Model.Indexes, Model.Indexes>(\n\tTypesafe.preprocess(\n\t\tTypesafe.array(indexSchemaBase),\n\t\tit => it?.constructor === Object ? Object.values(it) : it,\n\t),\n\t[],\n)\n\nconst uniqueConstraint = Typesafe.intersection(\n\tTypesafe.object({\n\t\tfields: Typesafe.array(Typesafe.string),\n\t}),\n\tTypesafe.partial({\n\t\ttiming: Typesafe.enumeration('deferrable', 'deferred'),\n\t\tname: Typesafe.string,\n\t\tindex: Typesafe.literal(false),\n\t}),\n)\nconst uniqueIndex = Typesafe.intersection(\n\tTypesafe.object({\n\t\tfields: Typesafe.array(Typesafe.string),\n\t\tindex: Typesafe.literal(true),\n\t}),\n\tTypesafe.partial({\n\t\tnulls: Typesafe.enumeration('distinct', 'not distinct'),\n\t}),\n)\nconst uniqueConstraintCheck: Typesafe.Equals<Model.UniqueConstraint, ReturnType<typeof uniqueConstraint>> = true\nconst uniqueIndexCheck: Typesafe.Equals<Model.UniqueIndex, ReturnType<typeof uniqueIndex>> = true\n\nconst entitySchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tname: Typesafe.string,\n\t\tprimary: Typesafe.string,\n\t\tprimaryColumn: Typesafe.string,\n\t\ttableName: Typesafe.string,\n\t\tfields: Typesafe.record(Typesafe.string, fieldSchema),\n\t\tunique: Typesafe.preprocess<Model.Uniques>(\n\t\t\tTypesafe.array(Typesafe.union(uniqueConstraint, uniqueIndex)),\n\t\t\tit => it?.constructor === Object ? Object.values(it) : it,\n\t\t),\n\t\tindexes: indexesSchema,\n\t\teventLog: eventLogSchema,\n\t}),\n\tTypesafe.partial({\n\t\tview: viewSchema,\n\t\torderBy: orderBySchema,\n\t}),\n)\n\nconst entitySchemaCheck: Typesafe.Equals<Model.Entity, ReturnType<typeof entitySchema>> = true\n\nexport const modelSchema = Typesafe.object({\n\tentities: Typesafe.record(Typesafe.string, entitySchema),\n\tenums: Typesafe.record(Typesafe.string, Typesafe.array(Typesafe.string)),\n})\n\n"],"names":[],"mappings":"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"}
@@ -26,7 +26,8 @@ const settingsSchema = Typesafe__namespace.partial({
26
26
  content: Typesafe__namespace.partial({
27
27
  useExistsInHasManyFilter: Typesafe__namespace.boolean,
28
28
  fullDateTimeResponse: Typesafe__namespace.boolean,
29
- shortDateResponse: Typesafe__namespace.boolean
29
+ shortDateResponse: Typesafe__namespace.boolean,
30
+ uuidVersion: Typesafe__namespace.union(Typesafe__namespace.literal(4), Typesafe__namespace.literal(7))
30
31
  })
31
32
  });
32
33
  exports.settingsSchema = settingsSchema;
@@ -1 +1 @@
1
- {"version":3,"file":"settings.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/settings.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Settings } from '@contember/schema'\n\nexport const settingsSchema = Typesafe.partial({\n\tuseExistsInHasManyFilter: Typesafe.boolean,\n\n\ttenant: Typesafe.partial({\n\t\tinviteExpirationMinutes: Typesafe.integer,\n\t}),\n\tcontent: Typesafe.partial({\n\t\tuseExistsInHasManyFilter: Typesafe.boolean,\n\t\tfullDateTimeResponse: Typesafe.boolean,\n\t\tshortDateResponse: Typesafe.boolean,\n\t}),\n})\n\nconst settingSchemaCheck: Typesafe.Equals<Settings.Schema, ReturnType<typeof settingsSchema>> = true\n"],"names":["Typesafe"],"mappings":";;;;;;;;;;;;;;;;;;;;AAGa,MAAA,iBAAiBA,oBAAS,QAAQ;AAAA,EAC9C,0BAA0BA,oBAAS;AAAA,EAEnC,QAAQA,oBAAS,QAAQ;AAAA,IACxB,yBAAyBA,oBAAS;AAAA,EAAA,CAClC;AAAA,EACD,SAASA,oBAAS,QAAQ;AAAA,IACzB,0BAA0BA,oBAAS;AAAA,IACnC,sBAAsBA,oBAAS;AAAA,IAC/B,mBAAmBA,oBAAS;AAAA,EAC5B,CAAA;AACF,CAAC;;"}
1
+ {"version":3,"file":"settings.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/settings.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Settings } from '@contember/schema'\n\nexport const settingsSchema = Typesafe.partial({\n\tuseExistsInHasManyFilter: Typesafe.boolean,\n\n\ttenant: Typesafe.partial({\n\t\tinviteExpirationMinutes: Typesafe.integer,\n\t}),\n\tcontent: Typesafe.partial({\n\t\tuseExistsInHasManyFilter: Typesafe.boolean,\n\t\tfullDateTimeResponse: Typesafe.boolean,\n\t\tshortDateResponse: Typesafe.boolean,\n\t\tuuidVersion: Typesafe.union(Typesafe.literal(4), Typesafe.literal(7)),\n\t}),\n})\n\nconst settingSchemaCheck: Typesafe.Equals<Settings.Schema, ReturnType<typeof settingsSchema>> = true\n"],"names":["Typesafe"],"mappings":";;;;;;;;;;;;;;;;;;;;AAGa,MAAA,iBAAiBA,oBAAS,QAAQ;AAAA,EAC9C,0BAA0BA,oBAAS;AAAA,EAEnC,QAAQA,oBAAS,QAAQ;AAAA,IACxB,yBAAyBA,oBAAS;AAAA,EAAA,CAClC;AAAA,EACD,SAASA,oBAAS,QAAQ;AAAA,IACzB,0BAA0BA,oBAAS;AAAA,IACnC,sBAAsBA,oBAAS;AAAA,IAC/B,mBAAmBA,oBAAS;AAAA,IAC5B,aAAaA,oBAAS,MAAMA,oBAAS,QAAQ,CAAC,GAAGA,oBAAS,QAAQ,CAAC,CAAC;AAAA,EACpE,CAAA;AACF,CAAC;;"}
@@ -7,7 +7,8 @@ const settingsSchema = Typesafe.partial({
7
7
  content: Typesafe.partial({
8
8
  useExistsInHasManyFilter: Typesafe.boolean,
9
9
  fullDateTimeResponse: Typesafe.boolean,
10
- shortDateResponse: Typesafe.boolean
10
+ shortDateResponse: Typesafe.boolean,
11
+ uuidVersion: Typesafe.union(Typesafe.literal(4), Typesafe.literal(7))
11
12
  })
12
13
  });
13
14
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sources":["../../../../../packages/schema-utils/src/type-schema/settings.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Settings } from '@contember/schema'\n\nexport const settingsSchema = Typesafe.partial({\n\tuseExistsInHasManyFilter: Typesafe.boolean,\n\n\ttenant: Typesafe.partial({\n\t\tinviteExpirationMinutes: Typesafe.integer,\n\t}),\n\tcontent: Typesafe.partial({\n\t\tuseExistsInHasManyFilter: Typesafe.boolean,\n\t\tfullDateTimeResponse: Typesafe.boolean,\n\t\tshortDateResponse: Typesafe.boolean,\n\t}),\n})\n\nconst settingSchemaCheck: Typesafe.Equals<Settings.Schema, ReturnType<typeof settingsSchema>> = true\n"],"names":[],"mappings":";AAGa,MAAA,iBAAiB,SAAS,QAAQ;AAAA,EAC9C,0BAA0B,SAAS;AAAA,EAEnC,QAAQ,SAAS,QAAQ;AAAA,IACxB,yBAAyB,SAAS;AAAA,EAAA,CAClC;AAAA,EACD,SAAS,SAAS,QAAQ;AAAA,IACzB,0BAA0B,SAAS;AAAA,IACnC,sBAAsB,SAAS;AAAA,IAC/B,mBAAmB,SAAS;AAAA,EAC5B,CAAA;AACF,CAAC;"}
1
+ {"version":3,"file":"settings.js","sources":["../../../../../packages/schema-utils/src/type-schema/settings.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Settings } from '@contember/schema'\n\nexport const settingsSchema = Typesafe.partial({\n\tuseExistsInHasManyFilter: Typesafe.boolean,\n\n\ttenant: Typesafe.partial({\n\t\tinviteExpirationMinutes: Typesafe.integer,\n\t}),\n\tcontent: Typesafe.partial({\n\t\tuseExistsInHasManyFilter: Typesafe.boolean,\n\t\tfullDateTimeResponse: Typesafe.boolean,\n\t\tshortDateResponse: Typesafe.boolean,\n\t\tuuidVersion: Typesafe.union(Typesafe.literal(4), Typesafe.literal(7)),\n\t}),\n})\n\nconst settingSchemaCheck: Typesafe.Equals<Settings.Schema, ReturnType<typeof settingsSchema>> = true\n"],"names":[],"mappings":";AAGa,MAAA,iBAAiB,SAAS,QAAQ;AAAA,EAC9C,0BAA0B,SAAS;AAAA,EAEnC,QAAQ,SAAS,QAAQ;AAAA,IACxB,yBAAyB,SAAS;AAAA,EAAA,CAClC;AAAA,EACD,SAAS,SAAS,QAAQ;AAAA,IACzB,0BAA0B,SAAS;AAAA,IACnC,sBAAsB,SAAS;AAAA,IAC/B,mBAAmB,SAAS;AAAA,IAC5B,aAAa,SAAS,MAAM,SAAS,QAAQ,CAAC,GAAG,SAAS,QAAQ,CAAC,CAAC;AAAA,EACpE,CAAA;AACF,CAAC;"}
@@ -47,17 +47,22 @@ class ModelValidator {
47
47
  }
48
48
  }
49
49
  this.validateUniqueConstraints(
50
- entity.unique,
51
- new Set(Object.keys(entity.fields)),
50
+ entity,
52
51
  errors2.for("unique")
53
52
  );
54
53
  this.validateColumnNamesCollision(entity, errors2);
55
54
  }
56
- validateUniqueConstraints(uniqueConstraints, fields, errors2) {
57
- for (const constraint of uniqueConstraints) {
55
+ validateUniqueConstraints(entity, errors2) {
56
+ for (const constraint of entity.unique) {
57
+ if (entity.view?.materialized && !constraint.index) {
58
+ errors2.add("MODEL_INVALID_CONSTRAINT", "For materialized views, Unique must be defined as an index. Please set index: true.");
59
+ }
58
60
  for (const field of constraint.fields) {
59
- if (!fields.has(field)) {
61
+ const fieldDef = entity.fields[field];
62
+ if (!fieldDef) {
60
63
  errors2.add("MODEL_UNDEFINED_FIELD", `Referenced field ${field} in a constraint does not exists`);
64
+ } else if (modelUtils.isColumn(fieldDef) && fieldDef.list) {
65
+ errors2.add("MODEL_INVALID_FIELD", `Field ${field} in a unique constraint cannot be an array`);
61
66
  }
62
67
  }
63
68
  }
@@ -174,11 +179,6 @@ class ModelValidator {
174
179
  }
175
180
  } else {
176
181
  const inversedBy = field.inversedBy;
177
- if (targetEntity.view) {
178
- if ("joiningColumn" in field) {
179
- return errors2.add("MODEL_INVALID_VIEW_USAGE", `View entity ${targetEntity.name} cannot be referenced from an owning relation. Try switching the owning side.`);
180
- }
181
- }
182
182
  if (inversedBy) {
183
183
  const targetField = targetEntity.fields[inversedBy];
184
184
  const relationDescription = `Target relation ${targetEntityName}::${inversedBy}:`;