@contember/schema-definition 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 (78) hide show
  1. package/dist/development/src/acl/definition/customPrimary.cjs +1 -1
  2. package/dist/development/src/acl/definition/customPrimary.cjs.map +1 -1
  3. package/dist/development/src/acl/definition/customPrimary.js +1 -1
  4. package/dist/development/src/acl/definition/customPrimary.js.map +1 -1
  5. package/dist/development/src/acl/definition/internal/AclFactory.cjs +11 -5
  6. package/dist/development/src/acl/definition/internal/AclFactory.cjs.map +1 -1
  7. package/dist/development/src/acl/definition/internal/AclFactory.js +11 -5
  8. package/dist/development/src/acl/definition/internal/AclFactory.js.map +1 -1
  9. package/dist/development/src/acl/definition/internal/stores.cjs.map +1 -1
  10. package/dist/development/src/acl/definition/internal/stores.js.map +1 -1
  11. package/dist/development/src/acl/definition/permissions.cjs +4 -1
  12. package/dist/development/src/acl/definition/permissions.cjs.map +1 -1
  13. package/dist/development/src/acl/definition/permissions.js +4 -1
  14. package/dist/development/src/acl/definition/permissions.js.map +1 -1
  15. package/dist/development/src/actions/definition/internal/ActionsFactory.cjs +2 -1
  16. package/dist/development/src/actions/definition/internal/ActionsFactory.cjs.map +1 -1
  17. package/dist/development/src/actions/definition/internal/ActionsFactory.js +2 -1
  18. package/dist/development/src/actions/definition/internal/ActionsFactory.js.map +1 -1
  19. package/dist/development/src/actions/definition/triggers.cjs.map +1 -1
  20. package/dist/development/src/actions/definition/triggers.js.map +1 -1
  21. package/dist/development/src/model/definition/IndexDefinition.cjs +2 -2
  22. package/dist/development/src/model/definition/IndexDefinition.cjs.map +1 -1
  23. package/dist/development/src/model/definition/IndexDefinition.js +2 -2
  24. package/dist/development/src/model/definition/IndexDefinition.js.map +1 -1
  25. package/dist/development/src/model/definition/UniqueDefinition.cjs.map +1 -1
  26. package/dist/development/src/model/definition/UniqueDefinition.js.map +1 -1
  27. package/dist/production/src/acl/definition/customPrimary.cjs +1 -1
  28. package/dist/production/src/acl/definition/customPrimary.cjs.map +1 -1
  29. package/dist/production/src/acl/definition/customPrimary.js +1 -1
  30. package/dist/production/src/acl/definition/customPrimary.js.map +1 -1
  31. package/dist/production/src/acl/definition/internal/AclFactory.cjs +11 -5
  32. package/dist/production/src/acl/definition/internal/AclFactory.cjs.map +1 -1
  33. package/dist/production/src/acl/definition/internal/AclFactory.js +11 -5
  34. package/dist/production/src/acl/definition/internal/AclFactory.js.map +1 -1
  35. package/dist/production/src/acl/definition/internal/stores.cjs.map +1 -1
  36. package/dist/production/src/acl/definition/internal/stores.js.map +1 -1
  37. package/dist/production/src/acl/definition/permissions.cjs +4 -1
  38. package/dist/production/src/acl/definition/permissions.cjs.map +1 -1
  39. package/dist/production/src/acl/definition/permissions.js +4 -1
  40. package/dist/production/src/acl/definition/permissions.js.map +1 -1
  41. package/dist/production/src/actions/definition/internal/ActionsFactory.cjs +2 -1
  42. package/dist/production/src/actions/definition/internal/ActionsFactory.cjs.map +1 -1
  43. package/dist/production/src/actions/definition/internal/ActionsFactory.js +2 -1
  44. package/dist/production/src/actions/definition/internal/ActionsFactory.js.map +1 -1
  45. package/dist/production/src/actions/definition/triggers.cjs.map +1 -1
  46. package/dist/production/src/actions/definition/triggers.js.map +1 -1
  47. package/dist/production/src/model/definition/IndexDefinition.cjs +2 -2
  48. package/dist/production/src/model/definition/IndexDefinition.cjs.map +1 -1
  49. package/dist/production/src/model/definition/IndexDefinition.js +2 -2
  50. package/dist/production/src/model/definition/IndexDefinition.js.map +1 -1
  51. package/dist/production/src/model/definition/UniqueDefinition.cjs.map +1 -1
  52. package/dist/production/src/model/definition/UniqueDefinition.js.map +1 -1
  53. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  54. package/dist/types/acl/definition/internal/AclFactory.d.ts +1 -1
  55. package/dist/types/acl/definition/internal/AclFactory.d.ts.map +1 -1
  56. package/dist/types/acl/definition/internal/stores.d.ts +7 -3
  57. package/dist/types/acl/definition/internal/stores.d.ts.map +1 -1
  58. package/dist/types/acl/definition/permissions.d.ts +7 -2
  59. package/dist/types/acl/definition/permissions.d.ts.map +1 -1
  60. package/dist/types/actions/definition/internal/ActionsFactory.d.ts.map +1 -1
  61. package/dist/types/actions/definition/triggers.d.ts +1 -0
  62. package/dist/types/actions/definition/triggers.d.ts.map +1 -1
  63. package/dist/types/index.d.ts +1 -1
  64. package/dist/types/model/definition/IndexDefinition.d.ts +2 -0
  65. package/dist/types/model/definition/IndexDefinition.d.ts.map +1 -1
  66. package/dist/types/model/definition/UniqueDefinition.d.ts +1 -0
  67. package/dist/types/model/definition/UniqueDefinition.d.ts.map +1 -1
  68. package/dist/types/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +3 -3
  70. package/src/acl/definition/customPrimary.ts +1 -1
  71. package/src/acl/definition/internal/AclFactory.ts +10 -5
  72. package/src/acl/definition/internal/stores.ts +2 -2
  73. package/src/acl/definition/permissions.ts +12 -3
  74. package/src/actions/definition/internal/ActionsFactory.ts +1 -0
  75. package/src/actions/definition/triggers.ts +1 -0
  76. package/src/model/definition/IndexDefinition.ts +7 -3
  77. package/src/model/definition/UniqueDefinition.ts +1 -0
  78. package/tests/cases/unit/readAclDefinitions.test.ts +189 -163
@@ -4,7 +4,7 @@ const aclExtensions = require("./aclExtensions.cjs");
4
4
  const allowCustomPrimary = (role) => {
5
5
  return aclExtensions.extendEntityAcl(({ permissions, role: currentRole }) => {
6
6
  if (!role || role === currentRole || Array.isArray(role) && role.includes(currentRole)) {
7
- return { ...permissions, operations: { customPrimary: true } };
7
+ return { ...permissions, operations: { ...permissions.operations, customPrimary: true } };
8
8
  }
9
9
  return permissions;
10
10
  });
@@ -1 +1 @@
1
- {"version":3,"file":"customPrimary.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport { DecoratorFunction } from '../../utils'\nimport { extendEntityAcl } from './aclExtensions'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn extendEntityAcl(({ permissions, role: currentRole }) => {\n\t\tif (!role || role === currentRole || (Array.isArray(role) && role.includes(currentRole))) {\n\t\t\treturn { ...permissions, operations: { customPrimary: true } }\n\t\t}\n\t\treturn permissions\n\t})\n}\n"],"names":["extendEntityAcl"],"mappings":";;;AAIa,MAAA,qBAAqB,CAAC,SAAiD;AACnF,SAAOA,8BAAgB,CAAC,EAAE,aAAa,MAAM,kBAAkB;AAC1D,QAAA,CAAC,QAAQ,SAAS,eAAgB,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,WAAW,GAAI;AACzF,aAAO,EAAE,GAAG,aAAa,YAAY,EAAE,eAAe,OAAO;AAAA,IAAA;AAEvD,WAAA;AAAA,EAAA,CACP;AACF;;"}
1
+ {"version":3,"file":"customPrimary.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport { DecoratorFunction } from '../../utils'\nimport { extendEntityAcl } from './aclExtensions'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn extendEntityAcl(({ permissions, role: currentRole }) => {\n\t\tif (!role || role === currentRole || (Array.isArray(role) && role.includes(currentRole))) {\n\t\t\treturn { ...permissions, operations: { ...permissions.operations, customPrimary: true } }\n\t\t}\n\t\treturn permissions\n\t})\n}\n"],"names":["extendEntityAcl"],"mappings":";;;AAIa,MAAA,qBAAqB,CAAC,SAAiD;AACnF,SAAOA,8BAAgB,CAAC,EAAE,aAAa,MAAM,kBAAkB;AAC1D,QAAA,CAAC,QAAQ,SAAS,eAAgB,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,WAAW,GAAI;AAClF,aAAA,EAAE,GAAG,aAAa,YAAY,EAAE,GAAG,YAAY,YAAY,eAAe,OAAO;AAAA,IAAA;AAElF,WAAA;AAAA,EAAA,CACP;AACF;;"}
@@ -2,7 +2,7 @@ import { extendEntityAcl } from "./aclExtensions.js";
2
2
  const allowCustomPrimary = (role) => {
3
3
  return extendEntityAcl(({ permissions, role: currentRole }) => {
4
4
  if (!role || role === currentRole || Array.isArray(role) && role.includes(currentRole)) {
5
- return { ...permissions, operations: { customPrimary: true } };
5
+ return { ...permissions, operations: { ...permissions.operations, customPrimary: true } };
6
6
  }
7
7
  return permissions;
8
8
  });
@@ -1 +1 @@
1
- {"version":3,"file":"customPrimary.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport { DecoratorFunction } from '../../utils'\nimport { extendEntityAcl } from './aclExtensions'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn extendEntityAcl(({ permissions, role: currentRole }) => {\n\t\tif (!role || role === currentRole || (Array.isArray(role) && role.includes(currentRole))) {\n\t\t\treturn { ...permissions, operations: { customPrimary: true } }\n\t\t}\n\t\treturn permissions\n\t})\n}\n"],"names":[],"mappings":";AAIa,MAAA,qBAAqB,CAAC,SAAiD;AACnF,SAAO,gBAAgB,CAAC,EAAE,aAAa,MAAM,kBAAkB;AAC1D,QAAA,CAAC,QAAQ,SAAS,eAAgB,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,WAAW,GAAI;AACzF,aAAO,EAAE,GAAG,aAAa,YAAY,EAAE,eAAe,OAAO;AAAA,IAAA;AAEvD,WAAA;AAAA,EAAA,CACP;AACF;"}
1
+ {"version":3,"file":"customPrimary.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport { DecoratorFunction } from '../../utils'\nimport { extendEntityAcl } from './aclExtensions'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn extendEntityAcl(({ permissions, role: currentRole }) => {\n\t\tif (!role || role === currentRole || (Array.isArray(role) && role.includes(currentRole))) {\n\t\t\treturn { ...permissions, operations: { ...permissions.operations, customPrimary: true } }\n\t\t}\n\t\treturn permissions\n\t})\n}\n"],"names":[],"mappings":";AAIa,MAAA,qBAAqB,CAAC,SAAiD;AACnF,SAAO,gBAAgB,CAAC,EAAE,aAAa,MAAM,kBAAkB;AAC1D,QAAA,CAAC,QAAQ,SAAS,eAAgB,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,WAAW,GAAI;AAClF,aAAA,EAAE,GAAG,aAAa,YAAY,EAAE,GAAG,YAAY,YAAY,eAAe,OAAO;AAAA,IAAA;AAElF,WAAA;AAAA,EAAA,CACP;AACF;"}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const schemaUtils = require("@contember/schema-utils");
3
4
  const EntityPredicateResolver = require("./EntityPredicateResolver.cjs");
4
5
  const stores = require("./stores.cjs");
5
6
  const roles = require("../roles.cjs");
