mirror of
https://github.com/Redocly/redoc.git
synced 2024-11-29 12:03:44 +03:00
Fix e2e tests + minor refactoring
This commit is contained in:
parent
34d8230f8b
commit
d3ef8f003c
|
@ -46,7 +46,7 @@ export class JsonSchemaLazy implements OnDestroy, AfterViewInit {
|
||||||
}
|
}
|
||||||
|
|
||||||
load() {
|
load() {
|
||||||
if (this.optionsService.options.disableLazySchemas) return;
|
if (this.disableLazy) return;
|
||||||
if (this.loaded) return;
|
if (this.loaded) return;
|
||||||
if (this.pointer) {
|
if (this.pointer) {
|
||||||
this._loadAfterSelf();
|
this._loadAfterSelf();
|
||||||
|
|
|
@ -47,7 +47,8 @@ export class JsonSchema extends BaseComponent implements OnInit {
|
||||||
|
|
||||||
this.pointer = activeDescendant.$ref;
|
this.pointer = activeDescendant.$ref;
|
||||||
this.schema = this.specMgr.byPointer(this.pointer);
|
this.schema = this.specMgr.byPointer(this.pointer);
|
||||||
this.schema = this.normalizer.normalize(this.schema, this.normPointer, {omitParent: false});
|
this.schema = this.normalizer.normalize(this.schema, this.normPointer,
|
||||||
|
{resolved: true});
|
||||||
this.preprocessSchema();
|
this.preprocessSchema();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +81,7 @@ export class JsonSchema extends BaseComponent implements OnInit {
|
||||||
|
|
||||||
this.applyStyling();
|
this.applyStyling();
|
||||||
|
|
||||||
this.schema = this.normalizer.normalize(this.schema, this.normPointer);
|
this.schema = this.normalizer.normalize(this.schema, this.normPointer, {resolved: true});
|
||||||
this.schema = SchemaHelper.unwrapArray(this.schema, this.normPointer);
|
this.schema = SchemaHelper.unwrapArray(this.schema, this.normPointer);
|
||||||
this.initDescendants();
|
this.initDescendants();
|
||||||
this.preprocessSchema();
|
this.preprocessSchema();
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
<div class="body-param-description" [innerHtml]="bodyParam.description | marked"></div>
|
<div class="body-param-description" [innerHtml]="bodyParam.description | marked"></div>
|
||||||
<div>
|
<div>
|
||||||
<br>
|
<br>
|
||||||
<json-schema-lazy [isRequestSchema]="true" [auto]="true" pointer="{{bodyParam.pointer}}/schema">
|
<json-schema-lazy [isRequestSchema]="true" [auto]="true" pointer="{{bodyParam._pointer}}/schema">
|
||||||
</json-schema-lazy>
|
</json-schema-lazy>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -40,7 +40,6 @@ export class ParamsList extends BaseComponent implements OnInit {
|
||||||
|
|
||||||
if (paramsMap.body && paramsMap.body.length) {
|
if (paramsMap.body && paramsMap.body.length) {
|
||||||
let bodyParam = paramsMap.body[0];
|
let bodyParam = paramsMap.body[0];
|
||||||
bodyParam.pointer = bodyParam._pointer;
|
|
||||||
this.bodyParam = bodyParam;
|
this.bodyParam = bodyParam;
|
||||||
paramsMap.body = undefined;
|
paramsMap.body = undefined;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,17 +24,20 @@ export class SchemaNormalizer {
|
||||||
this._dereferencer = new SchemaDereferencer(_schema, this);
|
this._dereferencer = new SchemaDereferencer(_schema, this);
|
||||||
}
|
}
|
||||||
normalize(schema, ptr, opts:any ={}) {
|
normalize(schema, ptr, opts:any ={}) {
|
||||||
opts.omitParent = opts.omitParent !== false;
|
let hasPtr = !!schema.$ref;
|
||||||
|
if (opts.resolved && !hasPtr) this._dereferencer.visit(ptr);
|
||||||
|
|
||||||
if (schema['x-redoc-normalized']) return schema;
|
if (schema['x-redoc-normalized']) return schema;
|
||||||
let res = SchemaWalker.walk(schema, ptr, (subSchema, ptr) => {
|
let res = SchemaWalker.walk(schema, ptr, (subSchema, ptr) => {
|
||||||
let resolved = this._dereferencer.dereference(subSchema, ptr);
|
let resolved = this._dereferencer.dereference(subSchema, ptr);
|
||||||
if (resolved.allOf) {
|
if (resolved.allOf) {
|
||||||
resolved._pointer = resolved._pointer || ptr;
|
resolved._pointer = resolved._pointer || ptr;
|
||||||
resolved = Object.assign({}, resolved);
|
resolved = Object.assign({}, resolved);
|
||||||
AllOfMerger.merge(resolved, resolved.allOf, {omitParent: opts.omitParent});
|
AllOfMerger.merge(resolved, resolved.allOf);
|
||||||
}
|
}
|
||||||
return resolved;
|
return resolved;
|
||||||
});
|
});
|
||||||
|
if (opts.resolved && !hasPtr) this._dereferencer.exit(ptr);
|
||||||
res['x-redoc-normalized'] = true;
|
res['x-redoc-normalized'] = true;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -88,12 +91,11 @@ class SchemaWalker {
|
||||||
}
|
}
|
||||||
|
|
||||||
class AllOfMerger {
|
class AllOfMerger {
|
||||||
static merge(into, schemas, opts) {
|
static merge(into, schemas) {
|
||||||
into['x-derived-from'] = [];
|
into['x-derived-from'] = [];
|
||||||
for (let i=0; i < schemas.length; i++) {
|
for (let i=0; i < schemas.length; i++) {
|
||||||
let subSchema = schemas[i];
|
let subSchema = schemas[i];
|
||||||
into['x-derived-from'].push(subSchema._pointer);
|
into['x-derived-from'].push(subSchema._pointer);
|
||||||
if (opts && opts.omitParent && subSchema.discriminator) continue;
|
|
||||||
|
|
||||||
AllOfMerger.checkCanMerge(subSchema, into);
|
AllOfMerger.checkCanMerge(subSchema, into);
|
||||||
|
|
||||||
|
@ -177,6 +179,14 @@ class SchemaDereferencer {
|
||||||
constructor(private _spec: SpecManager, private normalizator: SchemaNormalizer) {
|
constructor(private _spec: SpecManager, private normalizator: SchemaNormalizer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
visit($ref) {
|
||||||
|
this._refCouner.visit($ref);
|
||||||
|
}
|
||||||
|
|
||||||
|
exit($ref) {
|
||||||
|
this._refCouner.exit($ref);
|
||||||
|
}
|
||||||
|
|
||||||
dereference(schema: Reference, pointer:string):any {
|
dereference(schema: Reference, pointer:string):any {
|
||||||
if (!schema || !schema.$ref) return schema;
|
if (!schema || !schema.$ref) return schema;
|
||||||
window['derefCount'] = window['derefCount'] ? window['derefCount'] + 1 : 1;
|
window['derefCount'] = window['derefCount'] ? window['derefCount'] + 1 : 1;
|
||||||
|
|
|
@ -91,7 +91,6 @@ if (process.env.JOB === 'e2e-guru') {
|
||||||
delete apisGuruList['googleapis.com:mirror']; // bad urls in images
|
delete apisGuruList['googleapis.com:mirror']; // bad urls in images
|
||||||
delete apisGuruList['googleapis.com:discovery']; // non-string references
|
delete apisGuruList['googleapis.com:discovery']; // non-string references
|
||||||
delete apisGuruList['clarify.io']; // non-string references
|
delete apisGuruList['clarify.io']; // non-string references
|
||||||
delete apisGuruList['clickmeter.com']; // some complex circular reference
|
|
||||||
//delete apisGuruList['pushpay.com']; // https://github.com/Rebilly/ReDoc/issues/30
|
//delete apisGuruList['pushpay.com']; // https://github.com/Rebilly/ReDoc/issues/30
|
||||||
delete apisGuruList['bbci.co.uk']; // too big
|
delete apisGuruList['bbci.co.uk']; // too big
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user