foundation.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import BaseFoundation, { DefaultAdapter } from '../base/foundation';
  2. import { CompileOptions, evaluate, compile, EvaluateOptions, evaluateSync, RunOptions } from '@mdx-js/mdx';
  3. import { MDXProps } from 'mdx/types';
  4. import remarkGfm from 'remark-gfm';
  5. export interface MarkdownRenderAdapter <P = Record<string, any>, S = Record<string, any>> extends DefaultAdapter<P, S> {
  6. getRuntime: () => any
  7. }
  8. export interface MarkdownRenderBaseProps{
  9. raw: string;
  10. components: MDXProps['components'];
  11. format: "md"|"mdx"
  12. }
  13. export interface MarkdownRenderBaseState{
  14. MDXContentComponent: any
  15. }
  16. class MarkdownRenderFoundation extends BaseFoundation<MarkdownRenderAdapter> {
  17. private getOptions = ()=>{
  18. return {
  19. evaluateOptions: {
  20. remarkPlugins: [remarkGfm],
  21. format: this.getProp("format")
  22. },
  23. compileOptions: {
  24. format: this.getProp("format")
  25. },
  26. runOptions: {
  27. }
  28. } as {
  29. evaluateOptions: EvaluateOptions;
  30. compileOptions: CompileOptions;
  31. runOptions: RunOptions
  32. };
  33. }
  34. compile = async (mdxRaw: string)=>{
  35. return await compile(mdxRaw, this.getOptions().compileOptions);
  36. }
  37. evaluate = async (mdxRaw: string)=>{
  38. return (await evaluate(mdxRaw, {
  39. ...this.getOptions().runOptions,
  40. ...this.getOptions().evaluateOptions,
  41. ...this._adapter.getRuntime()
  42. })).default;
  43. }
  44. evaluateSync = (mdxRaw: string)=>{
  45. return ( evaluateSync(mdxRaw, {
  46. ...this.getOptions().runOptions,
  47. ...this.getOptions().evaluateOptions,
  48. ...this._adapter.getRuntime()
  49. })).default;
  50. }
  51. }
  52. export default MarkdownRenderFoundation;