nx/nx-dev/feature-package-schema-viewer/src/lib/get-schema-view-model.ts

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,
};
}