schema-dts-gen
Version:
Generate TypeScript Definitions for Schema.org Schema
97 lines • 5.29 kB
JavaScript
import ts from 'typescript';
const { factory, SyntaxKind, ModifierFlags } = ts;
import { WithActionConstraintsType, InputActionConstraintsType, OutputActionConstraintsType, } from './action_constraints.js';
import { arrayOf } from './util/arrayof.js';
import { withComments } from './util/comments.js';
import { typeUnion } from './util/union.js';
function WithContextType(context) {
// export interface WithContext<T extends JsonLdObject | string> extends Exclude<T, string> { "@context": TYPE_NODE }
return withComments('Used at the top-level node to indicate the context for the JSON-LD ' +
'objects used. The context provided in this type is compatible ' +
'with the keys and URLs in the rest of this generated file.', factory.createTypeAliasDeclaration(factory.createModifiersFromModifierFlags(ModifierFlags.Export), 'WithContext', [
factory.createTypeParameterDeclaration(
/*modifiers=*/ [], 'T' /*constraint=*/, factory.createUnionTypeNode([
factory.createTypeReferenceNode('JsonLdObject',
/*typeArguments=*/ undefined),
factory.createKeywordTypeNode(SyntaxKind.StringKeyword),
])),
], factory.createIntersectionTypeNode([
factory.createTypeReferenceNode('T', /*typeArguments=*/ undefined),
factory.createTypeLiteralNode([context.contextProperty()]),
])));
}
function GraphType(context) {
return withComments('', factory.createInterfaceDeclaration(factory.createModifiersFromModifierFlags(ModifierFlags.Export), GraphTypeName,
/*typeParameters=*/ undefined,
/*heritageClauses=*/ undefined, [
context.contextProperty(),
factory.createPropertySignature(
/*modifiers=*/ [], factory.createStringLiteral('@graph'),
/*questionToken=*/ undefined, factory.createTypeOperatorNode(SyntaxKind.ReadonlyKeyword, factory.createArrayTypeNode(factory.createTypeReferenceNode('Thing',
/*typeArguments=*/ undefined)))),
]));
}
const SchemaValueName = 'SchemaValue';
const MergeLeafTypesName = 'MergeLeafTypes';
export const IdReferenceName = 'IdReference';
export const GraphTypeName = 'Graph';
export function SchemaValueReference({ hasRole }, makeScalarType, propertyName) {
return factory.createTypeReferenceNode(SchemaValueName,
/* typeArguments = */ arrayOf(makeScalarType(), hasRole &&
factory.createLiteralTypeNode(factory.createStringLiteral(propertyName))));
}
export function HelperTypes(context, { hasRole }) {
return [
factory.createImportDeclaration(
/*modifiers=*/ [], factory.createImportClause(SyntaxKind.TypeKeyword,
/*name=*/ undefined, factory.createNamedImports([
factory.createImportSpecifier(
/*isTypeOnly=*/ false,
/*propertyName=*/ undefined,
/*name=*/ factory.createIdentifier('JsonLdObject')),
factory.createImportSpecifier(
/*isTypeOnly=*/ false,
/*propertyName=*/ undefined,
/*name=*/ factory.createIdentifier('IdReference')),
factory.createImportSpecifier(
/*isTypeOnly=*/ false,
/*propertyName=*/ undefined,
/*name=*/ factory.createIdentifier(MergeLeafTypesName)),
])), factory.createStringLiteral('schema-dts-lib')),
factory.createExportDeclaration(
/*modifiers=*/ [],
/*isTypeOnly=*/ true, factory.createNamedExports([
factory.createExportSpecifier(
/*isTypeOnly=*/ false,
/*propertyName=*/ undefined,
/*name=*/ factory.createIdentifier('JsonLdObject')),
factory.createExportSpecifier(
/*isTypeOnly=*/ false,
/*propertyName=*/ undefined,
/*name=*/ factory.createIdentifier('IdReference')),
factory.createExportSpecifier(
/*isTypeOnly=*/ false,
/*propertyName=*/ undefined,
/*name=*/ factory.createIdentifier(MergeLeafTypesName)),
])),
WithContextType(context),
GraphType(context),
factory.createTypeAliasDeclaration(
/*modifiers=*/ [], SchemaValueName, arrayOf(factory.createTypeParameterDeclaration(/*modifiers=*/ [], 'T'), hasRole &&
factory.createTypeParameterDeclaration(
/*modifiers=*/ [], 'TProperty',
/*constraint=*/ factory.createTypeReferenceNode('string'))), factory.createUnionTypeNode(arrayOf(factory.createTypeReferenceNode('T', /*typeArguments=*/ []), hasRole &&
factory.createTypeReferenceNode('Role', [
/*TContent=*/ factory.createTypeReferenceNode('T'),
/*TProperty=*/ factory.createTypeReferenceNode('TProperty'),
]), factory.createTypeOperatorNode(SyntaxKind.ReadonlyKeyword, factory.createArrayTypeNode(typeUnion(factory.createTypeReferenceNode('T', /*typeArguments=*/ []), hasRole &&
factory.createTypeReferenceNode('Role', [
/*TContent=*/ factory.createTypeReferenceNode('T'),
/*TProperty=*/ factory.createTypeReferenceNode('TProperty'),
]))))))),
InputActionConstraintsType,
OutputActionConstraintsType,
WithActionConstraintsType,
];
}
//# sourceMappingURL=helper_types.js.map