@contember/schema-utils 2.1.0-alpha.3 → 2.1.0-alpha.30

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 (54) hide show
  1. package/dist/development/src/type-schema/acl.cjs +2 -2
  2. package/dist/development/src/type-schema/acl.cjs.map +1 -1
  3. package/dist/development/src/type-schema/acl.js +2 -2
  4. package/dist/development/src/type-schema/acl.js.map +1 -1
  5. package/dist/development/src/type-schema/actions.cjs +2 -1
  6. package/dist/development/src/type-schema/actions.cjs.map +1 -1
  7. package/dist/development/src/type-schema/actions.js +2 -1
  8. package/dist/development/src/type-schema/actions.js.map +1 -1
  9. package/dist/development/src/type-schema/condition.cjs +4 -1
  10. package/dist/development/src/type-schema/condition.cjs.map +1 -1
  11. package/dist/development/src/type-schema/condition.js +4 -1
  12. package/dist/development/src/type-schema/condition.js.map +1 -1
  13. package/dist/development/src/type-schema/model.cjs +4 -2
  14. package/dist/development/src/type-schema/model.cjs.map +1 -1
  15. package/dist/development/src/type-schema/model.js +4 -2
  16. package/dist/development/src/type-schema/model.js.map +1 -1
  17. package/dist/development/src/validation/MembershipResolver.cjs +10 -7
  18. package/dist/development/src/validation/MembershipResolver.cjs.map +1 -1
  19. package/dist/development/src/validation/MembershipResolver.js +10 -7
  20. package/dist/development/src/validation/MembershipResolver.js.map +1 -1
  21. package/dist/production/src/type-schema/acl.cjs +2 -2
  22. package/dist/production/src/type-schema/acl.cjs.map +1 -1
  23. package/dist/production/src/type-schema/acl.js +2 -2
  24. package/dist/production/src/type-schema/acl.js.map +1 -1
  25. package/dist/production/src/type-schema/actions.cjs +2 -1
  26. package/dist/production/src/type-schema/actions.cjs.map +1 -1
  27. package/dist/production/src/type-schema/actions.js +2 -1
  28. package/dist/production/src/type-schema/actions.js.map +1 -1
  29. package/dist/production/src/type-schema/condition.cjs +4 -1
  30. package/dist/production/src/type-schema/condition.cjs.map +1 -1
  31. package/dist/production/src/type-schema/condition.js +4 -1
  32. package/dist/production/src/type-schema/condition.js.map +1 -1
  33. package/dist/production/src/type-schema/model.cjs +4 -2
  34. package/dist/production/src/type-schema/model.cjs.map +1 -1
  35. package/dist/production/src/type-schema/model.js +4 -2
  36. package/dist/production/src/type-schema/model.js.map +1 -1
  37. package/dist/production/src/validation/MembershipResolver.cjs +10 -7
  38. package/dist/production/src/validation/MembershipResolver.cjs.map +1 -1
  39. package/dist/production/src/validation/MembershipResolver.js +10 -7
  40. package/dist/production/src/validation/MembershipResolver.js.map +1 -1
  41. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  42. package/dist/types/tsconfig.tsbuildinfo +1 -1
  43. package/dist/types/type-schema/actions.d.ts +1 -0
  44. package/dist/types/type-schema/actions.d.ts.map +1 -1
  45. package/dist/types/type-schema/model.d.ts.map +1 -1
  46. package/dist/types/validation/MembershipResolver.d.ts +1 -1
  47. package/dist/types/validation/MembershipResolver.d.ts.map +1 -1
  48. package/package.json +4 -4
  49. package/src/type-schema/acl.ts +2 -2
  50. package/src/type-schema/actions.ts +1 -0
  51. package/src/type-schema/condition.ts +4 -1
  52. package/src/type-schema/model.ts +2 -0
  53. package/src/validation/MembershipResolver.ts +10 -6
  54. package/tests/cases/unit/membershipResolver.test.ts +67 -8
@@ -20,7 +20,7 @@ function _interopNamespaceDefault(e) {
20
20
  return Object.freeze(n);
21
21
  }
22
22
  const Typesafe__namespace = /* @__PURE__ */ _interopNamespaceDefault(Typesafe);
