contentful-orm
Version:
A TypeScript-first ORM for Contentful CMS that enables a code-first approach to content modeling
54 lines • 1.73 kB
JavaScript
import 'reflect-metadata';
import { ContentfulFieldType } from '../types/index.js';
// Decorator metadata keys
const CONTENT_TYPE_KEY = 'contentful:content-type';
const FIELD_KEY = 'contentful:field';
export function ContentType(options) {
return function (target) {
Reflect.defineMetadata(CONTENT_TYPE_KEY, options, target);
return target;
};
}
export function Field(options) {
return function (target, propertyKey) {
const fields = Reflect.getMetadata(FIELD_KEY, target.constructor) || new Map();
fields.set(propertyKey.toString(), options);
Reflect.defineMetadata(FIELD_KEY, fields, target.constructor);
};
}
export function MediaField(options) {
return Field({
...options,
type: ContentfulFieldType.Media,
linkType: 'Asset'
});
}
export function ReferenceField(options) {
return Field({
...options,
type: ContentfulFieldType.Reference,
linkType: options.linkType || 'Entry'
});
}
export function ArrayField(options) {
return Field({
...options,
type: ContentfulFieldType.Array
});
}
export function SymbolField(options = {}) {
return Field({ ...options, type: ContentfulFieldType.Symbol });
}
export function IntegerField(options = {}) {
return Field({ ...options, type: ContentfulFieldType.Integer });
}
export function ObjectField(options = {}) {
return Field({ ...options, type: ContentfulFieldType.Object });
}
export function getContentTypeMetadata(target) {
return Reflect.getMetadata(CONTENT_TYPE_KEY, target);
}
export function getFieldsMetadata(target) {
return Reflect.getMetadata(FIELD_KEY, target) || new Map();
}
//# sourceMappingURL=index.js.map