@@ -15,7 +16,7 @@ class AclFactory {
15
16
  const entityLikeDefinition = filterEntityDefinition.filterEntityDefinition(exportedDefinitions);
16
17
  const roles$1 = Object.values(exportedDefinitions).filter((it) => it instanceof roles.Role);
17
18
  const variables$1 = Object.values(exportedDefinitions).filter((it) => it instanceof variables.VariableDefinition);
18
- const groupedPermissions = AclFactory.groupPermissions(entityLikeDefinition, roles$1);
19
+ const groupedPermissions = this.groupPermissions(entityLikeDefinition, roles$1);
19
20
  return {
20
21
  roles: Object.fromEntries(roles$1.map((role) => {
21
22
  const rolePermissions = groupedPermissions.get(role);
@@ -34,7 +35,7 @@ class AclFactory {
34
35
  createPermissions(rolePermissions, entityLikeDefinition, role) {
35
36
  return Object.fromEntries(Object.values(this.model.entities).map((entity) => {
36
37
  const permissions = rolePermissions ? this.createPermissionsFromAllow(rolePermissions, entity) : { predicates: {}, operations: {} };
37
- const isEmpty = rolePermissions === void 0;
38
+ const isEmpty = !rolePermissions?.has(entity.name);
38
39
  const withExtensions = aclExtensions.applyEntityAclExtensions(entityLikeDefinition[entity.name], { entity, permissions, role });
39
40
  if (isEmpty && withExtensions === permissions) {
40
41
  return void 0;
@@ -97,7 +98,7 @@ class AclFactory {
97
98
  return [variable.name, variable.variable];
98
99
  }));
99
100
  }
100
- static groupPermissions(entityLikeDefinition, roles2) {
101
+ groupPermissions(entityLikeDefinition, roles2) {
101
102
  const groupedPermissions = /* @__PURE__ */ new Map();
102
103
  for (const [name, entity] of entityLikeDefinition) {
103
104
  const initEntityPermissions = (role) => {
@@ -110,12 +111,17 @@ class AclFactory {
110
111
  return entityPermissions;
111
112
  };
112
113
  const metadata = stores.allowDefinitionsStore.get(entity);
113
- for (const { role, ...definition } of metadata) {
114
+ for (const { role, factory } of metadata) {
114
115
  if (!roles2.includes(role)) {
115
116
  throw `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`;
116
117
  }
117
118
  const entityPermissions = initEntityPermissions(role);
118
- entityPermissions.definitions.push(definition);
119
+ const entity2 = schemaUtils.getEntity(this.model, name);
120
+ entityPermissions.definitions.push(factory({
121
+ model: this.model,
122
+ entity: schemaUtils.getEntity(this.model, name),
123
+ except: (...fields) => Object.keys(entity2.fields).filter((it) => !fields.includes(it))
124
+ }));
119
125
  }
120
126
  }
121
127
  return groupedPermissions;
@@ -1 +1 @@
1
- {"version":3,"file":"AclFactory.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/AclFactory.ts"],"sourcesContent":["import { Acl, Model, Writable } from '@contember/schema'\nimport { getEntity } from '@contember/schema-utils'\n\nimport { EntityPredicatesResolver } from './EntityPredicateResolver'\nimport { AllowDefinition } from '../permissions'\nimport {\n\tallowDefinitionsStore,\n\tEntityPermissionsDefinition,\n} from './stores'\nimport { Role } from '../roles'\nimport { VariableDefinition } from '../variables'\nimport { filterEntityDefinition } from '../../../utils'\nimport { applyEntityAclExtensions } from '../aclExtensions'\n\nexport class AclFactory {\n\tconstructor(\n\t\tprivate model: Model.Schema,\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Acl.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\t\tconst roles: Role[] = Object.values(exportedDefinitions).filter(it => it instanceof Role)\n\t\tconst variables: VariableDefinition[] = Object.values(exportedDefinitions).filter(it => it instanceof VariableDefinition)\n\n\t\tconst groupedPermissions = AclFactory.groupPermissions(entityLikeDefinition, roles)\n\n\t\treturn {\n\t\t\troles: Object.fromEntries(roles.map((role): [string, Acl.RolePermissions] => {\n\t\t\t\tconst rolePermissions = groupedPermissions.get(role)\n\t\t\t\treturn [\n\t\t\t\t\trole.name,\n\t\t\t\t\t{\n\t\t\t\t\t\t...role.options,\n\t\t\t\t\t\tstages: role.options.stages ?? '*',\n\t\t\t\t\t\tentities: this.createPermissions(rolePermissions, Object.fromEntries(entityLikeDefinition), role),\n\t\t\t\t\t\tvariables: this.createVariables(role, variables),\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t})),\n\t\t}\n\t}\n\n\tprivate createPermissions(rolePermissions: PermissionsByEntity | undefined, entityLikeDefinition: Record<string, { new(): any }>, role: Role): Acl.Permissions {\n\t\treturn Object.fromEntries(Object.values(this.model.entities).map((entity): [string, Acl.EntityPermissions] | undefined => {\n\t\t\tconst permissions = rolePermissions ? this.createPermissionsFromAllow(rolePermissions, entity) : { predicates: {}, operations: {} }\n\t\t\tconst isEmpty = rolePermissions === undefined\n\t\t\tconst withExtensions = applyEntityAclExtensions(entityLikeDefinition[entity.name], { entity, permissions, role })\n\t\t\tif (isEmpty && withExtensions === permissions) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn [\n\t\t\t\tentity.name,\n\t\t\t\twithExtensions,\n\t\t\t]\n\t\t}).filter(<T>(it: T | undefined): it is T => it !== undefined))\n\t}\n\n\tprivate createPermissionsFromAllow(rolePermissions: PermissionsByEntity, entity: Model.Entity): Acl.EntityPermissions {\n\t\tconst predicatesResolver = EntityPredicatesResolver.create(rolePermissions, this.model, entity)\n\n\t\tconst entityOperations: Writable<Acl.EntityOperations> = {}\n\t\tconst noRootOptions = this.getNoRootOptions(entity, rolePermissions.get(entity.name))\n\t\tif (noRootOptions?.length) {\n\t\t\tentityOperations.noRoot = noRootOptions\n\t\t}\n\t\tfor (const op of ['create', 'update', 'read'] as const) {\n\t\t\tconst fieldPermissions: Writable<Acl.FieldPermissions> = {}\n\t\t\tfor (const field of Object.keys(entity.fields)) {\n\t\t\t\tconst predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary)\n\t\t\t\tif (predicate !== undefined) {\n\t\t\t\t\tfieldPermissions[field] = predicate\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Object.keys(fieldPermissions).length > 0) {\n\t\t\t\tentityOperations[op] = fieldPermissions\n\t\t\t}\n\t\t}\n\t\tconst delPredicate = predicatesResolver.createFieldPredicate('delete', '', false)\n\t\tif (delPredicate !== undefined) {\n\t\t\tentityOperations.delete = delPredicate\n\t\t}\n\t\treturn {\n\t\t\tpredicates: predicatesResolver.getUsedPredicates(),\n\t\t\toperations: entityOperations,\n\t\t}\n\t}\n\n\n\tgetNoRootOptions(entity: Model.Entity, permissions?: EntityPermissions): Acl.EntityOperations['noRoot'] {\n\t\tconst allowedRoot = new Set<Acl.Operation>()\n\t\tconst disallowedRoot = new Set<Acl.Operation>()\n\t\tfor (const def of permissions?.definitions ?? []) {\n\t\t\tconst noRoot = def.through === true\n\t\t\tfor (const op of ['create', 'read', 'update', 'delete'] as const) {\n\t\t\t\tif (def[op]) {\n\t\t\t\t\tconst currentSet = noRoot ? disallowedRoot : allowedRoot\n\t\t\t\t\tcurrentSet.add(op as Acl.Operation)\n\n\t\t\t\t\tconst otherSet = noRoot ? allowedRoot : disallowedRoot\n\n\t\t\t\t\tif (otherSet.has(op as Acl.Operation)) {\n\t\t\t\t\t\tthrow new Error(`Operation ${op} cannot be both allowed and disallowed on root on entity ${entity.name}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn [...disallowedRoot.values()]\n\t}\n\n\tprivate createVariables(role: Role, variables: VariableDefinition[]): Acl.Variables {\n\t\tconst roleVariables = variables.filter(it => it.roles.includes(role))\n\t\treturn Object.fromEntries(roleVariables.map((variable): [string, Acl.Variable] => {\n\t\t\treturn [variable.name, variable.variable]\n\t\t}))\n\t}\n\n\tprivate static groupPermissions(entityLikeDefinition: [string, { new(): any }][], roles: Role[]): PermissionsByRoleAndEntity {\n\t\tconst groupedPermissions: PermissionsByRoleAndEntity = new Map()\n\t\tfor (const [name, entity] of entityLikeDefinition) {\n\t\t\tconst initEntityPermissions = (role: Role): EntityPermissions => {\n\t\t\t\tconst rolePermissions: PermissionsByEntity = groupedPermissions.get(role) ?? new Map()\n\t\t\t\tgroupedPermissions.set(role, rolePermissions)\n\t\t\t\tconst entityPermissions = rolePermissions.get(name) ?? {\n\t\t\t\t\tdefinitions: [],\n\t\t\t\t}\n\t\t\t\trolePermissions.set(name, entityPermissions)\n\t\t\t\treturn entityPermissions\n\t\t\t}\n\t\t\tconst metadata: EntityPermissionsDefinition[] = allowDefinitionsStore.get(entity)\n\t\t\tfor (const { role, ...definition } of metadata) {\n\t\t\t\tif (!roles.includes(role)) {\n\t\t\t\t\tthrow `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\tconst entityPermissions = initEntityPermissions(role)\n\t\t\t\tentityPermissions.definitions.push(definition)\n\t\t\t}\n\t\t}\n\n\t\treturn groupedPermissions\n\t}\n}\n\n\nexport type EntityPermissions = { definitions: AllowDefinition<any>[] }\nexport type PermissionsByEntity = Map<string, EntityPermissions>\nexport type PermissionsByRoleAndEntity = Map<Role, PermissionsByEntity>\n"],"names":["filterEntityDefinition","roles","Role","variables","VariableDefinition","applyEntityAclExtensions","EntityPredicatesResolver","allowDefinitionsStore"],"mappings":"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"}
1
+ {"version":3,"file":"AclFactory.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/AclFactory.ts"],"sourcesContent":["import { Acl, Model, Writable } from '@contember/schema'\nimport { getEntity } from '@contember/schema-utils'\n\nimport { EntityPredicatesResolver } from './EntityPredicateResolver'\nimport { AllowDefinition } from '../permissions'\nimport {\n\tallowDefinitionsStore,\n\tEntityPermissionsDefinition,\n} from './stores'\nimport { Role } from '../roles'\nimport { VariableDefinition } from '../variables'\nimport { filterEntityDefinition } from '../../../utils'\nimport { applyEntityAclExtensions } from '../aclExtensions'\n\nexport class AclFactory {\n\tconstructor(\n\t\tprivate model: Model.Schema,\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Acl.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\t\tconst roles: Role[] = Object.values(exportedDefinitions).filter(it => it instanceof Role)\n\t\tconst variables: VariableDefinition[] = Object.values(exportedDefinitions).filter(it => it instanceof VariableDefinition)\n\n\t\tconst groupedPermissions = this.groupPermissions(entityLikeDefinition, roles)\n\n\t\treturn {\n\t\t\troles: Object.fromEntries(roles.map((role): [string, Acl.RolePermissions] => {\n\t\t\t\tconst rolePermissions = groupedPermissions.get(role)\n\t\t\t\treturn [\n\t\t\t\t\trole.name,\n\t\t\t\t\t{\n\t\t\t\t\t\t...role.options,\n\t\t\t\t\t\tstages: role.options.stages ?? '*',\n\t\t\t\t\t\tentities: this.createPermissions(rolePermissions, Object.fromEntries(entityLikeDefinition), role),\n\t\t\t\t\t\tvariables: this.createVariables(role, variables),\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t})),\n\t\t}\n\t}\n\n\tprivate createPermissions(rolePermissions: PermissionsByEntity | undefined, entityLikeDefinition: Record<string, { new(): any }>, role: Role): Acl.Permissions {\n\t\treturn Object.fromEntries(Object.values(this.model.entities).map((entity): [string, Acl.EntityPermissions] | undefined => {\n\t\t\tconst permissions = rolePermissions ? this.createPermissionsFromAllow(rolePermissions, entity) : { predicates: {}, operations: {} }\n\t\t\tconst isEmpty = !rolePermissions?.has(entity.name)\n\t\t\tconst withExtensions = applyEntityAclExtensions(entityLikeDefinition[entity.name], { entity, permissions, role })\n\t\t\tif (isEmpty && withExtensions === permissions) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn [\n\t\t\t\tentity.name,\n\t\t\t\twithExtensions,\n\t\t\t]\n\t\t}).filter(<T>(it: T | undefined): it is T => it !== undefined))\n\t}\n\n\tprivate createPermissionsFromAllow(rolePermissions: PermissionsByEntity, entity: Model.Entity): Acl.EntityPermissions {\n\t\tconst predicatesResolver = EntityPredicatesResolver.create(rolePermissions, this.model, entity)\n\n\t\tconst entityOperations: Writable<Acl.EntityOperations> = {}\n\t\tconst noRootOptions = this.getNoRootOptions(entity, rolePermissions.get(entity.name))\n\t\tif (noRootOptions?.length) {\n\t\t\tentityOperations.noRoot = noRootOptions\n\t\t}\n\t\tfor (const op of ['create', 'update', 'read'] as const) {\n\t\t\tconst fieldPermissions: Writable<Acl.FieldPermissions> = {}\n\t\t\tfor (const field of Object.keys(entity.fields)) {\n\t\t\t\tconst predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary)\n\t\t\t\tif (predicate !== undefined) {\n\t\t\t\t\tfieldPermissions[field] = predicate\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Object.keys(fieldPermissions).length > 0) {\n\t\t\t\tentityOperations[op] = fieldPermissions\n\t\t\t}\n\t\t}\n\t\tconst delPredicate = predicatesResolver.createFieldPredicate('delete', '', false)\n\t\tif (delPredicate !== undefined) {\n\t\t\tentityOperations.delete = delPredicate\n\t\t}\n\t\treturn {\n\t\t\tpredicates: predicatesResolver.getUsedPredicates(),\n\t\t\toperations: entityOperations,\n\t\t}\n\t}\n\n\n\tgetNoRootOptions(entity: Model.Entity, permissions?: EntityPermissions): Acl.EntityOperations['noRoot'] {\n\t\tconst allowedRoot = new Set<Acl.Operation>()\n\t\tconst disallowedRoot = new Set<Acl.Operation>()\n\t\tfor (const def of permissions?.definitions ?? []) {\n\t\t\tconst noRoot = def.through === true\n\t\t\tfor (const op of ['create', 'read', 'update', 'delete'] as const) {\n\t\t\t\tif (def[op]) {\n\t\t\t\t\tconst currentSet = noRoot ? disallowedRoot : allowedRoot\n\t\t\t\t\tcurrentSet.add(op as Acl.Operation)\n\n\t\t\t\t\tconst otherSet = noRoot ? allowedRoot : disallowedRoot\n\n\t\t\t\t\tif (otherSet.has(op as Acl.Operation)) {\n\t\t\t\t\t\tthrow new Error(`Operation ${op} cannot be both allowed and disallowed on root on entity ${entity.name}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn [...disallowedRoot.values()]\n\t}\n\n\tprivate createVariables(role: Role, variables: VariableDefinition[]): Acl.Variables {\n\t\tconst roleVariables = variables.filter(it => it.roles.includes(role))\n\t\treturn Object.fromEntries(roleVariables.map((variable): [string, Acl.Variable] => {\n\t\t\treturn [variable.name, variable.variable]\n\t\t}))\n\t}\n\n\tprivate groupPermissions(entityLikeDefinition: [string, { new(): any }][], roles: Role[]): PermissionsByRoleAndEntity {\n\t\tconst groupedPermissions: PermissionsByRoleAndEntity = new Map()\n\t\tfor (const [name, entity] of entityLikeDefinition) {\n\t\t\tconst initEntityPermissions = (role: Role): EntityPermissions => {\n\t\t\t\tconst rolePermissions: PermissionsByEntity = groupedPermissions.get(role) ?? new Map()\n\t\t\t\tgroupedPermissions.set(role, rolePermissions)\n\t\t\t\tconst entityPermissions = rolePermissions.get(name) ?? {\n\t\t\t\t\tdefinitions: [],\n\t\t\t\t}\n\t\t\t\trolePermissions.set(name, entityPermissions)\n\t\t\t\treturn entityPermissions\n\t\t\t}\n\t\t\tconst metadata: EntityPermissionsDefinition[] = allowDefinitionsStore.get(entity)\n\t\t\tfor (const { role, factory } of metadata) {\n\t\t\t\tif (!roles.includes(role)) {\n\t\t\t\t\tthrow `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\tconst entityPermissions = initEntityPermissions(role)\n\t\t\t\tconst entity = getEntity(this.model, name)\n\t\t\t\tentityPermissions.definitions.push(factory({\n\t\t\t\t\tmodel: this.model,\n\t\t\t\t\tentity: getEntity(this.model, name),\n\t\t\t\t\texcept: (...fields) => (Object.keys(entity.fields)).filter(it => !fields.includes(it)),\n\t\t\t\t}))\n\t\t\t}\n\t\t}\n\n\t\treturn groupedPermissions\n\t}\n}\n\n\nexport type EntityPermissions = { definitions: AllowDefinition<any>[] }\nexport type PermissionsByEntity = Map<string, EntityPermissions>\nexport type PermissionsByRoleAndEntity = Map<Role, PermissionsByEntity>\n"],"names":["filterEntityDefinition","roles","Role","variables","VariableDefinition","applyEntityAclExtensions","EntityPredicatesResolver","allowDefinitionsStore","entity","getEntity"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { getEntity } from "@contember/schema-utils";
1
2
  import { EntityPredicatesResolver } from "./EntityPredicateResolver.js";
2
3
  import { allowDefinitionsStore } from "./stores.js";
3
4
  import { Role } from "../roles.js";
@@ -13,7 +14,7 @@ class AclFactory {
13
14
  const entityLikeDefinition = filterEntityDefinition(exportedDefinitions);
14
15
  const roles = Object.values(exportedDefinitions).filter((it) => it instanceof Role);
15
16
  const variables = Object.values(exportedDefinitions).filter((it) => it instanceof VariableDefinition);
16
- const groupedPermissions = AclFactory.groupPermissions(entityLikeDefinition, roles);
17
+ const groupedPermissions = this.groupPermissions(entityLikeDefinition, roles);
17
18
  return {
18
19
  roles: Object.fromEntries(roles.map((role) => {
19
20
  const rolePermissions = groupedPermissions.get(role);
@@ -32,7 +33,7 @@ class AclFactory {
32
33
  createPermissions(rolePermissions, entityLikeDefinition, role) {
33
34
  return Object.fromEntries(Object.values(this.model.entities).map((entity) => {
34
35
  const permissions = rolePermissions ? this.createPermissionsFromAllow(rolePermissions, entity) : { predicates: {}, operations: {} };
35
- const isEmpty = rolePermissions === void 0;
36
+ const isEmpty = !rolePermissions?.has(entity.name);
36
37
  const withExtensions = applyEntityAclExtensions(entityLikeDefinition[entity.name], { entity, permissions, role });
37
38
  if (isEmpty && withExtensions === permissions) {
38
39
  return void 0;
@@ -95,7 +96,7 @@ class AclFactory {
95
96
  return [variable.name, variable.variable];
96
97
  }));
97
98
  }
98
- static groupPermissions(entityLikeDefinition, roles) {
99
+ groupPermissions(entityLikeDefinition, roles) {
99
100
  const groupedPermissions = /* @__PURE__ */ new Map();
100
101
  for (const [name, entity] of entityLikeDefinition) {
101
102
  const initEntityPermissions = (role) => {
@@ -108,12 +109,17 @@ class AclFactory {
108
109
  return entityPermissions;
109
110
  };
110
111
  const metadata = allowDefinitionsStore.get(entity);
111
- for (const { role, ...definition } of metadata) {
112
+ for (const { role, factory } of metadata) {
112
113
  if (!roles.includes(role)) {
113
114
  throw `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`;
114
115
  }
115
116
  const entityPermissions = initEntityPermissions(role);
116
- entityPermissions.definitions.push(definition);
117
+ const entity2 = getEntity(this.model, name);
118
+ entityPermissions.definitions.push(factory({
119
+ model: this.model,
120
+ entity: getEntity(this.model, name),
121
+ except: (...fields) => Object.keys(entity2.fields).filter((it) => !fields.includes(it))
122
+ }));
117
123
  }
118
124
  }
119
125
  return groupedPermissions;
@@ -1 +1 @@
1
- {"version":3,"file":"AclFactory.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/AclFactory.ts"],"sourcesContent":["import { Acl, Model, Writable } from '@contember/schema'\nimport { getEntity } from '@contember/schema-utils'\n\nimport { EntityPredicatesResolver } from './EntityPredicateResolver'\nimport { AllowDefinition } from '../permissions'\nimport {\n\tallowDefinitionsStore,\n\tEntityPermissionsDefinition,\n} from './stores'\nimport { Role } from '../roles'\nimport { VariableDefinition } from '../variables'\nimport { filterEntityDefinition } from '../../../utils'\nimport { applyEntityAclExtensions } from '../aclExtensions'\n\nexport class AclFactory {\n\tconstructor(\n\t\tprivate model: Model.Schema,\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Acl.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\t\tconst roles: Role[] = Object.values(exportedDefinitions).filter(it => it instanceof Role)\n\t\tconst variables: VariableDefinition[] = Object.values(exportedDefinitions).filter(it => it instanceof VariableDefinition)\n\n\t\tconst groupedPermissions = AclFactory.groupPermissions(entityLikeDefinition, roles)\n\n\t\treturn {\n\t\t\troles: Object.fromEntries(roles.map((role): [string, Acl.RolePermissions] => {\n\t\t\t\tconst rolePermissions = groupedPermissions.get(role)\n\t\t\t\treturn [\n\t\t\t\t\trole.name,\n\t\t\t\t\t{\n\t\t\t\t\t\t...role.options,\n\t\t\t\t\t\tstages: role.options.stages ?? '*',\n\t\t\t\t\t\tentities: this.createPermissions(rolePermissions, Object.fromEntries(entityLikeDefinition), role),\n\t\t\t\t\t\tvariables: this.createVariables(role, variables),\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t})),\n\t\t}\n\t}\n\n\tprivate createPermissions(rolePermissions: PermissionsByEntity | undefined, entityLikeDefinition: Record<string, { new(): any }>, role: Role): Acl.Permissions {\n\t\treturn Object.fromEntries(Object.values(this.model.entities).map((entity): [string, Acl.EntityPermissions] | undefined => {\n\t\t\tconst permissions = rolePermissions ? this.createPermissionsFromAllow(rolePermissions, entity) : { predicates: {}, operations: {} }\n\t\t\tconst isEmpty = rolePermissions === undefined\n\t\t\tconst withExtensions = applyEntityAclExtensions(entityLikeDefinition[entity.name], { entity, permissions, role })\n\t\t\tif (isEmpty && withExtensions === permissions) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn [\n\t\t\t\tentity.name,\n\t\t\t\twithExtensions,\n\t\t\t]\n\t\t}).filter(<T>(it: T | undefined): it is T => it !== undefined))\n\t}\n\n\tprivate createPermissionsFromAllow(rolePermissions: PermissionsByEntity, entity: Model.Entity): Acl.EntityPermissions {\n\t\tconst predicatesResolver = EntityPredicatesResolver.create(rolePermissions, this.model, entity)\n\n\t\tconst entityOperations: Writable<Acl.EntityOperations> = {}\n\t\tconst noRootOptions = this.getNoRootOptions(entity, rolePermissions.get(entity.name))\n\t\tif (noRootOptions?.length) {\n\t\t\tentityOperations.noRoot = noRootOptions\n\t\t}\n\t\tfor (const op of ['create', 'update', 'read'] as const) {\n\t\t\tconst fieldPermissions: Writable<Acl.FieldPermissions> = {}\n\t\t\tfor (const field of Object.keys(entity.fields)) {\n\t\t\t\tconst predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary)\n\t\t\t\tif (predicate !== undefined) {\n\t\t\t\t\tfieldPermissions[field] = predicate\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Object.keys(fieldPermissions).length > 0) {\n\t\t\t\tentityOperations[op] = fieldPermissions\n\t\t\t}\n\t\t}\n\t\tconst delPredicate = predicatesResolver.createFieldPredicate('delete', '', false)\n\t\tif (delPredicate !== undefined) {\n\t\t\tentityOperations.delete = delPredicate\n\t\t}\n\t\treturn {\n\t\t\tpredicates: predicatesResolver.getUsedPredicates(),\n\t\t\toperations: entityOperations,\n\t\t}\n\t}\n\n\n\tgetNoRootOptions(entity: Model.Entity, permissions?: EntityPermissions): Acl.EntityOperations['noRoot'] {\n\t\tconst allowedRoot = new Set<Acl.Operation>()\n\t\tconst disallowedRoot = new Set<Acl.Operation>()\n\t\tfor (const def of permissions?.definitions ?? []) {\n\t\t\tconst noRoot = def.through === true\n\t\t\tfor (const op of ['create', 'read', 'update', 'delete'] as const) {\n\t\t\t\tif (def[op]) {\n\t\t\t\t\tconst currentSet = noRoot ? disallowedRoot : allowedRoot\n\t\t\t\t\tcurrentSet.add(op as Acl.Operation)\n\n\t\t\t\t\tconst otherSet = noRoot ? allowedRoot : disallowedRoot\n\n\t\t\t\t\tif (otherSet.has(op as Acl.Operation)) {\n\t\t\t\t\t\tthrow new Error(`Operation ${op} cannot be both allowed and disallowed on root on entity ${entity.name}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn [...disallowedRoot.values()]\n\t}\n\n\tprivate createVariables(role: Role, variables: VariableDefinition[]): Acl.Variables {\n\t\tconst roleVariables = variables.filter(it => it.roles.includes(role))\n\t\treturn Object.fromEntries(roleVariables.map((variable): [string, Acl.Variable] => {\n\t\t\treturn [variable.name, variable.variable]\n\t\t}))\n\t}\n\n\tprivate static groupPermissions(entityLikeDefinition: [string, { new(): any }][], roles: Role[]): PermissionsByRoleAndEntity {\n\t\tconst groupedPermissions: PermissionsByRoleAndEntity = new Map()\n\t\tfor (const [name, entity] of entityLikeDefinition) {\n\t\t\tconst initEntityPermissions = (role: Role): EntityPermissions => {\n\t\t\t\tconst rolePermissions: PermissionsByEntity = groupedPermissions.get(role) ?? new Map()\n\t\t\t\tgroupedPermissions.set(role, rolePermissions)\n\t\t\t\tconst entityPermissions = rolePermissions.get(name) ?? {\n\t\t\t\t\tdefinitions: [],\n\t\t\t\t}\n\t\t\t\trolePermissions.set(name, entityPermissions)\n\t\t\t\treturn entityPermissions\n\t\t\t}\n\t\t\tconst metadata: EntityPermissionsDefinition[] = allowDefinitionsStore.get(entity)\n\t\t\tfor (const { role, ...definition } of metadata) {\n\t\t\t\tif (!roles.includes(role)) {\n\t\t\t\t\tthrow `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\tconst entityPermissions = initEntityPermissions(role)\n\t\t\t\tentityPermissions.definitions.push(definition)\n\t\t\t}\n\t\t}\n\n\t\treturn groupedPermissions\n\t}\n}\n\n\nexport type EntityPermissions = { definitions: AllowDefinition<any>[] }\nexport type PermissionsByEntity = Map<string, EntityPermissions>\nexport type PermissionsByRoleAndEntity = Map<Role, PermissionsByEntity>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AclFactory.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/AclFactory.ts"],"sourcesContent":["import { Acl, Model, Writable } from '@contember/schema'\nimport { getEntity } from '@contember/schema-utils'\n\nimport { EntityPredicatesResolver } from './EntityPredicateResolver'\nimport { AllowDefinition } from '../permissions'\nimport {\n\tallowDefinitionsStore,\n\tEntityPermissionsDefinition,\n} from './stores'\nimport { Role } from '../roles'\nimport { VariableDefinition } from '../variables'\nimport { filterEntityDefinition } from '../../../utils'\nimport { applyEntityAclExtensions } from '../aclExtensions'\n\nexport class AclFactory {\n\tconstructor(\n\t\tprivate model: Model.Schema,\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Acl.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\t\tconst roles: Role[] = Object.values(exportedDefinitions).filter(it => it instanceof Role)\n\t\tconst variables: VariableDefinition[] = Object.values(exportedDefinitions).filter(it => it instanceof VariableDefinition)\n\n\t\tconst groupedPermissions = this.groupPermissions(entityLikeDefinition, roles)\n\n\t\treturn {\n\t\t\troles: Object.fromEntries(roles.map((role): [string, Acl.RolePermissions] => {\n\t\t\t\tconst rolePermissions = groupedPermissions.get(role)\n\t\t\t\treturn [\n\t\t\t\t\trole.name,\n\t\t\t\t\t{\n\t\t\t\t\t\t...role.options,\n\t\t\t\t\t\tstages: role.options.stages ?? '*',\n\t\t\t\t\t\tentities: this.createPermissions(rolePermissions, Object.fromEntries(entityLikeDefinition), role),\n\t\t\t\t\t\tvariables: this.createVariables(role, variables),\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t})),\n\t\t}\n\t}\n\n\tprivate createPermissions(rolePermissions: PermissionsByEntity | undefined, entityLikeDefinition: Record<string, { new(): any }>, role: Role): Acl.Permissions {\n\t\treturn Object.fromEntries(Object.values(this.model.entities).map((entity): [string, Acl.EntityPermissions] | undefined => {\n\t\t\tconst permissions = rolePermissions ? this.createPermissionsFromAllow(rolePermissions, entity) : { predicates: {}, operations: {} }\n\t\t\tconst isEmpty = !rolePermissions?.has(entity.name)\n\t\t\tconst withExtensions = applyEntityAclExtensions(entityLikeDefinition[entity.name], { entity, permissions, role })\n\t\t\tif (isEmpty && withExtensions === permissions) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn [\n\t\t\t\tentity.name,\n\t\t\t\twithExtensions,\n\t\t\t]\n\t\t}).filter(<T>(it: T | undefined): it is T => it !== undefined))\n\t}\n\n\tprivate createPermissionsFromAllow(rolePermissions: PermissionsByEntity, entity: Model.Entity): Acl.EntityPermissions {\n\t\tconst predicatesResolver = EntityPredicatesResolver.create(rolePermissions, this.model, entity)\n\n\t\tconst entityOperations: Writable<Acl.EntityOperations> = {}\n\t\tconst noRootOptions = this.getNoRootOptions(entity, rolePermissions.get(entity.name))\n\t\tif (noRootOptions?.length) {\n\t\t\tentityOperations.noRoot = noRootOptions\n\t\t}\n\t\tfor (const op of ['create', 'update', 'read'] as const) {\n\t\t\tconst fieldPermissions: Writable<Acl.FieldPermissions> = {}\n\t\t\tfor (const field of Object.keys(entity.fields)) {\n\t\t\t\tconst predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary)\n\t\t\t\tif (predicate !== undefined) {\n\t\t\t\t\tfieldPermissions[field] = predicate\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Object.keys(fieldPermissions).length > 0) {\n\t\t\t\tentityOperations[op] = fieldPermissions\n\t\t\t}\n\t\t}\n\t\tconst delPredicate = predicatesResolver.createFieldPredicate('delete', '', false)\n\t\tif (delPredicate !== undefined) {\n\t\t\tentityOperations.delete = delPredicate\n\t\t}\n\t\treturn {\n\t\t\tpredicates: predicatesResolver.getUsedPredicates(),\n\t\t\toperations: entityOperations,\n\t\t}\n\t}\n\n\n\tgetNoRootOptions(entity: Model.Entity, permissions?: EntityPermissions): Acl.EntityOperations['noRoot'] {\n\t\tconst allowedRoot = new Set<Acl.Operation>()\n\t\tconst disallowedRoot = new Set<Acl.Operation>()\n\t\tfor (const def of permissions?.definitions ?? []) {\n\t\t\tconst noRoot = def.through === true\n\t\t\tfor (const op of ['create', 'read', 'update', 'delete'] as const) {\n\t\t\t\tif (def[op]) {\n\t\t\t\t\tconst currentSet = noRoot ? disallowedRoot : allowedRoot\n\t\t\t\t\tcurrentSet.add(op as Acl.Operation)\n\n\t\t\t\t\tconst otherSet = noRoot ? allowedRoot : disallowedRoot\n\n\t\t\t\t\tif (otherSet.has(op as Acl.Operation)) {\n\t\t\t\t\t\tthrow new Error(`Operation ${op} cannot be both allowed and disallowed on root on entity ${entity.name}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn [...disallowedRoot.values()]\n\t}\n\n\tprivate createVariables(role: Role, variables: VariableDefinition[]): Acl.Variables {\n\t\tconst roleVariables = variables.filter(it => it.roles.includes(role))\n\t\treturn Object.fromEntries(roleVariables.map((variable): [string, Acl.Variable] => {\n\t\t\treturn [variable.name, variable.variable]\n\t\t}))\n\t}\n\n\tprivate groupPermissions(entityLikeDefinition: [string, { new(): any }][], roles: Role[]): PermissionsByRoleAndEntity {\n\t\tconst groupedPermissions: PermissionsByRoleAndEntity = new Map()\n\t\tfor (const [name, entity] of entityLikeDefinition) {\n\t\t\tconst initEntityPermissions = (role: Role): EntityPermissions => {\n\t\t\t\tconst rolePermissions: PermissionsByEntity = groupedPermissions.get(role) ?? new Map()\n\t\t\t\tgroupedPermissions.set(role, rolePermissions)\n\t\t\t\tconst entityPermissions = rolePermissions.get(name) ?? {\n\t\t\t\t\tdefinitions: [],\n\t\t\t\t}\n\t\t\t\trolePermissions.set(name, entityPermissions)\n\t\t\t\treturn entityPermissions\n\t\t\t}\n\t\t\tconst metadata: EntityPermissionsDefinition[] = allowDefinitionsStore.get(entity)\n\t\t\tfor (const { role, factory } of metadata) {\n\t\t\t\tif (!roles.includes(role)) {\n\t\t\t\t\tthrow `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\tconst entityPermissions = initEntityPermissions(role)\n\t\t\t\tconst entity = getEntity(this.model, name)\n\t\t\t\tentityPermissions.definitions.push(factory({\n\t\t\t\t\tmodel: this.model,\n\t\t\t\t\tentity: getEntity(this.model, name),\n\t\t\t\t\texcept: (...fields) => (Object.keys(entity.fields)).filter(it => !fields.includes(it)),\n\t\t\t\t}))\n\t\t\t}\n\t\t}\n\n\t\treturn groupedPermissions\n\t}\n}\n\n\nexport type EntityPermissions = { definitions: AllowDefinition<any>[] }\nexport type PermissionsByEntity = Map<string, EntityPermissions>\nexport type PermissionsByRoleAndEntity = Map<Role, PermissionsByEntity>\n"],"names":["entity"],"mappings":";;;;;;;;AAcO,MAAM,WAAW;AAAA,EACvB,YACS,OACP;AADO,SAAA,QAAA;AAAA,EAAA;AAAA,EAIF,OACN,qBACa;AACP,UAAA,uBAAuB,uBAAuB,mBAAmB;AACjE,UAAA,QAAgB,OAAO,OAAO,mBAAmB,EAAE,OAAO,CAAA,OAAM,cAAc,IAAI;AAClF,UAAA,YAAkC,OAAO,OAAO,mBAAmB,EAAE,OAAO,CAAA,OAAM,cAAc,kBAAkB;AAExH,UAAM,qBAAqB,KAAK,iBAAiB,sBAAsB,KAAK;AAErE,WAAA;AAAA,MACN,OAAO,OAAO,YAAY,MAAM,IAAI,CAAC,SAAwC;AACtE,cAAA,kBAAkB,mBAAmB,IAAI,IAAI;AAC5C,eAAA;AAAA,UACN,KAAK;AAAA,UACL;AAAA,YACC,GAAG,KAAK;AAAA,YACR,QAAQ,KAAK,QAAQ,UAAU;AAAA,YAC/B,UAAU,KAAK,kBAAkB,iBAAiB,OAAO,YAAY,oBAAoB,GAAG,IAAI;AAAA,YAChG,WAAW,KAAK,gBAAgB,MAAM,SAAS;AAAA,UAAA;AAAA,QAEjD;AAAA,MAAA,CACA,CAAC;AAAA,IACH;AAAA,EAAA;AAAA,EAGO,kBAAkB,iBAAkD,sBAAsD,MAA6B;AACvJ,WAAA,OAAO,YAAY,OAAO,OAAO,KAAK,MAAM,QAAQ,EAAE,IAAI,CAAC,WAAwD;AACzH,YAAM,cAAc,kBAAkB,KAAK,2BAA2B,iBAAiB,MAAM,IAAI,EAAE,YAAY,IAAI,YAAY,CAAA,EAAG;AAClI,YAAM,UAAU,CAAC,iBAAiB,IAAI,OAAO,IAAI;AAC3C,YAAA,iBAAiB,yBAAyB,qBAAqB,OAAO,IAAI,GAAG,EAAE,QAAQ,aAAa,MAAM;AAC5G,UAAA,WAAW,mBAAmB,aAAa;AACvC,eAAA;AAAA,MAAA;AAED,aAAA;AAAA,QACN,OAAO;AAAA,QACP;AAAA,MACD;AAAA,IAAA,CACA,EAAE,OAAO,CAAI,OAA+B,OAAO,MAAS,CAAC;AAAA,EAAA;AAAA,EAGvD,2BAA2B,iBAAsC,QAA6C;AACrH,UAAM,qBAAqB,yBAAyB,OAAO,iBAAiB,KAAK,OAAO,MAAM;AAE9F,UAAM,mBAAmD,CAAC;AACpD,UAAA,gBAAgB,KAAK,iBAAiB,QAAQ,gBAAgB,IAAI,OAAO,IAAI,CAAC;AACpF,QAAI,eAAe,QAAQ;AAC1B,uBAAiB,SAAS;AAAA,IAAA;AAE3B,eAAW,MAAM,CAAC,UAAU,UAAU,MAAM,GAAY;AACvD,YAAM,mBAAmD,CAAC;AAC1D,iBAAW,SAAS,OAAO,KAAK,OAAO,MAAM,GAAG;AAC/C,cAAM,YAAY,mBAAmB,qBAAqB,IAAI,OAAO,UAAU,OAAO,OAAO;AAC7F,YAAI,cAAc,QAAW;AAC5B,2BAAiB,KAAK,IAAI;AAAA,QAAA;AAAA,MAC3B;AAED,UAAI,OAAO,KAAK,gBAAgB,EAAE,SAAS,GAAG;AAC7C,yBAAiB,EAAE,IAAI;AAAA,MAAA;AAAA,IACxB;AAED,UAAM,eAAe,mBAAmB,qBAAqB,UAAU,IAAI,KAAK;AAChF,QAAI,iBAAiB,QAAW;AAC/B,uBAAiB,SAAS;AAAA,IAAA;AAEpB,WAAA;AAAA,MACN,YAAY,mBAAmB,kBAAkB;AAAA,MACjD,YAAY;AAAA,IACb;AAAA,EAAA;AAAA,EAID,iBAAiB,QAAsB,aAAiE;AACjG,UAAA,kCAAkB,IAAmB;AACrC,UAAA,qCAAqB,IAAmB;AAC9C,eAAW,OAAO,aAAa,eAAe,CAAA,GAAI;AAC3C,YAAA,SAAS,IAAI,YAAY;AAC/B,iBAAW,MAAM,CAAC,UAAU,QAAQ,UAAU,QAAQ,GAAY;AAC7D,YAAA,IAAI,EAAE,GAAG;AACN,gBAAA,aAAa,SAAS,iBAAiB;AAC7C,qBAAW,IAAI,EAAmB;AAE5B,gBAAA,WAAW,SAAS,cAAc;AAEpC,cAAA,SAAS,IAAI,EAAmB,GAAG;AACtC,kBAAM,IAAI,MAAM,aAAa,EAAE,4DAA4D,OAAO,IAAI,EAAE;AAAA,UAAA;AAAA,QACzG;AAAA,MACD;AAAA,IACD;AAGD,WAAO,CAAC,GAAG,eAAe,QAAQ;AAAA,EAAA;AAAA,EAG3B,gBAAgB,MAAY,WAAgD;AAC7E,UAAA,gBAAgB,UAAU,OAAO,CAAA,OAAM,GAAG,MAAM,SAAS,IAAI,CAAC;AACpE,WAAO,OAAO,YAAY,cAAc,IAAI,CAAC,aAAqC;AACjF,aAAO,CAAC,SAAS,MAAM,SAAS,QAAQ;AAAA,IAAA,CACxC,CAAC;AAAA,EAAA;AAAA,EAGK,iBAAiB,sBAAkD,OAA2C;AAC/G,UAAA,yCAAqD,IAAI;AAC/D,eAAW,CAAC,MAAM,MAAM,KAAK,sBAAsB;AAC5C,YAAA,wBAAwB,CAAC,SAAkC;AAChE,cAAM,kBAAuC,mBAAmB,IAAI,IAAI,yBAAS,IAAI;AAClE,2BAAA,IAAI,MAAM,eAAe;AAC5C,cAAM,oBAAoB,gBAAgB,IAAI,IAAI,KAAK;AAAA,UACtD,aAAa,CAAA;AAAA,QACd;AACgB,wBAAA,IAAI,MAAM,iBAAiB;AACpC,eAAA;AAAA,MACR;AACM,YAAA,WAA0C,sBAAsB,IAAI,MAAM;AAChF,iBAAW,EAAE,MAAM,QAAQ,KAAK,UAAU;AACzC,YAAI,CAAC,MAAM,SAAS,IAAI,GAAG;AAC1B,gBAAM,QAAQ,KAAK,IAAI,mBAAmB,IAAI;AAAA,QAAA;AAEzC,cAAA,oBAAoB,sBAAsB,IAAI;AACpD,cAAMA,UAAS,UAAU,KAAK,OAAO,IAAI;AACvB,0BAAA,YAAY,KAAK,QAAQ;AAAA,UAC1C,OAAO,KAAK;AAAA,UACZ,QAAQ,UAAU,KAAK,OAAO,IAAI;AAAA,UAClC,QAAQ,IAAI,WAAY,OAAO,KAAKA,QAAO,MAAM,EAAG,OAAO,CAAM,OAAA,CAAC,OAAO,SAAS,EAAE,CAAC;AAAA,QAAA,CACrF,CAAC;AAAA,MAAA;AAAA,IACH;AAGM,WAAA;AAAA,EAAA;AAET;"}
@@ -1 +1 @@
1
- {"version":3,"file":"stores.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/stores.ts"],"sourcesContent":["import { createMetadataStore } from '../../../utils/MetadataStore'\nimport { Role } from '../roles'\nimport { AllowDefinition } from '../permissions'\n\nexport type EntityPermissionsDefinition =\n\t& AllowDefinition<any>\n\t& {\n\t\trole: Role<string>\n\t}\nexport const allowDefinitionsStore = createMetadataStore<EntityPermissionsDefinition[]>([])\n"],"names":["createMetadataStore"],"mappings":";;;AASa,MAAA,wBAAwBA,cAAmD,oBAAA,CAAE,CAAA;;"}
1
+ {"version":3,"file":"stores.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/stores.ts"],"sourcesContent":["import { createMetadataStore } from '../../../utils/MetadataStore'\nimport { AllowDefinitionFactory } from '../permissions'\nimport { Role } from '../roles'\n\nexport type EntityPermissionsDefinition =\n\t& {\n\t\tfactory: AllowDefinitionFactory<any>\n\t\trole: Role<string>\n\t}\nexport const allowDefinitionsStore = createMetadataStore<EntityPermissionsDefinition[]>([])\n"],"names":["createMetadataStore"],"mappings":";;;AASa,MAAA,wBAAwBA,cAAmD,oBAAA,CAAE,CAAA;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"stores.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/stores.ts"],"sourcesContent":["import { createMetadataStore } from '../../../utils/MetadataStore'\nimport { Role } from '../roles'\nimport { AllowDefinition } from '../permissions'\n\nexport type EntityPermissionsDefinition =\n\t& AllowDefinition<any>\n\t& {\n\t\trole: Role<string>\n\t}\nexport const allowDefinitionsStore = createMetadataStore<EntityPermissionsDefinition[]>([])\n"],"names":[],"mappings":";AASa,MAAA,wBAAwB,oBAAmD,CAAE,CAAA;"}
1
+ {"version":3,"file":"stores.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/stores.ts"],"sourcesContent":["import { createMetadataStore } from '../../../utils/MetadataStore'\nimport { AllowDefinitionFactory } from '../permissions'\nimport { Role } from '../roles'\n\nexport type EntityPermissionsDefinition =\n\t& {\n\t\tfactory: AllowDefinitionFactory<any>\n\t\trole: Role<string>\n\t}\nexport const allowDefinitionsStore = createMetadataStore<EntityPermissionsDefinition[]>([])\n"],"names":[],"mappings":";AASa,MAAA,wBAAwB,oBAAmD,CAAE,CAAA;"}
@@ -4,7 +4,10 @@ const stores = require("./internal/stores.cjs");
4
4
  const allow = (role, args) => {
5
5
  return (entity) => {
6
6
  (Array.isArray(role) ? role : [role]).forEach((role2) => {
7
- stores.allowDefinitionsStore.update(entity, (val) => [...val, { ...args, role: role2 }]);
7
+ stores.allowDefinitionsStore.update(entity, (val) => [...val, {
8
+ factory: typeof args === "function" ? args : () => args,
9
+ role: role2
10
+ }]);
8
11
  });
9
12
  };
10
13
  };
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/permissions.ts"],"sourcesContent":["import { Acl } from '@contember/schema'\nimport { Role } from './roles'\nimport { VariableDefinition } from './variables'\nimport { PredicateEvaluationReference } from './references'\nimport { allowDefinitionsStore } from './internal/stores'\nimport { DecoratorFunction, EntityConstructor } from '../../utils'\n\nexport type PredicateExtra = PredicateEvaluationReference | VariableDefinition\nexport type WhenDefinition = Acl.PredicateDefinition<PredicateExtra>\n\nexport interface AllowDefinition<E> {\n\twhen?: WhenDefinition\n\tthrough?: true\n\tname?: string\n\tcreate?: true | ('id' | keyof E)[]\n\tupdate?: true | ('id' | keyof E)[]\n\tread?: true | ('id' | keyof E)[]\n\tdelete?: true\n}\n\nexport const allow = <E, R extends Role<string>>(role: R | R[], args: AllowDefinition<E>): DecoratorFunction<E> => {\n\treturn (entity: EntityConstructor<E>) => {\n\t\t(Array.isArray(role) ? role : [role]).forEach(role => {\n\t\t\tallowDefinitionsStore.update(entity, val => [...val, { ...args, role }])\n\t\t})\n\t}\n}\n\n\n\n"],"names":["role","allowDefinitionsStore"],"mappings":";;;AAoBa,MAAA,QAAQ,CAA4B,MAAe,SAAmD;AAClH,SAAO,CAAC,WAAiC;AACvC,KAAA,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAAA,UAAQ;AACrDC,aAAAA,sBAAsB,OAAO,QAAQ,CAAO,QAAA,CAAC,GAAG,KAAK,EAAE,GAAG,MAAM,MAAAD,MAAM,CAAA,CAAC;AAAA,IAAA,CACvE;AAAA,EACF;AACD;;"}
1
+ {"version":3,"file":"permissions.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/permissions.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { Role } from './roles'\nimport { VariableDefinition } from './variables'\nimport { PredicateEvaluationReference } from './references'\nimport { allowDefinitionsStore } from './internal/stores'\nimport { DecoratorFunction, EntityConstructor } from '../../utils'\n\nexport type PredicateExtra = PredicateEvaluationReference | VariableDefinition\nexport type WhenDefinition = Acl.PredicateDefinition<PredicateExtra>\n\nexport interface AllowDefinition<E> {\n\twhen?: WhenDefinition\n\tthrough?: true\n\tname?: string\n\tcreate?: true | ('id' | keyof E)[]\n\tupdate?: true | ('id' | keyof E)[]\n\tread?: true | ('id' | keyof E)[]\n\tdelete?: true\n}\n\nexport type AllowDefinitionFactory<E> = (args: {\n\tmodel: Model.Schema\n\tentity: Model.Entity<(keyof E) & string>\n\texcept: (...fields: (keyof E)[]) => (keyof E)[]\n}) => AllowDefinition<E>\n\nexport const allow = <E, R extends Role<string>>(role: R | R[], args: AllowDefinition<E> | AllowDefinitionFactory<E>): DecoratorFunction<E> => {\n\treturn (entity: EntityConstructor<E>) => {\n\t\t(Array.isArray(role) ? role : [role]).forEach(role => {\n\t\t\tallowDefinitionsStore.update(entity, val => [...val, {\n\t\t\t\tfactory: typeof args === 'function' ? args : () => args,\n\t\t\t\trole,\n\t\t\t}])\n\t\t})\n\t}\n}\n\n\n\n"],"names":["role","allowDefinitionsStore"],"mappings":";;;AA0Ba,MAAA,QAAQ,CAA4B,MAAe,SAA+E;AAC9I,SAAO,CAAC,WAAiC;AACvC,KAAA,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAAA,UAAQ;AACrDC,aAAA,sBAAsB,OAAO,QAAQ,CAAO,QAAA,CAAC,GAAG,KAAK;AAAA,QACpD,SAAS,OAAO,SAAS,aAAa,OAAO,MAAM;AAAA,QACnD,MAAAD;AAAAA,MAAA,CACA,CAAC;AAAA,IAAA,CACF;AAAA,EACF;AACD;;"}
@@ -2,7 +2,10 @@ import { allowDefinitionsStore } from "./internal/stores.js";
2
2
  const allow = (role, args) => {
3
3
  return (entity) => {
4
4
  (Array.isArray(role) ? role : [role]).forEach((role2) => {
5
- allowDefinitionsStore.update(entity, (val) => [...val, { ...args, role: role2 }]);
5
+ allowDefinitionsStore.update(entity, (val) => [...val, {
6
+ factory: typeof args === "function" ? args : () => args,
7
+ role: role2
8
+ }]);
6
9
  });
7
10
  };
8
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/permissions.ts"],"sourcesContent":["import { Acl } from '@contember/schema'\nimport { Role } from './roles'\nimport { VariableDefinition } from './variables'\nimport { PredicateEvaluationReference } from './references'\nimport { allowDefinitionsStore } from './internal/stores'\nimport { DecoratorFunction, EntityConstructor } from '../../utils'\n\nexport type PredicateExtra = PredicateEvaluationReference | VariableDefinition\nexport type WhenDefinition = Acl.PredicateDefinition<PredicateExtra>\n\nexport interface AllowDefinition<E> {\n\twhen?: WhenDefinition\n\tthrough?: true\n\tname?: string\n\tcreate?: true | ('id' | keyof E)[]\n\tupdate?: true | ('id' | keyof E)[]\n\tread?: true | ('id' | keyof E)[]\n\tdelete?: true\n}\n\nexport const allow = <E, R extends Role<string>>(role: R | R[], args: AllowDefinition<E>): DecoratorFunction<E> => {\n\treturn (entity: EntityConstructor<E>) => {\n\t\t(Array.isArray(role) ? role : [role]).forEach(role => {\n\t\t\tallowDefinitionsStore.update(entity, val => [...val, { ...args, role }])\n\t\t})\n\t}\n}\n\n\n\n"],"names":["role"],"mappings":";AAoBa,MAAA,QAAQ,CAA4B,MAAe,SAAmD;AAClH,SAAO,CAAC,WAAiC;AACvC,KAAA,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAAA,UAAQ;AACrD,4BAAsB,OAAO,QAAQ,CAAO,QAAA,CAAC,GAAG,KAAK,EAAE,GAAG,MAAM,MAAAA,MAAM,CAAA,CAAC;AAAA,IAAA,CACvE;AAAA,EACF;AACD;"}
1
+ {"version":3,"file":"permissions.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/permissions.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { Role } from './roles'\nimport { VariableDefinition } from './variables'\nimport { PredicateEvaluationReference } from './references'\nimport { allowDefinitionsStore } from './internal/stores'\nimport { DecoratorFunction, EntityConstructor } from '../../utils'\n\nexport type PredicateExtra = PredicateEvaluationReference | VariableDefinition\nexport type WhenDefinition = Acl.PredicateDefinition<PredicateExtra>\n\nexport interface AllowDefinition<E> {\n\twhen?: WhenDefinition\n\tthrough?: true\n\tname?: string\n\tcreate?: true | ('id' | keyof E)[]\n\tupdate?: true | ('id' | keyof E)[]\n\tread?: true | ('id' | keyof E)[]\n\tdelete?: true\n}\n\nexport type AllowDefinitionFactory<E> = (args: {\n\tmodel: Model.Schema\n\tentity: Model.Entity<(keyof E) & string>\n\texcept: (...fields: (keyof E)[]) => (keyof E)[]\n}) => AllowDefinition<E>\n\nexport const allow = <E, R extends Role<string>>(role: R | R[], args: AllowDefinition<E> | AllowDefinitionFactory<E>): DecoratorFunction<E> => {\n\treturn (entity: EntityConstructor<E>) => {\n\t\t(Array.isArray(role) ? role : [role]).forEach(role => {\n\t\t\tallowDefinitionsStore.update(entity, val => [...val, {\n\t\t\t\tfactory: typeof args === 'function' ? args : () => args,\n\t\t\t\trole,\n\t\t\t}])\n\t\t})\n\t}\n}\n\n\n\n"],"names":["role"],"mappings":";AA0Ba,MAAA,QAAQ,CAA4B,MAAe,SAA+E;AAC9I,SAAO,CAAC,WAAiC;AACvC,KAAA,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAAA,UAAQ;AACrD,4BAAsB,OAAO,QAAQ,CAAO,QAAA,CAAC,GAAG,KAAK;AAAA,QACpD,SAAS,OAAO,SAAS,aAAa,OAAO,MAAM;AAAA,QACnD,MAAAA;AAAAA,MAAA,CACA,CAAC;AAAA,IAAA,CACF;AAAA,EACF;AACD;"}
@@ -92,7 +92,8 @@ class ActionsFactory {
92
92
  name,
93
93
  watch: this.parseSelection(trigger.watch),
94
94
  selection: trigger.selection ? this.parseSelection(trigger.selection) : void 0,
95
- priority: trigger.priority
95
+ priority: trigger.priority,
96
+ ..."withNodes" in trigger ? { withNodes: trigger.withNodes } : {}
96
97
  };
97
98
  }
98
99
  createBasicTrigger(name, entity, trigger) {
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsFactory.cjs","sources":["../../../../../../../packages/schema-definition/src/actions/definition/internal/ActionsFactory.ts"],"sourcesContent":["import { assertNever, filterEntityDefinition } from '../../../utils'\nimport { Actions } from '@contember/schema'\nimport { triggersStore } from './store'\nimport { BasicTriggerDefinition, TargetDefinition, WatchTriggerDefinition } from '../triggers'\nimport { ActionsTarget } from '../targets'\nimport { Kind, parse, SelectionNode, ValueNode } from 'graphql'\n\nexport class ActionsFactory {\n\tconstructor(\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Actions.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\n\t\tconst targetsRegistry = new ActionsTargetRegistry()\n\t\tfor (const [exportedAs, def] of Object.entries(exportedDefinitions)) {\n\t\t\tif (!(def instanceof ActionsTarget)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst name = def.name ?? exportedAs\n\t\t\ttargetsRegistry.register(name, def.definition)\n\t\t}\n\n\t\tconst triggersDef = entityLikeDefinition.flatMap(([, entity]) => triggersStore.get(entity).map(it => ({\n\t\t\t...it,\n\t\t\tentity,\n\t\t})))\n\n\t\tconst triggerNames = triggersDef.map(it => it.definition.name).filter((it): it is string => !!it)\n\t\ttriggerNames.forEach((it, index, arr) => {\n\t\t\tif (arr.indexOf(it) !== index) {\n\t\t\t\tthrow `Duplicate trigger name ${it}.`\n\t\t\t}\n\t\t})\n\n\t\tconst triggers: Record<string, Actions.AnyTrigger> = {}\n\t\tfor (const { definition, entity, type } of triggersDef) {\n\t\t\tconst name = definition.name\n\t\t\tconst target = this.resolveTarget(name, definition, targetsRegistry)\n\t\t\tlet trigger: Actions.AnyTrigger\n\t\t\tif (type === 'basic') {\n\t\t\t\ttrigger = {\n\t\t\t\t\ttarget,\n\t\t\t\t\t...this.createBasicTrigger(name, entity.name, definition),\n\t\t\t\t}\n\t\t\t} else if (type === 'watch') {\n\t\t\t\ttrigger = {\n\t\t\t\t\ttarget,\n\t\t\t\t\t...this.createWatchTrigger(name, entity.name, definition),\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tassertNever(type)\n\t\t\t}\n\t\t\ttriggers[name] = trigger\n\t\t}\n\n\n\t\treturn { triggers, targets: targetsRegistry.getTargets() }\n\t}\n\n\tprivate resolveTarget(triggerName: string, targetDefinition: TargetDefinition, targetRegistry: ActionsTargetRegistry): string {\n\t\tconst generatedName = `${triggerName}_target`\n\t\tif ('target' in targetDefinition) {\n\t\t\tif (targetDefinition.target instanceof ActionsTarget) {\n\t\t\t\tconst registeredName = targetRegistry.getName(targetDefinition.target.definition)\n\t\t\t\tif (!registeredName) {\n\t\t\t\t\tthrow `Target of ${triggerName} trigger is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\treturn registeredName\n\t\t\t} else {\n\t\t\t\tconst { name, ...def } = targetDefinition.target\n\t\t\t\tconst resolvedName = name ?? generatedName\n\t\t\t\ttargetRegistry.register(resolvedName, { name: generatedName, ...def })\n\t\t\t\treturn resolvedName\n\t\t\t}\n\t\t} else if ('webhook' in targetDefinition) {\n\t\t\tif (typeof targetDefinition.webhook === 'string') {\n\t\t\t\ttargetRegistry.register(generatedName, {\n\t\t\t\t\ttype: 'webhook',\n\t\t\t\t\turl: targetDefinition.webhook,\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\ttargetRegistry.register(generatedName, {\n\t\t\t\t\ttype: 'webhook',\n\t\t\t\t\t...targetDefinition.webhook,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn generatedName\n\t\t}\n\t\treturn assertNever(targetDefinition)\n\t}\n\n\tprivate createWatchTrigger(name: string, entity: string, trigger: WatchTriggerDefinition): Omit<Actions.WatchTrigger, 'target'> {\n\t\treturn {\n\t\t\ttype: 'watch',\n\t\t\tentity,\n\t\t\tname,\n\t\t\twatch: this.parseSelection(trigger.watch),\n\t\t\tselection: trigger.selection ? this.parseSelection(trigger.selection) : undefined,\n\t\t\tpriority: trigger.priority,\n\t\t}\n\t}\n\n\tprivate createBasicTrigger(name: string, entity: string, trigger: BasicTriggerDefinition): Omit<Actions.BasicTrigger, 'target'> {\n\t\treturn {\n\t\t\ttype: 'basic',\n\t\t\tentity,\n\t\t\tname,\n\t\t\tcreate: trigger.create ?? false,\n\t\t\tdelete: trigger.delete ?? false,\n\t\t\tupdate: trigger.update ?? false,\n\t\t\tselection: trigger.selection ? this.parseSelection(trigger.selection) : undefined,\n\t\t\tpriority: trigger.priority,\n\t\t}\n\t}\n\n\tprivate parseSelection(selection: Actions.SelectionNode | string): Actions.SelectionNode {\n\t\tif (typeof selection !== 'string') {\n\t\t\treturn selection\n\t\t}\n\t\tconst result = parse(`{\n\t\t\t${selection}\n\t\t}`)\n\t\tfor (const def of result.definitions) {\n\t\t\tif (def.kind === 'OperationDefinition') {\n\t\t\t\treturn this.processSelectionSet(def.selectionSet.selections)\n\t\t\t}\n\t\t}\n\t\tthrow new Error()\n\t}\n\n\tprivate processSelectionSet(selectionSet: readonly SelectionNode[]): Actions.SelectionNode {\n\t\treturn selectionSet.map(it => {\n\t\t\tif (it.kind !== 'Field') {\n\t\t\t\tthrow `${it.kind} is not supported.`\n\t\t\t}\n\t\t\tif (it.arguments?.length === 0 && it.selectionSet === undefined) {\n\t\t\t\treturn it.name.value\n\t\t\t}\n\t\t\tconst args = Object.fromEntries(it.arguments?.map(it => [it.name, parseArguments(it.value)]) ?? [])\n\t\t\treturn [it.name.value, args, it.selectionSet ? this.processSelectionSet(it.selectionSet.selections) : []]\n\t\t})\n\t}\n}\n\nclass ActionsTargetRegistry {\n\tprivate targets: Record<string, Actions.AnyTarget> = {}\n\tprivate targetsInverseMap = new Map<Omit<Actions.AnyTarget, 'name'>, string>()\n\n\tpublic register(name: string, target: Omit<Actions.AnyTarget, 'name'> & { name?: string }): void {\n\t\tif (this.targets[name]) {\n\t\t\tthrow `Duplicate trigger target name ${name}`\n\t\t}\n\t\tthis.targets[name] = { name, ...target }\n\t\tthis.targetsInverseMap.set(target, name)\n\t}\n\n\tpublic getName(target: Omit<Actions.AnyTarget, 'name'>): string | undefined {\n\t\treturn this.targetsInverseMap.get(target)\n\t}\n\n\tpublic getTargets() {\n\t\treturn this.targets\n\t}\n}\n\nconst parseArguments = (ast: ValueNode): any => {\n\tswitch (ast.kind) {\n\t\tcase Kind.STRING:\n\t\t\treturn ast.value\n\t\tcase Kind.BOOLEAN:\n\t\t\treturn ast.value\n\t\tcase Kind.FLOAT:\n\t\t\treturn parseFloat(ast.value)\n\t\tcase Kind.INT:\n\t\t\treturn Number(ast.value)\n\t\tcase Kind.LIST:\n\t\t\treturn ast.values.map(it => parseArguments(it))\n\t\tcase Kind.OBJECT:\n\t\t\treturn Object.fromEntries(ast.fields.map(it => [it.name.value, parseArguments(it.value)]))\n\t\tcase Kind.ENUM:\n\t\t\treturn ast.value\n\t\tcase Kind.NULL:\n\t\t\treturn null\n\t\tcase Kind.VARIABLE:\n\t\t\tthrow `Variables are not supported here.`\n\t}\n}\n"],"names":["filterEntityDefinition","ActionsTarget","triggersStore","assertNever","parse","it","Kind"],"mappings":"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"}
1
+ {"version":3,"file":"ActionsFactory.cjs","sources":["../../../../../../../packages/schema-definition/src/actions/definition/internal/ActionsFactory.ts"],"sourcesContent":["import { assertNever, filterEntityDefinition } from '../../../utils'\nimport { Actions } from '@contember/schema'\nimport { triggersStore } from './store'\nimport { BasicTriggerDefinition, TargetDefinition, WatchTriggerDefinition } from '../triggers'\nimport { ActionsTarget } from '../targets'\nimport { Kind, parse, SelectionNode, ValueNode } from 'graphql'\n\nexport class ActionsFactory {\n\tconstructor(\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Actions.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\n\t\tconst targetsRegistry = new ActionsTargetRegistry()\n\t\tfor (const [exportedAs, def] of Object.entries(exportedDefinitions)) {\n\t\t\tif (!(def instanceof ActionsTarget)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst name = def.name ?? exportedAs\n\t\t\ttargetsRegistry.register(name, def.definition)\n\t\t}\n\n\t\tconst triggersDef = entityLikeDefinition.flatMap(([, entity]) => triggersStore.get(entity).map(it => ({\n\t\t\t...it,\n\t\t\tentity,\n\t\t})))\n\n\t\tconst triggerNames = triggersDef.map(it => it.definition.name).filter((it): it is string => !!it)\n\t\ttriggerNames.forEach((it, index, arr) => {\n\t\t\tif (arr.indexOf(it) !== index) {\n\t\t\t\tthrow `Duplicate trigger name ${it}.`\n\t\t\t}\n\t\t})\n\n\t\tconst triggers: Record<string, Actions.AnyTrigger> = {}\n\t\tfor (const { definition, entity, type } of triggersDef) {\n\t\t\tconst name = definition.name\n\t\t\tconst target = this.resolveTarget(name, definition, targetsRegistry)\n\t\t\tlet trigger: Actions.AnyTrigger\n\t\t\tif (type === 'basic') {\n\t\t\t\ttrigger = {\n\t\t\t\t\ttarget,\n\t\t\t\t\t...this.createBasicTrigger(name, entity.name, definition),\n\t\t\t\t}\n\t\t\t} else if (type === 'watch') {\n\t\t\t\ttrigger = {\n\t\t\t\t\ttarget,\n\t\t\t\t\t...this.createWatchTrigger(name, entity.name, definition),\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tassertNever(type)\n\t\t\t}\n\t\t\ttriggers[name] = trigger\n\t\t}\n\n\n\t\treturn { triggers, targets: targetsRegistry.getTargets() }\n\t}\n\n\tprivate resolveTarget(triggerName: string, targetDefinition: TargetDefinition, targetRegistry: ActionsTargetRegistry): string {\n\t\tconst generatedName = `${triggerName}_target`\n\t\tif ('target' in targetDefinition) {\n\t\t\tif (targetDefinition.target instanceof ActionsTarget) {\n\t\t\t\tconst registeredName = targetRegistry.getName(targetDefinition.target.definition)\n\t\t\t\tif (!registeredName) {\n\t\t\t\t\tthrow `Target of ${triggerName} trigger is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\treturn registeredName\n\t\t\t} else {\n\t\t\t\tconst { name, ...def } = targetDefinition.target\n\t\t\t\tconst resolvedName = name ?? generatedName\n\t\t\t\ttargetRegistry.register(resolvedName, { name: generatedName, ...def })\n\t\t\t\treturn resolvedName\n\t\t\t}\n\t\t} else if ('webhook' in targetDefinition) {\n\t\t\tif (typeof targetDefinition.webhook === 'string') {\n\t\t\t\ttargetRegistry.register(generatedName, {\n\t\t\t\t\ttype: 'webhook',\n\t\t\t\t\turl: targetDefinition.webhook,\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\ttargetRegistry.register(generatedName, {\n\t\t\t\t\ttype: 'webhook',\n\t\t\t\t\t...targetDefinition.webhook,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn generatedName\n\t\t}\n\t\treturn assertNever(targetDefinition)\n\t}\n\n\tprivate createWatchTrigger(name: string, entity: string, trigger: WatchTriggerDefinition): Omit<Actions.WatchTrigger, 'target'> {\n\t\treturn {\n\t\t\ttype: 'watch',\n\t\t\tentity,\n\t\t\tname,\n\t\t\twatch: this.parseSelection(trigger.watch),\n\t\t\tselection: trigger.selection ? this.parseSelection(trigger.selection) : undefined,\n\t\t\tpriority: trigger.priority,\n\t\t\t...('withNodes' in trigger ? { withNodes: trigger.withNodes } : {}),\n\t\t}\n\t}\n\n\tprivate createBasicTrigger(name: string, entity: string, trigger: BasicTriggerDefinition): Omit<Actions.BasicTrigger, 'target'> {\n\t\treturn {\n\t\t\ttype: 'basic',\n\t\t\tentity,\n\t\t\tname,\n\t\t\tcreate: trigger.create ?? false,\n\t\t\tdelete: trigger.delete ?? false,\n\t\t\tupdate: trigger.update ?? false,\n\t\t\tselection: trigger.selection ? this.parseSelection(trigger.selection) : undefined,\n\t\t\tpriority: trigger.priority,\n\t\t}\n\t}\n\n\tprivate parseSelection(selection: Actions.SelectionNode | string): Actions.SelectionNode {\n\t\tif (typeof selection !== 'string') {\n\t\t\treturn selection\n\t\t}\n\t\tconst result = parse(`{\n\t\t\t${selection}\n\t\t}`)\n\t\tfor (const def of result.definitions) {\n\t\t\tif (def.kind === 'OperationDefinition') {\n\t\t\t\treturn this.processSelectionSet(def.selectionSet.selections)\n\t\t\t}\n\t\t}\n\t\tthrow new Error()\n\t}\n\n\tprivate processSelectionSet(selectionSet: readonly SelectionNode[]): Actions.SelectionNode {\n\t\treturn selectionSet.map(it => {\n\t\t\tif (it.kind !== 'Field') {\n\t\t\t\tthrow `${it.kind} is not supported.`\n\t\t\t}\n\t\t\tif (it.arguments?.length === 0 && it.selectionSet === undefined) {\n\t\t\t\treturn it.name.value\n\t\t\t}\n\t\t\tconst args = Object.fromEntries(it.arguments?.map(it => [it.name, parseArguments(it.value)]) ?? [])\n\t\t\treturn [it.name.value, args, it.selectionSet ? this.processSelectionSet(it.selectionSet.selections) : []]\n\t\t})\n\t}\n}\n\nclass ActionsTargetRegistry {\n\tprivate targets: Record<string, Actions.AnyTarget> = {}\n\tprivate targetsInverseMap = new Map<Omit<Actions.AnyTarget, 'name'>, string>()\n\n\tpublic register(name: string, target: Omit<Actions.AnyTarget, 'name'> & { name?: string }): void {\n\t\tif (this.targets[name]) {\n\t\t\tthrow `Duplicate trigger target name ${name}`\n\t\t}\n\t\tthis.targets[name] = { name, ...target }\n\t\tthis.targetsInverseMap.set(target, name)\n\t}\n\n\tpublic getName(target: Omit<Actions.AnyTarget, 'name'>): string | undefined {\n\t\treturn this.targetsInverseMap.get(target)\n\t}\n\n\tpublic getTargets() {\n\t\treturn this.targets\n\t}\n}\n\nconst parseArguments = (ast: ValueNode): any => {\n\tswitch (ast.kind) {\n\t\tcase Kind.STRING:\n\t\t\treturn ast.value\n\t\tcase Kind.BOOLEAN:\n\t\t\treturn ast.value\n\t\tcase Kind.FLOAT:\n\t\t\treturn parseFloat(ast.value)\n\t\tcase Kind.INT:\n\t\t\treturn Number(ast.value)\n\t\tcase Kind.LIST:\n\t\t\treturn ast.values.map(it => parseArguments(it))\n\t\tcase Kind.OBJECT:\n\t\t\treturn Object.fromEntries(ast.fields.map(it => [it.name.value, parseArguments(it.value)]))\n\t\tcase Kind.ENUM:\n\t\t\treturn ast.value\n\t\tcase Kind.NULL:\n\t\t\treturn null\n\t\tcase Kind.VARIABLE:\n\t\t\tthrow `Variables are not supported here.`\n\t}\n}\n"],"names":["filterEntityDefinition","ActionsTarget","triggersStore","assertNever","parse","it","Kind"],"mappings":"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"}
@@ -90,7 +90,8 @@ class ActionsFactory {
90
90
  name,
91
91
  watch: this.parseSelection(trigger.watch),
92
92
  selection: trigger.selection ? this.parseSelection(trigger.selection) : void 0,
93
- priority: trigger.priority
93
+ priority: trigger.priority,
94
+ ..."withNodes" in trigger ? { withNodes: trigger.withNodes } : {}
94
95
  };
95
96
  }
96
97
  createBasicTrigger(name, entity, trigger) {
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsFactory.js","sources":["../../../../../../../packages/schema-definition/src/actions/definition/internal/ActionsFactory.ts"],"sourcesContent":["import { assertNever, filterEntityDefinition } from '../../../utils'\nimport { Actions } from '@contember/schema'\nimport { triggersStore } from './store'\nimport { BasicTriggerDefinition, TargetDefinition, WatchTriggerDefinition } from '../triggers'\nimport { ActionsTarget } from '../targets'\nimport { Kind, parse, SelectionNode, ValueNode } from 'graphql'\n\nexport class ActionsFactory {\n\tconstructor(\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Actions.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\n\t\tconst targetsRegistry = new ActionsTargetRegistry()\n\t\tfor (const [exportedAs, def] of Object.entries(exportedDefinitions)) {\n\t\t\tif (!(def instanceof ActionsTarget)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst name = def.name ?? exportedAs\n\t\t\ttargetsRegistry.register(name, def.definition)\n\t\t}\n\n\t\tconst triggersDef = entityLikeDefinition.flatMap(([, entity]) => triggersStore.get(entity).map(it => ({\n\t\t\t...it,\n\t\t\tentity,\n\t\t})))\n\n\t\tconst triggerNames = triggersDef.map(it => it.definition.name).filter((it): it is string => !!it)\n\t\ttriggerNames.forEach((it, index, arr) => {\n\t\t\tif (arr.indexOf(it) !== index) {\n\t\t\t\tthrow `Duplicate trigger name ${it}.`\n\t\t\t}\n\t\t})\n\n\t\tconst triggers: Record<string, Actions.AnyTrigger> = {}\n\t\tfor (const { definition, entity, type } of triggersDef) {\n\t\t\tconst name = definition.name\n\t\t\tconst target = this.resolveTarget(name, definition, targetsRegistry)\n\t\t\tlet trigger: Actions.AnyTrigger\n\t\t\tif (type === 'basic') {\n\t\t\t\ttrigger = {\n\t\t\t\t\ttarget,\n\t\t\t\t\t...this.createBasicTrigger(name, entity.name, definition),\n\t\t\t\t}\n\t\t\t} else if (type === 'watch') {\n\t\t\t\ttrigger = {\n\t\t\t\t\ttarget,\n\t\t\t\t\t...this.createWatchTrigger(name, entity.name, definition),\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tassertNever(type)\n\t\t\t}\n\t\t\ttriggers[name] = trigger\n\t\t}\n\n\n\t\treturn { triggers, targets: targetsRegistry.getTargets() }\n\t}\n\n\tprivate resolveTarget(triggerName: string, targetDefinition: TargetDefinition, targetRegistry: ActionsTargetRegistry): string {\n\t\tconst generatedName = `${triggerName}_target`\n\t\tif ('target' in targetDefinition) {\n\t\t\tif (targetDefinition.target instanceof ActionsTarget) {\n\t\t\t\tconst registeredName = targetRegistry.getName(targetDefinition.target.definition)\n\t\t\t\tif (!registeredName) {\n\t\t\t\t\tthrow `Target of ${triggerName} trigger is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\treturn registeredName\n\t\t\t} else {\n\t\t\t\tconst { name, ...def } = targetDefinition.target\n\t\t\t\tconst resolvedName = name ?? generatedName\n\t\t\t\ttargetRegistry.register(resolvedName, { name: generatedName, ...def })\n\t\t\t\treturn resolvedName\n\t\t\t}\n\t\t} else if ('webhook' in targetDefinition) {\n\t\t\tif (typeof targetDefinition.webhook === 'string') {\n\t\t\t\ttargetRegistry.register(generatedName, {\n\t\t\t\t\ttype: 'webhook',\n\t\t\t\t\turl: targetDefinition.webhook,\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\ttargetRegistry.register(generatedName, {\n\t\t\t\t\ttype: 'webhook',\n\t\t\t\t\t...targetDefinition.webhook,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn generatedName\n\t\t}\n\t\treturn assertNever(targetDefinition)\n\t}\n\n\tprivate createWatchTrigger(name: string, entity: string, trigger: WatchTriggerDefinition): Omit<Actions.WatchTrigger, 'target'> {\n\t\treturn {\n\t\t\ttype: 'watch',\n\t\t\tentity,\n\t\t\tname,\n\t\t\twatch: this.parseSelection(trigger.watch),\n\t\t\tselection: trigger.selection ? this.parseSelection(trigger.selection) : undefined,\n\t\t\tpriority: trigger.priority,\n\t\t}\n\t}\n\n\tprivate createBasicTrigger(name: string, entity: string, trigger: BasicTriggerDefinition): Omit<Actions.BasicTrigger, 'target'> {\n\t\treturn {\n\t\t\ttype: 'basic',\n\t\t\tentity,\n\t\t\tname,\n\t\t\tcreate: trigger.create ?? false,\n\t\t\tdelete: trigger.delete ?? false,\n\t\t\tupdate: trigger.update ?? false,\n\t\t\tselection: trigger.selection ? this.parseSelection(trigger.selection) : undefined,\n\t\t\tpriority: trigger.priority,\n\t\t}\n\t}\n\n\tprivate parseSelection(selection: Actions.SelectionNode | string): Actions.SelectionNode {\n\t\tif (typeof selection !== 'string') {\n\t\t\treturn selection\n\t\t}\n\t\tconst result = parse(`{\n\t\t\t${selection}\n\t\t}`)\n\t\tfor (const def of result.definitions) {\n\t\t\tif (def.kind === 'OperationDefinition') {\n\t\t\t\treturn this.processSelectionSet(def.selectionSet.selections)\n\t\t\t}\n\t\t}\n\t\tthrow new Error()\n\t}\n\n\tprivate processSelectionSet(selectionSet: readonly SelectionNode[]): Actions.SelectionNode {\n\t\treturn selectionSet.map(it => {\n\t\t\tif (it.kind !== 'Field') {\n\t\t\t\tthrow `${it.kind} is not supported.`\n\t\t\t}\n\t\t\tif (it.arguments?.length === 0 && it.selectionSet === undefined) {\n\t\t\t\treturn it.name.value\n\t\t\t}\n\t\t\tconst args = Object.fromEntries(it.arguments?.map(it => [it.name, parseArguments(it.value)]) ?? [])\n\t\t\treturn [it.name.value, args, it.selectionSet ? this.processSelectionSet(it.selectionSet.selections) : []]\n\t\t})\n\t}\n}\n\nclass ActionsTargetRegistry {\n\tprivate targets: Record<string, Actions.AnyTarget> = {}\n\tprivate targetsInverseMap = new Map<Omit<Actions.AnyTarget, 'name'>, string>()\n\n\tpublic register(name: string, target: Omit<Actions.AnyTarget, 'name'> & { name?: string }): void {\n\t\tif (this.targets[name]) {\n\t\t\tthrow `Duplicate trigger target name ${name}`\n\t\t}\n\t\tthis.targets[name] = { name, ...target }\n\t\tthis.targetsInverseMap.set(target, name)\n\t}\n\n\tpublic getName(target: Omit<Actions.AnyTarget, 'name'>): string | undefined {\n\t\treturn this.targetsInverseMap.get(target)\n\t}\n\n\tpublic getTargets() {\n\t\treturn this.targets\n\t}\n}\n\nconst parseArguments = (ast: ValueNode): any => {\n\tswitch (ast.kind) {\n\t\tcase Kind.STRING:\n\t\t\treturn ast.value\n\t\tcase Kind.BOOLEAN:\n\t\t\treturn ast.value\n\t\tcase Kind.FLOAT:\n\t\t\treturn parseFloat(ast.value)\n\t\tcase Kind.INT:\n\t\t\treturn Number(ast.value)\n\t\tcase Kind.LIST:\n\t\t\treturn ast.values.map(it => parseArguments(it))\n\t\tcase Kind.OBJECT:\n\t\t\treturn Object.fromEntries(ast.fields.map(it => [it.name.value, parseArguments(it.value)]))\n\t\tcase Kind.ENUM:\n\t\t\treturn ast.value\n\t\tcase Kind.NULL:\n\t\t\treturn null\n\t\tcase Kind.VARIABLE:\n\t\t\tthrow `Variables are not supported here.`\n\t}\n}\n"],"names":["it"],"mappings":"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"}
1
+ {"version":3,"file":"ActionsFactory.js","sources":["../../../../../../../packages/schema-definition/src/actions/definition/internal/ActionsFactory.ts"],"sourcesContent":["import { assertNever, filterEntityDefinition } from '../../../utils'\nimport { Actions } from '@contember/schema'\nimport { triggersStore } from './store'\nimport { BasicTriggerDefinition, TargetDefinition, WatchTriggerDefinition } from '../triggers'\nimport { ActionsTarget } from '../targets'\nimport { Kind, parse, SelectionNode, ValueNode } from 'graphql'\n\nexport class ActionsFactory {\n\tconstructor(\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Actions.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\n\t\tconst targetsRegistry = new ActionsTargetRegistry()\n\t\tfor (const [exportedAs, def] of Object.entries(exportedDefinitions)) {\n\t\t\tif (!(def instanceof ActionsTarget)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst name = def.name ?? exportedAs\n\t\t\ttargetsRegistry.register(name, def.definition)\n\t\t}\n\n\t\tconst triggersDef = entityLikeDefinition.flatMap(([, entity]) => triggersStore.get(entity).map(it => ({\n\t\t\t...it,\n\t\t\tentity,\n\t\t})))\n\n\t\tconst triggerNames = triggersDef.map(it => it.definition.name).filter((it): it is string => !!it)\n\t\ttriggerNames.forEach((it, index, arr) => {\n\t\t\tif (arr.indexOf(it) !== index) {\n\t\t\t\tthrow `Duplicate trigger name ${it}.`\n\t\t\t}\n\t\t})\n\n\t\tconst triggers: Record<string, Actions.AnyTrigger> = {}\n\t\tfor (const { definition, entity, type } of triggersDef) {\n\t\t\tconst name = definition.name\n\t\t\tconst target = this.resolveTarget(name, definition, targetsRegistry)\n\t\t\tlet trigger: Actions.AnyTrigger\n\t\t\tif (type === 'basic') {\n\t\t\t\ttrigger = {\n\t\t\t\t\ttarget,\n\t\t\t\t\t...this.createBasicTrigger(name, entity.name, definition),\n\t\t\t\t}\n\t\t\t} else if (type === 'watch') {\n\t\t\t\ttrigger = {\n\t\t\t\t\ttarget,\n\t\t\t\t\t...this.createWatchTrigger(name, entity.name, definition),\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tassertNever(type)\n\t\t\t}\n\t\t\ttriggers[name] = trigger\n\t\t}\n\n\n\t\treturn { triggers, targets: targetsRegistry.getTargets() }\n\t}\n\n\tprivate resolveTarget(triggerName: string, targetDefinition: TargetDefinition, targetRegistry: ActionsTargetRegistry): string {\n\t\tconst generatedName = `${triggerName}_target`\n\t\tif ('target' in targetDefinition) {\n\t\t\tif (targetDefinition.target instanceof ActionsTarget) {\n\t\t\t\tconst registeredName = targetRegistry.getName(targetDefinition.target.definition)\n\t\t\t\tif (!registeredName) {\n\t\t\t\t\tthrow `Target of ${triggerName} trigger is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\treturn registeredName\n\t\t\t} else {\n\t\t\t\tconst { name, ...def } = targetDefinition.target\n\t\t\t\tconst resolvedName = name ?? generatedName\n\t\t\t\ttargetRegistry.register(resolvedName, { name: generatedName, ...def })\n\t\t\t\treturn resolvedName\n\t\t\t}\n\t\t} else if ('webhook' in targetDefinition) {\n\t\t\tif (typeof targetDefinition.webhook === 'string') {\n\t\t\t\ttargetRegistry.register(generatedName, {\n\t\t\t\t\ttype: 'webhook',\n\t\t\t\t\turl: targetDefinition.webhook,\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\ttargetRegistry.register(generatedName, {\n\t\t\t\t\ttype: 'webhook',\n\t\t\t\t\t...targetDefinition.webhook,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn generatedName\n\t\t}\n\t\treturn assertNever(targetDefinition)\n\t}\n\n\tprivate createWatchTrigger(name: string, entity: string, trigger: WatchTriggerDefinition): Omit<Actions.WatchTrigger, 'target'> {\n\t\treturn {\n\t\t\ttype: 'watch',\n\t\t\tentity,\n\t\t\tname,\n\t\t\twatch: this.parseSelection(trigger.watch),\n\t\t\tselection: trigger.selection ? this.parseSelection(trigger.selection) : undefined,\n\t\t\tpriority: trigger.priority,\n\t\t\t...('withNodes' in trigger ? { withNodes: trigger.withNodes } : {}),\n\t\t}\n\t}\n\n\tprivate createBasicTrigger(name: string, entity: string, trigger: BasicTriggerDefinition): Omit<Actions.BasicTrigger, 'target'> {\n\t\treturn {\n\t\t\ttype: 'basic',\n\t\t\tentity,\n\t\t\tname,\n\t\t\tcreate: trigger.create ?? false,\n\t\t\tdelete: trigger.delete ?? false,\n\t\t\tupdate: trigger.update ?? false,\n\t\t\tselection: trigger.selection ? this.parseSelection(trigger.selection) : undefined,\n\t\t\tpriority: trigger.priority,\n\t\t}\n\t}\n\n\tprivate parseSelection(selection: Actions.SelectionNode | string): Actions.SelectionNode {\n\t\tif (typeof selection !== 'string') {\n\t\t\treturn selection\n\t\t}\n\t\tconst result = parse(`{\n\t\t\t${selection}\n\t\t}`)\n\t\tfor (const def of result.definitions) {\n\t\t\tif (def.kind === 'OperationDefinition') {\n\t\t\t\treturn this.processSelectionSet(def.selectionSet.selections)\n\t\t\t}\n\t\t}\n\t\tthrow new Error()\n\t}\n\n\tprivate processSelectionSet(selectionSet: readonly SelectionNode[]): Actions.SelectionNode {\n\t\treturn selectionSet.map(it => {\n\t\t\tif (it.kind !== 'Field') {\n\t\t\t\tthrow `${it.kind} is not supported.`\n\t\t\t}\n\t\t\tif (it.arguments?.length === 0 && it.selectionSet === undefined) {\n\t\t\t\treturn it.name.value\n\t\t\t}\n\t\t\tconst args = Object.fromEntries(it.arguments?.map(it => [it.name, parseArguments(it.value)]) ?? [])\n\t\t\treturn [it.name.value, args, it.selectionSet ? this.processSelectionSet(it.selectionSet.selections) : []]\n\t\t})\n\t}\n}\n\nclass ActionsTargetRegistry {\n\tprivate targets: Record<string, Actions.AnyTarget> = {}\n\tprivate targetsInverseMap = new Map<Omit<Actions.AnyTarget, 'name'>, string>()\n\n\tpublic register(name: string, target: Omit<Actions.AnyTarget, 'name'> & { name?: string }): void {\n\t\tif (this.targets[name]) {\n\t\t\tthrow `Duplicate trigger target name ${name}`\n\t\t}\n\t\tthis.targets[name] = { name, ...target }\n\t\tthis.targetsInverseMap.set(target, name)\n\t}\n\n\tpublic getName(target: Omit<Actions.AnyTarget, 'name'>): string | undefined {\n\t\treturn this.targetsInverseMap.get(target)\n\t}\n\n\tpublic getTargets() {\n\t\treturn this.targets\n\t}\n}\n\nconst parseArguments = (ast: ValueNode): any => {\n\tswitch (ast.kind) {\n\t\tcase Kind.STRING:\n\t\t\treturn ast.value\n\t\tcase Kind.BOOLEAN:\n\t\t\treturn ast.value\n\t\tcase Kind.FLOAT:\n\t\t\treturn parseFloat(ast.value)\n\t\tcase Kind.INT:\n\t\t\treturn Number(ast.value)\n\t\tcase Kind.LIST:\n\t\t\treturn ast.values.map(it => parseArguments(it))\n\t\tcase Kind.OBJECT:\n\t\t\treturn Object.fromEntries(ast.fields.map(it => [it.name.value, parseArguments(it.value)]))\n\t\tcase Kind.ENUM:\n\t\t\treturn ast.value\n\t\tcase Kind.NULL:\n\t\t\treturn null\n\t\tcase Kind.VARIABLE:\n\t\t\tthrow `Variables are not supported here.`\n\t}\n}\n"],"names":["it"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"triggers.cjs","sources":["../../../../../../packages/schema-definition/src/actions/definition/triggers.ts"],"sourcesContent":["import { DecoratorFunction, EntityConstructor } from '../../utils'\nimport { Actions } from '@contember/schema'\nimport { triggersStore } from './internal/store'\nimport { ActionsTarget } from './targets'\n\nexport type TriggerWebhookDefinition = {\n\twebhook:\n\t\t| string\n\t\t| Omit<Actions.WebhookTarget, 'type' | 'name'> & { name?: string }\n}\n\nexport type TriggerTargetDefinition = {\n\ttarget: (Omit<Actions.AnyTarget, 'name'> & { name?: string }) | ActionsTarget\n}\n\nexport type TargetDefinition =\n\t| TriggerWebhookDefinition\n\t| TriggerTargetDefinition\n\nexport type CommonTriggerDefinition = {\n\treadonly name: string\n\treadonly selection?: Actions.SelectionNode | string\n\treadonly priority?: number\n}\n\nexport type BasicTriggerDefinition =\n\t& {\n\t\treadonly create?: boolean\n\t\treadonly delete?: boolean\n\t\treadonly update?: boolean | readonly string[]\n\t}\n\t& CommonTriggerDefinition\n\t& TargetDefinition\n\nexport type WatchTriggerDefinition =\n\t& {\n\t\treadonly watch: Actions.SelectionNode | string\n\t}\n\t& CommonTriggerDefinition\n\t& TargetDefinition\n\nexport const trigger = <T>(definition: BasicTriggerDefinition): DecoratorFunction<T> => (entity: EntityConstructor<T>) => {\n\ttriggersStore.update(entity, it => [...it, { type: 'basic', definition }])\n}\n\nexport const watch = <T>(definition: WatchTriggerDefinition): DecoratorFunction<T> => (entity: EntityConstructor<T>) => {\n\ttriggersStore.update(entity, it => [...it, { type: 'watch', definition }])\n}\n\n"],"names":["triggersStore"],"mappings":";;;AAyCO,MAAM,UAAU,CAAI,eAA6D,CAAC,WAAiC;AAC3GA,QAAAA,cAAA,OAAO,QAAQ,CAAA,OAAM,CAAC,GAAG,IAAI,EAAE,MAAM,SAAS,WAAY,CAAA,CAAC;AAC1E;AAEO,MAAM,QAAQ,CAAI,eAA6D,CAAC,WAAiC;AACzGA,QAAAA,cAAA,OAAO,QAAQ,CAAA,OAAM,CAAC,GAAG,IAAI,EAAE,MAAM,SAAS,WAAY,CAAA,CAAC;AAC1E;;;"}
1
+ {"version":3,"file":"triggers.cjs","sources":["../../../../../../packages/schema-definition/src/actions/definition/triggers.ts"],"sourcesContent":["import { DecoratorFunction, EntityConstructor } from '../../utils'\nimport { Actions } from '@contember/schema'\nimport { triggersStore } from './internal/store'\nimport { ActionsTarget } from './targets'\n\nexport type TriggerWebhookDefinition = {\n\twebhook:\n\t\t| string\n\t\t| Omit<Actions.WebhookTarget, 'type' | 'name'> & { name?: string }\n}\n\nexport type TriggerTargetDefinition = {\n\ttarget: (Omit<Actions.AnyTarget, 'name'> & { name?: string }) | ActionsTarget\n}\n\nexport type TargetDefinition =\n\t| TriggerWebhookDefinition\n\t| TriggerTargetDefinition\n\nexport type CommonTriggerDefinition = {\n\treadonly name: string\n\treadonly selection?: Actions.SelectionNode | string\n\treadonly priority?: number\n}\n\nexport type BasicTriggerDefinition =\n\t& {\n\t\treadonly create?: boolean\n\t\treadonly delete?: boolean\n\t\treadonly update?: boolean | readonly string[]\n\t}\n\t& CommonTriggerDefinition\n\t& TargetDefinition\n\nexport type WatchTriggerDefinition =\n\t& {\n\t\treadonly watch: Actions.SelectionNode | string\n\t\treadonly withNodes?: boolean\n\t}\n\t& CommonTriggerDefinition\n\t& TargetDefinition\n\nexport const trigger = <T>(definition: BasicTriggerDefinition): DecoratorFunction<T> => (entity: EntityConstructor<T>) => {\n\ttriggersStore.update(entity, it => [...it, { type: 'basic', definition }])\n}\n\nexport const watch = <T>(definition: WatchTriggerDefinition): DecoratorFunction<T> => (entity: EntityConstructor<T>) => {\n\ttriggersStore.update(entity, it => [...it, { type: 'watch', definition }])\n}\n\n"],"names":["triggersStore"],"mappings":";;;AA0CO,MAAM,UAAU,CAAI,eAA6D,CAAC,WAAiC;AAC3GA,QAAAA,cAAA,OAAO,QAAQ,CAAA,OAAM,CAAC,GAAG,IAAI,EAAE,MAAM,SAAS,WAAY,CAAA,CAAC;AAC1E;AAEO,MAAM,QAAQ,CAAI,eAA6D,CAAC,WAAiC;AACzGA,QAAAA,cAAA,OAAO,QAAQ,CAAA,OAAM,CAAC,GAAG,IAAI,EAAE,MAAM,SAAS,WAAY,CAAA,CAAC;AAC1E;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"triggers.js","sources":["../../../../../../packages/schema-definition/src/actions/definition/triggers.ts"],"sourcesContent":["import { DecoratorFunction, EntityConstructor } from '../../utils'\nimport { Actions } from '@contember/schema'\nimport { triggersStore } from './internal/store'\nimport { ActionsTarget } from './targets'\n\nexport type TriggerWebhookDefinition = {\n\twebhook:\n\t\t| string\n\t\t| Omit<Actions.WebhookTarget, 'type' | 'name'> & { name?: string }\n}\n\nexport type TriggerTargetDefinition = {\n\ttarget: (Omit<Actions.AnyTarget, 'name'> & { name?: string }) | ActionsTarget\n}\n\nexport type TargetDefinition =\n\t| TriggerWebhookDefinition\n\t| TriggerTargetDefinition\n\nexport type CommonTriggerDefinition = {\n\treadonly name: string\n\treadonly selection?: Actions.SelectionNode | string\n\treadonly priority?: number\n}\n\nexport type BasicTriggerDefinition =\n\t& {\n\t\treadonly create?: boolean\n\t\treadonly delete?: boolean\n\t\treadonly update?: boolean | readonly string[]\n\t}\n\t& CommonTriggerDefinition\n\t& TargetDefinition\n\nexport type WatchTriggerDefinition =\n\t& {\n\t\treadonly watch: Actions.SelectionNode | string\n\t}\n\t& CommonTriggerDefinition\n\t& TargetDefinition\n\nexport const trigger = <T>(definition: BasicTriggerDefinition): DecoratorFunction<T> => (entity: EntityConstructor<T>) => {\n\ttriggersStore.update(entity, it => [...it, { type: 'basic', definition }])\n}\n\nexport const watch = <T>(definition: WatchTriggerDefinition): DecoratorFunction<T> => (entity: EntityConstructor<T>) => {\n\ttriggersStore.update(entity, it => [...it, { type: 'watch', definition }])\n}\n\n"],"names":[],"mappings":";AAyCO,MAAM,UAAU,CAAI,eAA6D,CAAC,WAAiC;AAC3G,gBAAA,OAAO,QAAQ,CAAA,OAAM,CAAC,GAAG,IAAI,EAAE,MAAM,SAAS,WAAY,CAAA,CAAC;AAC1E;AAEO,MAAM,QAAQ,CAAI,eAA6D,CAAC,WAAiC;AACzG,gBAAA,OAAO,QAAQ,CAAA,OAAM,CAAC,GAAG,IAAI,EAAE,MAAM,SAAS,WAAY,CAAA,CAAC;AAC1E;"}
1
+ {"version":3,"file":"triggers.js","sources":["../../../../../../packages/schema-definition/src/actions/definition/triggers.ts"],"sourcesContent":["import { DecoratorFunction, EntityConstructor } from '../../utils'\nimport { Actions } from '@contember/schema'\nimport { triggersStore } from './internal/store'\nimport { ActionsTarget } from './targets'\n\nexport type TriggerWebhookDefinition = {\n\twebhook:\n\t\t| string\n\t\t| Omit<Actions.WebhookTarget, 'type' | 'name'> & { name?: string }\n}\n\nexport type TriggerTargetDefinition = {\n\ttarget: (Omit<Actions.AnyTarget, 'name'> & { name?: string }) | ActionsTarget\n}\n\nexport type TargetDefinition =\n\t| TriggerWebhookDefinition\n\t| TriggerTargetDefinition\n\nexport type CommonTriggerDefinition = {\n\treadonly name: string\n\treadonly selection?: Actions.SelectionNode | string\n\treadonly priority?: number\n}\n\nexport type BasicTriggerDefinition =\n\t& {\n\t\treadonly create?: boolean\n\t\treadonly delete?: boolean\n\t\treadonly update?: boolean | readonly string[]\n\t}\n\t& CommonTriggerDefinition\n\t& TargetDefinition\n\nexport type WatchTriggerDefinition =\n\t& {\n\t\treadonly watch: Actions.SelectionNode | string\n\t\treadonly withNodes?: boolean\n\t}\n\t& CommonTriggerDefinition\n\t& TargetDefinition\n\nexport const trigger = <T>(definition: BasicTriggerDefinition): DecoratorFunction<T> => (entity: EntityConstructor<T>) => {\n\ttriggersStore.update(entity, it => [...it, { type: 'basic', definition }])\n}\n\nexport const watch = <T>(definition: WatchTriggerDefinition): DecoratorFunction<T> => (entity: EntityConstructor<T>) => {\n\ttriggersStore.update(entity, it => [...it, { type: 'watch', definition }])\n}\n\n"],"names":[],"mappings":";AA0CO,MAAM,UAAU,CAAI,eAA6D,CAAC,WAAiC;AAC3G,gBAAA,OAAO,QAAQ,CAAA,OAAM,CAAC,GAAG,IAAI,EAAE,MAAM,SAAS,WAAY,CAAA,CAAC;AAC1E;AAEO,MAAM,QAAQ,CAAI,eAA6D,CAAC,WAAiC;AACzG,gBAAA,OAAO,QAAQ,CAAA,OAAM,CAAC,GAAG,IAAI,EAAE,MAAM,SAAS,WAAY,CAAA,CAAC;AAC1E;"}
@@ -3,12 +3,12 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const extensions = require("./extensions.cjs");
4
4
  function Index(options, ...args) {
5
5
  return extensions.extendEntity(({ entity }) => {
6
- const fields = typeof options !== "object" ? [options, ...args] : options.fields;
6
+ const indexDef = typeof options !== "object" ? { fields: [options, ...args] } : options;
7
7
  return {
8
8
  ...entity,
9
9
  indexes: [
10
10
  ...entity.indexes,
11
- { fields }
11
+ indexDef
12
12
  ]
13
13
  };
14
14
  });
@@ -1 +1 @@
1
- {"version":3,"file":"IndexDefinition.cjs","sources":["../../../../../../packages/schema-definition/src/model/definition/IndexDefinition.ts"],"sourcesContent":["import { extendEntity } from './extensions'\nimport { DecoratorFunction } from '../../utils'\n\nexport type IndexOptions<T> = { fields: (keyof T)[] }\nexport function Index<T>(options: IndexOptions<T>): DecoratorFunction<T>\nexport function Index<T>(...fields: (keyof T)[]): DecoratorFunction<T>\nexport function Index<T>(options: IndexOptions<T> | keyof T, ...args: (keyof T)[]): DecoratorFunction<T> {\n\treturn extendEntity(({ entity }) => {\n\t\tconst fields = (typeof options !== 'object' ? [options, ...args] : options.fields) as string[]\n\t\treturn {\n\t\t\t...entity,\n\t\t\tindexes: [\n\t\t\t\t...entity.indexes,\n\t\t\t\t{ fields },\n\t\t\t],\n\t\t}\n\t})\n}\n"],"names":["extendEntity"],"mappings":";;;AAMgB,SAAA,MAAS,YAAuC,MAAyC;AACxG,SAAOA,WAAa,aAAA,CAAC,EAAE,aAAa;AAC7B,UAAA,SAAU,OAAO,YAAY,WAAW,CAAC,SAAS,GAAG,IAAI,IAAI,QAAQ;AACpE,WAAA;AAAA,MACN,GAAG;AAAA,MACH,SAAS;AAAA,QACR,GAAG,OAAO;AAAA,QACV,EAAE,OAAO;AAAA,MAAA;AAAA,IAEX;AAAA,EAAA,CACA;AACF;;"}
1
+ {"version":3,"file":"IndexDefinition.cjs","sources":["../../../../../../packages/schema-definition/src/model/definition/IndexDefinition.ts"],"sourcesContent":["import { extendEntity } from './extensions'\nimport { DecoratorFunction } from '../../utils'\nimport { Model } from '@contember/schema'\n\nexport type IndexOptions<T> = {\n\tfields: (keyof T)[]\n\tmethod?: Model.IndexMethod\n}\nexport function Index<T>(options: IndexOptions<T>): DecoratorFunction<T>\nexport function Index<T>(...fields: (keyof T)[]): DecoratorFunction<T>\nexport function Index<T>(options: IndexOptions<T> | keyof T, ...args: (keyof T)[]): DecoratorFunction<T> {\n\treturn extendEntity(({ entity }) => {\n\t\tconst indexDef = (typeof options !== 'object' ? { fields: [options, ...args] } : options) as { fields: string[]; method?: Model.IndexMethod }\n\t\treturn {\n\t\t\t...entity,\n\t\t\tindexes: [\n\t\t\t\t...entity.indexes,\n\t\t\t\tindexDef,\n\t\t\t],\n\t\t}\n\t})\n}\n"],"names":["extendEntity"],"mappings":";;;AAUgB,SAAA,MAAS,YAAuC,MAAyC;AACxG,SAAOA,WAAa,aAAA,CAAC,EAAE,aAAa;AAC7B,UAAA,WAAY,OAAO,YAAY,WAAW,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,EAAA,IAAM;AAC1E,WAAA;AAAA,MACN,GAAG;AAAA,MACH,SAAS;AAAA,QACR,GAAG,OAAO;AAAA,QACV;AAAA,MAAA;AAAA,IAEF;AAAA,EAAA,CACA;AACF;;"}
@@ -1,12 +1,12 @@
1
1
  import { extendEntity } from "./extensions.js";
2
2
  function Index(options, ...args) {
3
3
  return extendEntity(({ entity }) => {
4
- const fields = typeof options !== "object" ? [options, ...args] : options.fields;
4
+ const indexDef = typeof options !== "object" ? { fields: [options, ...args] } : options;
5
5
  return {
6
6
  ...entity,
7
7
  indexes: [
8
8
  ...entity.indexes,
9
- { fields }
9
+ indexDef
10
10
  ]
11
11
  };
12
12
  });
@@ -1 +1 @@
1
- {"version":3,"file":"IndexDefinition.js","sources":["../../../../../../packages/schema-definition/src/model/definition/IndexDefinition.ts"],"sourcesContent":["import { extendEntity } from './extensions'\nimport { DecoratorFunction } from '../../utils'\n\nexport type IndexOptions<T> = { fields: (keyof T)[] }\nexport function Index<T>(options: IndexOptions<T>): DecoratorFunction<T>\nexport function Index<T>(...fields: (keyof T)[]): DecoratorFunction<T>\nexport function Index<T>(options: IndexOptions<T> | keyof T, ...args: (keyof T)[]): DecoratorFunction<T> {\n\treturn extendEntity(({ entity }) => {\n\t\tconst fields = (typeof options !== 'object' ? [options, ...args] : options.fields) as string[]\n\t\treturn {\n\t\t\t...entity,\n\t\t\tindexes: [\n\t\t\t\t...entity.indexes,\n\t\t\t\t{ fields },\n\t\t\t],\n\t\t}\n\t})\n}\n"],"names":[],"mappings":";AAMgB,SAAA,MAAS,YAAuC,MAAyC;AACxG,SAAO,aAAa,CAAC,EAAE,aAAa;AAC7B,UAAA,SAAU,OAAO,YAAY,WAAW,CAAC,SAAS,GAAG,IAAI,IAAI,QAAQ;AACpE,WAAA;AAAA,MACN,GAAG;AAAA,MACH,SAAS;AAAA,QACR,GAAG,OAAO;AAAA,QACV,EAAE,OAAO;AAAA,MAAA;AAAA,IAEX;AAAA,EAAA,CACA;AACF;"}
1
+ {"version":3,"file":"IndexDefinition.js","sources":["../../../../../../packages/schema-definition/src/model/definition/IndexDefinition.ts"],"sourcesContent":["import { extendEntity } from './extensions'\nimport { DecoratorFunction } from '../../utils'\nimport { Model } from '@contember/schema'\n\nexport type IndexOptions<T> = {\n\tfields: (keyof T)[]\n\tmethod?: Model.IndexMethod\n}\nexport function Index<T>(options: IndexOptions<T>): DecoratorFunction<T>\nexport function Index<T>(...fields: (keyof T)[]): DecoratorFunction<T>\nexport function Index<T>(options: IndexOptions<T> | keyof T, ...args: (keyof T)[]): DecoratorFunction<T> {\n\treturn extendEntity(({ entity }) => {\n\t\tconst indexDef = (typeof options !== 'object' ? { fields: [options, ...args] } : options) as { fields: string[]; method?: Model.IndexMethod }\n\t\treturn {\n\t\t\t...entity,\n\t\t\tindexes: [\n\t\t\t\t...entity.indexes,\n\t\t\t\tindexDef,\n\t\t\t],\n\t\t}\n\t})\n}\n"],"names":[],"mappings":";AAUgB,SAAA,MAAS,YAAuC,MAAyC;AACxG,SAAO,aAAa,CAAC,EAAE,aAAa;AAC7B,UAAA,WAAY,OAAO,YAAY,WAAW,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,EAAA,IAAM;AAC1E,WAAA;AAAA,MACN,GAAG;AAAA,MACH,SAAS;AAAA,QACR,GAAG,OAAO;AAAA,QACV;AAAA,MAAA;AAAA,IAEF;AAAA,EAAA,CACA;AACF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"UniqueDefinition.cjs","sources":["../../../../../../packages/schema-definition/src/model/definition/UniqueDefinition.ts"],"sourcesContent":["import { extendEntity } from './extensions'\nimport { DecoratorFunction } from '../../utils'\nimport { Model } from '@contember/schema'\n\nexport type UniqueOptions<T> = {\n\tfields: (keyof T & string)[]\n\n} & (\n\t| {\n\t\tindex?: false\n\t\ttiming?: Model.ConstraintTiming\n\t}\n\t| {\n\t\tindex: true\n\t\tnulls?: Model.NullsDistinctBehaviour\n\t}\n)\nexport function Unique<T>(options: UniqueOptions<T>): DecoratorFunction<T>\nexport function Unique<T>(...fields: (keyof T & string)[]): DecoratorFunction<T>\nexport function Unique<T>(options: UniqueOptions<T> | keyof T & string, ...args: (keyof T & string)[]): DecoratorFunction<T> {\n\treturn extendEntity(({ entity }) => {\n\t\tconst unique = typeof options !== 'object'\n\t\t\t? { fields: [options, ...args] }\n\t\t\t: options\n\t\treturn {\n\t\t\t...entity,\n\t\t\tunique: [\n\t\t\t\t...entity.unique,\n\t\t\t\tunique,\n\t\t\t],\n\t\t}\n\t})\n}\n"],"names":["extendEntity"],"mappings":";;;AAmBgB,SAAA,OAAU,YAAiD,MAAkD;AAC5H,SAAOA,WAAa,aAAA,CAAC,EAAE,aAAa;AAC7B,UAAA,SAAS,OAAO,YAAY,WAC/B,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,EAAA,IAC3B;AACI,WAAA;AAAA,MACN,GAAG;AAAA,MACH,QAAQ;AAAA,QACP,GAAG,OAAO;AAAA,QACV;AAAA,MAAA;AAAA,IAEF;AAAA,EAAA,CACA;AACF;;"}
1
+ {"version":3,"file":"UniqueDefinition.cjs","sources":["../../../../../../packages/schema-definition/src/model/definition/UniqueDefinition.ts"],"sourcesContent":["import { extendEntity } from './extensions'\nimport { DecoratorFunction } from '../../utils'\nimport { Model } from '@contember/schema'\n\nexport type UniqueOptions<T> = {\n\tfields: (keyof T & string)[]\n\n} & (\n\t| {\n\t\tindex?: false\n\t\ttiming?: Model.ConstraintTiming\n\t}\n\t| {\n\t\tindex: true\n\t\tnulls?: Model.NullsDistinctBehaviour\n\t\tmethod?: Model.IndexMethod\n\t}\n)\nexport function Unique<T>(options: UniqueOptions<T>): DecoratorFunction<T>\nexport function Unique<T>(...fields: (keyof T & string)[]): DecoratorFunction<T>\nexport function Unique<T>(options: UniqueOptions<T> | keyof T & string, ...args: (keyof T & string)[]): DecoratorFunction<T> {\n\treturn extendEntity(({ entity }) => {\n\t\tconst unique = typeof options !== 'object'\n\t\t\t? { fields: [options, ...args] }\n\t\t\t: options\n\t\treturn {\n\t\t\t...entity,\n\t\t\tunique: [\n\t\t\t\t...entity.unique,\n\t\t\t\tunique,\n\t\t\t],\n\t\t}\n\t})\n}\n"],"names":["extendEntity"],"mappings":";;;AAoBgB,SAAA,OAAU,YAAiD,MAAkD;AAC5H,SAAOA,WAAa,aAAA,CAAC,EAAE,aAAa;AAC7B,UAAA,SAAS,OAAO,YAAY,WAC/B,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,EAAA,IAC3B;AACI,WAAA;AAAA,MACN,GAAG;AAAA,MACH,QAAQ;AAAA,QACP,GAAG,OAAO;AAAA,QACV;AAAA,MAAA;AAAA,IAEF;AAAA,EAAA,CACA;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"UniqueDefinition.js","sources":["../../../../../../packages/schema-definition/src/model/definition/UniqueDefinition.ts"],"sourcesContent":["import { extendEntity } from './extensions'\nimport { DecoratorFunction } from '../../utils'\nimport { Model } from '@contember/schema'\n\nexport type UniqueOptions<T> = {\n\tfields: (keyof T & string)[]\n\n} & (\n\t| {\n\t\tindex?: false\n\t\ttiming?: Model.ConstraintTiming\n\t}\n\t| {\n\t\tindex: true\n\t\tnulls?: Model.NullsDistinctBehaviour\n\t}\n)\nexport function Unique<T>(options: UniqueOptions<T>): DecoratorFunction<T>\nexport function Unique<T>(...fields: (keyof T & string)[]): DecoratorFunction<T>\nexport function Unique<T>(options: UniqueOptions<T> | keyof T & string, ...args: (keyof T & string)[]): DecoratorFunction<T> {\n\treturn extendEntity(({ entity }) => {\n\t\tconst unique = typeof options !== 'object'\n\t\t\t? { fields: [options, ...args] }\n\t\t\t: options\n\t\treturn {\n\t\t\t...entity,\n\t\t\tunique: [\n\t\t\t\t...entity.unique,\n\t\t\t\tunique,\n\t\t\t],\n\t\t}\n\t})\n}\n"],"names":[],"mappings":";AAmBgB,SAAA,OAAU,YAAiD,MAAkD;AAC5H,SAAO,aAAa,CAAC,EAAE,aAAa;AAC7B,UAAA,SAAS,OAAO,YAAY,WAC/B,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,EAAA,IAC3B;AACI,WAAA;AAAA,MACN,GAAG;AAAA,MACH,QAAQ;AAAA,QACP,GAAG,OAAO;AAAA,QACV;AAAA,MAAA;AAAA,IAEF;AAAA,EAAA,CACA;AACF;"}
1
+ {"version":3,"file":"UniqueDefinition.js","sources":["../../../../../../packages/schema-definition/src/model/definition/UniqueDefinition.ts"],"sourcesContent":["import { extendEntity } from './extensions'\nimport { DecoratorFunction } from '../../utils'\nimport { Model } from '@contember/schema'\n\nexport type UniqueOptions<T> = {\n\tfields: (keyof T & string)[]\n\n} & (\n\t| {\n\t\tindex?: false\n\t\ttiming?: Model.ConstraintTiming\n\t}\n\t| {\n\t\tindex: true\n\t\tnulls?: Model.NullsDistinctBehaviour\n\t\tmethod?: Model.IndexMethod\n\t}\n)\nexport function Unique<T>(options: UniqueOptions<T>): DecoratorFunction<T>\nexport function Unique<T>(...fields: (keyof T & string)[]): DecoratorFunction<T>\nexport function Unique<T>(options: UniqueOptions<T> | keyof T & string, ...args: (keyof T & string)[]): DecoratorFunction<T> {\n\treturn extendEntity(({ entity }) => {\n\t\tconst unique = typeof options !== 'object'\n\t\t\t? { fields: [options, ...args] }\n\t\t\t: options\n\t\treturn {\n\t\t\t...entity,\n\t\t\tunique: [\n\t\t\t\t...entity.unique,\n\t\t\t\tunique,\n\t\t\t],\n\t\t}\n\t})\n}\n"],"names":[],"mappings":";AAoBgB,SAAA,OAAU,YAAiD,MAAkD;AAC5H,SAAO,aAAa,CAAC,EAAE,aAAa;AAC7B,UAAA,SAAS,OAAO,YAAY,WAC/B,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,EAAA,IAC3B;AACI,WAAA;AAAA,MACN,GAAG;AAAA,MACH,QAAQ;AAAA,QACP,GAAG,OAAO;AAAA,QACV;AAAA,MAAA;AAAA,IAEF;AAAA,EAAA,CACA;AACF;"}
@@ -4,7 +4,7 @@ const aclExtensions = require("./aclExtensions.cjs");
4
4
  const allowCustomPrimary = (role) => {
5
5
  return aclExtensions.extendEntityAcl(({ permissions, role: currentRole }) => {
6
6
  if (!role || role === currentRole || Array.isArray(role) && role.includes(currentRole)) {
7
- return { ...permissions, operations: { customPrimary: true } };
7
+ return { ...permissions, operations: { ...permissions.operations, customPrimary: true } };
8
8
  }
9
9
  return permissions;
10
10
  });
@@ -1 +1 @@
1
- {"version":3,"file":"customPrimary.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport { DecoratorFunction } from '../../utils'\nimport { extendEntityAcl } from './aclExtensions'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn extendEntityAcl(({ permissions, role: currentRole }) => {\n\t\tif (!role || role === currentRole || (Array.isArray(role) && role.includes(currentRole))) {\n\t\t\treturn { ...permissions, operations: { customPrimary: true } }\n\t\t}\n\t\treturn permissions\n\t})\n}\n"],"names":["extendEntityAcl"],"mappings":";;;AAIa,MAAA,qBAAqB,CAAC,SAAiD;AACnF,SAAOA,8BAAgB,CAAC,EAAE,aAAa,MAAM,kBAAkB;AAC1D,QAAA,CAAC,QAAQ,SAAS,eAAgB,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,WAAW,GAAI;AACzF,aAAO,EAAE,GAAG,aAAa,YAAY,EAAE,eAAe,OAAO;AAAA,IAAA;AAEvD,WAAA;AAAA,EAAA,CACP;AACF;;"}
1
+ {"version":3,"file":"customPrimary.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport { DecoratorFunction } from '../../utils'\nimport { extendEntityAcl } from './aclExtensions'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn extendEntityAcl(({ permissions, role: currentRole }) => {\n\t\tif (!role || role === currentRole || (Array.isArray(role) && role.includes(currentRole))) {\n\t\t\treturn { ...permissions, operations: { ...permissions.operations, customPrimary: true } }\n\t\t}\n\t\treturn permissions\n\t})\n}\n"],"names":["extendEntityAcl"],"mappings":";;;AAIa,MAAA,qBAAqB,CAAC,SAAiD;AACnF,SAAOA,8BAAgB,CAAC,EAAE,aAAa,MAAM,kBAAkB;AAC1D,QAAA,CAAC,QAAQ,SAAS,eAAgB,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,WAAW,GAAI;AAClF,aAAA,EAAE,GAAG,aAAa,YAAY,EAAE,GAAG,YAAY,YAAY,eAAe,OAAO;AAAA,IAAA;AAElF,WAAA;AAAA,EAAA,CACP;AACF;;"}
@@ -2,7 +2,7 @@ import { extendEntityAcl } from "./aclExtensions.js";
2
2
  const allowCustomPrimary = (role) => {
3
3
  return extendEntityAcl(({ permissions, role: currentRole }) => {
4
4
  if (!role || role === currentRole || Array.isArray(role) && role.includes(currentRole)) {
5
- return { ...permissions, operations: { customPrimary: true } };
5
+ return { ...permissions, operations: { ...permissions.operations, customPrimary: true } };
6
6
  }
7
7
  return permissions;
8
8
  });
@@ -1 +1 @@
1
- {"version":3,"file":"customPrimary.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport { DecoratorFunction } from '../../utils'\nimport { extendEntityAcl } from './aclExtensions'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn extendEntityAcl(({ permissions, role: currentRole }) => {\n\t\tif (!role || role === currentRole || (Array.isArray(role) && role.includes(currentRole))) {\n\t\t\treturn { ...permissions, operations: { customPrimary: true } }\n\t\t}\n\t\treturn permissions\n\t})\n}\n"],"names":[],"mappings":";AAIa,MAAA,qBAAqB,CAAC,SAAiD;AACnF,SAAO,gBAAgB,CAAC,EAAE,aAAa,MAAM,kBAAkB;AAC1D,QAAA,CAAC,QAAQ,SAAS,eAAgB,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,WAAW,GAAI;AACzF,aAAO,EAAE,GAAG,aAAa,YAAY,EAAE,eAAe,OAAO;AAAA,IAAA;AAEvD,WAAA;AAAA,EAAA,CACP;AACF;"}
1
+ {"version":3,"file":"customPrimary.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport { DecoratorFunction } from '../../utils'\nimport { extendEntityAcl } from './aclExtensions'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn extendEntityAcl(({ permissions, role: currentRole }) => {\n\t\tif (!role || role === currentRole || (Array.isArray(role) && role.includes(currentRole))) {\n\t\t\treturn { ...permissions, operations: { ...permissions.operations, customPrimary: true } }\n\t\t}\n\t\treturn permissions\n\t})\n}\n"],"names":[],"mappings":";AAIa,MAAA,qBAAqB,CAAC,SAAiD;AACnF,SAAO,gBAAgB,CAAC,EAAE,aAAa,MAAM,kBAAkB;AAC1D,QAAA,CAAC,QAAQ,SAAS,eAAgB,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,WAAW,GAAI;AAClF,aAAA,EAAE,GAAG,aAAa,YAAY,EAAE,GAAG,YAAY,YAAY,eAAe,OAAO;AAAA,IAAA;AAElF,WAAA;AAAA,EAAA,CACP;AACF;"}