All files / realm/blong-access/gateway/access accessRoleEdit.ts

100% Statements 74/74
100% Branches 2/2
100% Functions 1/1
100% Lines 74/74

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 751x 1x 1x 1x 1x 1x 1x 1x 1x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 1x  
import {validation} from '@feasibleone/blong';
 
/**
 * `access.role.edit` — explicit validation override matching the custom
 * handler's accepted shape (`role` key + optional `capability` detail array and
 * the scope × CRUD `matrix` of the "Record Access" tab).
 */
export default validation(
    async ({lib: {type}}) =>
        function accessRoleEdit() {
            return {
                params: type.Object(
                    {
                        role: type.Object(
                            {
                                roleId: type.String(),
                                roleName: type.Optional(type.String()),
                                // Still accepted for compatibility, but a bit never
                                // changes: the handler refuses a different value
                                // (`role.bitImmutable`) and ignores the column.
                                roleBit: type.Optional(
                                    type.Union([type.Integer(), type.Null(), type.String()]),
                                ),
                                description: type.Optional(
                                    type.Union([type.String(), type.Null()]),
                                ),
                            },
                            {additionalProperties: true},
                        ),
                        capability: type.Optional(
                            type.Array(
                                type.Object(
                                    {
                                        capabilityId: type.Optional(type.String()),
                                        capabilityName: type.Optional(type.String()),
                                    },
                                    {additionalProperties: true},
                                ),
                            ),
                        ),
                        matrix: type.Optional(
                            type.Array(
                                type.Object(
                                    {
                                        targetId: type.Optional(type.String()),
                                        targetName: type.Optional(type.String()),
                                        entityName: type.Optional(type.String()),
                                        find: type.Optional(
                                            type.Union([type.String(), type.Null()]),
                                        ),
                                        get: type.Optional(
                                            type.Union([type.String(), type.Null()]),
                                        ),
                                        add: type.Optional(
                                            type.Union([type.String(), type.Null()]),
                                        ),
                                        edit: type.Optional(
                                            type.Union([type.String(), type.Null()]),
                                        ),
                                        remove: type.Optional(
                                            type.Union([type.String(), type.Null()]),
                                        ),
                                    },
                                    {additionalProperties: true},
                                ),
                            ),
                        ),
                    },
                    {additionalProperties: true},
                ),
                result: type.Object({}, {additionalProperties: true}),
            };
        },
);