@tsofist/schema-forge 1.0.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/LICENSE +21 -0
- package/README.md +20 -0
- package/lib/generator/schema-generator.d.ts +13 -0
- package/lib/generator/schema-generator.d.ts.map +1 -0
- package/lib/generator/schema-generator.js +39 -0
- package/lib/generator/schema-generator.js.map +1 -0
- package/lib/generator/types-generator.d.ts +13 -0
- package/lib/generator/types-generator.d.ts.map +1 -0
- package/lib/generator/types-generator.js +207 -0
- package/lib/generator/types-generator.js.map +1 -0
- package/lib/generator/types.d.ts +23 -0
- package/lib/generator/types.d.ts.map +1 -0
- package/lib/generator/types.js +18 -0
- package/lib/generator/types.js.map +1 -0
- package/lib/generator.d.ts +6 -0
- package/lib/generator.d.ts.map +1 -0
- package/lib/generator.js +96 -0
- package/lib/generator.js.map +1 -0
- package/lib/generator.spec.d.ts +2 -0
- package/lib/generator.spec.d.ts.map +1 -0
- package/lib/generator.spec.js +211 -0
- package/lib/generator.spec.js.map +1 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +57 -0
- package/lib/index.js.map +1 -0
- package/lib/tmp/p1.d.ts +232 -0
- package/lib/tmp/p1.d.ts.map +1 -0
- package/lib/tmp/p1.js +9 -0
- package/lib/tmp/p1.js.map +1 -0
- package/lib/tsconfig.build.tsbuildinfo +1 -0
- package/lib/types.d.ts +103 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +18 -0
- package/lib/types.js.map +1 -0
- package/lib/validator.d.ts +13 -0
- package/lib/validator.d.ts.map +1 -0
- package/lib/validator.js +86 -0
- package/lib/validator.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const promises_1 = require("node:fs/promises");
|
|
5
|
+
const error_1 = require("@tsofist/stem/lib/error");
|
|
6
|
+
const noop_1 = require("@tsofist/stem/lib/noop");
|
|
7
|
+
const generator_1 = require("./generator");
|
|
8
|
+
const types_1 = require("./types");
|
|
9
|
+
const validator_1 = require("./validator");
|
|
10
|
+
describe('generator for a3', () => {
|
|
11
|
+
const outputSchemaFile = './a3.generated.schema.tmp.json';
|
|
12
|
+
const outputDefinitionsFile = './a3.generated.definitions.tmp.json';
|
|
13
|
+
let forgeSchemaResult;
|
|
14
|
+
beforeAll(() => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
15
|
+
forgeSchemaResult = yield (0, generator_1.forgeSchema)({
|
|
16
|
+
tsconfigFrom: './tsconfig.build.json',
|
|
17
|
+
sourcesDirectoryPattern: 'test-sources/a3',
|
|
18
|
+
sourcesFilesPattern: 'service-api.ts',
|
|
19
|
+
outputSchemaFile,
|
|
20
|
+
outputDefinitionsFile,
|
|
21
|
+
});
|
|
22
|
+
}));
|
|
23
|
+
afterAll(() => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
24
|
+
yield (0, promises_1.unlink)(outputSchemaFile).catch(noop_1.noop);
|
|
25
|
+
yield (0, promises_1.unlink)(outputDefinitionsFile).catch(noop_1.noop);
|
|
26
|
+
}));
|
|
27
|
+
it('generated schema should be valid', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
28
|
+
expect(forgeSchemaResult).toBeTruthy();
|
|
29
|
+
}));
|
|
30
|
+
});
|
|
31
|
+
describe('generator for a2', () => {
|
|
32
|
+
const outputSchemaFile = './a2.generated.schema.tmp.json';
|
|
33
|
+
const outputDefinitionsFile = './a2.generated.definitions.tmp.json';
|
|
34
|
+
let forgeSchemaResult;
|
|
35
|
+
beforeAll(() => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
36
|
+
forgeSchemaResult = yield (0, generator_1.forgeSchema)({
|
|
37
|
+
tsconfigFrom: './tsconfig.build.json',
|
|
38
|
+
sourcesDirectoryPattern: 'test-sources/a2',
|
|
39
|
+
sourcesFilesPattern: 'service-api.ts',
|
|
40
|
+
outputSchemaFile,
|
|
41
|
+
outputDefinitionsFile,
|
|
42
|
+
});
|
|
43
|
+
}));
|
|
44
|
+
afterAll(() => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
45
|
+
yield (0, promises_1.unlink)(outputSchemaFile).catch(noop_1.noop);
|
|
46
|
+
yield (0, promises_1.unlink)(outputDefinitionsFile).catch(noop_1.noop);
|
|
47
|
+
}));
|
|
48
|
+
it('generated schema should be valid', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
49
|
+
expect(forgeSchemaResult).toBeTruthy();
|
|
50
|
+
}));
|
|
51
|
+
});
|
|
52
|
+
describe('generator for a1', () => {
|
|
53
|
+
const outputSchemaFile = './a1.generated.schema.tmp.json';
|
|
54
|
+
const outputDefinitionsFile = './a1.generated.definitions.tmp.json';
|
|
55
|
+
const schemaId = 'test';
|
|
56
|
+
let forgeSchemaResult;
|
|
57
|
+
let validator;
|
|
58
|
+
beforeAll(() => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
59
|
+
forgeSchemaResult = yield (0, generator_1.forgeSchema)({
|
|
60
|
+
allowUseFallbackDescription: false,
|
|
61
|
+
explicitPublic: true,
|
|
62
|
+
schemaId,
|
|
63
|
+
tsconfigFrom: './tsconfig.build.json',
|
|
64
|
+
sourcesDirectoryPattern: 'test-sources/a1',
|
|
65
|
+
sourcesFilesPattern: 'service.api.ts',
|
|
66
|
+
outputSchemaFile,
|
|
67
|
+
outputDefinitionsFile,
|
|
68
|
+
});
|
|
69
|
+
validator = (0, validator_1.createSchemaForgeValidator)({}, true);
|
|
70
|
+
const schema = yield (0, generator_1.loadJSONSchema)([outputSchemaFile]);
|
|
71
|
+
validator.addSchema(schema);
|
|
72
|
+
}), 10000);
|
|
73
|
+
afterAll(() => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
74
|
+
yield (0, promises_1.unlink)(outputSchemaFile).catch(noop_1.noop);
|
|
75
|
+
yield (0, promises_1.unlink)(outputDefinitionsFile).catch(noop_1.noop);
|
|
76
|
+
}));
|
|
77
|
+
it('generated schema should be valid', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
78
|
+
expect(forgeSchemaResult).toBeTruthy();
|
|
79
|
+
expect(forgeSchemaResult.schema.$id).toStrictEqual(schemaId);
|
|
80
|
+
expect(forgeSchemaResult.generatedFiles.length).toStrictEqual(1);
|
|
81
|
+
expect(forgeSchemaResult.refs.length).toStrictEqual(8);
|
|
82
|
+
}));
|
|
83
|
+
it('getSchema', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
84
|
+
expect(validator.getValidator('test#/definitions/Int').schema).toMatchObject({
|
|
85
|
+
type: 'integer',
|
|
86
|
+
});
|
|
87
|
+
expect(validator.getValidator('#/definitions/NotExists')).toStrictEqual(undefined);
|
|
88
|
+
}));
|
|
89
|
+
it('hasSchema', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
90
|
+
expect(validator.hasValidator('test#/definitions/Int')).toStrictEqual(true);
|
|
91
|
+
expect(validator.hasValidator('test#/definitions/!Int')).toStrictEqual(false);
|
|
92
|
+
}));
|
|
93
|
+
it('checkBySchema', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
94
|
+
expect(validator.checkBySchema('test#/definitions/Int', 1)).toStrictEqual(true);
|
|
95
|
+
expect(() => validator.checkBySchema('test#/definitions/Int', 1.1)).toThrow(types_1.SchemaForgeValidationErrorCode);
|
|
96
|
+
expect(() => validator.checkBySchema('!test#/definitions/Int', 1)).toThrow(types_1.SchemaNotFoundErrorCode);
|
|
97
|
+
{
|
|
98
|
+
const schema = '!test#/definitions/Int';
|
|
99
|
+
try {
|
|
100
|
+
validator.checkBySchema(schema, 1.1);
|
|
101
|
+
}
|
|
102
|
+
catch (e) {
|
|
103
|
+
const context = (0, error_1.readErrorContext)(e);
|
|
104
|
+
const code = (0, error_1.readErrorCode)(e);
|
|
105
|
+
expect(e.message).toStrictEqual(types_1.SchemaNotFoundErrorCode);
|
|
106
|
+
expect(code).toStrictEqual(types_1.SchemaNotFoundErrorCode);
|
|
107
|
+
expect(context).toBeTruthy();
|
|
108
|
+
expect(context.schema).toStrictEqual(schema);
|
|
109
|
+
expect(context.errorMessage).toStrictEqual(undefined);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
{
|
|
113
|
+
const schema = 'test#/definitions/Int';
|
|
114
|
+
const message = 'ERROR!';
|
|
115
|
+
try {
|
|
116
|
+
validator.checkBySchema(schema, 1.1, { errorMessage: message });
|
|
117
|
+
}
|
|
118
|
+
catch (e) {
|
|
119
|
+
const context = (0, error_1.readErrorContext)(e);
|
|
120
|
+
const code = (0, error_1.readErrorCode)(e);
|
|
121
|
+
expect(e.message).toStrictEqual(message);
|
|
122
|
+
expect(code).toStrictEqual(types_1.SchemaForgeValidationErrorCode);
|
|
123
|
+
expect(context).toBeTruthy();
|
|
124
|
+
expect(context.schema).toStrictEqual(schema);
|
|
125
|
+
expect(context.errorMessage).toStrictEqual(message);
|
|
126
|
+
expect(context.errors.length).toStrictEqual(1);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}));
|
|
130
|
+
it('listDefinitions', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
131
|
+
const defs = [
|
|
132
|
+
{
|
|
133
|
+
kind: 1,
|
|
134
|
+
name: 'ExportedInterfaceB_InterfaceDeclaration',
|
|
135
|
+
schema: 'test',
|
|
136
|
+
interface: 'ExportedInterfaceB',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
kind: 3,
|
|
140
|
+
name: 'ExportedInterfaceB_methodA_Args',
|
|
141
|
+
schema: 'test',
|
|
142
|
+
interface: 'ExportedInterfaceB',
|
|
143
|
+
method: 'methodA',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
kind: 2,
|
|
147
|
+
name: 'ExportedInterfaceB_methodA_Result',
|
|
148
|
+
schema: 'test',
|
|
149
|
+
interface: 'ExportedInterfaceB',
|
|
150
|
+
method: 'methodA',
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
kind: 3,
|
|
154
|
+
name: 'ExportedInterfaceB_methodB_Args',
|
|
155
|
+
schema: 'test',
|
|
156
|
+
interface: 'ExportedInterfaceB',
|
|
157
|
+
method: 'methodB',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
kind: 2,
|
|
161
|
+
name: 'ExportedInterfaceB_methodB_Result',
|
|
162
|
+
schema: 'test',
|
|
163
|
+
interface: 'ExportedInterfaceB',
|
|
164
|
+
method: 'methodB',
|
|
165
|
+
},
|
|
166
|
+
{ kind: 0, name: 'Int', schema: 'test', type: 'Int' },
|
|
167
|
+
{
|
|
168
|
+
kind: 1,
|
|
169
|
+
name: 'NonExportedInterfaceD_InterfaceDeclaration',
|
|
170
|
+
schema: 'test',
|
|
171
|
+
interface: 'NonExportedInterfaceD',
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
kind: 3,
|
|
175
|
+
name: 'NonExportedInterfaceD_methodA_Args',
|
|
176
|
+
schema: 'test',
|
|
177
|
+
interface: 'NonExportedInterfaceD',
|
|
178
|
+
method: 'methodA',
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
kind: 2,
|
|
182
|
+
name: 'NonExportedInterfaceD_methodA_Result',
|
|
183
|
+
schema: 'test',
|
|
184
|
+
interface: 'NonExportedInterfaceD',
|
|
185
|
+
method: 'methodA',
|
|
186
|
+
},
|
|
187
|
+
{ kind: 0, name: 'PositiveInt', schema: 'test', type: 'PositiveInt' },
|
|
188
|
+
];
|
|
189
|
+
const defsByName = {};
|
|
190
|
+
for (const def of defs) {
|
|
191
|
+
defsByName[def.name] = def;
|
|
192
|
+
}
|
|
193
|
+
expect(validator.listDefinitions()).toStrictEqual(defs);
|
|
194
|
+
expect(validator.listDefinitions((info) => info.kind === types_1.SchemaDefinitionKind.Type)).toStrictEqual([defsByName['Int'], defsByName['PositiveInt']]);
|
|
195
|
+
expect(validator.listDefinitions((info) => info.kind === types_1.SchemaDefinitionKind.Interface)).toStrictEqual([
|
|
196
|
+
defsByName['ExportedInterfaceB_InterfaceDeclaration'],
|
|
197
|
+
defsByName['NonExportedInterfaceD_InterfaceDeclaration'],
|
|
198
|
+
]);
|
|
199
|
+
expect(validator.listDefinitions((info) => info.kind === types_1.SchemaDefinitionKind.InterfaceMethodResult)).toStrictEqual([
|
|
200
|
+
defsByName['ExportedInterfaceB_methodA_Result'],
|
|
201
|
+
defsByName['ExportedInterfaceB_methodB_Result'],
|
|
202
|
+
defsByName['NonExportedInterfaceD_methodA_Result'],
|
|
203
|
+
]);
|
|
204
|
+
expect(validator.listDefinitions((info) => info.kind === types_1.SchemaDefinitionKind.InterfaceMethodArguments)).toStrictEqual([
|
|
205
|
+
defsByName['ExportedInterfaceB_methodA_Args'],
|
|
206
|
+
defsByName['ExportedInterfaceB_methodB_Args'],
|
|
207
|
+
defsByName['NonExportedInterfaceD_methodA_Args'],
|
|
208
|
+
]);
|
|
209
|
+
}));
|
|
210
|
+
});
|
|
211
|
+
//# sourceMappingURL=generator.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.spec.js","sourceRoot":"","sources":["../src/generator.spec.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SchemaDefinitionInfo, SchemaForgeSignatureSuffix } from './types';
|
|
2
|
+
export declare function buildInterfaceSchemaSignature(interfaceName: string): string;
|
|
3
|
+
export declare function buildInterfaceSchemaSignature(interfaceName: string, memberName: string): string;
|
|
4
|
+
export declare function buildInterfaceSchemaSignature(interfaceName: string, methodName: string, suffix: SchemaForgeSignatureSuffix): string;
|
|
5
|
+
export declare function parseSchemaDefinitionInfo(name: string, schema: string): SchemaDefinitionInfo;
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAwB,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAMjG,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;AAC7E,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;AACjG,wBAAgB,6BAA6B,CACzC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,0BAA0B,GACnC,MAAM,CAAC;AAkBV,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAiC5F"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseSchemaDefinitionInfo = exports.buildInterfaceSchemaSignature = void 0;
|
|
4
|
+
const substr_1 = require("@tsofist/stem/lib/string/substr");
|
|
5
|
+
const types_1 = require("./types");
|
|
6
|
+
const N_I = '_InterfaceDeclaration';
|
|
7
|
+
const N_A = '_Args';
|
|
8
|
+
const N_R = '_Result';
|
|
9
|
+
function buildInterfaceSchemaSignature(interfaceName, memberName, suffix) {
|
|
10
|
+
let result = `${interfaceName}${memberName ? `_${memberName}` : N_I}`;
|
|
11
|
+
switch (suffix) {
|
|
12
|
+
case types_1.SchemaForgeSignatureSuffix.MethodArguments:
|
|
13
|
+
result += N_A;
|
|
14
|
+
break;
|
|
15
|
+
case types_1.SchemaForgeSignatureSuffix.MethodResult:
|
|
16
|
+
result += N_R;
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
exports.buildInterfaceSchemaSignature = buildInterfaceSchemaSignature;
|
|
22
|
+
function parseSchemaDefinitionInfo(name, schema) {
|
|
23
|
+
const kind = name.endsWith(N_I)
|
|
24
|
+
? types_1.SchemaDefinitionKind.Interface
|
|
25
|
+
: name.endsWith(N_A)
|
|
26
|
+
? types_1.SchemaDefinitionKind.InterfaceMethodArguments
|
|
27
|
+
: name.endsWith(N_R)
|
|
28
|
+
? types_1.SchemaDefinitionKind.InterfaceMethodResult
|
|
29
|
+
: types_1.SchemaDefinitionKind.Type;
|
|
30
|
+
switch (kind) {
|
|
31
|
+
case types_1.SchemaDefinitionKind.Interface:
|
|
32
|
+
return {
|
|
33
|
+
kind,
|
|
34
|
+
name,
|
|
35
|
+
schema,
|
|
36
|
+
interface: (0, substr_1.substr)(name, 0, N_I),
|
|
37
|
+
};
|
|
38
|
+
case types_1.SchemaDefinitionKind.InterfaceMethodArguments:
|
|
39
|
+
case types_1.SchemaDefinitionKind.InterfaceMethodResult:
|
|
40
|
+
return {
|
|
41
|
+
kind,
|
|
42
|
+
name,
|
|
43
|
+
schema,
|
|
44
|
+
interface: (0, substr_1.substr)(name, 0, '_'),
|
|
45
|
+
method: (0, substr_1.substr)(name, '_', '_'),
|
|
46
|
+
};
|
|
47
|
+
case types_1.SchemaDefinitionKind.Type:
|
|
48
|
+
return {
|
|
49
|
+
kind,
|
|
50
|
+
name,
|
|
51
|
+
schema,
|
|
52
|
+
type: name,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.parseSchemaDefinitionInfo = parseSchemaDefinitionInfo;
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,4DAAyD;AACzD,mCAAiG;AAEjG,MAAM,GAAG,GAAG,uBAAuB,CAAC;AACpC,MAAM,GAAG,GAAG,OAAO,CAAC;AACpB,MAAM,GAAG,GAAG,SAAS,CAAC;AAStB,SAAgB,6BAA6B,CACzC,aAAqB,EACrB,UAAmB,EACnB,MAAmC;IAEnC,IAAI,MAAM,GAAG,GAAG,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACtE,QAAQ,MAAM,EAAE,CAAC;QACb,KAAK,kCAA0B,CAAC,eAAe;YAC3C,MAAM,IAAI,GAAG,CAAC;YACd,MAAM;QACV,KAAK,kCAA0B,CAAC,YAAY;YACxC,MAAM,IAAI,GAAG,CAAC;YACd,MAAM;IACd,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAfD,sEAeC;AAED,SAAgB,yBAAyB,CAAC,IAAY,EAAE,MAAc;IAClE,MAAM,IAAI,GAAyB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QACjD,CAAC,CAAC,4BAAoB,CAAC,SAAS;QAChC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAClB,CAAC,CAAC,4BAAoB,CAAC,wBAAwB;YAC/C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAClB,CAAC,CAAC,4BAAoB,CAAC,qBAAqB;gBAC5C,CAAC,CAAC,4BAAoB,CAAC,IAAI,CAAC;IACpC,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,4BAAoB,CAAC,SAAS;YAC/B,OAAO;gBACH,IAAI;gBACJ,IAAI;gBACJ,MAAM;gBACN,SAAS,EAAE,IAAA,eAAM,EAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAE;aACnC,CAAC;QACN,KAAK,4BAAoB,CAAC,wBAAwB,CAAC;QACnD,KAAK,4BAAoB,CAAC,qBAAqB;YAC3C,OAAO;gBACH,IAAI;gBACJ,IAAI;gBACJ,MAAM;gBACN,SAAS,EAAE,IAAA,eAAM,EAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAE;gBAChC,MAAM,EAAE,IAAA,eAAM,EAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAE;aAClC,CAAC;QACN,KAAK,4BAAoB,CAAC,IAAI;YAC1B,OAAO;gBACH,IAAI;gBACJ,IAAI;gBACJ,MAAM;gBACN,IAAI,EAAE,IAAI;aACb,CAAC;IACV,CAAC;AACL,CAAC;AAjCD,8DAiCC"}
|
package/lib/tmp/p1.d.ts
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { ArrayMay, NonEmptyString } from '@tsofist/stem';
|
|
2
|
+
import { UUID } from '@tsofist/stem/lib/crypto/uuid';
|
|
3
|
+
/**
|
|
4
|
+
* Пакет данных от любого внешнего клиента к шлюзу
|
|
5
|
+
* Контекст запроса определяется ресурсом, заданным в URL pathname.
|
|
6
|
+
*
|
|
7
|
+
* Запрос всегда валидируется средствами gw по сгенерированной JSON-схеме,
|
|
8
|
+
* что позволяет не валидировать его повторно внутри сервиса.
|
|
9
|
+
*
|
|
10
|
+
* Всегда очень легко представить на примере сервиса (pathname),
|
|
11
|
+
* у которого есть методы (action),
|
|
12
|
+
* которые принимают аргументы, перечисленные по порядку (args).
|
|
13
|
+
*/
|
|
14
|
+
export interface InternetToGateway<TAction extends string, TArgs extends any[]> {
|
|
15
|
+
/**
|
|
16
|
+
* Название действия
|
|
17
|
+
* @example getList
|
|
18
|
+
*/
|
|
19
|
+
action: TAction;
|
|
20
|
+
/**
|
|
21
|
+
* Аргументы действия
|
|
22
|
+
* Это всегда массив произвольных данных
|
|
23
|
+
*/
|
|
24
|
+
args: TArgs;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Пакет данных от шлюза к сервису
|
|
28
|
+
* Контекст запроса определяется ресурсом, заданным в URL pathname
|
|
29
|
+
*
|
|
30
|
+
* Запрос всегда валидируется средствами gw по сгенерированной JSON-схеме,
|
|
31
|
+
* что позволяет не валидировать его повторно внутри сервиса.
|
|
32
|
+
*/
|
|
33
|
+
export interface GatewayToService {
|
|
34
|
+
/**
|
|
35
|
+
* Название действия
|
|
36
|
+
* @example getList
|
|
37
|
+
*/
|
|
38
|
+
action: NonEmptyString;
|
|
39
|
+
/**
|
|
40
|
+
* Аргументы действия
|
|
41
|
+
* Это всегда массив произвольных данных
|
|
42
|
+
*/
|
|
43
|
+
args: unknown[];
|
|
44
|
+
/**
|
|
45
|
+
* TransactionID
|
|
46
|
+
* Идентификатор отслеживания запроса
|
|
47
|
+
*
|
|
48
|
+
* Этот идентификатор всегда сохраняется при передаче запроса от gw к сервису
|
|
49
|
+
* и от сервиса к gw
|
|
50
|
+
*/
|
|
51
|
+
tid: UUID;
|
|
52
|
+
/**
|
|
53
|
+
* Изначальная временная метка формирования запроса от клиента
|
|
54
|
+
*/
|
|
55
|
+
timestamp: number;
|
|
56
|
+
/**
|
|
57
|
+
* Контекст выполнения запроса
|
|
58
|
+
* Всегда формируется на стороне gw
|
|
59
|
+
*/
|
|
60
|
+
context: {
|
|
61
|
+
/**
|
|
62
|
+
* Предпочитаемый язык клиента
|
|
63
|
+
*/
|
|
64
|
+
lang: string;
|
|
65
|
+
/**
|
|
66
|
+
* Вызывающая сторона
|
|
67
|
+
*/
|
|
68
|
+
actor: {
|
|
69
|
+
/**
|
|
70
|
+
* Данные идентификации клиента
|
|
71
|
+
* Данные формируются при первичном вызове,
|
|
72
|
+
* могут быть заморожены на весь период отслеживания,
|
|
73
|
+
* а могут актуализироваться в зависимости от указанной политики
|
|
74
|
+
*/
|
|
75
|
+
auth: {
|
|
76
|
+
/**
|
|
77
|
+
* Способ входа
|
|
78
|
+
*/
|
|
79
|
+
provider: string;
|
|
80
|
+
/**
|
|
81
|
+
* Уникальный идентификатор поставщика способа входа
|
|
82
|
+
*/
|
|
83
|
+
authority: string;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Домены, в которых работает клиент
|
|
87
|
+
*/
|
|
88
|
+
domains: string[];
|
|
89
|
+
/**
|
|
90
|
+
* Уникальный идентификатор пользователя
|
|
91
|
+
*/
|
|
92
|
+
user: UUID;
|
|
93
|
+
/**
|
|
94
|
+
* Список актуальных ролей пользователя
|
|
95
|
+
* @example ['domain1:admin', 'domain1:user', 'domain2:user']
|
|
96
|
+
*/
|
|
97
|
+
roles: string[];
|
|
98
|
+
/**
|
|
99
|
+
* Полный список всех привилегий запрошенных в манифесте сервиса для конкретного запроса
|
|
100
|
+
* @example
|
|
101
|
+
* [
|
|
102
|
+
* 'domain1:updateUsers',
|
|
103
|
+
* 'domain1:deleteUsers',
|
|
104
|
+
* 'domain2:manageBookings'
|
|
105
|
+
* ]
|
|
106
|
+
*/
|
|
107
|
+
privileges: string[];
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Информация о запросе от клиента
|
|
111
|
+
*/
|
|
112
|
+
request: {
|
|
113
|
+
/**
|
|
114
|
+
* Непосредственный IP-адрес вызывающей стороны
|
|
115
|
+
* Это может быть внутренний адрес любого сервиса системы
|
|
116
|
+
*/
|
|
117
|
+
ip: string;
|
|
118
|
+
/**
|
|
119
|
+
* Настоящий IP-адрес клиента заверенный проксирующими сервисами
|
|
120
|
+
* (например ingress-контроллером)
|
|
121
|
+
*/
|
|
122
|
+
realIp: string;
|
|
123
|
+
/**
|
|
124
|
+
* Адрес, по которому был получен запрос
|
|
125
|
+
* Если клиент вызывал /api/gw/mobile - то это будет /gw/mobile
|
|
126
|
+
*/
|
|
127
|
+
gateway: string;
|
|
128
|
+
/**
|
|
129
|
+
* Тип шлюза, через который принял запрос
|
|
130
|
+
* Каждый gw имеет свой тип, определяемый в его манифесте
|
|
131
|
+
*/
|
|
132
|
+
gatewayKind: string;
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
interface Rules {
|
|
137
|
+
/**
|
|
138
|
+
* Описание политики перенаправления запроса от Сервиса к Сервису через GW
|
|
139
|
+
*/
|
|
140
|
+
forwardPolicy?: {
|
|
141
|
+
/**
|
|
142
|
+
* Политика обновления авторизационного контекста клиента
|
|
143
|
+
* Контекст можно хранить весь период отслеживания запроса,
|
|
144
|
+
* либо обновлять его при каждом перенаправлении
|
|
145
|
+
* @default keep
|
|
146
|
+
*/
|
|
147
|
+
access?: 'keep' | 'renew';
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* Описание привилегий клиента, сопровождающих запрос
|
|
151
|
+
*/
|
|
152
|
+
privileges?: {
|
|
153
|
+
/**
|
|
154
|
+
* Позволить клиенту выполнять запрос без каких-либо привилегий
|
|
155
|
+
* Явно указывается что у пользователя может не быть никаких привилегий,
|
|
156
|
+
* но при этом пользователь должен быть авторизован (зарегистрирован в системе)
|
|
157
|
+
*/
|
|
158
|
+
zero?: true;
|
|
159
|
+
/**
|
|
160
|
+
* Политика наследования привилегий из контекста, что описан выше
|
|
161
|
+
* Можно расширять список от родителя, а можно его полностью переопределить
|
|
162
|
+
*/
|
|
163
|
+
policy?: 'override' | 'extend';
|
|
164
|
+
/**
|
|
165
|
+
* Список привилегий, которые обязательно должны быть у пользователя
|
|
166
|
+
* Каждый элемент списка относится друг к другу как И,
|
|
167
|
+
* но при этом если элемент списка это список,
|
|
168
|
+
* то каждый внутренний элемент относится к соседу как ИЛИ
|
|
169
|
+
*/
|
|
170
|
+
mandatory?: ArrayMay<string>[];
|
|
171
|
+
/**
|
|
172
|
+
* Список привилегий, которые будут выгружены из считаны из аккаунта пользователя
|
|
173
|
+
* и будут переданы в сервис вместе с этом пакетом данных
|
|
174
|
+
* Конечный сервис получит информацию по всем привилегиям, которые указаны в этом списке
|
|
175
|
+
* и в списке обязательных привилегий тоже
|
|
176
|
+
*/
|
|
177
|
+
requested?: string[];
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* API манифест сервиса
|
|
182
|
+
* Описывается на уровне GW
|
|
183
|
+
*/
|
|
184
|
+
export interface GatewayResourceManifest extends Rules {
|
|
185
|
+
/**
|
|
186
|
+
* Уникальный идентификатор, позволяющий определять хуки для конкретного ресурса
|
|
187
|
+
* Причем как для всего ресурса, так и для конкретного действия
|
|
188
|
+
*/
|
|
189
|
+
id: string;
|
|
190
|
+
/**
|
|
191
|
+
* Ресурс, к которому привязан манифест
|
|
192
|
+
* @example
|
|
193
|
+
* auth/users
|
|
194
|
+
* bookings
|
|
195
|
+
* auth/roles
|
|
196
|
+
*/
|
|
197
|
+
resource: string;
|
|
198
|
+
/**
|
|
199
|
+
* Сигнатура схемы для валидатора запросов
|
|
200
|
+
* Для каждого действия будет запрашиваться схема по этому идентификатору.
|
|
201
|
+
*
|
|
202
|
+
* Например, если сервис это Service1API, а действие это getList, то будет запрошена схема для аргументов по идентификатору
|
|
203
|
+
* Service1API_doSomething1_Args
|
|
204
|
+
*
|
|
205
|
+
* и схема для результата по идентификатору
|
|
206
|
+
* Service1API_doSomething1_Result
|
|
207
|
+
*
|
|
208
|
+
*
|
|
209
|
+
* Вся спецификация действия будет доступна по идентификатору
|
|
210
|
+
* Service1API_InterfaceDeclaration
|
|
211
|
+
* где будут перечислены все доступные для сервиса действия, сигнатуры их аргументов и их результатов
|
|
212
|
+
*
|
|
213
|
+
*
|
|
214
|
+
* При этом арность аргументов действий тоже будет валидироваться
|
|
215
|
+
*
|
|
216
|
+
* @example Service1API
|
|
217
|
+
*/
|
|
218
|
+
schema: `${string}API`;
|
|
219
|
+
/**
|
|
220
|
+
* Внутрисетевой origin сервиса на который будут перенаправляться запросы
|
|
221
|
+
* tcp пока под вопросом
|
|
222
|
+
*/
|
|
223
|
+
service: `tcp://${string}` | `http://${string}`;
|
|
224
|
+
/**
|
|
225
|
+
* Правила для каждого действия над ресурсом
|
|
226
|
+
*/
|
|
227
|
+
actions: {
|
|
228
|
+
[name: string]: Rules;
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
export {};
|
|
232
|
+
//# sourceMappingURL=p1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p1.d.ts","sourceRoot":"","sources":["../../src/tmp/p1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAErD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB,CAAC,OAAO,SAAS,MAAM,EAAE,KAAK,SAAS,GAAG,EAAE;IAC1E;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,IAAI,EAAE,KAAK,CAAC;CACf;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC7B;;;OAGG;IACH,MAAM,EAAE,cAAc,CAAC;IACvB;;;OAGG;IACH,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB;;;;;;OAMG;IACH,GAAG,EAAE,IAAI,CAAC;IACV;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,OAAO,EAAE;QACL;;WAEG;QACH,IAAI,EAAE,MAAM,CAAC;QACb;;WAEG;QACH,KAAK,EAAE;YACH;;;;;eAKG;YACH,IAAI,EAAE;gBACF;;mBAEG;gBACH,QAAQ,EAAE,MAAM,CAAC;gBACjB;;mBAEG;gBACH,SAAS,EAAE,MAAM,CAAC;aACrB,CAAC;YACF;;eAEG;YACH,OAAO,EAAE,MAAM,EAAE,CAAC;YAClB;;eAEG;YACH,IAAI,EAAE,IAAI,CAAC;YACX;;;eAGG;YACH,KAAK,EAAE,MAAM,EAAE,CAAC;YAChB;;;;;;;;eAQG;YACH,UAAU,EAAE,MAAM,EAAE,CAAC;SACxB,CAAC;QACF;;WAEG;QACH,OAAO,EAAE;YACL;;;eAGG;YACH,EAAE,EAAE,MAAM,CAAC;YACX;;;eAGG;YACH,MAAM,EAAE,MAAM,CAAC;YACf;;;eAGG;YACH,OAAO,EAAE,MAAM,CAAC;YAChB;;;eAGG;YACH,WAAW,EAAE,MAAM,CAAC;SACvB,CAAC;KACL,CAAC;CACL;AAED,UAAU,KAAK;IACX;;OAEG;IACH,aAAa,CAAC,EAAE;QACZ;;;;;WAKG;QACH,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KAC7B,CAAC;IACF;;OAEG;IACH,UAAU,CAAC,EAAE;QACT;;;;WAIG;QACH,IAAI,CAAC,EAAE,IAAI,CAAC;QACZ;;;WAGG;QACH,MAAM,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;QAC/B;;;;;WAKG;QACH,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B;;;;;WAKG;QACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;CACL;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAwB,SAAQ,KAAK;IAClD;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;;;;;OAMG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC;IACvB;;;OAGG;IACH,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,MAAM,EAAE,CAAC;IAChD;;OAEG;IACH,OAAO,EAAE;QACL,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;KACzB,CAAC;CACL"}
|
package/lib/tmp/p1.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p1.js","sourceRoot":"","sources":["../../src/tmp/p1.ts"],"names":[],"mappings":";;AA2OA,OAAO;AACP,4BAA4B;AAC5B,gBAAgB;AAChB,yBAAyB;AACzB,iBAAiB;AACjB,IAAI"}
|