reiso
Version:
281 lines • 23.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const graphql_1 = require("graphql");
const SubscriptionManager_1 = require("./GraphQL/SubscriptionManager");
var SubscriptionManager_2 = require("./GraphQL/SubscriptionManager");
exports.SubscriptionManager = SubscriptionManager_2.SubscriptionManager;
exports.Subscribe = SubscriptionManager_2.Subscribe;
exports.Publish = SubscriptionManager_2.Publish;
const Model_1 = require("./GraphQL/Model");
const Input_1 = require("./GraphQL/Input");
let queriesModel = {};
let mutationsModel = {};
let subscriptionsModel = {};
let schema;
function getSchema() {
if (!schema) {
schema = genSchema();
}
return schema;
}
exports.getSchema = getSchema;
let schemaSubscription;
function getSubscriptionSchema() {
if (!schemaSubscription) {
schemaSubscription = genSubscriptionSchema();
}
return schemaSubscription;
}
exports.getSubscriptionSchema = getSubscriptionSchema;
function clearModel() {
queriesModel = {};
mutationsModel = {};
subscriptionsModel = {};
schema = undefined;
schemaSubscription = undefined;
SubscriptionManager_1.cleanPublishes();
}
exports.clearModel = clearModel;
function genSchema() {
const queryFields = {};
for (const key in queriesModel) {
queryFields[key] = Input_1.getField(queriesModel[key]);
}
const mutationFields = {};
for (const key in mutationsModel) {
mutationFields[key] = Input_1.getField(mutationsModel[key]);
}
const shema = {
query: undefined,
};
if (Object.keys(queryFields).length > 0) {
shema.query = new graphql_1.GraphQLObjectType({
name: 'RootQuery',
fields: queryFields
});
}
if (Object.keys(mutationFields).length > 0) {
shema.mutation = new graphql_1.GraphQLObjectType({
name: 'RootMutation',
fields: mutationFields
});
}
return new graphql_1.GraphQLSchema(shema);
}
function genSubscriptionSchema() {
const subscriptionFields = {};
for (const key in subscriptionsModel) {
subscriptionFields[key] = Input_1.getSubscriptionField(subscriptionsModel[key]);
}
const queryFields = {};
for (const key in queriesModel) {
queryFields[key] = Input_1.getField(queriesModel[key]);
}
const shema = {
query: undefined
};
if (Object.keys(queryFields).length > 0) {
shema.query = new graphql_1.GraphQLObjectType({
name: 'RootQuery',
fields: queryFields
});
}
if (Object.keys(subscriptionFields).length > 0) {
shema.subscription = new graphql_1.GraphQLObjectType({
name: 'RootSubscription',
fields: subscriptionFields
});
}
return new graphql_1.GraphQLSchema(shema);
}
function Query(name) {
return (target) => {
const model = Reflect.getMetadata(Model_1.typeMetadataKey, target.prototype);
queriesModel[name] = model;
};
}
exports.Query = Query;
function Mutation(options) {
return (target) => {
const name = options.name ? options.name : target.constructor.name;
const model = Reflect.getMetadata(Model_1.typeMetadataKey, target.prototype);
mutationsModel[name] = model;
};
}
exports.Mutation = Mutation;
function Structure(id, options = {}) {
return (target) => {
let model = Reflect.getMetadata(Model_1.typeMetadataKey, target.prototype);
if (!model) {
model = new Model_1.Model();
}
model.id = id;
model.target = target;
if (options.quotaConstr)
model.quotaConstr = options.quotaConstr;
Object.getOwnPropertyNames(target.prototype).forEach(member => {
const memberDesc = Object.getOwnPropertyDescriptor(target.prototype, member);
if (typeof memberDesc.value == 'function') {
if (member == 'constructor') {
if (!model.constr) {
model.constr = new Model_1.ModelConstructor();
}
}
}
});
Reflect.metadata(Model_1.typeMetadataKey, model)(target.prototype);
};
}
exports.Structure = Structure;
function Input(id, options = {}) {
return (target) => {
let model = Reflect.getMetadata(Model_1.inputMetadataKey, target.prototype);
if (!model) {
model = new Model_1.ModelInput();
}
model.id = id;
// model.target = target;
Reflect.metadata(Model_1.inputMetadataKey, model)(target.prototype);
};
}
exports.Input = Input;
function Subscription(type, subscribe, options = {}) {
return (target) => {
const name = options.name;
const scope = options.scope ? options.scope : 'Main';
const model = new Model_1.ModelSub();
model.name = options.name;
model.type = type;
model.subscribe = subscribe;
model.array = options.array;
model.value = target;
model.resolveType = options.resolveType;
if (options.quota)
model.quota = options.quota;
if (!SubscriptionManager_1.getPublishes()[scope]) {
SubscriptionManager_1.getPublishes()[scope] = [];
}
if (SubscriptionManager_1.getPublishes()[scope].indexOf(name) < 0) {
SubscriptionManager_1.getPublishes()[scope].push(name);
}
model.args = options.args || [];
subscriptionsModel[name] = model;
};
}
exports.Subscription = Subscription;
function SubscriptionArg(type, name, options = {}) {
const model = new Model_1.ModelArg();
model.array = options.array;
model.name = name;
model.nullable = !!options.nullable;
model.type = type;
model.resolveType = options.resolveType;
return model;
}
exports.SubscriptionArg = SubscriptionArg;
function Field(type, options = {}) {
return (target, propertyKey) => {
const name = options.name ? options.name : propertyKey;
let model = Reflect.getMetadata(Model_1.typeMetadataKey, target);
if (!model) {
model = new Model_1.Model();
}
if (!model.fields[propertyKey]) {
model.fields[propertyKey] = new Model_1.ModelField();
}
model.fields[propertyKey].name = name;
model.fields[propertyKey].type = type;
model.fields[propertyKey].substructure = options.substructure;
model.fields[propertyKey].array = options.array;
model.fields[propertyKey].resolveType = options.resolveType;
if (options.quota)
model.fields[propertyKey].quota = options.quota;
Reflect.metadata(Model_1.typeMetadataKey, model)(target);
};
}
exports.Field = Field;
function Arg(type, name, options = {}) {
return (target, propertyKey, descriptor) => {
let model = Reflect.getMetadata(Model_1.typeMetadataKey, target);
if (!model) {
model = new Model_1.Model();
}
if (!propertyKey) {
if (!model.constr) {
model.constr = new Model_1.ModelConstructor();
}
if (!model.constr.args[descriptor]) {
model.constr.args[descriptor] = new Model_1.ModelArg();
}
model.constr.args[descriptor].name = name;
model.constr.args[descriptor].nullable = !!options.nullable;
model.constr.args[descriptor].type = type;
model.constr.args[descriptor].array = options.array;
model.constr.args[descriptor].resolveType = options.resolveType;
}
else if (options.constr) {
if (!model.constr) {
model.constr = new Model_1.ModelConstructor();
}
if (!model.constr.args[descriptor]) {
model.constr.args[descriptor] = new Model_1.ModelArg();
}
model.constr.args[descriptor].name = name;
model.constr.args[descriptor].nullable = !!options.nullable;
model.constr.args[descriptor].type = type;
model.constr.args[descriptor].array = options.array;
model.constr.args[descriptor].resolveType = options.resolveType;
}
else {
if (!model.fields[propertyKey]) {
model.fields[propertyKey] = new Model_1.ModelField();
}
if (!model.fields[propertyKey].args[descriptor]) {
model.fields[propertyKey].args[descriptor] = new Model_1.ModelArg();
}
model.fields[propertyKey].args[descriptor].name = name;
model.fields[propertyKey].args[descriptor].nullable = !!options.nullable;
model.fields[propertyKey].args[descriptor].type = type;
model.fields[propertyKey].args[descriptor].array = options.array;
model.fields[propertyKey].args[descriptor].resolveType = options.resolveType;
}
Reflect.metadata(Model_1.typeMetadataKey, model)(target);
};
}
exports.Arg = Arg;
function Constructor(options = {}) {
return (target, propertyKey, descriptor) => {
let model = Reflect.getMetadata(Model_1.typeMetadataKey, target);
if (!model) {
model = new Model_1.Model();
}
if (!model.constr) {
model.constr = new Model_1.ModelConstructor();
}
model.constr.name = propertyKey;
if (options.quota)
model.quotaConstr = options.quota;
Reflect.metadata(Model_1.typeMetadataKey, model)(target);
};
}
exports.Constructor = Constructor;
function InputField(type, options = {}) {
return (target, propertyKey) => {
const name = options.name ? options.name : propertyKey;
let model = Reflect.getMetadata(Model_1.inputMetadataKey, target);
if (!model) {
model = new Model_1.ModelInput();
}
if (!model.fields[propertyKey]) {
model.fields[propertyKey] = new Model_1.ModelInputField();
}
model.fields[propertyKey].name = name;
model.fields[propertyKey].type = type;
model.fields[propertyKey].nullable = options.nullable;
model.fields[propertyKey].array = options.array;
model.fields[propertyKey].resolveType = options.resolveType;
Reflect.metadata(Model_1.inputMetadataKey, model)(target);
};
}
exports.InputField = InputField;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvU2VydmVyL1F1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUNBQXNNO0FBRXRNLHVFQUE2RTtBQUM3RSxxRUFJdUM7QUFIbkMsb0RBQUEsbUJBQW1CLENBQUE7QUFDbkIsMENBQUEsU0FBUyxDQUFBO0FBQ1Qsd0NBQUEsT0FBTyxDQUFBO0FBR1gsMkNBcUJ5QjtBQUN6QiwyQ0FHeUI7QUFRekIsSUFBSSxZQUFZLEdBRVosRUFBRSxDQUFDO0FBQ1AsSUFBSSxjQUFjLEdBRWQsRUFBRSxDQUFDO0FBQ1AsSUFBSSxrQkFBa0IsR0FFbEIsRUFBRSxDQUFDO0FBRVAsSUFBSSxNQUFxQixDQUFBO0FBQ3pCO0lBQ0ksSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNULE1BQU0sR0FBRyxTQUFTLEVBQUUsQ0FBQztLQUN4QjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFMRCw4QkFLQztBQUVELElBQUksa0JBQWlDLENBQUE7QUFDckM7SUFDSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7UUFDckIsa0JBQWtCLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztLQUNoRDtJQUNELE9BQU8sa0JBQWtCLENBQUM7QUFDOUIsQ0FBQztBQUxELHNEQUtDO0FBRUQ7SUFDSSxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDcEIsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDbkIsa0JBQWtCLEdBQUcsU0FBUyxDQUFDO0lBQy9CLG9DQUFjLEVBQUUsQ0FBQztBQUNyQixDQUFDO0FBUEQsZ0NBT0M7QUFFRDtJQUNJLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUV2QixLQUFLLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRTtRQUM1QixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsZ0JBQVEsQ0FB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