23
- const membershipMatchRuleSchema = Typesafe__namespace.record(
23
+ const membershipMatchRuleSchema = Typesafe__namespace.union(Typesafe__namespace.boolean, Typesafe__namespace.record(
24
24
  Typesafe__namespace.string,
25
25
  Typesafe__namespace.union(
26
26
  Typesafe__namespace.literal(true),
@@ -34,7 +34,7 @@ const membershipMatchRuleSchema = Typesafe__namespace.record(
34
34
  )
35
35
  })
36
36
  )
37
- );
37
+ ));
38
38
  const tenantPermissionsSchema = Typesafe__namespace.partial({
39
39
  invite: Typesafe__namespace.union(Typesafe__namespace.boolean, membershipMatchRuleSchema),
40
40
  unmanagedInvite: Typesafe__namespace.union(Typesafe__namespace.boolean, membershipMatchRuleSchema),
@@ -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\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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"}
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.union(Typesafe.boolean, 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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"}
@@ -1,7 +1,7 @@
1
1
  import { Acl } from "@contember/schema";
2
2
  import * as Typesafe from "@contember/typesafe";
3
3
  import { conditionSchema } from "./condition.js";
4
- const membershipMatchRuleSchema = Typesafe.record(
4
+ const membershipMatchRuleSchema = Typesafe.union(Typesafe.boolean, Typesafe.record(
5
5
  Typesafe.string,
6
6
  Typesafe.union(
7
7
  Typesafe.literal(true),
@@ -15,7 +15,7 @@ const membershipMatchRuleSchema = Typesafe.record(
15
15
  )
16
16
  })
17
17
  )
18
- );
18
+ ));
19
19
  const tenantPermissionsSchema = Typesafe.partial({
20
20
  invite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),
21
21
  unmanagedInvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),
@@ -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\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":";;;AAIA,MAAM,4BAA4B,SAAS;AAAA,EAC1C,SAAS;AAAA,EACT,SAAS;AAAA,IACR,SAAS,QAAQ,IAAI;AAAA,IACrB,SAAS,QAAQ;AAAA,MAChB,WAAW,SAAS;AAAA,QACnB,SAAS,QAAQ,IAAI;AAAA,QACrB,SAAS;AAAA,UACR,SAAS;AAAA,UACT,SAAS,MAAM,SAAS,QAAQ,IAAI,GAAG,SAAS,MAAM;AAAA,QAAA;AAAA,MACvD;AAAA,IAED,CAAA;AAAA,EAAA;AAEH;AAEA,MAAM,0BAA0B,SAAS,QAAQ;AAAA,EAChD,QAAQ,SAAS,MAAM,SAAS,SAAS,yBAAyB;AAAA,EAClE,iBAAiB,SAAS,MAAM,SAAS,SAAS,yBAAyB;AAAA,EAC3E,QAAQ;AAAA,EACR,MAAM;AACP,CAAC;AAGD,MAAM,0BAA0B,SAAS,QAAQ;AAAA,EAChD,SAAS,SAAS,MAAM,SAAS,SAAS,SAAS,YAAY,OAAO,MAAM,CAAC;AAAA,EAC7E,SAAS,SAAS;AAAA,EAClB,gBAAgB,SAAS;AAAA,EACzB,QAAQ,SAAS;AAAA,EACjB,QAAQ,SAAS;AAClB,CAAC;AAGD,MAAM,2BAA2B,SAAS,QAAQ;AAAA,EACjD,kBAAkB;AAAA,EAClB,QAAQ,SAAS;AAAA,EACjB,QAAQ,SAAS;AAAA,EACjB,yBAAyB,SAAS;AACnC,CAAC;AAGD,MAAM,uBAAuB,SAAS;AAAA,EACrC,SAAS,OAAO;AAAA,IACf,MAAM,SAAS,QAAQ,IAAI,aAAa,MAAM;AAAA,IAC9C,YAAY,SAAS;AAAA,EAAA,CACrB;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,UAAU,gBAAgB;AAAA,EAC1B,CAAA;AACF;AAGA,MAAM,2BAA2B,SAAS,OAAO;AAAA,EAChD,MAAM,SAAS,QAAQ,IAAI,aAAa,UAAU;AAAA,EAClD,OAAO,SAAS,YAAY,cAAc,UAAU;AACrD,CAAC;AACD,MAAM,0BAA0B,SAAS;AAAA,EACxC,SAAS,OAAO;AAAA,IACf,MAAM,SAAS,QAAQ,IAAI,aAAa,SAAS;AAAA,EAAA,CACjD;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,UAAU,gBAAgB;AAAA,EAC1B,CAAA;AACF;AAGA,MAAM,kBAAkB,SAAS;AAAA,EAChC,SAAS;AAAA,EACT,SAAS;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEF;AAIA,MAAM,yBAAyB,SAAS;AAAA,EACvC,SAAS;AAAA,EACT,SAAS,MAAM,SAAS,QAAQ,SAAS,OAAO;AACjD;AACA,MAAM,mBAAmB,SAAS;AAAA,EACjC,SAAS;AAAA,EACT,CAAC,GAAG,MAA+B,SAAS,cAAc,GAAG,CAAC;AAC/D;AAIA,MAAM,yBAAyB,SAAS,QAAQ;AAAA,EAC/C,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ,SAAS,MAAM,SAAS,QAAQ,SAAS,OAAO;AAAA,EACxD,eAAe,SAAS;AAAA,EACxB,yBAAyB,SAAS;AAAA,EAClC,QAAQ,SAAS,MAAM,SAAS,YAAY,UAAU,QAAQ,UAAU,QAAQ,CAAC;AAClF,CAAC;AAGD,MAAM,iBAAiB,SAAS;AAAA,EAC/B,SAAS;AAAA,EACT,SAAS,OAAO;AAAA,IACf,YAAY;AAAA,IACZ,YAAY;AAAA,EACZ,CAAA;AACF;AAGA,MAAM,4BAA4B,SAAS;AAAA,EAC1C,SAAS,OAAO;AAAA,IACf,WAAW;AAAA,IACX,UAAU;AAAA,EAAA,CACV;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,UAAU,SAAS,MAAM,SAAS,MAAM;AAAA,IACxC,UAAU,SAAS;AAAA,IACnB,QAAQ,SAAS;AAAA,MAChB,SAAS,QAAQ,GAAG;AAAA,MACpB,SAAS,MAAM,SAAS,MAAM;AAAA,IAC/B;AAAA,IACA,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO,SAAS;AAAA,EAChB,CAAA;AACF;AAGO,MAAM,YAAY,SAAS;AAAA,EACjC,SAAS,OAAO;AAAA,IACf,OAAO,SAAS;AAAA,MACf,SAAS;AAAA,MACT,CAAC,GAAG,MAA2B;AACxB,cAAA,OAAgC,0BAA0B,GAAG,CAAC;AAC7D,eAAA;AAAA,UACN,GAAI;AAAA,UACJ,GAAG;AAAA,QACJ;AAAA,MAAA;AAAA,IACD;AAAA,EACD,CACA;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,eAAe,SAAS;AAAA,EACxB,CAAA;AACF;"}
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.union(Typesafe.boolean, 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":";;;AAIA,MAAM,4BAA4B,SAAS,MAAM,SAAS,SAAS,SAAS;AAAA,EAC3E,SAAS;AAAA,EACT,SAAS;AAAA,IACR,SAAS,QAAQ,IAAI;AAAA,IACrB,SAAS,QAAQ;AAAA,MAChB,WAAW,SAAS;AAAA,QACnB,SAAS,QAAQ,IAAI;AAAA,QACrB,SAAS;AAAA,UACR,SAAS;AAAA,UACT,SAAS,MAAM,SAAS,QAAQ,IAAI,GAAG,SAAS,MAAM;AAAA,QAAA;AAAA,MACvD;AAAA,IAED,CAAA;AAAA,EAAA;AAEH,CAAC;AAED,MAAM,0BAA0B,SAAS,QAAQ;AAAA,EAChD,QAAQ,SAAS,MAAM,SAAS,SAAS,yBAAyB;AAAA,EAClE,iBAAiB,SAAS,MAAM,SAAS,SAAS,yBAAyB;AAAA,EAC3E,QAAQ;AAAA,EACR,MAAM;AACP,CAAC;AAGD,MAAM,0BAA0B,SAAS,QAAQ;AAAA,EAChD,SAAS,SAAS,MAAM,SAAS,SAAS,SAAS,YAAY,OAAO,MAAM,CAAC;AAAA,EAC7E,SAAS,SAAS;AAAA,EAClB,gBAAgB,SAAS;AAAA,EACzB,QAAQ,SAAS;AAAA,EACjB,QAAQ,SAAS;AAClB,CAAC;AAGD,MAAM,2BAA2B,SAAS,QAAQ;AAAA,EACjD,kBAAkB;AAAA,EAClB,QAAQ,SAAS;AAAA,EACjB,QAAQ,SAAS;AAAA,EACjB,yBAAyB,SAAS;AACnC,CAAC;AAGD,MAAM,uBAAuB,SAAS;AAAA,EACrC,SAAS,OAAO;AAAA,IACf,MAAM,SAAS,QAAQ,IAAI,aAAa,MAAM;AAAA,IAC9C,YAAY,SAAS;AAAA,EAAA,CACrB;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,UAAU,gBAAgB;AAAA,EAC1B,CAAA;AACF;AAGA,MAAM,2BAA2B,SAAS,OAAO;AAAA,EAChD,MAAM,SAAS,QAAQ,IAAI,aAAa,UAAU;AAAA,EAClD,OAAO,SAAS,YAAY,cAAc,UAAU;AACrD,CAAC;AACD,MAAM,0BAA0B,SAAS;AAAA,EACxC,SAAS,OAAO;AAAA,IACf,MAAM,SAAS,QAAQ,IAAI,aAAa,SAAS;AAAA,EAAA,CACjD;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,UAAU,gBAAgB;AAAA,EAC1B,CAAA;AACF;AAGA,MAAM,kBAAkB,SAAS;AAAA,EAChC,SAAS;AAAA,EACT,SAAS;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEF;AAIA,MAAM,yBAAyB,SAAS;AAAA,EACvC,SAAS;AAAA,EACT,SAAS,MAAM,SAAS,QAAQ,SAAS,OAAO;AACjD;AACA,MAAM,mBAAmB,SAAS;AAAA,EACjC,SAAS;AAAA,EACT,CAAC,GAAG,MAA+B,SAAS,cAAc,GAAG,CAAC;AAC/D;AAIA,MAAM,yBAAyB,SAAS,QAAQ;AAAA,EAC/C,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ,SAAS,MAAM,SAAS,QAAQ,SAAS,OAAO;AAAA,EACxD,eAAe,SAAS;AAAA,EACxB,yBAAyB,SAAS;AAAA,EAClC,QAAQ,SAAS,MAAM,SAAS,YAAY,UAAU,QAAQ,UAAU,QAAQ,CAAC;AAClF,CAAC;AAGD,MAAM,iBAAiB,SAAS;AAAA,EAC/B,SAAS;AAAA,EACT,SAAS,OAAO;AAAA,IACf,YAAY;AAAA,IACZ,YAAY;AAAA,EACZ,CAAA;AACF;AAGA,MAAM,4BAA4B,SAAS;AAAA,EAC1C,SAAS,OAAO;AAAA,IACf,WAAW;AAAA,IACX,UAAU;AAAA,EAAA,CACV;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,UAAU,SAAS,MAAM,SAAS,MAAM;AAAA,IACxC,UAAU,SAAS;AAAA,IACnB,QAAQ,SAAS;AAAA,MAChB,SAAS,QAAQ,GAAG;AAAA,MACpB,SAAS,MAAM,SAAS,MAAM;AAAA,IAC/B;AAAA,IACA,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO,SAAS;AAAA,EAChB,CAAA;AACF;AAGO,MAAM,YAAY,SAAS;AAAA,EACjC,SAAS,OAAO;AAAA,IACf,OAAO,SAAS;AAAA,MACf,SAAS;AAAA,MACT,CAAC,GAAG,MAA2B;AACxB,cAAA,OAAgC,0BAA0B,GAAG,CAAC;AAC7D,eAAA;AAAA,UACN,GAAI;AAAA,UACJ,GAAG;AAAA,QACJ;AAAA,MAAA;AAAA,IACD;AAAA,EACD,CACA;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,eAAe,SAAS;AAAA,EACxB,CAAA;AACF;"}
@@ -57,7 +57,8 @@ const watchTriggerSchema = Typesafe__namespace.intersection(
57
57
  }),
58
58
  Typesafe__namespace.partial({
59
59
  selection: selectionNodeSchemaFactory(),
60
- priority: Typesafe__namespace.integer
60
+ priority: Typesafe__namespace.integer,
61
+ withNodes: Typesafe__namespace.boolean
61
62
  })
62
63
  );
