UNPKG

shyft

Version:

Model driven GraphQL API framework

170 lines (169 loc) 6.76 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.systemAttributeI18n = exports.systemAttributeState = exports.systemAttributesUserTracking = exports.systemAttributesTimeTracking = exports.systemAttributePrimary = void 0; var lodash_1 = require("lodash"); var casual = __importStar(require("casual")); var dataTypes_1 = require("../datatype/dataTypes"); var CustomError_1 = require("../CustomError"); var DataTypeState_1 = require("../datatype/DataTypeState"); var Entity_1 = require("./Entity"); var i18n_1 = require("../i18n"); exports.systemAttributePrimary = { name: 'id', description: 'Unique row identifier', type: dataTypes_1.DataTypeID, required: true, primary: true, }; exports.systemAttributesTimeTracking = [ { name: 'createdAt', description: 'Record was created at this time', type: dataTypes_1.DataTypeTimestampTz, required: true, defaultValue: function (_a) { var mutation = _a.operation; return mutation.isTypeCreate ? new Date() : undefined; }, mock: function (entity) { if (entity.meta && entity.meta.mockCreatedAtGenerator) { if (!lodash_1.isFunction(entity.meta.mockCreatedAtGenerator)) { throw new CustomError_1.CustomError("meta.mockCreatedAtGenerator needs to be a function in entity '" + entity.name + "'", 'InvalidMetaDataError'); } return entity.meta.mockCreatedAtGenerator(); } return new Date(casual.unix_time * 1000); }, }, { name: 'updatedAt', description: 'Record was updated at this time', type: dataTypes_1.DataTypeTimestampTz, required: true, defaultValue: function (_a) { var mutation = _a.operation; return mutation.isTypeCreate || mutation.isTypeUpdate ? new Date() : undefined; }, mock: function (entity) { if (entity.meta && entity.meta.mockUpdatedAtGenerator) { if (!lodash_1.isFunction(entity.meta.mockUpdatedAtGenerator)) { throw new CustomError_1.CustomError("meta.mockUpdatedAtGenerator needs to be a function in entity '" + entity.name + "'", 'InvalidMetaDataError'); } return entity.meta.mockUpdatedAtGenerator(); } return new Date(casual.unix_time * 1000); }, }, ]; exports.systemAttributesUserTracking = [ { name: 'createdBy', description: 'Record was created by this time', type: dataTypes_1.DataTypeUserID, required: true, defaultValue: function (_a) { var mutation = _a.operation, userId = _a.context.userId; // TODO: make overridable return mutation.isTypeCreate && userId ? userId : undefined; }, }, { name: 'updatedBy', description: 'Record was updated by this user', type: dataTypes_1.DataTypeUserID, required: true, defaultValue: function (_a) { var mutation = _a.operation, userId = _a.context.userId; // TODO: make overridable return (mutation.isTypeCreate || mutation.isTypeUpdate) && userId ? userId : undefined; }, }, ]; exports.systemAttributeState = { name: 'state', description: 'State of record', type: function (_a) { var attribute = _a.setup, entity = _a.entity; return new DataTypeState_1.DataTypeState(__assign(__assign({}, attribute), { name: lodash_1.camelCase(entity.name + "-instance-state"), states: Entity_1.isEntity(entity) ? entity.states : undefined })); }, required: true, defaultValue: function (_a) { var mutation = _a.operation; if (mutation.isTypeCreate || mutation.isTypeUpdate) { if (typeof mutation.toState === 'string') { return mutation.toState; } } return undefined; }, serialize: function (value, _, __, entity) { var states = entity.getStates(); var state = states[value]; if (!state) { throw new CustomError_1.CustomError('State was not set', 'StateNotSetError'); } return state; }, // why ts-ignore? because mutation does not exist on the graphQl/Source class type as public member // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore validate: function (_a) { var value = _a.value, mutation = _a.source.mutation; if (mutation.isTypeCreate || mutation.isTypeUpdate) { if (typeof mutation.toState !== 'string') { if (!mutation.toState) { throw new CustomError_1.CustomError('State transition (toState) not defined', 'StateTransitionNotDefinedError'); } if (!mutation.toState.includes(value)) { var stateList = mutation.toState.join(', '); throw new CustomError_1.CustomError("Invalid state was set. Needs to be one of: " + stateList, 'InvalidStateSetError'); } } } }, }; exports.systemAttributeI18n = { name: 'i18n', description: 'Translations of record', type: dataTypes_1.DataTypeI18n, hidden: true, required: true, meta: { storageAttributeName: 'i18n', }, mock: i18n_1.i18nMockGenerator, };