@commitspark/graphql-api 0.9.4 → 0.11.0
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.
- package/CHANGELOG.md +17 -0
- package/README.md +96 -85
- package/dist/container.js +21 -13
- package/dist/container.js.map +1 -1
- package/dist/graphql/field-resolver/entry-reference-resolver.d.ts +10 -0
- package/dist/graphql/field-resolver/entry-reference-resolver.js +15 -0
- package/dist/graphql/field-resolver/entry-reference-resolver.js.map +1 -0
- package/dist/graphql/field-resolver/field-default-value-resolver.d.ts +14 -0
- package/dist/graphql/field-resolver/field-default-value-resolver.js +73 -0
- package/dist/graphql/field-resolver/field-default-value-resolver.js.map +1 -0
- package/dist/graphql/field-resolver/fieldResolver.d.ts +11 -0
- package/dist/graphql/field-resolver/fieldResolver.js +3 -0
- package/dist/graphql/field-resolver/fieldResolver.js.map +1 -0
- package/dist/graphql/field-resolver/union-value-resolver.d.ts +10 -0
- package/dist/graphql/field-resolver/union-value-resolver.js +17 -0
- package/dist/graphql/field-resolver/union-value-resolver.js.map +1 -0
- package/dist/graphql/input-type-generator.service.d.ts +3 -3
- package/dist/graphql/input-type-generator.service.js +18 -7
- package/dist/graphql/input-type-generator.service.js.map +1 -1
- package/dist/graphql/queries-mutations-generator.service.d.ts +7 -7
- package/dist/graphql/queries-mutations-generator.service.js +6 -6
- package/dist/graphql/queries-mutations-generator.service.js.map +1 -1
- package/dist/graphql/resolver-generators/mutation-create-resolver-generator.d.ts +6 -3
- package/dist/graphql/resolver-generators/mutation-create-resolver-generator.js +46 -4
- package/dist/graphql/resolver-generators/mutation-create-resolver-generator.js.map +1 -1
- package/dist/graphql/resolver-generators/mutation-delete-resolver-generator.d.ts +6 -3
- package/dist/graphql/resolver-generators/mutation-delete-resolver-generator.js +32 -9
- package/dist/graphql/resolver-generators/mutation-delete-resolver-generator.js.map +1 -1
- package/dist/graphql/resolver-generators/mutation-update-resolver-generator.d.ts +12 -0
- package/dist/graphql/resolver-generators/mutation-update-resolver-generator.js +53 -0
- package/dist/graphql/resolver-generators/mutation-update-resolver-generator.js.map +1 -0
- package/dist/graphql/resolver-generators/object-type-field-default-value-resolver-generator.d.ts +13 -0
- package/dist/graphql/resolver-generators/object-type-field-default-value-resolver-generator.js +58 -0
- package/dist/graphql/resolver-generators/object-type-field-default-value-resolver-generator.js.map +1 -0
- package/dist/graphql/resolver-generators/query-all-resolver-generator.d.ts +3 -2
- package/dist/graphql/resolver-generators/query-all-resolver-generator.js +4 -1
- package/dist/graphql/resolver-generators/query-all-resolver-generator.js.map +1 -1
- package/dist/graphql/resolver-generators/query-by-id-resolver-generator.d.ts +3 -2
- package/dist/graphql/resolver-generators/query-by-id-resolver-generator.js +2 -1
- package/dist/graphql/resolver-generators/query-by-id-resolver-generator.js.map +1 -1
- package/dist/graphql/resolver-generators/union-type-resolver-generator.d.ts +4 -4
- package/dist/graphql/resolver-generators/union-type-resolver-generator.js +3 -3
- package/dist/graphql/resolver-generators/union-type-resolver-generator.js.map +1 -1
- package/dist/graphql/schema-analyzer.service.d.ts +1 -9
- package/dist/graphql/schema-analyzer.service.js +6 -17
- package/dist/graphql/schema-analyzer.service.js.map +1 -1
- package/dist/graphql/schema-generator.service.d.ts +3 -5
- package/dist/graphql/schema-generator.service.js +7 -12
- package/dist/graphql/schema-generator.service.js.map +1 -1
- package/dist/graphql/schema-utils/entry-reference-util.d.ts +12 -4
- package/dist/graphql/schema-utils/entry-reference-util.js +105 -21
- package/dist/graphql/schema-utils/entry-reference-util.js.map +1 -1
- package/dist/graphql/schema-utils/entry-type-util.d.ts +6 -0
- package/dist/graphql/schema-utils/entry-type-util.js +34 -0
- package/dist/graphql/schema-utils/entry-type-util.js.map +1 -0
- package/dist/graphql/schema-utils/union-type-util.d.ts +5 -0
- package/dist/graphql/schema-utils/union-type-util.js +21 -0
- package/dist/graphql/schema-utils/union-type-util.js.map +1 -0
- package/dist/persistence/persistence.service.d.ts +1 -8
- package/dist/persistence/persistence.service.js +22 -87
- package/dist/persistence/persistence.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/src/container.ts +29 -15
- package/src/graphql/field-resolver/entry-reference-resolver.ts +47 -0
- package/src/graphql/field-resolver/field-default-value-resolver.ts +154 -0
- package/src/graphql/field-resolver/fieldResolver.ts +19 -0
- package/src/graphql/field-resolver/union-value-resolver.ts +46 -0
- package/src/graphql/input-type-generator.service.ts +22 -8
- package/src/graphql/queries-mutations-generator.service.ts +18 -18
- package/src/graphql/resolver-generators/mutation-create-resolver-generator.ts +82 -19
- package/src/graphql/resolver-generators/mutation-delete-resolver-generator.ts +72 -27
- package/src/graphql/resolver-generators/mutation-update-resolver-generator.ts +128 -0
- package/src/graphql/resolver-generators/object-type-field-default-value-resolver-generator.ts +119 -0
- package/src/graphql/resolver-generators/query-all-resolver-generator.ts +9 -7
- package/src/graphql/resolver-generators/query-by-id-resolver-generator.ts +7 -7
- package/src/graphql/resolver-generators/union-type-resolver-generator.ts +5 -7
- package/src/graphql/schema-analyzer.service.ts +10 -24
- package/src/graphql/schema-generator.service.ts +13 -22
- package/src/graphql/schema-utils/entry-reference-util.ts +170 -30
- package/src/graphql/schema-utils/entry-type-util.ts +42 -0
- package/src/graphql/schema-utils/union-type-util.ts +23 -0
- package/src/persistence/persistence.service.ts +30 -142
- package/dist/graphql/resolver-generators/entry-reference-resolver.generator.d.ts +0 -12
- package/dist/graphql/resolver-generators/entry-reference-resolver.generator.js +0 -29
- package/dist/graphql/resolver-generators/entry-reference-resolver.generator.js.map +0 -1
- package/dist/graphql/resolver-generators/mutation-update.resolver-generator.d.ts +0 -8
- package/dist/graphql/resolver-generators/mutation-update.resolver-generator.js +0 -29
- package/dist/graphql/resolver-generators/mutation-update.resolver-generator.js.map +0 -1
- package/dist/graphql/resolver-generators/union-value-resolver-generator.d.ts +0 -13
- package/dist/graphql/resolver-generators/union-value-resolver-generator.js +0 -80
- package/dist/graphql/resolver-generators/union-value-resolver-generator.js.map +0 -1
- package/src/graphql/resolver-generators/entry-reference-resolver.generator.ts +0 -71
- package/src/graphql/resolver-generators/mutation-update.resolver-generator.ts +0 -59
- package/src/graphql/resolver-generators/union-value-resolver-generator.ts +0 -125
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GraphQLObjectType, GraphQLSchema } from 'graphql';
|
|
2
2
|
import { GraphQLInterfaceType, GraphQLUnionType } from 'graphql/type/definition';
|
|
3
|
-
import { ApolloContext } from '../app/api.service';
|
|
4
|
-
import { EntryReferenceUtil } from './schema-utils/entry-reference-util';
|
|
5
3
|
export declare class SchemaAnalyzerService {
|
|
6
|
-
private readonly entryReferenceUtil;
|
|
7
|
-
constructor(entryReferenceUtil: EntryReferenceUtil);
|
|
8
4
|
analyzeSchema(schema: GraphQLSchema): ISchemaAnalyzerResult;
|
|
9
5
|
}
|
|
10
6
|
export interface ISchemaAnalyzerResult {
|
|
@@ -12,8 +8,4 @@ export interface ISchemaAnalyzerResult {
|
|
|
12
8
|
objectTypes: GraphQLObjectType[];
|
|
13
9
|
interfaceTypes: GraphQLInterfaceType[];
|
|
14
10
|
unionTypes: GraphQLUnionType[];
|
|
15
|
-
typesWithEntryReferences: {
|
|
16
|
-
type: GraphQLObjectType<any, ApolloContext>;
|
|
17
|
-
fields: GraphQLField<any, ApolloContext>[];
|
|
18
|
-
}[];
|
|
19
11
|
}
|
|
@@ -1,46 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SchemaAnalyzerService = void 0;
|
|
4
|
+
const graphql_1 = require("graphql");
|
|
4
5
|
const utils_1 = require("@graphql-tools/utils");
|
|
5
|
-
const kinds_1 = require("graphql/language/kinds");
|
|
6
6
|
class SchemaAnalyzerService {
|
|
7
|
-
constructor(entryReferenceUtil) {
|
|
8
|
-
this.entryReferenceUtil = entryReferenceUtil;
|
|
9
|
-
}
|
|
10
7
|
analyzeSchema(schema) {
|
|
11
|
-
var _a
|
|
8
|
+
var _a;
|
|
12
9
|
const result = {
|
|
13
10
|
entryDirectiveTypes: [],
|
|
14
11
|
objectTypes: [],
|
|
15
12
|
interfaceTypes: [],
|
|
16
13
|
unionTypes: [],
|
|
17
|
-
typesWithEntryReferences: [],
|
|
18
14
|
};
|
|
19
15
|
const typeMap = schema.getTypeMap();
|
|
20
16
|
for (const [key, type] of Object.entries(typeMap)) {
|
|
21
17
|
if (key.startsWith('__')) {
|
|
22
18
|
continue;
|
|
23
19
|
}
|
|
24
|
-
if ((
|
|
20
|
+
if ((0, graphql_1.isObjectType)(type)) {
|
|
25
21
|
const objectType = type;
|
|
26
22
|
result.objectTypes.push(objectType);
|
|
27
|
-
const entityDirective = (
|
|
23
|
+
const entityDirective = (_a = (0, utils_1.getDirective)(schema, objectType, 'Entry')) === null || _a === void 0 ? void 0 : _a[0];
|
|
28
24
|
if (entityDirective) {
|
|
29
25
|
result.entryDirectiveTypes.push(objectType);
|
|
30
26
|
}
|
|
31
|
-
const fieldsWithEntryReference = this.entryReferenceUtil.getFieldsWithReferenceToTypeWithEntryDirective(objectType);
|
|
32
|
-
if (fieldsWithEntryReference.length > 0) {
|
|
33
|
-
result.typesWithEntryReferences.push({
|
|
34
|
-
type: objectType,
|
|
35
|
-
fields: fieldsWithEntryReference,
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
27
|
}
|
|
39
|
-
if ((
|
|
28
|
+
if ((0, graphql_1.isInterfaceType)(type)) {
|
|
40
29
|
const interfaceType = type;
|
|
41
30
|
result.interfaceTypes.push(interfaceType);
|
|
42
31
|
}
|
|
43
|
-
if ((
|
|
32
|
+
if ((0, graphql_1.isUnionType)(type)) {
|
|
44
33
|
const unionType = type;
|
|
45
34
|
result.unionTypes.push(unionType);
|
|
46
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-analyzer.service.js","sourceRoot":"","sources":["../../src/graphql/schema-analyzer.service.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"schema-analyzer.service.js","sourceRoot":"","sources":["../../src/graphql/schema-analyzer.service.ts"],"names":[],"mappings":";;;AAAA,qCAMgB;AAChB,gDAAmD;AAGnD,MAAa,qBAAqB;IACzB,aAAa,CAAC,MAAqB;;QACxC,MAAM,MAAM,GAA0B;YACpC,mBAAmB,EAAE,EAAE;YACvB,WAAW,EAAE,EAAE;YACf,cAAc,EAAE,EAAE;YAClB,UAAU,EAAE,EAAE;SACf,CAAA;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;QAEnC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACjD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBACxB,SAAQ;aACT;YAED,IAAI,IAAA,sBAAY,EAAC,IAAI,CAAC,EAAE;gBACtB,MAAM,UAAU,GAAG,IAAyB,CAAA;gBAC5C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBACnC,MAAM,eAAe,GAAG,MAAA,IAAA,oBAAY,EAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,0CAAG,CAAC,CAAC,CAAA;gBACtE,IAAI,eAAe,EAAE;oBACnB,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;iBAC5C;aACF;YAED,IAAI,IAAA,yBAAe,EAAC,IAAI,CAAC,EAAE;gBACzB,MAAM,aAAa,GAAG,IAA4B,CAAA;gBAClD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;aAC1C;YAED,IAAI,IAAA,qBAAW,EAAC,IAAI,CAAC,EAAE;gBACrB,MAAM,SAAS,GAAG,IAAwB,CAAA;gBAC1C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;aAClC;SACF;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAtCD,sDAsCC"}
|
|
@@ -3,20 +3,18 @@ import { IExecutableSchemaDefinition } from '@graphql-tools/schema';
|
|
|
3
3
|
import { SchemaAnalyzerService } from './schema-analyzer.service';
|
|
4
4
|
import { InputTypeGeneratorService } from './input-type-generator.service';
|
|
5
5
|
import { SchemaRootTypeGeneratorService } from './schema-root-type-generator.service';
|
|
6
|
-
import { EntryReferenceResolverGenerator } from './resolver-generators/entry-reference-resolver.generator';
|
|
7
6
|
import { UnionTypeResolverGenerator } from './resolver-generators/union-type-resolver-generator';
|
|
8
7
|
import { ApolloContext } from '../app/api.service';
|
|
9
8
|
import { SchemaValidator } from './schema-validator';
|
|
10
|
-
import {
|
|
9
|
+
import { ObjectTypeFieldDefaultValueResolverGenerator } from './resolver-generators/object-type-field-default-value-resolver-generator';
|
|
11
10
|
export declare class SchemaGeneratorService {
|
|
12
11
|
private readonly queriesMutationsGenerator;
|
|
13
12
|
private readonly schemaAnalyzer;
|
|
14
13
|
private readonly inputTypeGenerator;
|
|
15
14
|
private readonly schemaRootTypeGenerator;
|
|
16
|
-
private readonly entryReferenceResolverGenerator;
|
|
17
15
|
private readonly unionTypeResolverGenerator;
|
|
18
|
-
private readonly
|
|
16
|
+
private readonly objectTypeFieldDefaultValueResolverGenerator;
|
|
19
17
|
private readonly schemaValidator;
|
|
20
|
-
constructor(queriesMutationsGenerator: QueriesMutationsGeneratorService, schemaAnalyzer: SchemaAnalyzerService, inputTypeGenerator: InputTypeGeneratorService, schemaRootTypeGenerator: SchemaRootTypeGeneratorService,
|
|
18
|
+
constructor(queriesMutationsGenerator: QueriesMutationsGeneratorService, schemaAnalyzer: SchemaAnalyzerService, inputTypeGenerator: InputTypeGeneratorService, schemaRootTypeGenerator: SchemaRootTypeGeneratorService, unionTypeResolverGenerator: UnionTypeResolverGenerator, objectTypeFieldDefaultValueResolverGenerator: ObjectTypeFieldDefaultValueResolverGenerator, schemaValidator: SchemaValidator);
|
|
21
19
|
generateSchema(context: ApolloContext): Promise<IExecutableSchemaDefinition>;
|
|
22
20
|
}
|
|
@@ -4,14 +4,13 @@ exports.SchemaGeneratorService = void 0;
|
|
|
4
4
|
const schema_1 = require("@graphql-tools/schema");
|
|
5
5
|
const utils_1 = require("@graphql-tools/utils");
|
|
6
6
|
class SchemaGeneratorService {
|
|
7
|
-
constructor(queriesMutationsGenerator, schemaAnalyzer, inputTypeGenerator, schemaRootTypeGenerator,
|
|
7
|
+
constructor(queriesMutationsGenerator, schemaAnalyzer, inputTypeGenerator, schemaRootTypeGenerator, unionTypeResolverGenerator, objectTypeFieldDefaultValueResolverGenerator, schemaValidator) {
|
|
8
8
|
this.queriesMutationsGenerator = queriesMutationsGenerator;
|
|
9
9
|
this.schemaAnalyzer = schemaAnalyzer;
|
|
10
10
|
this.inputTypeGenerator = inputTypeGenerator;
|
|
11
11
|
this.schemaRootTypeGenerator = schemaRootTypeGenerator;
|
|
12
|
-
this.entryReferenceResolverGenerator = entryReferenceResolverGenerator;
|
|
13
12
|
this.unionTypeResolverGenerator = unionTypeResolverGenerator;
|
|
14
|
-
this.
|
|
13
|
+
this.objectTypeFieldDefaultValueResolverGenerator = objectTypeFieldDefaultValueResolverGenerator;
|
|
15
14
|
this.schemaValidator = schemaValidator;
|
|
16
15
|
}
|
|
17
16
|
async generateSchema(context) {
|
|
@@ -30,10 +29,6 @@ class SchemaGeneratorService {
|
|
|
30
29
|
const generatedQueriesMutations = this.queriesMutationsGenerator.generateFromAnalyzedSchema(schemaAnalyzerResult.entryDirectiveTypes);
|
|
31
30
|
const generatedTypeNameQuery = this.queriesMutationsGenerator.generateTypeNameQuery();
|
|
32
31
|
const generatedEntryReferenceResolvers = {};
|
|
33
|
-
for (const type of schemaAnalyzerResult.typesWithEntryReferences) {
|
|
34
|
-
generatedEntryReferenceResolvers[type.type.name] =
|
|
35
|
-
this.entryReferenceResolverGenerator.createResolver(context, type);
|
|
36
|
-
}
|
|
37
32
|
const generatedObjectInputTypeStrings = this.inputTypeGenerator.generateObjectInputTypeStrings(schemaAnalyzerResult.objectTypes);
|
|
38
33
|
const generatedUnionInputTypeStrings = this.inputTypeGenerator.generateUnionInputTypeStrings(schemaAnalyzerResult.unionTypes);
|
|
39
34
|
const generatedSchemaRootTypeStrings = this.schemaRootTypeGenerator.generateSchemaRootTypeStrings(generatedQueriesMutations, generatedTypeNameQuery);
|
|
@@ -52,10 +47,10 @@ class SchemaGeneratorService {
|
|
|
52
47
|
__resolveType: this.unionTypeResolverGenerator.createResolver(),
|
|
53
48
|
};
|
|
54
49
|
}
|
|
55
|
-
const
|
|
50
|
+
const generatedObjectTypeFieldDefaultValueResolvers = this.objectTypeFieldDefaultValueResolverGenerator.createResolver(schema);
|
|
56
51
|
const generatedQueryResolvers = {};
|
|
57
52
|
const generatedMutationResolvers = {};
|
|
58
|
-
|
|
53
|
+
for (const element of generatedQueriesMutations) {
|
|
59
54
|
generatedQueryResolvers[element.queryAll.name] = element.queryAll.resolver;
|
|
60
55
|
generatedQueryResolvers[element.queryAllMeta.name] =
|
|
61
56
|
element.queryAllMeta.resolver;
|
|
@@ -67,7 +62,7 @@ class SchemaGeneratorService {
|
|
|
67
62
|
element.updateMutation.resolver;
|
|
68
63
|
generatedMutationResolvers[element.deleteMutation.name] =
|
|
69
64
|
element.deleteMutation.resolver;
|
|
70
|
-
}
|
|
65
|
+
}
|
|
71
66
|
generatedQueryResolvers[generatedTypeNameQuery.name] =
|
|
72
67
|
generatedTypeNameQuery.resolver;
|
|
73
68
|
const allGeneratedResolvers = {
|
|
@@ -77,8 +72,8 @@ class SchemaGeneratorService {
|
|
|
77
72
|
for (const typeName of Object.keys(generatedUnionTypeResolvers)) {
|
|
78
73
|
allGeneratedResolvers[typeName] = Object.assign(Object.assign({}, ((_a = allGeneratedResolvers[typeName]) !== null && _a !== void 0 ? _a : {})), generatedUnionTypeResolvers[typeName]);
|
|
79
74
|
}
|
|
80
|
-
for (const typeName of Object.keys(
|
|
81
|
-
allGeneratedResolvers[typeName] = Object.assign(Object.assign({}, ((_b = allGeneratedResolvers[typeName]) !== null && _b !== void 0 ? _b : {})),
|
|
75
|
+
for (const typeName of Object.keys(generatedObjectTypeFieldDefaultValueResolvers)) {
|
|
76
|
+
allGeneratedResolvers[typeName] = Object.assign(Object.assign({}, ((_b = allGeneratedResolvers[typeName]) !== null && _b !== void 0 ? _b : {})), generatedObjectTypeFieldDefaultValueResolvers[typeName]);
|
|
82
77
|
}
|
|
83
78
|
for (const typeName of Object.keys(generatedEntryReferenceResolvers)) {
|
|
84
79
|
allGeneratedResolvers[typeName] = Object.assign(Object.assign({}, ((_c = allGeneratedResolvers[typeName]) !== null && _c !== void 0 ? _c : {})), generatedEntryReferenceResolvers[typeName]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-generator.service.js","sourceRoot":"","sources":["../../src/graphql/schema-generator.service.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"schema-generator.service.js","sourceRoot":"","sources":["../../src/graphql/schema-generator.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GraphQLNullableType, GraphQLObjectType } from 'graphql';
|
|
2
|
+
import { ApolloContext } from '../../app/api.service';
|
|
3
|
+
import { PersistenceService } from '../../persistence/persistence.service';
|
|
4
|
+
import { UnionTypeUtil } from './union-type-util';
|
|
5
|
+
import { EntryTypeUtil } from './entry-type-util';
|
|
2
6
|
export declare class EntryReferenceUtil {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
7
|
+
private readonly persistence;
|
|
8
|
+
private readonly entryTypeUtil;
|
|
9
|
+
private readonly unionTypeUtil;
|
|
10
|
+
constructor(persistence: PersistenceService, entryTypeUtil: EntryTypeUtil, unionTypeUtil: UnionTypeUtil);
|
|
11
|
+
getReferencedEntryIds(rootType: GraphQLObjectType, context: ApolloContext, fieldName: string | null, type: GraphQLNullableType, data: any): Promise<string[]>;
|
|
12
|
+
private validateReference;
|
|
13
|
+
private isPermittedReferenceType;
|
|
6
14
|
}
|
|
@@ -2,39 +2,123 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EntryReferenceUtil = void 0;
|
|
4
4
|
const graphql_1 = require("graphql");
|
|
5
|
+
const GraphQLError_1 = require("graphql/error/GraphQLError");
|
|
5
6
|
class EntryReferenceUtil {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
if (this.buildsOnTypeWithEntryDirective(field.type)) {
|
|
11
|
-
fields.push(field);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
return fields;
|
|
7
|
+
constructor(persistence, entryTypeUtil, unionTypeUtil) {
|
|
8
|
+
this.persistence = persistence;
|
|
9
|
+
this.entryTypeUtil = entryTypeUtil;
|
|
10
|
+
this.unionTypeUtil = unionTypeUtil;
|
|
15
11
|
}
|
|
16
|
-
|
|
12
|
+
async getReferencedEntryIds(rootType, context, fieldName, type, data) {
|
|
13
|
+
var _a;
|
|
17
14
|
if ((0, graphql_1.isNonNullType)(type)) {
|
|
18
|
-
return this.
|
|
15
|
+
return this.getReferencedEntryIds(rootType, context, fieldName, type.ofType, data);
|
|
19
16
|
}
|
|
20
17
|
else if ((0, graphql_1.isListType)(type)) {
|
|
21
|
-
|
|
18
|
+
let referencedEntryIds = [];
|
|
19
|
+
for (const element of data) {
|
|
20
|
+
referencedEntryIds = [
|
|
21
|
+
...referencedEntryIds,
|
|
22
|
+
...(await this.getReferencedEntryIds(rootType, context, fieldName, type.ofType, element)),
|
|
23
|
+
];
|
|
24
|
+
}
|
|
25
|
+
referencedEntryIds = [...new Set(referencedEntryIds)];
|
|
26
|
+
return referencedEntryIds;
|
|
22
27
|
}
|
|
23
28
|
else if ((0, graphql_1.isUnionType)(type)) {
|
|
24
|
-
|
|
29
|
+
if (this.entryTypeUtil.isUnionOfEntryTypes(type)) {
|
|
30
|
+
await this.validateReference(context, '', type, data);
|
|
31
|
+
return [data.id];
|
|
32
|
+
}
|
|
33
|
+
const unionTypeName = this.unionTypeUtil.getUnionTypeNameFromFieldValue(data);
|
|
34
|
+
const unionType = type
|
|
25
35
|
.getTypes()
|
|
26
|
-
.
|
|
27
|
-
|
|
36
|
+
.find((type) => type.name === unionTypeName);
|
|
37
|
+
if (!unionType) {
|
|
38
|
+
throw new Error(`Type "${unionTypeName}" found in field data is not a valid type for union type "${type.name}".`);
|
|
39
|
+
}
|
|
40
|
+
const unionValue = this.unionTypeUtil.getUnionValue(data);
|
|
41
|
+
return this.getReferencedEntryIds(rootType, context, fieldName, unionType, unionValue);
|
|
28
42
|
}
|
|
29
43
|
else if ((0, graphql_1.isObjectType)(type)) {
|
|
30
|
-
|
|
44
|
+
if (type.name !== rootType.name &&
|
|
45
|
+
this.entryTypeUtil.hasEntryDirective(type)) {
|
|
46
|
+
await this.validateReference(context, fieldName !== null && fieldName !== void 0 ? fieldName : '', type, data);
|
|
47
|
+
return [data.id];
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
let referencedEntryIds = [];
|
|
51
|
+
for (const [fieldsKey, field] of Object.entries(type.getFields())) {
|
|
52
|
+
const fieldValue = (_a = data[fieldsKey]) !== null && _a !== void 0 ? _a : undefined;
|
|
53
|
+
if (fieldValue !== undefined) {
|
|
54
|
+
const nestedResult = await this.getReferencedEntryIds(rootType, context, fieldsKey, field.type, fieldValue);
|
|
55
|
+
referencedEntryIds = [...referencedEntryIds, ...nestedResult];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
referencedEntryIds = [...new Set(referencedEntryIds)];
|
|
59
|
+
return referencedEntryIds;
|
|
60
|
+
}
|
|
31
61
|
}
|
|
32
|
-
return
|
|
62
|
+
return [];
|
|
33
63
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
64
|
+
async validateReference(context, fieldName, fieldType, fieldValue) {
|
|
65
|
+
if ((0, graphql_1.isNonNullType)(fieldType)) {
|
|
66
|
+
await this.validateReference(context, fieldName, fieldType.ofType, fieldValue);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
else if ((0, graphql_1.isListType)(fieldType)) {
|
|
70
|
+
if (!Array.isArray(fieldValue)) {
|
|
71
|
+
throw new Error(`Expected array value in field "${fieldName}"`);
|
|
72
|
+
}
|
|
73
|
+
for (const fieldListElement of fieldValue) {
|
|
74
|
+
await this.validateReference(context, fieldName, fieldType.ofType, fieldListElement);
|
|
75
|
+
}
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
else if ((0, graphql_1.isUnionType)(fieldType) || (0, graphql_1.isObjectType)(fieldType)) {
|
|
79
|
+
if (!('id' in fieldValue)) {
|
|
80
|
+
throw new Error('Expected key "id"');
|
|
81
|
+
}
|
|
82
|
+
const referencedId = fieldValue.id;
|
|
83
|
+
let referencedTypeName;
|
|
84
|
+
try {
|
|
85
|
+
referencedTypeName = await this.persistence.getTypeById(context.gitAdapter, context.getCurrentRef(), referencedId);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
throw new GraphQLError_1.GraphQLError(`Reference with id "${referencedId}" points to non-existing entry`, {
|
|
89
|
+
extensions: {
|
|
90
|
+
code: 'BAD_USER_INPUT',
|
|
91
|
+
fieldName: fieldName,
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (!this.isPermittedReferenceType(referencedTypeName, fieldType)) {
|
|
96
|
+
throw new GraphQLError_1.GraphQLError(`Reference with id "${referencedId}" points to entry of incompatible type`, {
|
|
97
|
+
extensions: {
|
|
98
|
+
code: 'BAD_USER_INPUT',
|
|
99
|
+
fieldName: fieldName,
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
isPermittedReferenceType(referencedTypeName, fieldType) {
|
|
106
|
+
if ((0, graphql_1.isNonNullType)(fieldType)) {
|
|
107
|
+
return this.isPermittedReferenceType(referencedTypeName, fieldType.ofType);
|
|
108
|
+
}
|
|
109
|
+
else if ((0, graphql_1.isListType)(fieldType)) {
|
|
110
|
+
return this.isPermittedReferenceType(referencedTypeName, fieldType.ofType);
|
|
111
|
+
}
|
|
112
|
+
else if ((0, graphql_1.isUnionType)(fieldType)) {
|
|
113
|
+
return fieldType
|
|
114
|
+
.getTypes()
|
|
115
|
+
.map((concreteType) => concreteType.name)
|
|
116
|
+
.includes(referencedTypeName);
|
|
117
|
+
}
|
|
118
|
+
else if ((0, graphql_1.isObjectType)(fieldType)) {
|
|
119
|
+
return fieldType.name === referencedTypeName;
|
|
120
|
+
}
|
|
121
|
+
return false;
|
|
38
122
|
}
|
|
39
123
|
}
|
|
40
124
|
exports.EntryReferenceUtil = EntryReferenceUtil;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry-reference-util.js","sourceRoot":"","sources":["../../../src/graphql/schema-utils/entry-reference-util.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"entry-reference-util.js","sourceRoot":"","sources":["../../../src/graphql/schema-utils/entry-reference-util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { GraphQLNullableType, GraphQLObjectType, GraphQLUnionType } from 'graphql';
|
|
2
|
+
export declare class EntryTypeUtil {
|
|
3
|
+
buildsOnTypeWithEntryDirective(type: GraphQLNullableType): boolean;
|
|
4
|
+
hasEntryDirective(type: GraphQLObjectType): boolean;
|
|
5
|
+
isUnionOfEntryTypes(type: GraphQLUnionType): boolean;
|
|
6
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EntryTypeUtil = void 0;
|
|
4
|
+
const graphql_1 = require("graphql");
|
|
5
|
+
class EntryTypeUtil {
|
|
6
|
+
buildsOnTypeWithEntryDirective(type) {
|
|
7
|
+
if ((0, graphql_1.isNonNullType)(type)) {
|
|
8
|
+
return this.buildsOnTypeWithEntryDirective(type.ofType);
|
|
9
|
+
}
|
|
10
|
+
else if ((0, graphql_1.isListType)(type)) {
|
|
11
|
+
return this.buildsOnTypeWithEntryDirective(type.ofType);
|
|
12
|
+
}
|
|
13
|
+
else if ((0, graphql_1.isUnionType)(type)) {
|
|
14
|
+
return this.isUnionOfEntryTypes(type);
|
|
15
|
+
}
|
|
16
|
+
else if ((0, graphql_1.isObjectType)(type)) {
|
|
17
|
+
return this.hasEntryDirective(type);
|
|
18
|
+
}
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
hasEntryDirective(type) {
|
|
22
|
+
var _a;
|
|
23
|
+
return (!!type.astNode &&
|
|
24
|
+
((_a = type.astNode.directives) === null || _a === void 0 ? void 0 : _a.find((directive) => directive.name.value === 'Entry')) !== undefined);
|
|
25
|
+
}
|
|
26
|
+
isUnionOfEntryTypes(type) {
|
|
27
|
+
return (type
|
|
28
|
+
.getTypes()
|
|
29
|
+
.filter((unionType) => this.buildsOnTypeWithEntryDirective(unionType))
|
|
30
|
+
.length > 0);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.EntryTypeUtil = EntryTypeUtil;
|
|
34
|
+
//# sourceMappingURL=entry-type-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-type-util.js","sourceRoot":"","sources":["../../../src/graphql/schema-utils/entry-type-util.ts"],"names":[],"mappings":";;;AAAA,qCAQgB;AAEhB,MAAa,aAAa;IACjB,8BAA8B,CAAC,IAAyB;QAC7D,IAAI,IAAA,uBAAa,EAAC,IAAI,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SACxD;aAAM,IAAI,IAAA,oBAAU,EAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SACxD;aAAM,IAAI,IAAA,qBAAW,EAAC,IAAI,CAAC,EAAE;YAC5B,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;SACtC;aAAM,IAAI,IAAA,sBAAY,EAAC,IAAI,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;SACpC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAEM,iBAAiB,CAAC,IAAuB;;QAC9C,OAAO,CACL,CAAC,CAAC,IAAI,CAAC,OAAO;YACd,CAAA,MAAA,IAAI,CAAC,OAAO,CAAC,UAAU,0CAAE,IAAI,CAC3B,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,KAAK,OAAO,CAChD,MAAK,SAAS,CAChB,CAAA;IACH,CAAC;IAEM,mBAAmB,CAAC,IAAsB;QAC/C,OAAO,CACL,IAAI;aACD,QAAQ,EAAE;aACV,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,SAAS,CAAC,CAAC;aACrE,MAAM,GAAG,CAAC,CACd,CAAA;IACH,CAAC;CACF;AA/BD,sCA+BC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UnionTypeUtil = void 0;
|
|
4
|
+
class UnionTypeUtil {
|
|
5
|
+
getUnionTypeNameFromFieldValue(fieldValue) {
|
|
6
|
+
if (typeof fieldValue !== 'object') {
|
|
7
|
+
throw new Error('Expected object as union value');
|
|
8
|
+
}
|
|
9
|
+
const firstKey = Object.keys(fieldValue)[0];
|
|
10
|
+
return firstKey.slice(0, 1).toUpperCase() + firstKey.slice(1);
|
|
11
|
+
}
|
|
12
|
+
getUnionValue(fieldValue) {
|
|
13
|
+
if (typeof fieldValue !== 'object') {
|
|
14
|
+
throw new Error('Expected object as union value');
|
|
15
|
+
}
|
|
16
|
+
const firstKey = Object.keys(fieldValue)[0];
|
|
17
|
+
return fieldValue[firstKey];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.UnionTypeUtil = UnionTypeUtil;
|
|
21
|
+
//# sourceMappingURL=union-type-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union-type-util.js","sourceRoot":"","sources":["../../../src/graphql/schema-utils/union-type-util.ts"],"names":[],"mappings":";;;AAEA,MAAa,aAAa;IACjB,8BAA8B,CAAC,UAAe;QACnD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;SAClD;QAID,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3C,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC/D,CAAC;IAEM,aAAa,CAAC,UAAe;QAClC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;SAClD;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAA;IAC7B,CAAC;CACF;AApBD,sCAoBC"}
|
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
import { GitAdapter } from '@commitspark/git-adapter';
|
|
1
|
+
import { Entry, GitAdapter } from '@commitspark/git-adapter';
|
|
2
2
|
export declare class PersistenceService {
|
|
3
3
|
getTypeById(gitAdapter: GitAdapter, commitHash: string, id: string): Promise<string>;
|
|
4
4
|
findById(gitAdapter: GitAdapter, commitHash: string, id: string): Promise<Entry>;
|
|
5
5
|
findByType(gitAdapter: GitAdapter, commitHash: string, type: string): Promise<Entry[]>;
|
|
6
6
|
findByTypeId(gitAdapter: GitAdapter, commitHash: string, type: string, id: string): Promise<Entry>;
|
|
7
|
-
createType(gitAdapter: GitAdapter, branch: string, commitHash: string, typeName: string, id: string, data: Entry, message: string): Promise<CommitResult>;
|
|
8
|
-
updateByTypeId(gitAdapter: GitAdapter, branch: string, commitHash: string, type: string, id: string, data: Entry, message: string): Promise<CommitResult>;
|
|
9
|
-
deleteByTypeId(gitAdapter: GitAdapter, branch: string, commitHash: string, type: string, id: string, message: string): Promise<CommitResult>;
|
|
10
7
|
}
|
|
11
|
-
export interface CommitResult {
|
|
12
|
-
ref: string;
|
|
13
|
-
}
|
|
14
|
-
export type Entry = Record<string, unknown>;
|
|
@@ -4,110 +4,45 @@ exports.PersistenceService = void 0;
|
|
|
4
4
|
const GraphQLError_1 = require("graphql/error/GraphQLError");
|
|
5
5
|
class PersistenceService {
|
|
6
6
|
async getTypeById(gitAdapter, commitHash, id) {
|
|
7
|
-
const allEntries = await gitAdapter.
|
|
8
|
-
const requestedEntry = allEntries.
|
|
7
|
+
const allEntries = await gitAdapter.getEntries(commitHash);
|
|
8
|
+
const requestedEntry = allEntries.find((entry) => entry.id === id);
|
|
9
9
|
if (requestedEntry === undefined) {
|
|
10
|
-
throw new
|
|
10
|
+
throw new GraphQLError_1.GraphQLError(`Not found: ${id}`, {
|
|
11
|
+
extensions: {
|
|
12
|
+
code: 'NOT_FOUND',
|
|
13
|
+
},
|
|
14
|
+
});
|
|
11
15
|
}
|
|
12
16
|
return requestedEntry.metadata.type;
|
|
13
17
|
}
|
|
14
18
|
async findById(gitAdapter, commitHash, id) {
|
|
15
|
-
const allEntries = await gitAdapter.
|
|
16
|
-
const requestedEntry = allEntries.
|
|
19
|
+
const allEntries = await gitAdapter.getEntries(commitHash);
|
|
20
|
+
const requestedEntry = allEntries.find((entry) => entry.id === id);
|
|
17
21
|
if (requestedEntry === undefined) {
|
|
18
|
-
throw new
|
|
22
|
+
throw new GraphQLError_1.GraphQLError(`Not found: ${id}`, {
|
|
23
|
+
extensions: {
|
|
24
|
+
code: 'NOT_FOUND',
|
|
25
|
+
},
|
|
26
|
+
});
|
|
19
27
|
}
|
|
20
|
-
return
|
|
28
|
+
return requestedEntry;
|
|
21
29
|
}
|
|
22
30
|
async findByType(gitAdapter, commitHash, type) {
|
|
23
|
-
const allEntries = await gitAdapter.
|
|
24
|
-
return allEntries
|
|
25
|
-
.filter((contentEntry) => contentEntry.metadata.type === type)
|
|
26
|
-
.map((value) => (Object.assign(Object.assign({}, value.data), { id: value.id })));
|
|
31
|
+
const allEntries = await gitAdapter.getEntries(commitHash);
|
|
32
|
+
return allEntries.filter((entry) => entry.metadata.type === type);
|
|
27
33
|
}
|
|
28
34
|
async findByTypeId(gitAdapter, commitHash, type, id) {
|
|
29
|
-
const allEntries = await gitAdapter.
|
|
30
|
-
const requestedEntry = allEntries.
|
|
31
|
-
if (requestedEntry === undefined
|
|
32
|
-
throw new
|
|
33
|
-
}
|
|
34
|
-
return Object.assign(Object.assign({}, requestedEntry.data), { id: id });
|
|
35
|
-
}
|
|
36
|
-
async createType(gitAdapter, branch, commitHash, typeName, id, data, message) {
|
|
37
|
-
const regex = /^[a-zA-Z0-9\-_]{1,250}$/;
|
|
38
|
-
if (!id.match(regex)) {
|
|
39
|
-
throw new GraphQLError_1.GraphQLError(`"id" does not match regex "${regex}"`, {
|
|
35
|
+
const allEntries = await gitAdapter.getEntries(commitHash);
|
|
36
|
+
const requestedEntry = allEntries.find((entry) => entry.id === id && entry.metadata.type === type);
|
|
37
|
+
if (requestedEntry === undefined) {
|
|
38
|
+
throw new GraphQLError_1.GraphQLError(`No entry of type "${type}" with id "${id}" exists`, {
|
|
40
39
|
extensions: {
|
|
41
40
|
code: 'BAD_USER_INPUT',
|
|
42
41
|
argumentName: 'id',
|
|
43
42
|
},
|
|
44
43
|
});
|
|
45
44
|
}
|
|
46
|
-
|
|
47
|
-
ref: branch,
|
|
48
|
-
parentSha: commitHash,
|
|
49
|
-
contentEntries: [
|
|
50
|
-
{
|
|
51
|
-
id: id,
|
|
52
|
-
metadata: {
|
|
53
|
-
type: typeName,
|
|
54
|
-
},
|
|
55
|
-
data: data,
|
|
56
|
-
deletion: false,
|
|
57
|
-
},
|
|
58
|
-
],
|
|
59
|
-
message: message,
|
|
60
|
-
});
|
|
61
|
-
return {
|
|
62
|
-
ref: commit.ref,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
async updateByTypeId(gitAdapter, branch, commitHash, type, id, data, message) {
|
|
66
|
-
const allEntries = await gitAdapter.getContentEntries(commitHash);
|
|
67
|
-
const requestedEntry = allEntries.filter((contentEntry) => contentEntry.id === id)[0];
|
|
68
|
-
if (requestedEntry === undefined || requestedEntry.metadata.type !== type) {
|
|
69
|
-
throw new Error(`Not found: ${type}, ${id}`);
|
|
70
|
-
}
|
|
71
|
-
const newData = Object.assign(Object.assign({}, requestedEntry.data), data);
|
|
72
|
-
const commit = await gitAdapter.createCommit({
|
|
73
|
-
ref: branch,
|
|
74
|
-
parentSha: commitHash,
|
|
75
|
-
contentEntries: [
|
|
76
|
-
{
|
|
77
|
-
id: id,
|
|
78
|
-
metadata: requestedEntry.metadata,
|
|
79
|
-
data: newData,
|
|
80
|
-
deletion: false,
|
|
81
|
-
},
|
|
82
|
-
],
|
|
83
|
-
message: message,
|
|
84
|
-
});
|
|
85
|
-
return {
|
|
86
|
-
ref: commit.ref,
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
async deleteByTypeId(gitAdapter, branch, commitHash, type, id, message) {
|
|
90
|
-
const allEntries = await gitAdapter.getContentEntries(commitHash);
|
|
91
|
-
const requestedEntry = allEntries.filter((contentEntry) => contentEntry.id === id)[0];
|
|
92
|
-
if (requestedEntry === undefined || requestedEntry.metadata.type !== type) {
|
|
93
|
-
throw new Error(`Not found: ${type}, ${id}`);
|
|
94
|
-
}
|
|
95
|
-
const commit = await gitAdapter.createCommit({
|
|
96
|
-
ref: branch,
|
|
97
|
-
parentSha: commitHash,
|
|
98
|
-
contentEntries: [
|
|
99
|
-
{
|
|
100
|
-
id: id,
|
|
101
|
-
metadata: requestedEntry.metadata,
|
|
102
|
-
data: {},
|
|
103
|
-
deletion: true,
|
|
104
|
-
},
|
|
105
|
-
],
|
|
106
|
-
message: message,
|
|
107
|
-
});
|
|
108
|
-
return {
|
|
109
|
-
ref: commit.ref,
|
|
110
|
-
};
|
|
45
|
+
return requestedEntry;
|
|
111
46
|
}
|
|
112
47
|
}
|
|
113
48
|
exports.PersistenceService = PersistenceService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.service.js","sourceRoot":"","sources":["../../src/persistence/persistence.service.ts"],"names":[],"mappings":";;;AACA,6DAAyD;AAEzD,MAAa,kBAAkB;IACtB,KAAK,CAAC,WAAW,CACtB,UAAsB,EACtB,UAAkB,EAClB,EAAU;QAEV,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"persistence.service.js","sourceRoot":"","sources":["../../src/persistence/persistence.service.ts"],"names":[],"mappings":";;;AACA,6DAAyD;AAEzD,MAAa,kBAAkB;IACtB,KAAK,CAAC,WAAW,CACtB,UAAsB,EACtB,UAAkB,EAClB,EAAU;QAEV,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QAC1D,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QACzE,IAAI,cAAc,KAAK,SAAS,EAAE;YAChC,MAAM,IAAI,2BAAY,CAAC,cAAc,EAAE,EAAE,EAAE;gBACzC,UAAU,EAAE;oBACV,IAAI,EAAE,WAAW;iBAClB;aACF,CAAC,CAAA;SACH;QAED,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAA;IACrC,CAAC;IAEM,KAAK,CAAC,QAAQ,CACnB,UAAsB,EACtB,UAAkB,EAClB,EAAU;QAEV,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QAC1D,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QACzE,IAAI,cAAc,KAAK,SAAS,EAAE;YAChC,MAAM,IAAI,2BAAY,CAAC,cAAc,EAAE,EAAE,EAAE;gBACzC,UAAU,EAAE;oBACV,IAAI,EAAE,WAAW;iBAClB;aACF,CAAC,CAAA;SACH;QAED,OAAO,cAAc,CAAA;IACvB,CAAC;IAEM,KAAK,CAAC,UAAU,CACrB,UAAsB,EACtB,UAAkB,EAClB,IAAY;QAEZ,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QAC1D,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IAC1E,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,UAAsB,EACtB,UAAkB,EAClB,IAAY,EACZ,EAAU;QAEV,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QAC1D,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CACpC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAClE,CAAA;QACD,IAAI,cAAc,KAAK,SAAS,EAAE;YAChC,MAAM,IAAI,2BAAY,CACpB,qBAAqB,IAAI,cAAc,EAAE,UAAU,EACnD;gBACE,UAAU,EAAE;oBACV,IAAI,EAAE,gBAAgB;oBACtB,YAAY,EAAE,IAAI;iBACnB;aACF,CACF,CAAA;SACF;QAED,OAAO,cAAc,CAAA;IACvB,CAAC;CACF;AAtED,gDAsEC"}
|