63
64
  const basicTriggerSchema = Typesafe__namespace.intersection(
@@ -1 +1 @@
1
- {"version":3,"file":"actions.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/actions.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Actions } from '@contember/schema'\n\nconst selectionNodeSchemaFactory = (): Typesafe.Type<Actions.SelectionNode> => {\n\treturn (input: unknown, path: PropertyKey[] = []): Actions.SelectionNode => {\n\t\treturn Typesafe.array(Typesafe.union(\n\t\t\tTypesafe.string,\n\t\t\tTypesafe.tuple(\n\t\t\t\tTypesafe.string,\n\t\t\t\tTypesafe.anyJsonObject,\n\t\t\t\tselectionNodeSchemaFactory(),\n\t\t\t),\n\t\t))(input, path)\n\t}\n}\n\nconst webhookTargetSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('webhook'),\n\t\tname: Typesafe.string,\n\t\turl: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\theaders: Typesafe.record(Typesafe.string, Typesafe.string),\n\t\ttimeoutMs: Typesafe.integer,\n\t\tmaxAttempts: Typesafe.integer,\n\t\tinitialRepeatIntervalMs: Typesafe.integer,\n\t\tbatchSize: Typesafe.integer,\n\t\tbody: Typesafe.anyJsonObject,\n\t\tpayloadPath: Typesafe.array(Typesafe.string),\n\t}),\n)\nconst webhookTargetSchemaCheck: Typesafe.Equals<Actions.WebhookTarget, ReturnType<typeof webhookTargetSchema>> = true\n\nconst anyTargetSchema: Typesafe.Type<Actions.AnyTarget> = Typesafe.union(webhookTargetSchema)\n\nconst watchTriggerSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('watch'),\n\t\tname: Typesafe.string,\n\t\tentity: Typesafe.string,\n\t\twatch: selectionNodeSchemaFactory(),\n\t\ttarget: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tselection: selectionNodeSchemaFactory(),\n\t\tpriority: Typesafe.integer,\n\t}),\n)\n\nconst watchTriggerSchemaCheck: Typesafe.Equals<Actions.WatchTrigger, ReturnType<typeof watchTriggerSchema>> = true\n\n\nconst basicTriggerSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('basic'),\n\t\tname: Typesafe.string,\n\t\tentity: Typesafe.string,\n\t\tcreate: Typesafe.boolean,\n\t\tdelete: Typesafe.boolean,\n\t\tupdate: Typesafe.union(Typesafe.boolean, Typesafe.array(Typesafe.string)),\n\t\ttarget: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tselection: selectionNodeSchemaFactory(),\n\t\tpriority: Typesafe.integer,\n\t}),\n)\n\nconst basicTriggerSchemaCheck: Typesafe.Equals<Actions.BasicTrigger, ReturnType<typeof basicTriggerSchema>> = true\n\n\nconst anyTriggerSchema = Typesafe.union(\n\twatchTriggerSchema,\n\tbasicTriggerSchema,\n)\n\nexport const actionsSchema = Typesafe.object({\n\ttriggers: Typesafe.record(Typesafe.string, anyTriggerSchema),\n\ttargets: Typesafe.record(Typesafe.string, anyTargetSchema),\n})\n"],"names":["Typesafe"],"mappings":";;;;;;;;;;;;;;;;;;;;AAGA,MAAM,6BAA6B,MAA4C;AAC9E,SAAO,CAAC,OAAgB,OAAsB,OAA8B;AACpE,WAAAA,oBAAS,MAAMA,oBAAS;AAAA,MAC9BA,oBAAS;AAAA,MACTA,oBAAS;AAAA,QACRA,oBAAS;AAAA,QACTA,oBAAS;AAAA,QACT,2BAA2B;AAAA,MAAA;AAAA,IAC5B,CACA,EAAE,OAAO,IAAI;AAAA,EACf;AACD;AAEA,MAAM,sBAAsBA,oBAAS;AAAA,EACpCA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQ,SAAS;AAAA,IAChC,MAAMA,oBAAS;AAAA,IACf,KAAKA,oBAAS;AAAA,EAAA,CACd;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,SAASA,oBAAS,OAAOA,oBAAS,QAAQA,oBAAS,MAAM;AAAA,IACzD,WAAWA,oBAAS;AAAA,IACpB,aAAaA,oBAAS;AAAA,IACtB,yBAAyBA,oBAAS;AAAA,IAClC,WAAWA,oBAAS;AAAA,IACpB,MAAMA,oBAAS;AAAA,IACf,aAAaA,oBAAS,MAAMA,oBAAS,MAAM;AAAA,EAC3C,CAAA;AACF;AAGA,MAAM,kBAAoDA,oBAAS,MAAM,mBAAmB;AAE5F,MAAM,qBAAqBA,oBAAS;AAAA,EACnCA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQ,OAAO;AAAA,IAC9B,MAAMA,oBAAS;AAAA,IACf,QAAQA,oBAAS;AAAA,IACjB,OAAO,2BAA2B;AAAA,IAClC,QAAQA,oBAAS;AAAA,EAAA,CACjB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,WAAW,2BAA2B;AAAA,IACtC,UAAUA,oBAAS;AAAA,EACnB,CAAA;AACF;AAKA,MAAM,qBAAqBA,oBAAS;AAAA,EACnCA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQ,OAAO;AAAA,IAC9B,MAAMA,oBAAS;AAAA,IACf,QAAQA,oBAAS;AAAA,IACjB,QAAQA,oBAAS;AAAA,IACjB,QAAQA,oBAAS;AAAA,IACjB,QAAQA,oBAAS,MAAMA,oBAAS,SAASA,oBAAS,MAAMA,oBAAS,MAAM,CAAC;AAAA,IACxE,QAAQA,oBAAS;AAAA,EAAA,CACjB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,WAAW,2BAA2B;AAAA,IACtC,UAAUA,oBAAS;AAAA,EACnB,CAAA;AACF;AAKA,MAAM,mBAAmBA,oBAAS;AAAA,EACjC;AAAA,EACA;AACD;AAEa,MAAA,gBAAgBA,oBAAS,OAAO;AAAA,EAC5C,UAAUA,oBAAS,OAAOA,oBAAS,QAAQ,gBAAgB;AAAA,EAC3D,SAASA,oBAAS,OAAOA,oBAAS,QAAQ,eAAe;AAC1D,CAAC;;"}
1
+ {"version":3,"file":"actions.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/actions.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Actions } from '@contember/schema'\n\nconst selectionNodeSchemaFactory = (): Typesafe.Type<Actions.SelectionNode> => {\n\treturn (input: unknown, path: PropertyKey[] = []): Actions.SelectionNode => {\n\t\treturn Typesafe.array(Typesafe.union(\n\t\t\tTypesafe.string,\n\t\t\tTypesafe.tuple(\n\t\t\t\tTypesafe.string,\n\t\t\t\tTypesafe.anyJsonObject,\n\t\t\t\tselectionNodeSchemaFactory(),\n\t\t\t),\n\t\t))(input, path)\n\t}\n}\n\nconst webhookTargetSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('webhook'),\n\t\tname: Typesafe.string,\n\t\turl: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\theaders: Typesafe.record(Typesafe.string, Typesafe.string),\n\t\ttimeoutMs: Typesafe.integer,\n\t\tmaxAttempts: Typesafe.integer,\n\t\tinitialRepeatIntervalMs: Typesafe.integer,\n\t\tbatchSize: Typesafe.integer,\n\t\tbody: Typesafe.anyJsonObject,\n\t\tpayloadPath: Typesafe.array(Typesafe.string),\n\t}),\n)\nconst webhookTargetSchemaCheck: Typesafe.Equals<Actions.WebhookTarget, ReturnType<typeof webhookTargetSchema>> = true\n\nconst anyTargetSchema: Typesafe.Type<Actions.AnyTarget> = Typesafe.union(webhookTargetSchema)\n\nconst watchTriggerSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('watch'),\n\t\tname: Typesafe.string,\n\t\tentity: Typesafe.string,\n\t\twatch: selectionNodeSchemaFactory(),\n\t\ttarget: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tselection: selectionNodeSchemaFactory(),\n\t\tpriority: Typesafe.integer,\n\t\twithNodes: Typesafe.boolean,\n\t}),\n)\n\nconst watchTriggerSchemaCheck: Typesafe.Equals<Actions.WatchTrigger, ReturnType<typeof watchTriggerSchema>> = true\n\n\nconst basicTriggerSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('basic'),\n\t\tname: Typesafe.string,\n\t\tentity: Typesafe.string,\n\t\tcreate: Typesafe.boolean,\n\t\tdelete: Typesafe.boolean,\n\t\tupdate: Typesafe.union(Typesafe.boolean, Typesafe.array(Typesafe.string)),\n\t\ttarget: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tselection: selectionNodeSchemaFactory(),\n\t\tpriority: Typesafe.integer,\n\t}),\n)\n\nconst basicTriggerSchemaCheck: Typesafe.Equals<Actions.BasicTrigger, ReturnType<typeof basicTriggerSchema>> = true\n\n\nconst anyTriggerSchema = Typesafe.union(\n\twatchTriggerSchema,\n\tbasicTriggerSchema,\n)\n\nexport const actionsSchema = Typesafe.object({\n\ttriggers: Typesafe.record(Typesafe.string, anyTriggerSchema),\n\ttargets: Typesafe.record(Typesafe.string, anyTargetSchema),\n})\n"],"names":["Typesafe"],"mappings":";;;;;;;;;;;;;;;;;;;;AAGA,MAAM,6BAA6B,MAA4C;AAC9E,SAAO,CAAC,OAAgB,OAAsB,OAA8B;AACpE,WAAAA,oBAAS,MAAMA,oBAAS;AAAA,MAC9BA,oBAAS;AAAA,MACTA,oBAAS;AAAA,QACRA,oBAAS;AAAA,QACTA,oBAAS;AAAA,QACT,2BAA2B;AAAA,MAAA;AAAA,IAC5B,CACA,EAAE,OAAO,IAAI;AAAA,EACf;AACD;AAEA,MAAM,sBAAsBA,oBAAS;AAAA,EACpCA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQ,SAAS;AAAA,IAChC,MAAMA,oBAAS;AAAA,IACf,KAAKA,oBAAS;AAAA,EAAA,CACd;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,SAASA,oBAAS,OAAOA,oBAAS,QAAQA,oBAAS,MAAM;AAAA,IACzD,WAAWA,oBAAS;AAAA,IACpB,aAAaA,oBAAS;AAAA,IACtB,yBAAyBA,oBAAS;AAAA,IAClC,WAAWA,oBAAS;AAAA,IACpB,MAAMA,oBAAS;AAAA,IACf,aAAaA,oBAAS,MAAMA,oBAAS,MAAM;AAAA,EAC3C,CAAA;AACF;AAGA,MAAM,kBAAoDA,oBAAS,MAAM,mBAAmB;AAE5F,MAAM,qBAAqBA,oBAAS;AAAA,EACnCA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQ,OAAO;AAAA,IAC9B,MAAMA,oBAAS;AAAA,IACf,QAAQA,oBAAS;AAAA,IACjB,OAAO,2BAA2B;AAAA,IAClC,QAAQA,oBAAS;AAAA,EAAA,CACjB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,WAAW,2BAA2B;AAAA,IACtC,UAAUA,oBAAS;AAAA,IACnB,WAAWA,oBAAS;AAAA,EACpB,CAAA;AACF;AAKA,MAAM,qBAAqBA,oBAAS;AAAA,EACnCA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQ,OAAO;AAAA,IAC9B,MAAMA,oBAAS;AAAA,IACf,QAAQA,oBAAS;AAAA,IACjB,QAAQA,oBAAS;AAAA,IACjB,QAAQA,oBAAS;AAAA,IACjB,QAAQA,oBAAS,MAAMA,oBAAS,SAASA,oBAAS,MAAMA,oBAAS,MAAM,CAAC;AAAA,IACxE,QAAQA,oBAAS;AAAA,EAAA,CACjB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,WAAW,2BAA2B;AAAA,IACtC,UAAUA,oBAAS;AAAA,EACnB,CAAA;AACF;AAKA,MAAM,mBAAmBA,oBAAS;AAAA,EACjC;AAAA,EACA;AACD;AAEa,MAAA,gBAAgBA,oBAAS,OAAO;AAAA,EAC5C,UAAUA,oBAAS,OAAOA,oBAAS,QAAQ,gBAAgB;AAAA,EAC3D,SAASA,oBAAS,OAAOA,oBAAS,QAAQ,eAAe;AAC1D,CAAC;;"}
@@ -38,7 +38,8 @@ const watchTriggerSchema = Typesafe.intersection(
38
38
  }),
