@spoolcms/nextjs
Version: 
The beautiful headless CMS for Next.js developers
73 lines (72 loc) • 1.71 kB
JavaScript
;
/**
 * MarkdownField class provides an intuitive interface for markdown fields
 * Defaults to HTML output but allows access to raw markdown
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.MarkdownField = void 0;
exports.createMarkdownField = createMarkdownField;
exports.isMarkdownField = isMarkdownField;
class MarkdownField {
    constructor(markdown, html) {
        this._markdown = markdown || '';
        this._html = html || markdown || '';
    }
    /**
     * Default behavior: return HTML when field is used directly
     * This allows: <div dangerouslySetInnerHTML={{ __html: post.body }} />
     * Or even simpler: <div>{post.body}</div> (though this won't render HTML)
     */
    toString() {
        return this._html;
    }
    /**
     * Explicit HTML access
     */
    get html() {
        return this._html;
    }
    /**
     * Explicit markdown access
     */
    get markdown() {
        return this._markdown;
    }
    /**
     * For JSON serialization
     */
    toJSON() {
        return this._html;
    }
    /**
     * For template literal usage
     */
    valueOf() {
        return this._html;
    }
    /**
     * Check if field has content
     */
    get isEmpty() {
        return !this._markdown && !this._html;
    }
    /**
     * Get length of HTML content
     */
    get length() {
        return this._html.length;
    }
}
exports.MarkdownField = MarkdownField;
/**
 * Create a MarkdownField instance
 */
function createMarkdownField(markdown, html) {
    return new MarkdownField(markdown, html);
}
/**
 * Check if a value is a MarkdownField
 */
function isMarkdownField(value) {
    return value instanceof MarkdownField;
}