shyft
Version:
Model driven GraphQL API framework
170 lines (169 loc) • 6.76 kB
JavaScript
;
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,
};