39
39
  Typesafe.partial({
40
40
  selection: selectionNodeSchemaFactory(),
41
- priority: Typesafe.integer
41
+ priority: Typesafe.integer,
42
+ withNodes: Typesafe.boolean
42
43
  })
43
44
  );
44
45
  const basicTriggerSchema = Typesafe.intersection(
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sources":["../../../../../packages/schema-utils/src/type-schema/actions.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Actions } from '@contember/schema'\n\nconst selectionNodeSchemaFactory = (): Typesafe.Type<Actions.SelectionNode> => {\n\treturn (input: unknown, path: PropertyKey[] = []): Actions.SelectionNode => {\n\t\treturn Typesafe.array(Typesafe.union(\n\t\t\tTypesafe.string,\n\t\t\tTypesafe.tuple(\n\t\t\t\tTypesafe.string,\n\t\t\t\tTypesafe.anyJsonObject,\n\t\t\t\tselectionNodeSchemaFactory(),\n\t\t\t),\n\t\t))(input, path)\n\t}\n}\n\nconst webhookTargetSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('webhook'),\n\t\tname: Typesafe.string,\n\t\turl: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\theaders: Typesafe.record(Typesafe.string, Typesafe.string),\n\t\ttimeoutMs: Typesafe.integer,\n\t\tmaxAttempts: Typesafe.integer,\n\t\tinitialRepeatIntervalMs: Typesafe.integer,\n\t\tbatchSize: Typesafe.integer,\n\t\tbody: Typesafe.anyJsonObject,\n\t\tpayloadPath: Typesafe.array(Typesafe.string),\n\t}),\n)\nconst webhookTargetSchemaCheck: Typesafe.Equals<Actions.WebhookTarget, ReturnType<typeof webhookTargetSchema>> = true\n\nconst anyTargetSchema: Typesafe.Type<Actions.AnyTarget> = Typesafe.union(webhookTargetSchema)\n\nconst watchTriggerSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('watch'),\n\t\tname: Typesafe.string,\n\t\tentity: Typesafe.string,\n\t\twatch: selectionNodeSchemaFactory(),\n\t\ttarget: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tselection: selectionNodeSchemaFactory(),\n\t\tpriority: Typesafe.integer,\n\t}),\n)\n\nconst watchTriggerSchemaCheck: Typesafe.Equals<Actions.WatchTrigger, ReturnType<typeof watchTriggerSchema>> = true\n\n\nconst basicTriggerSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('basic'),\n\t\tname: Typesafe.string,\n\t\tentity: Typesafe.string,\n\t\tcreate: Typesafe.boolean,\n\t\tdelete: Typesafe.boolean,\n\t\tupdate: Typesafe.union(Typesafe.boolean, Typesafe.array(Typesafe.string)),\n\t\ttarget: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tselection: selectionNodeSchemaFactory(),\n\t\tpriority: Typesafe.integer,\n\t}),\n)\n\nconst basicTriggerSchemaCheck: Typesafe.Equals<Actions.BasicTrigger, ReturnType<typeof basicTriggerSchema>> = true\n\n\nconst anyTriggerSchema = Typesafe.union(\n\twatchTriggerSchema,\n\tbasicTriggerSchema,\n)\n\nexport const actionsSchema = Typesafe.object({\n\ttriggers: Typesafe.record(Typesafe.string, anyTriggerSchema),\n\ttargets: Typesafe.record(Typesafe.string, anyTargetSchema),\n})\n"],"names":[],"mappings":";AAGA,MAAM,6BAA6B,MAA4C;AAC9E,SAAO,CAAC,OAAgB,OAAsB,OAA8B;AACpE,WAAA,SAAS,MAAM,SAAS;AAAA,MAC9B,SAAS;AAAA,MACT,SAAS;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QACT,2BAA2B;AAAA,MAAA;AAAA,IAC5B,CACA,EAAE,OAAO,IAAI;AAAA,EACf;AACD;AAEA,MAAM,sBAAsB,SAAS;AAAA,EACpC,SAAS,OAAO;AAAA,IACf,MAAM,SAAS,QAAQ,SAAS;AAAA,IAChC,MAAM,SAAS;AAAA,IACf,KAAK,SAAS;AAAA,EAAA,CACd;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,SAAS,SAAS,OAAO,SAAS,QAAQ,SAAS,MAAM;AAAA,IACzD,WAAW,SAAS;AAAA,IACpB,aAAa,SAAS;AAAA,IACtB,yBAAyB,SAAS;AAAA,IAClC,WAAW,SAAS;AAAA,IACpB,MAAM,SAAS;AAAA,IACf,aAAa,SAAS,MAAM,SAAS,MAAM;AAAA,EAC3C,CAAA;AACF;AAGA,MAAM,kBAAoD,SAAS,MAAM,mBAAmB;AAE5F,MAAM,qBAAqB,SAAS;AAAA,EACnC,SAAS,OAAO;AAAA,IACf,MAAM,SAAS,QAAQ,OAAO;AAAA,IAC9B,MAAM,SAAS;AAAA,IACf,QAAQ,SAAS;AAAA,IACjB,OAAO,2BAA2B;AAAA,IAClC,QAAQ,SAAS;AAAA,EAAA,CACjB;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,WAAW,2BAA2B;AAAA,IACtC,UAAU,SAAS;AAAA,EACnB,CAAA;AACF;AAKA,MAAM,qBAAqB,SAAS;AAAA,EACnC,SAAS,OAAO;AAAA,IACf,MAAM,SAAS,QAAQ,OAAO;AAAA,IAC9B,MAAM,SAAS;AAAA,IACf,QAAQ,SAAS;AAAA,IACjB,QAAQ,SAAS;AAAA,IACjB,QAAQ,SAAS;AAAA,IACjB,QAAQ,SAAS,MAAM,SAAS,SAAS,SAAS,MAAM,SAAS,MAAM,CAAC;AAAA,IACxE,QAAQ,SAAS;AAAA,EAAA,CACjB;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,WAAW,2BAA2B;AAAA,IACtC,UAAU,SAAS;AAAA,EACnB,CAAA;AACF;AAKA,MAAM,mBAAmB,SAAS;AAAA,EACjC;AAAA,EACA;AACD;AAEa,MAAA,gBAAgB,SAAS,OAAO;AAAA,EAC5C,UAAU,SAAS,OAAO,SAAS,QAAQ,gBAAgB;AAAA,EAC3D,SAAS,SAAS,OAAO,SAAS,QAAQ,eAAe;AAC1D,CAAC;"}
1
+ {"version":3,"file":"actions.js","sources":["../../../../../packages/schema-utils/src/type-schema/actions.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Actions } from '@contember/schema'\n\nconst selectionNodeSchemaFactory = (): Typesafe.Type<Actions.SelectionNode> => {\n\treturn (input: unknown, path: PropertyKey[] = []): Actions.SelectionNode => {\n\t\treturn Typesafe.array(Typesafe.union(\n\t\t\tTypesafe.string,\n\t\t\tTypesafe.tuple(\n\t\t\t\tTypesafe.string,\n\t\t\t\tTypesafe.anyJsonObject,\n\t\t\t\tselectionNodeSchemaFactory(),\n\t\t\t),\n\t\t))(input, path)\n\t}\n}\n\nconst webhookTargetSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('webhook'),\n\t\tname: Typesafe.string,\n\t\turl: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\theaders: Typesafe.record(Typesafe.string, Typesafe.string),\n\t\ttimeoutMs: Typesafe.integer,\n\t\tmaxAttempts: Typesafe.integer,\n\t\tinitialRepeatIntervalMs: Typesafe.integer,\n\t\tbatchSize: Typesafe.integer,\n\t\tbody: Typesafe.anyJsonObject,\n\t\tpayloadPath: Typesafe.array(Typesafe.string),\n\t}),\n)\nconst webhookTargetSchemaCheck: Typesafe.Equals<Actions.WebhookTarget, ReturnType<typeof webhookTargetSchema>> = true\n\nconst anyTargetSchema: Typesafe.Type<Actions.AnyTarget> = Typesafe.union(webhookTargetSchema)\n\nconst watchTriggerSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('watch'),\n\t\tname: Typesafe.string,\n\t\tentity: Typesafe.string,\n\t\twatch: selectionNodeSchemaFactory(),\n\t\ttarget: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tselection: selectionNodeSchemaFactory(),\n\t\tpriority: Typesafe.integer,\n\t\twithNodes: Typesafe.boolean,\n\t}),\n)\n\nconst watchTriggerSchemaCheck: Typesafe.Equals<Actions.WatchTrigger, ReturnType<typeof watchTriggerSchema>> = true\n\n\nconst basicTriggerSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('basic'),\n\t\tname: Typesafe.string,\n\t\tentity: Typesafe.string,\n\t\tcreate: Typesafe.boolean,\n\t\tdelete: Typesafe.boolean,\n\t\tupdate: Typesafe.union(Typesafe.boolean, Typesafe.array(Typesafe.string)),\n\t\ttarget: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tselection: selectionNodeSchemaFactory(),\n\t\tpriority: Typesafe.integer,\n\t}),\n)\n\nconst basicTriggerSchemaCheck: Typesafe.Equals<Actions.BasicTrigger, ReturnType<typeof basicTriggerSchema>> = true\n\n\nconst anyTriggerSchema = Typesafe.union(\n\twatchTriggerSchema,\n\tbasicTriggerSchema,\n)\n\nexport const actionsSchema = Typesafe.object({\n\ttriggers: Typesafe.record(Typesafe.string, anyTriggerSchema),\n\ttargets: Typesafe.record(Typesafe.string, anyTargetSchema),\n})\n"],"names":[],"mappings":";AAGA,MAAM,6BAA6B,MAA4C;AAC9E,SAAO,CAAC,OAAgB,OAAsB,OAA8B;AACpE,WAAA,SAAS,MAAM,SAAS;AAAA,MAC9B,SAAS;AAAA,MACT,SAAS;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QACT,2BAA2B;AAAA,MAAA;AAAA,IAC5B,CACA,EAAE,OAAO,IAAI;AAAA,EACf;AACD;AAEA,MAAM,sBAAsB,SAAS;AAAA,EACpC,SAAS,OAAO;AAAA,IACf,MAAM,SAAS,QAAQ,SAAS;AAAA,IAChC,MAAM,SAAS;AAAA,IACf,KAAK,SAAS;AAAA,EAAA,CACd;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,SAAS,SAAS,OAAO,SAAS,QAAQ,SAAS,MAAM;AAAA,IACzD,WAAW,SAAS;AAAA,IACpB,aAAa,SAAS;AAAA,IACtB,yBAAyB,SAAS;AAAA,IAClC,WAAW,SAAS;AAAA,IACpB,MAAM,SAAS;AAAA,IACf,aAAa,SAAS,MAAM,SAAS,MAAM;AAAA,EAC3C,CAAA;AACF;AAGA,MAAM,kBAAoD,SAAS,MAAM,mBAAmB;AAE5F,MAAM,qBAAqB,SAAS;AAAA,EACnC,SAAS,OAAO;AAAA,IACf,MAAM,SAAS,QAAQ,OAAO;AAAA,IAC9B,MAAM,SAAS;AAAA,IACf,QAAQ,SAAS;AAAA,IACjB,OAAO,2BAA2B;AAAA,IAClC,QAAQ,SAAS;AAAA,EAAA,CACjB;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,WAAW,2BAA2B;AAAA,IACtC,UAAU,SAAS;AAAA,IACnB,WAAW,SAAS;AAAA,EACpB,CAAA;AACF;AAKA,MAAM,qBAAqB,SAAS;AAAA,EACnC,SAAS,OAAO;AAAA,IACf,MAAM,SAAS,QAAQ,OAAO;AAAA,IAC9B,MAAM,SAAS;AAAA,IACf,QAAQ,SAAS;AAAA,IACjB,QAAQ,SAAS;AAAA,IACjB,QAAQ,SAAS;AAAA,IACjB,QAAQ,SAAS,MAAM,SAAS,SAAS,SAAS,MAAM,SAAS,MAAM,CAAC;AAAA,IACxE,QAAQ,SAAS;AAAA,EAAA,CACjB;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,WAAW,2BAA2B;AAAA,IACtC,UAAU,SAAS;AAAA,EACnB,CAAA;AACF;AAKA,MAAM,mBAAmB,SAAS;AAAA,EACjC;AAAA,EACA;AACD;AAEa,MAAA,gBAAgB,SAAS,OAAO;AAAA,EAC5C,UAAU,SAAS,OAAO,SAAS,QAAQ,gBAAgB;AAAA,EAC3D,SAAS,SAAS,OAAO,SAAS,QAAQ,eAAe;AAC1D,CAAC;"}
@@ -44,7 +44,10 @@ const conditionSchemaInner = (metadata) => {
44
44
  lte: inner,
45
45
  gt: inner,
46
46
  gte: inner
47
- } : {},
47
+ } : {
48
+ // For JSON columns, allow includes operator
49
+ includes: inner
50
+ },
48
51
  ...metadata.isString !== false ? {
49
52
  contains: Typesafe__namespace.string,
50
53
  startsWith: Typesafe__namespace.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.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;;"}
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\t// For JSON columns, allow includes operator\n\t\t\t\tincludes: 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;AAAA;AAAA,QAEH,UAAU;AAAA,MACX;AAAA,MACA,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;;"}
@@ -25,7 +25,10 @@ const conditionSchemaInner = (metadata) => {
25
25
  lte: inner,
26
26
  gt: inner,
27
27
  gte: inner
28
- } : {},
28
+ } : {
29
+ // For JSON columns, allow includes operator
30
+ includes: inner
31
+ },
29
32
  ...metadata.isString !== false ? {
30
33
  contains: Typesafe.string,
31
34
  startsWith: Typesafe.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.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;"}
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\t// For JSON columns, allow includes operator\n\t\t\t\tincludes: 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;AAAA;AAAA,QAEH,UAAU;AAAA,MACX;AAAA,MACA,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;"}
@@ -161,7 +161,8 @@ const indexSchemaBase = Typesafe__namespace.intersection(
161
161
  fields: Typesafe__namespace.array(Typesafe__namespace.string)
162
162
  }),
