71 lines
1.9 KiB
TypeScript
71 lines
1.9 KiB
TypeScript
import {
|
|
getSchemaFromReference,
|
|
InternalLookup,
|
|
Lookup,
|
|
} from '@nx/nx-dev/data-access-packages';
|
|
import {
|
|
JsonSchema,
|
|
NxSchema,
|
|
ProcessedPackageMetadata,
|
|
SchemaMetadata,
|
|
} from '@nx/nx-dev/models-package';
|
|
import { ParsedUrlQuery } from 'querystring';
|
|
import { Errors, Example, generateJsonExampleFor } from './examples';
|
|
|
|
function getReferenceFromQuery(query: string): string {
|
|
return query.replace('root/', '#/');
|
|
}
|
|
|
|
export interface SchemaViewModel {
|
|
currentSchema: NxSchema | null;
|
|
currentSchemaExamples: Example | Errors;
|
|
deprecated: string;
|
|
hidden: boolean;
|
|
lookup: Lookup;
|
|
packageName: string;
|
|
packageUrl: string;
|
|
rootReference: string;
|
|
schemaGithubUrl: string;
|
|
schemaMetadata: SchemaMetadata;
|
|
subReference: string;
|
|
type: 'executor' | 'generator';
|
|
}
|
|
|
|
export function getSchemaViewModel(
|
|
routerQuery: ParsedUrlQuery,
|
|
pkg: ProcessedPackageMetadata,
|
|
schema: SchemaMetadata
|
|
): SchemaViewModel | null {
|
|
if (!schema.schema) return null;
|
|
|
|
return {
|
|
schemaMetadata: schema,
|
|
packageName: pkg.packageName,
|
|
packageUrl: `/packages/${pkg.name}`,
|
|
schemaGithubUrl: pkg.githubRoot + schema.path,
|
|
rootReference: '#',
|
|
subReference:
|
|
Object.prototype.hasOwnProperty.call(routerQuery, 'ref') &&
|
|
!Array.isArray(routerQuery['ref'])
|
|
? getReferenceFromQuery(String(routerQuery['ref']))
|
|
: '',
|
|
lookup: new InternalLookup(schema.schema as JsonSchema),
|
|
get currentSchema(): NxSchema | null {
|
|
return (
|
|
(getSchemaFromReference(this.rootReference, this.lookup) as NxSchema) ??
|
|
null
|
|
);
|
|
},
|
|
get currentSchemaExamples(): Example | Errors {
|
|
return generateJsonExampleFor(
|
|
this.schemaMetadata.schema as JsonSchema,
|
|
this.lookup,
|
|
'both'
|
|
);
|
|
},
|
|
hidden: schema.hidden,
|
|
deprecated: schema['x-deprecated'] || '',
|
|
type: schema.type,
|
|
};
|
|
}
|