163
163
  Typesafe__namespace.partial({
164
- name: Typesafe__namespace.string
164
+ name: Typesafe__namespace.string,
165
+ method: Typesafe__namespace.enumeration("btree", "gin", "gist", "hash", "brin", "spgist")
165
166
  })
166
167
  );
167
168
  const indexesSchema = Typesafe__namespace.coalesce(
@@ -187,7 +188,8 @@ const uniqueIndex = Typesafe__namespace.intersection(
187
188
  index: Typesafe__namespace.literal(true)
188
189
  }),
189
190
  Typesafe__namespace.partial({
190
- nulls: Typesafe__namespace.enumeration("distinct", "not distinct")
191
+ nulls: Typesafe__namespace.enumeration("distinct", "not distinct"),
192
+ method: Typesafe__namespace.enumeration("btree", "gin", "gist", "hash", "brin", "spgist")
191
193
  })
192
194
  );
193
195
  const entitySchema = Typesafe__namespace.intersection(
@@ -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\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":"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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\tmethod: Typesafe.enumeration('btree', 'gin', 'gist', 'hash', 'brin', 'spgist'),\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\tmethod: Typesafe.enumeration('btree', 'gin', 'gist', 'hash', 'brin', 'spgist'),\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":"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"}
@@ -143,7 +143,8 @@ const indexSchemaBase = Typesafe.intersection(
143
143
  fields: Typesafe.array(Typesafe.string)
144
144
  }),
145
145
  Typesafe.partial({
146
- name: Typesafe.string
146
+ name: Typesafe.string,
147
+ method: Typesafe.enumeration("btree", "gin", "gist", "hash", "brin", "spgist")
147
148
  })
148
149
  );
149
150
  const indexesSchema = Typesafe.coalesce(
@@ -169,7 +170,8 @@ const uniqueIndex = Typesafe.intersection(
169
170
  index: Typesafe.literal(true)
170
171
  }),
171
172
  Typesafe.partial({
172
- nulls: Typesafe.enumeration("distinct", "not distinct")
173
+ nulls: Typesafe.enumeration("distinct", "not distinct"),
174
+ method: Typesafe.enumeration("btree", "gin", "gist", "hash", "brin", "spgist")
173
175
  })
174
176
  );
175
177
  const entitySchema = Typesafe.intersection(
@@ -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\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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"}
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\tmethod: Typesafe.enumeration('btree', 'gin', 'gist', 'hash', 'brin', 'spgist'),\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\tmethod: Typesafe.enumeration('btree', 'gin', 'gist', 'hash', 'brin', 'spgist'),\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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"}
@@ -12,7 +12,7 @@ var __defProp = Object.defineProperty;
12
12
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
13
  var __publicField = (obj, key, value) => __defNormalProp(obj, key + "", value);
14
14
  class MembershipResolver {
15
- resolve(acl, memberships, identity) {
15
+ resolve(acl, memberships, identity, isAssumed) {
16
16
  const errors = [];
17
17
  const parsed = [];
18
18
  const roles = acl.roles;
@@ -27,7 +27,7 @@ class MembershipResolver {
27
27
  }
28
28
  const roleVariables = schemaUtils.getRoleVariables(membership.role, acl);
29
29
  for (const variable of membership.variables) {
30
- if (!roleVariables[variable.name] || roleVariables[variable.name].type === schema.Acl.VariableType.predefined) {
30
+ if (!roleVariables[variable.name] || !isAssumed && roleVariables[variable.name].type === schema.Acl.VariableType.predefined) {
31
31
  errors.push(
32
32
  new MembershipValidationError(
33
33
  membership.role,
@@ -37,7 +37,7 @@ class MembershipResolver {
37
37
  );
38
38
  }
39
39
  }
40
- const [membershipErrors, parsedVariables] = this.readMembershipVariables(roleVariables, membership, identity);
40
+ const [membershipErrors, parsedVariables] = this.readMembershipVariables(roleVariables, membership, identity, isAssumed);
41
41
  errors.push(...membershipErrors);
42
42
  parsed.push({
43
43
  role: membership.role,
@@ -46,19 +46,23 @@ class MembershipResolver {
46
46
  }
47
47
  return new MembershipReadResult(errors, parsed);
48
48
  }
49
- readMembershipVariables(roleVariables, membership, identity) {
49
+ readMembershipVariables(roleVariables, membership, identity, isAssumed) {
50
50
  const errors = [];
51
51
  const parsedVariables = [];
52
52
  for (const [name, variable] of Object.entries(roleVariables)) {
53
+ const inputVariable = membership.variables.find((it) => it.name === name);
53
54
  if (variable.type === schema.Acl.VariableType.predefined) {
54
55
  switch (variable.value) {
55
56
  case "identityID":
56
- parsedVariables.push({ name, condition: { in: [identity.identityId] } });
57
+ parsedVariables.push({
58
+ name,
59
+ condition: { in: isAssumed && inputVariable ? inputVariable.values : [identity.identityId] }
60
+ });
57
61
  break;
58
62
  case "personID":
59
63
  parsedVariables.push({
60
64
  name,
61
- condition: { in: identity.personId ? [identity.personId] : [] }
65
+ condition: { in: isAssumed && inputVariable ? inputVariable.values : identity.personId ? [identity.personId] : [] }
62
66
  });
63
67
  break;
64
68
  default:
@@ -68,7 +72,6 @@ class MembershipResolver {
68
72
  }
69
73
  continue;
70
74
  }
71
- const inputVariable = membership.variables.find((it) => it.name === name);
72
75
  if (!inputVariable) {
73
76
  if (variable.fallback) {
74
77
  parsedVariables.push({ name, condition: variable.fallback });
@@ -1 +1 @@
1
- {"version":3,"file":"MembershipResolver.cjs","sources":["../../../../../packages/schema-utils/src/validation/MembershipResolver.ts"],"sourcesContent":["import { Acl, Input } from '@contember/schema'\nimport { getRoleVariables } from '../acl'\nimport { conditionSchema } from '../type-schema'\nimport { assertNever } from '../utils'\n\n\nexport class MembershipResolver {\n\tpublic static UnknownIdentity = { identityId: '00000000-0000-0000-0000-000000000000' }\n\n\tresolve(\n\t\tacl: Acl.Schema,\n\t\tmemberships: readonly Acl.Membership[],\n\t\tidentity: {\n\t\t\tidentityId: string\n\t\t\tpersonId?: string\n\t\t},\n\t): MembershipReadResult {\n\t\tconst errors: MembershipValidationError[] = []\n\t\tconst parsed: ParsedMembership[] = []\n\t\tconst roles = acl.roles\n\t\tfor (const membership of memberships) {\n\t\t\tif (!roles[membership.role]) {\n\t\t\t\terrors.push(new MembershipValidationError(membership.role, MembershipValidationErrorType.ROLE_NOT_FOUND))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst roleVariables = getRoleVariables(membership.role, acl)\n\t\t\tfor (const variable of membership.variables) {\n\t\t\t\tif (!roleVariables[variable.name] || roleVariables[variable.name].type === Acl.VariableType.predefined) {\n\t\t\t\t\terrors.push(\n\t\t\t\t\t\tnew MembershipValidationError(\n\t\t\t\t\t\t\tmembership.role,\n\t\t\t\t\t\t\tMembershipValidationErrorType.VARIABLE_NOT_FOUND,\n\t\t\t\t\t\t\tvariable.name,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst [membershipErrors, parsedVariables] = this.readMembershipVariables(roleVariables, membership, identity)\n\t\t\terrors.push(...membershipErrors)\n\t\t\tparsed.push({\n\t\t\t\trole: membership.role,\n\t\t\t\tvariables: parsedVariables,\n\t\t\t})\n\t\t}\n\t\treturn new MembershipReadResult(errors, parsed)\n\t}\n\n\tprivate readMembershipVariables(roleVariables: Acl.Variables, membership: Acl.Membership, identity: {\n\t\tidentityId: string\n\t\tpersonId?: string\n\t}): [MembershipValidationError[], ParsedMembershipVariable[]] {\n\t\tconst errors: MembershipValidationError[] = []\n\t\tconst parsedVariables: ParsedMembershipVariable[] = []\n\t\tfor (const [name, variable] of Object.entries(roleVariables)) {\n\t\t\tif (variable.type === Acl.VariableType.predefined) {\n\t\t\t\tswitch (variable.value) {\n\t\t\t\t\tcase 'identityID':\n\t\t\t\t\t\tparsedVariables.push({ name, condition: { in: [identity.identityId] } })\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'personID':\n\t\t\t\t\t\tparsedVariables.push({\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tcondition: { in: identity.personId ? [identity.personId] : [] },\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tparsedVariables.push({ name, condition: { never: true } })\n\t\t\t\t\t\terrors.push(new MembershipValidationError(membership.role, MembershipValidationErrorType.VARIABLE_INVALID, name))\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst inputVariable = membership.variables.find(it => it.name === name)\n\t\t\tif (!inputVariable) {\n\t\t\t\tif (variable.fallback) {\n\t\t\t\t\tparsedVariables.push({ name, condition: variable.fallback })\n\t\t\t\t} else {\n\t\t\t\t\terrors.push(new MembershipValidationError(membership.role, MembershipValidationErrorType.VARIABLE_EMPTY, name))\n\t\t\t\t\tparsedVariables.push({ name, condition: { never: true } })\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (variable.type === Acl.VariableType.entity) {\n\t\t\t\tparsedVariables.push({ name, condition: { in: inputVariable.values } }) // todo: cast to int where primary is int\n\n\t\t\t} else if (variable.type === Acl.VariableType.condition) {\n\t\t\t\ttry {\n\t\t\t\t\tconst conditions = inputVariable.values.map(it => conditionSchema()(JSON.parse(it)))\n\t\t\t\t\tparsedVariables.push({\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tcondition: conditions.length === 1 ? conditions[0] : { or: conditions },\n\t\t\t\t\t})\n\t\t\t\t} catch {\n\t\t\t\t\terrors.push(new MembershipValidationError(membership.role, MembershipValidationErrorType.VARIABLE_INVALID, name))\n\t\t\t\t\tparsedVariables.push({ name, condition: { never: true } })\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tassertNever(variable)\n\t\t\t}\n\t\t}\n\t\treturn [errors, parsedVariables]\n\t}\n}\n\nexport class MembershipReadResult {\n\tconstructor(\n\t\tpublic readonly errors: MembershipValidationError[],\n\t\tpublic readonly memberships: ParsedMembership[],\n\t) {\n\t}\n}\n\nexport class MembershipValidationError {\n\tconstructor(\n\t\tpublic readonly role: string,\n\t\tpublic readonly error: MembershipValidationErrorType,\n\t\tpublic readonly variable?: string,\n\t) {\n\t}\n}\n\nexport enum MembershipValidationErrorType {\n\tROLE_NOT_FOUND = 'roleNotFound',\n\tVARIABLE_NOT_FOUND = 'variableNotFound',\n\tVARIABLE_EMPTY = 'variableEmpty',\n\tVARIABLE_INVALID = 'variableInvalid',\n}\n\n\nexport interface ParsedMembershipVariable {\n\treadonly name: string\n\treadonly condition: Input.Condition\n}\n\nexport interface ParsedMembership {\n\treadonly role: string\n\treadonly variables: readonly ParsedMembershipVariable[]\n}\n"],"names":["getRoleVariables","Acl","conditionSchema","assertNever","MembershipValidationErrorType"],"mappings":"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"}
1
+ {"version":3,"file":"MembershipResolver.cjs","sources":["../../../../../packages/schema-utils/src/validation/MembershipResolver.ts"],"sourcesContent":["import { Acl, Input } from '@contember/schema'\nimport { getRoleVariables } from '../acl'\nimport { conditionSchema } from '../type-schema'\nimport { assertNever } from '../utils'\n\n\nexport class MembershipResolver {\n\tpublic static UnknownIdentity = { identityId: '00000000-0000-0000-0000-000000000000' }\n\n\tresolve(\n\t\tacl: Acl.Schema,\n\t\tmemberships: readonly Acl.Membership[],\n\t\tidentity: {\n\t\t\tidentityId: string\n\t\t\tpersonId?: string\n\t\t},\n\t\tisAssumed: boolean,\n\t): MembershipReadResult {\n\t\tconst errors: MembershipValidationError[] = []\n\t\tconst parsed: ParsedMembership[] = []\n\t\tconst roles = acl.roles\n\t\tfor (const membership of memberships) {\n\t\t\tif (!roles[membership.role]) {\n\t\t\t\terrors.push(new MembershipValidationError(membership.role, MembershipValidationErrorType.ROLE_NOT_FOUND))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst roleVariables = getRoleVariables(membership.role, acl)\n\t\t\tfor (const variable of membership.variables) {\n\t\t\t\tif (!roleVariables[variable.name] || (!isAssumed && roleVariables[variable.name].type === Acl.VariableType.predefined)) {\n\t\t\t\t\terrors.push(\n\t\t\t\t\t\tnew MembershipValidationError(\n\t\t\t\t\t\t\tmembership.role,\n\t\t\t\t\t\t\tMembershipValidationErrorType.VARIABLE_NOT_FOUND,\n\t\t\t\t\t\t\tvariable.name,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst [membershipErrors, parsedVariables] = this.readMembershipVariables(roleVariables, membership, identity, isAssumed)\n\t\t\terrors.push(...membershipErrors)\n\t\t\tparsed.push({\n\t\t\t\trole: membership.role,\n\t\t\t\tvariables: parsedVariables,\n\t\t\t})\n\t\t}\n\t\treturn new MembershipReadResult(errors, parsed)\n\t}\n\n\tprivate readMembershipVariables(roleVariables: Acl.Variables, membership: Acl.Membership, identity: {\n\t\tidentityId: string\n\t\tpersonId?: string\n\t}, isAssumed: boolean): [MembershipValidationError[], ParsedMembershipVariable[]] {\n\t\tconst errors: MembershipValidationError[] = []\n\t\tconst parsedVariables: ParsedMembershipVariable[] = []\n\t\tfor (const [name, variable] of Object.entries(roleVariables)) {\n\t\t\tconst inputVariable = membership.variables.find(it => it.name === name)\n\t\t\tif (variable.type === Acl.VariableType.predefined) {\n\t\t\t\tswitch (variable.value) {\n\t\t\t\t\tcase 'identityID':\n\t\t\t\t\t\tparsedVariables.push({\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tcondition: { in: isAssumed && inputVariable ? inputVariable.values : [identity.identityId] },\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'personID':\n\t\t\t\t\t\tparsedVariables.push({\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tcondition: { in: isAssumed && inputVariable ? inputVariable.values : identity.personId ? [identity.personId] : [] },\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tparsedVariables.push({ name, condition: { never: true } })\n\t\t\t\t\t\terrors.push(new MembershipValidationError(membership.role, MembershipValidationErrorType.VARIABLE_INVALID, name))\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (!inputVariable) {\n\t\t\t\tif (variable.fallback) {\n\t\t\t\t\tparsedVariables.push({ name, condition: variable.fallback })\n\t\t\t\t} else {\n\t\t\t\t\terrors.push(new MembershipValidationError(membership.role, MembershipValidationErrorType.VARIABLE_EMPTY, name))\n\t\t\t\t\tparsedVariables.push({ name, condition: { never: true } })\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (variable.type === Acl.VariableType.entity) {\n\t\t\t\tparsedVariables.push({ name, condition: { in: inputVariable.values } }) // todo: cast to int where primary is int\n\n\t\t\t} else if (variable.type === Acl.VariableType.condition) {\n\t\t\t\ttry {\n\t\t\t\t\tconst conditions = inputVariable.values.map(it => conditionSchema()(JSON.parse(it)))\n\t\t\t\t\tparsedVariables.push({\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tcondition: conditions.length === 1 ? conditions[0] : { or: conditions },\n\t\t\t\t\t})\n\t\t\t\t} catch {\n\t\t\t\t\terrors.push(new MembershipValidationError(membership.role, MembershipValidationErrorType.VARIABLE_INVALID, name))\n\t\t\t\t\tparsedVariables.push({ name, condition: { never: true } })\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tassertNever(variable)\n\t\t\t}\n\t\t}\n\t\treturn [errors, parsedVariables]\n\t}\n}\n\nexport class MembershipReadResult {\n\tconstructor(\n\t\tpublic readonly errors: MembershipValidationError[],\n\t\tpublic readonly memberships: ParsedMembership[],\n\t) {\n\t}\n}\n\nexport class MembershipValidationError {\n\tconstructor(\n\t\tpublic readonly role: string,\n\t\tpublic readonly error: MembershipValidationErrorType,\n\t\tpublic readonly variable?: string,\n\t) {\n\t}\n}\n\nexport enum MembershipValidationErrorType {\n\tROLE_NOT_FOUND = 'roleNotFound',\n\tVARIABLE_NOT_FOUND = 'variableNotFound',\n\tVARIABLE_EMPTY = 'variableEmpty',\n\tVARIABLE_INVALID = 'variableInvalid',\n}\n\n\nexport interface ParsedMembershipVariable {\n\treadonly name: string\n\treadonly condition: Input.Condition\n}\n\nexport interface ParsedMembership {\n\treadonly role: string\n\treadonly variables: readonly ParsedMembershipVariable[]\n}\n"],"names":["getRoleVariables","Acl","conditionSchema","assertNever","MembershipValidationErrorType"],"mappings":";;;;;;;;;;;;;AAMO,MAAM,mBAAmB;AAAA,EAG/B,QACC,KACA,aACA,UAIA,WACuB;AACvB,UAAM,SAAsC,CAAC;AAC7C,UAAM,SAA6B,CAAC;AACpC,UAAM,QAAQ,IAAI;AAClB,eAAW,cAAc,aAAa;AACrC,UAAI,CAAC,MAAM,WAAW,IAAI,GAAG;AAC5B,eAAO,KAAK,IAAI;AAAA,UAA0B,WAAW;AAAA,UAAM;AAAA;AAAA,SAA6C;AACxG;AAAA,MAAA;AAED,YAAM,gBAAgBA,YAAA,iBAAiB,WAAW,MAAM,GAAG;AAChD,iBAAA,YAAY,WAAW,WAAW;AAC5C,YAAI,CAAC,cAAc,SAAS,IAAI,KAAM,CAAC,aAAa,cAAc,SAAS,IAAI,EAAE,SAASC,OAAAA,IAAI,aAAa,YAAa;AAChH,iBAAA;AAAA,YACN,IAAI;AAAA,cACH,WAAW;AAAA,cACX;AAAA,cACA,SAAS;AAAA,YAAA;AAAA,UAEX;AAAA,QAAA;AAAA,MACD;AAEK,YAAA,CAAC,kBAAkB,eAAe,IAAI,KAAK,wBAAwB,eAAe,YAAY,UAAU,SAAS;AAChH,aAAA,KAAK,GAAG,gBAAgB;AAC/B,aAAO,KAAK;AAAA,QACX,MAAM,WAAW;AAAA,QACjB,WAAW;AAAA,MAAA,CACX;AAAA,IAAA;AAEK,WAAA,IAAI,qBAAqB,QAAQ,MAAM;AAAA,EAAA;AAAA,EAGvC,wBAAwB,eAA8B,YAA4B,UAGvF,WAA+E;AACjF,UAAM,SAAsC,CAAC;AAC7C,UAAM,kBAA8C,CAAC;AACrD,eAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,aAAa,GAAG;AAC7D,YAAM,gBAAgB,WAAW,UAAU,KAAK,CAAM,OAAA,GAAG,SAAS,IAAI;AACtE,UAAI,SAAS,SAASA,WAAI,aAAa,YAAY;AAClD,gBAAQ,SAAS,OAAO;AAAA,UACvB,KAAK;AACJ,4BAAgB,KAAK;AAAA,cACpB;AAAA,cACA,WAAW,EAAE,IAAI,aAAa,gBAAgB,cAAc,SAAS,CAAC,SAAS,UAAU,EAAE;AAAA,YAAA,CAC3F;AACD;AAAA,UACD,KAAK;AACJ,4BAAgB,KAAK;AAAA,cACpB;AAAA,cACA,WAAW,EAAE,IAAI,aAAa,gBAAgB,cAAc,SAAS,SAAS,WAAW,CAAC,SAAS,QAAQ,IAAI,CAAG,EAAA;AAAA,YAAA,CAClH;AACD;AAAA,UACD;AACiB,4BAAA,KAAK,EAAE,MAAM,WAAW,EAAE,OAAO,KAAA,GAAQ;AACzD,mBAAO,KAAK,IAAI,0BAA0B,WAAW,MAAM,mBAAgD,IAAI,CAAC;AAChH;AAAA,QAAA;AAEF;AAAA,MAAA;AAGD,UAAI,CAAC,eAAe;AACnB,YAAI,SAAS,UAAU;AACtB,0BAAgB,KAAK,EAAE,MAAM,WAAW,SAAS,UAAU;AAAA,QAAA,OACrD;AACN,iBAAO,KAAK,IAAI,0BAA0B,WAAW,MAAM,iBAA8C,IAAI,CAAC;AAC9F,0BAAA,KAAK,EAAE,MAAM,WAAW,EAAE,OAAO,KAAA,GAAQ;AAAA,QAAA;AAE1D;AAAA,MAAA;AAGD,UAAI,SAAS,SAASA,WAAI,aAAa,QAAQ;AAC9B,wBAAA,KAAK,EAAE,MAAM,WAAW,EAAE,IAAI,cAAc,OAAO,GAAG;AAAA,MAE5D,WAAA,SAAS,SAASA,OAAAA,IAAI,aAAa,WAAW;AACpD,YAAA;AACG,gBAAA,aAAa,cAAc,OAAO,IAAI,CAAA,OAAMC,UAAgB,gBAAA,EAAE,KAAK,MAAM,EAAE,CAAC,CAAC;AACnF,0BAAgB,KAAK;AAAA,YACpB;AAAA,YACA,WAAW,WAAW,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,WAAW;AAAA,UAAA,CACtE;AAAA,QAAA,QACM;AACP,iBAAO,KAAK,IAAI,0BAA0B,WAAW,MAAM,mBAAgD,IAAI,CAAC;AAChG,0BAAA,KAAK,EAAE,MAAM,WAAW,EAAE,OAAO,KAAA,GAAQ;AAAA,QAAA;AAAA,MAC1D,OACM;AACNC,oBAAAA,YAAoB;AAAA,MAAA;AAAA,IACrB;AAEM,WAAA,CAAC,QAAQ,eAAe;AAAA,EAAA;AAEjC;AArGC,cADY,oBACE,mBAAkB,EAAE,YAAY,uCAAuC,CAAA;AAuG/E,MAAM,qBAAqB;AAAA,EACjC,YACiB,QACA,aACf;AAFe,SAAA,SAAA;AACA,SAAA,cAAA;AAAA,EAAA;AAGlB;AAEO,MAAM,0BAA0B;AAAA,EACtC,YACiB,MACA,OACA,UACf;AAHe,SAAA,OAAA;AACA,SAAA,QAAA;AACA,SAAA,WAAA;AAAA,EAAA;AAGlB;AAEY,IAAA,kDAAAC,mCAAL;AACNA,iCAAA,gBAAiB,IAAA;AACjBA,iCAAA,oBAAqB,IAAA;AACrBA,iCAAA,gBAAiB,IAAA;AACjBA,iCAAA,kBAAmB,IAAA;AAJRA,SAAAA;AAAA,GAAA,iCAAA,CAAA,CAAA;;;;;"}
@@ -10,7 +10,7 @@ var __defProp = Object.defineProperty;
10
10
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
11
  var __publicField = (obj, key, value) => __defNormalProp(obj, key + "", value);
12
12
  class MembershipResolver {
13
- resolve(acl, memberships, identity) {
13
+ resolve(acl, memberships, identity, isAssumed) {
14
14
  const errors = [];
15
15
  const parsed = [];
16
16
  const roles = acl.roles;
@@ -25,7 +25,7 @@ class MembershipResolver {
25
25
  }
26
26
  const roleVariables = getRoleVariables(membership.role, acl);
27
27
  for (const variable of membership.variables) {
28
- if (!roleVariables[variable.name] || roleVariables[variable.name].type === Acl.VariableType.predefined) {
28
+ if (!roleVariables[variable.name] || !isAssumed && roleVariables[variable.name].type === Acl.VariableType.predefined) {
29
29
  errors.push(
30
30
  new MembershipValidationError(
31
31
  membership.role,
@@ -35,7 +35,7 @@ class MembershipResolver {
35
35
  );
36
36
  }
37
37
  }
38
- const [membershipErrors, parsedVariables] = this.readMembershipVariables(roleVariables, membership, identity);
38
+ const [membershipErrors, parsedVariables] = this.readMembershipVariables(roleVariables, membership, identity, isAssumed);
39
39
  errors.push(...membershipErrors);
40
40
  parsed.push({
41
41
  role: membership.role,
@@ -44,19 +44,23 @@ class MembershipResolver {
44
44
  }
45
45
  return new MembershipReadResult(errors, parsed);
46
46
  }
47
- readMembershipVariables(roleVariables, membership, identity) {
47
+ readMembershipVariables(roleVariables, membership, identity, isAssumed) {
48
48
  const errors = [];
49
49
  const parsedVariables = [];
50
50
  for (const [name, variable] of Object.entries(roleVariables)) {
51
+ const inputVariable = membership.variables.find((it) => it.name === name);
51
52
  if (variable.type === Acl.VariableType.predefined) {
52
53
  switch (variable.value) {
53
54
  case "identityID":
54
- parsedVariables.push({ name, condition: { in: [identity.identityId] } });
55
+ parsedVariables.push({
56
+ name,
57
+ condition: { in: isAssumed && inputVariable ? inputVariable.values : [identity.identityId] }
58
+ });
55
59
  break;
56
60
  case "personID":
57
61
  parsedVariables.push({
58
62
  name,
59
- condition: { in: identity.personId ? [identity.personId] : [] }
63
+ condition: { in: isAssumed && inputVariable ? inputVariable.values : identity.personId ? [identity.personId] : [] }
60
64
  });
61
65
  break;
62
66
  default:
@@ -66,7 +70,6 @@ class MembershipResolver {
66
70
  }
67
71
  continue;
68
72
  }
69
- const inputVariable = membership.variables.find((it) => it.name === name);
70
73
  if (!inputVariable) {
71
74
  if (variable.fallback) {
72
75
  parsedVariables.push({ name, condition: variable.fallback });