ember-repl 3.0.0-beta.1 → 3.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,6 +9,7 @@ declare function compileMD(glimdownInput: string, options?: {
9
9
  importMap?: EvalImportMap;
10
10
  topLevelScope?: ScopeMap;
11
11
  CopyComponent?: string;
12
+ ShadowComponent?: string;
12
13
  }): Promise<CompileResult & {
13
14
  rootTemplate?: string;
14
15
  }>;
@@ -86,7 +86,8 @@ async function compileMD(glimdownInput, options) {
86
86
  templateOnlyGlimdown,
87
87
  blocks
88
88
  } = await parseMarkdown(glimdownInput, {
89
- CopyComponent: options?.CopyComponent
89
+ CopyComponent: options?.CopyComponent,
90
+ ShadowComponent: options?.ShadowComponent
90
91
  });
91
92
  rootTemplate = templateOnlyGlimdown;
92
93
  liveCode = blocks;
@@ -1 +1 @@
1
- {"version":3,"file":"formats.js","sources":["../../../src/browser/compile/formats.ts"],"sourcesContent":["import { invocationName } from '../utils';\n\nimport type { CompileResult } from '../types';\nimport type { ExtractedCode } from './markdown-to-ember';\nimport type { EvalImportMap, ScopeMap } from './types';\n\nasync function compileAll(js: { code: string }[], importMap?: EvalImportMap) {\n let modules = await Promise.all(\n js.map(async ({ code }) => {\n return await compileGJS(code, importMap);\n })\n );\n\n return modules;\n}\n\nexport async function compileGJS(\n gjsInput: string,\n importMap?: EvalImportMap\n): Promise<CompileResult> {\n try {\n let { compileJS } = await import('../js');\n\n return await compileJS(gjsInput, importMap);\n } catch (error) {\n return { error: error as Error, name: 'unknown' };\n }\n}\n\nexport async function compileHBS(\n hbsInput: string,\n options?: {\n moduleName?: string;\n scope?: Record<string, unknown>;\n }\n): Promise<CompileResult> {\n try {\n let { compileHBS } = await import('../hbs');\n\n return compileHBS(hbsInput, options);\n } catch (error) {\n return { error: error as Error, name: 'unknown' };\n }\n}\n\nasync function extractScope(\n liveCode: ExtractedCode[],\n importMap?: EvalImportMap\n): Promise<CompileResult[]> {\n let scope: CompileResult[] = [];\n\n let hbs = liveCode.filter((code) => code.lang === 'hbs');\n let js = liveCode.filter((code) => ['js', 'gjs'].includes(code.lang));\n\n if (js.length > 0) {\n let compiled = await compileAll(js, importMap);\n\n await Promise.all(\n compiled.map(async (info) => {\n // using web worker + import maps is not available yet (need firefox support)\n // (and to somehow be able to point at npm)\n //\n // if ('importPath' in info) {\n // return scope.push({\n // moduleName: name,\n // component: await import(/* webpackIgnore: true */ info.importPath),\n // });\n // }\n\n return scope.push(info);\n })\n );\n }\n\n for (let { code } of hbs) {\n let compiled = await compileHBS(code);\n\n scope.push(compiled);\n }\n\n return scope;\n}\n\nexport async function compileMD(\n glimdownInput: string,\n options?: {\n importMap?: EvalImportMap;\n topLevelScope?: ScopeMap;\n CopyComponent?: string;\n }\n): Promise<CompileResult & { rootTemplate?: string }> {\n let importMap = options?.importMap;\n let topLevelScope = options?.topLevelScope ?? {};\n let rootTemplate: string;\n let liveCode: ExtractedCode[];\n let scope: CompileResult[] = [];\n\n /**\n * Step 1: Convert Markdown To HTML (Ember).\n *\n * The remark plugin, remark-code-extra also extracts\n * and transforms the code blocks we care about.\n *\n * These blocks will be compiled through babel and eval'd so the\n * compiled rootTemplate can invoke them\n */\n try {\n let { parseMarkdown } = await import('./markdown-to-ember');\n let { templateOnlyGlimdown, blocks } = await parseMarkdown(glimdownInput, {\n CopyComponent: options?.CopyComponent,\n });\n\n rootTemplate = templateOnlyGlimdown;\n liveCode = blocks;\n } catch (error) {\n return { error: error as Error, name: 'unknown' };\n }\n\n /**\n * Step 2: Compile the live code samples\n */\n if (liveCode.length > 0) {\n try {\n scope = await extractScope(liveCode, importMap);\n } catch (error) {\n console.info({ scope });\n console.error(error);\n\n return { error: error as Error, rootTemplate, name: 'unknown' };\n }\n }\n\n /**\n * Make sure non of our snippets errored\n *\n * TODO: for these errors, report them differently so that we\n * can render the 'Ember' and still highlight the correct line?\n * or maybe there is a way to highlight in the editor instead?\n */\n for (let { error, component } of scope) {\n if (!component) {\n if (error) {\n return { error, rootTemplate, name: 'unknown' };\n }\n }\n }\n\n /**\n * Step 4: Compile the Ember Template\n */\n try {\n let localScope = scope.reduce((accum, { component, name }) => {\n accum[invocationName(name)] = component;\n\n return accum;\n }, {} as Record<string, unknown>);\n\n return await compileHBS(rootTemplate, {\n moduleName: 'DynamicRootTemplate',\n scope: {\n ...topLevelScope,\n ...localScope,\n },\n });\n } catch (error) {\n return { error: error as Error, rootTemplate, name: 'unknown' };\n }\n}\n"],"names":["compileAll","js","importMap","modules","Promise","all","map","code","compileGJS","gjsInput","compileJS","error","name","compileHBS","hbsInput","options","extractScope","liveCode","scope","hbs","filter","lang","includes","length","compiled","info","push","compileMD","glimdownInput","topLevelScope","rootTemplate","parseMarkdown","templateOnlyGlimdown","blocks","CopyComponent","console","component","localScope","reduce","accum","invocationName","moduleName"],"mappings":"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"}
1
+ {"version":3,"file":"formats.js","sources":["../../../src/browser/compile/formats.ts"],"sourcesContent":["import { invocationName } from '../utils';\n\nimport type { CompileResult } from '../types';\nimport type { ExtractedCode } from './markdown-to-ember';\nimport type { EvalImportMap, ScopeMap } from './types';\n\nasync function compileAll(js: { code: string }[], importMap?: EvalImportMap) {\n let modules = await Promise.all(\n js.map(async ({ code }) => {\n return await compileGJS(code, importMap);\n })\n );\n\n return modules;\n}\n\nexport async function compileGJS(\n gjsInput: string,\n importMap?: EvalImportMap\n): Promise<CompileResult> {\n try {\n let { compileJS } = await import('../js');\n\n return await compileJS(gjsInput, importMap);\n } catch (error) {\n return { error: error as Error, name: 'unknown' };\n }\n}\n\nexport async function compileHBS(\n hbsInput: string,\n options?: {\n moduleName?: string;\n scope?: Record<string, unknown>;\n }\n): Promise<CompileResult> {\n try {\n let { compileHBS } = await import('../hbs');\n\n return compileHBS(hbsInput, options);\n } catch (error) {\n return { error: error as Error, name: 'unknown' };\n }\n}\n\nasync function extractScope(\n liveCode: ExtractedCode[],\n importMap?: EvalImportMap\n): Promise<CompileResult[]> {\n let scope: CompileResult[] = [];\n\n let hbs = liveCode.filter((code) => code.lang === 'hbs');\n let js = liveCode.filter((code) => ['js', 'gjs'].includes(code.lang));\n\n if (js.length > 0) {\n let compiled = await compileAll(js, importMap);\n\n await Promise.all(\n compiled.map(async (info) => {\n // using web worker + import maps is not available yet (need firefox support)\n // (and to somehow be able to point at npm)\n //\n // if ('importPath' in info) {\n // return scope.push({\n // moduleName: name,\n // component: await import(/* webpackIgnore: true */ info.importPath),\n // });\n // }\n\n return scope.push(info);\n })\n );\n }\n\n for (let { code } of hbs) {\n let compiled = await compileHBS(code);\n\n scope.push(compiled);\n }\n\n return scope;\n}\n\nexport async function compileMD(\n glimdownInput: string,\n options?: {\n importMap?: EvalImportMap;\n topLevelScope?: ScopeMap;\n CopyComponent?: string;\n ShadowComponent?: string;\n }\n): Promise<CompileResult & { rootTemplate?: string }> {\n let importMap = options?.importMap;\n let topLevelScope = options?.topLevelScope ?? {};\n let rootTemplate: string;\n let liveCode: ExtractedCode[];\n let scope: CompileResult[] = [];\n\n /**\n * Step 1: Convert Markdown To HTML (Ember).\n *\n * The remark plugin, remark-code-extra also extracts\n * and transforms the code blocks we care about.\n *\n * These blocks will be compiled through babel and eval'd so the\n * compiled rootTemplate can invoke them\n */\n try {\n let { parseMarkdown } = await import('./markdown-to-ember');\n let { templateOnlyGlimdown, blocks } = await parseMarkdown(glimdownInput, {\n CopyComponent: options?.CopyComponent,\n ShadowComponent: options?.ShadowComponent,\n });\n\n rootTemplate = templateOnlyGlimdown;\n liveCode = blocks;\n } catch (error) {\n return { error: error as Error, name: 'unknown' };\n }\n\n /**\n * Step 2: Compile the live code samples\n */\n if (liveCode.length > 0) {\n try {\n scope = await extractScope(liveCode, importMap);\n } catch (error) {\n console.info({ scope });\n console.error(error);\n\n return { error: error as Error, rootTemplate, name: 'unknown' };\n }\n }\n\n /**\n * Make sure non of our snippets errored\n *\n * TODO: for these errors, report them differently so that we\n * can render the 'Ember' and still highlight the correct line?\n * or maybe there is a way to highlight in the editor instead?\n */\n for (let { error, component } of scope) {\n if (!component) {\n if (error) {\n return { error, rootTemplate, name: 'unknown' };\n }\n }\n }\n\n /**\n * Step 4: Compile the Ember Template\n */\n try {\n let localScope = scope.reduce((accum, { component, name }) => {\n accum[invocationName(name)] = component;\n\n return accum;\n }, {} as Record<string, unknown>);\n\n return await compileHBS(rootTemplate, {\n moduleName: 'DynamicRootTemplate',\n scope: {\n ...topLevelScope,\n ...localScope,\n },\n });\n } catch (error) {\n return { error: error as Error, rootTemplate, name: 'unknown' };\n }\n}\n"],"names":["compileAll","js","importMap","modules","Promise","all","map","code","compileGJS","gjsInput","compileJS","error","name","compileHBS","hbsInput","options","extractScope","liveCode","scope","hbs","filter","lang","includes","length","compiled","info","push","compileMD","glimdownInput","topLevelScope","rootTemplate","parseMarkdown","templateOnlyGlimdown","blocks","CopyComponent","ShadowComponent","console","component","localScope","reduce","accum","invocationName","moduleName"],"mappings":"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"}
@@ -13,6 +13,7 @@ declare function compile(text: string, { format, onSuccess, onError, onCompileSt
13
13
  onCompileStart: () => Promise<unknown> | unknown;
14
14
  importMap?: EvalImportMap;
15
15
  CopyComponent?: string;
16
+ ShadowComponent?: string;
16
17
  topLevelScope?: ScopeMap;
17
18
  }): Promise<void>;
18
19
  type Input = string | undefined | null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/browser/compile/index.ts"],"sourcesContent":["import { cell, resource, resourceFactory } from 'ember-resources';\n\nimport { nameFor } from '../utils';\nimport {\n compileGJS as processGJS,\n compileHBS as processHBS,\n compileMD as processMD,\n} from './formats';\n\nimport type { CompileResult } from '../types';\nimport type { EvalImportMap, ScopeMap } from './types';\nimport type { ComponentLike } from '@glint/template';\ntype Format = 'glimdown' | 'gjs' | 'hbs';\n\nexport const CACHE = new Map<string, ComponentLike>();\n\nconst SUPPORTED_FORMATS = ['glimdown', 'gjs', 'hbs'];\n\n/**\n * This compileMD is a more robust version of the raw compiling used in \"formats\".\n * This function manages cache, and has events for folks building UIs to hook in to\n */\nexport async function compile(\n text: string,\n {\n format,\n onSuccess,\n onError,\n onCompileStart,\n ...options\n }: {\n format: Format;\n onSuccess: (component: ComponentLike) => Promise<unknown> | unknown;\n onError: (error: string) => Promise<unknown> | unknown;\n onCompileStart: () => Promise<unknown> | unknown;\n importMap?: EvalImportMap;\n CopyComponent?: string;\n topLevelScope?: ScopeMap;\n }\n) {\n let id = nameFor(text);\n\n let existing = CACHE.get(id);\n\n if (existing) {\n onSuccess(existing);\n\n return;\n }\n\n if (!SUPPORTED_FORMATS.includes(format)) {\n await onError(`Unsupported format: ${format}. Supported formats: ${SUPPORTED_FORMATS}`);\n\n return;\n }\n\n await onCompileStart();\n\n if (!text) {\n await onError('No Input Document yet');\n\n return;\n }\n\n let result: CompileResult;\n\n if (format === 'glimdown') {\n result = await processMD(text, options);\n } else if (format === 'gjs') {\n result = await processGJS(text, options.importMap);\n } else if (format === 'hbs') {\n result = await processHBS(text, {\n scope: options.topLevelScope,\n });\n } else {\n await onError(`Unsupported format: ${format}. Supported formats: ${SUPPORTED_FORMATS}`);\n\n return;\n }\n\n if (result.error) {\n await onError(result.error.message || `${result.error}`);\n\n return;\n }\n\n CACHE.set(id, result.component as ComponentLike);\n\n await onSuccess(result.component as ComponentLike);\n}\n\ntype Input = string | undefined | null;\n\n/**\n * By default, this compiles to `glimdown`. A Markdown format which\n * extracts `live` tagged code snippets and compiles them to components.\n */\nexport const Compiled = resourceFactory(\n (markdownText: Input | (() => Input), format?: Format | (() => Format)) => {\n return resource(() => {\n let _format: Format = (typeof format === 'function' ? format() : format) || 'glimdown';\n let input = typeof markdownText === 'function' ? markdownText() : markdownText;\n let ready = cell(false);\n let error = cell();\n let result = cell<ComponentLike>();\n\n if (input) {\n compile(input, {\n format: _format,\n onSuccess: async (component) => {\n result.current = component;\n ready.set(true);\n error.set(null);\n },\n onError: async (e) => {\n error.set(e);\n },\n onCompileStart: async () => {\n ready.set(false);\n },\n });\n }\n\n return () => ({\n isReady: ready.current,\n error: error.current,\n component: result.current,\n });\n });\n }\n);\n"],"names":["CACHE","Map","SUPPORTED_FORMATS","compile","text","format","onSuccess","onError","onCompileStart","options","id","nameFor","existing","get","includes","result","processMD","processGJS","importMap","processHBS","scope","topLevelScope","error","message","set","component","Compiled","resourceFactory","markdownText","resource","_format","input","ready","cell","current","e","isReady"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/browser/compile/index.ts"],"sourcesContent":["import { cell, resource, resourceFactory } from 'ember-resources';\n\nimport { nameFor } from '../utils';\nimport {\n compileGJS as processGJS,\n compileHBS as processHBS,\n compileMD as processMD,\n} from './formats';\n\nimport type { CompileResult } from '../types';\nimport type { EvalImportMap, ScopeMap } from './types';\nimport type { ComponentLike } from '@glint/template';\ntype Format = 'glimdown' | 'gjs' | 'hbs';\n\nexport const CACHE = new Map<string, ComponentLike>();\n\nconst SUPPORTED_FORMATS = ['glimdown', 'gjs', 'hbs'];\n\n/**\n * This compileMD is a more robust version of the raw compiling used in \"formats\".\n * This function manages cache, and has events for folks building UIs to hook in to\n */\nexport async function compile(\n text: string,\n {\n format,\n onSuccess,\n onError,\n onCompileStart,\n ...options\n }: {\n format: Format;\n onSuccess: (component: ComponentLike) => Promise<unknown> | unknown;\n onError: (error: string) => Promise<unknown> | unknown;\n onCompileStart: () => Promise<unknown> | unknown;\n importMap?: EvalImportMap;\n CopyComponent?: string;\n ShadowComponent?: string;\n topLevelScope?: ScopeMap;\n }\n) {\n let id = nameFor(text);\n\n let existing = CACHE.get(id);\n\n if (existing) {\n onSuccess(existing);\n\n return;\n }\n\n if (!SUPPORTED_FORMATS.includes(format)) {\n await onError(`Unsupported format: ${format}. Supported formats: ${SUPPORTED_FORMATS}`);\n\n return;\n }\n\n await onCompileStart();\n\n if (!text) {\n await onError('No Input Document yet');\n\n return;\n }\n\n let result: CompileResult;\n\n if (format === 'glimdown') {\n result = await processMD(text, options);\n } else if (format === 'gjs') {\n result = await processGJS(text, options.importMap);\n } else if (format === 'hbs') {\n result = await processHBS(text, {\n scope: options.topLevelScope,\n });\n } else {\n await onError(`Unsupported format: ${format}. Supported formats: ${SUPPORTED_FORMATS}`);\n\n return;\n }\n\n if (result.error) {\n await onError(result.error.message || `${result.error}`);\n\n return;\n }\n\n CACHE.set(id, result.component as ComponentLike);\n\n await onSuccess(result.component as ComponentLike);\n}\n\ntype Input = string | undefined | null;\n\n/**\n * By default, this compiles to `glimdown`. A Markdown format which\n * extracts `live` tagged code snippets and compiles them to components.\n */\nexport const Compiled = resourceFactory(\n (markdownText: Input | (() => Input), format?: Format | (() => Format)) => {\n return resource(() => {\n let _format: Format = (typeof format === 'function' ? format() : format) || 'glimdown';\n let input = typeof markdownText === 'function' ? markdownText() : markdownText;\n let ready = cell(false);\n let error = cell();\n let result = cell<ComponentLike>();\n\n if (input) {\n compile(input, {\n format: _format,\n onSuccess: async (component) => {\n result.current = component;\n ready.set(true);\n error.set(null);\n },\n onError: async (e) => {\n error.set(e);\n },\n onCompileStart: async () => {\n ready.set(false);\n },\n });\n }\n\n return () => ({\n isReady: ready.current,\n error: error.current,\n component: result.current,\n });\n });\n }\n);\n"],"names":["CACHE","Map","SUPPORTED_FORMATS","compile","text","format","onSuccess","onError","onCompileStart","options","id","nameFor","existing","get","includes","result","processMD","processGJS","importMap","processHBS","scope","topLevelScope","error","message","set","component","Compiled","resourceFactory","markdownText","resource","_format","input","ready","cell","current","e","isReady"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import rehypeRaw from 'rehype-raw';
2
2
  import rehypeStringify from 'rehype-stringify';
3
+ import remarkGfm from 'remark-gfm';
3
4
  import remarkParse from 'remark-parse';
4
5
  import remarkRehype from 'remark-rehype';
5
6
  import { unified } from 'unified';
@@ -155,9 +156,7 @@ function liveCodeExtraction(options = {}) {
155
156
  };
156
157
  }
157
158
  function buildCompiler(options) {
158
- return unified()
159
- // .use(markdown)
160
- .use(remarkParse)
159
+ return unified().use(remarkParse).use(remarkGfm)
161
160
  // TODO: we only want to do this when we have pre > code.
162
161
  // code can exist inline.
163
162
  .use(liveCodeExtraction, {
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-to-ember.js","sources":["../../../src/browser/compile/markdown-to-ember.ts"],"sourcesContent":["import rehypeRaw from 'rehype-raw';\nimport rehypeStringify from 'rehype-stringify';\nimport remarkParse from 'remark-parse';\nimport remarkRehype from 'remark-rehype';\nimport { unified } from 'unified';\nimport { visit } from 'unist-util-visit';\n\nimport { invocationOf, nameFor } from '../utils';\n\nimport type { Node } from 'hast';\nimport type { Code, Text } from 'mdast';\nimport type { Parent } from 'unist';\nimport type { VFile } from 'vfile';\n\nexport interface ExtractedCode {\n name: string;\n code: string;\n lang: string;\n}\n\nexport interface LiveCodeExtraction {\n templateOnlyGlimdown: string;\n blocks: ExtractedCode[];\n}\ntype LiveData = {\n liveCode?: ExtractedCode[];\n};\ntype VFileWithMeta = VFile & {\n data: LiveData;\n};\n\ninterface Options {\n snippets?: {\n classList?: string[];\n };\n demo?: {\n classList?: string[];\n };\n copyComponent?: string;\n shadowComponent?: string;\n}\n\nconst GLIMDOWN_PREVIEW = Symbol('__GLIMDOWN_PREVIEW__');\nconst GLIMDOWN_RENDER = Symbol('__GLIMDOWN_RENDER__');\nconst ALLOWED_LANGUAGES = ['gjs', 'hbs'] as const;\n\ntype AllowedLanguage = (typeof ALLOWED_LANGUAGES)[number];\ntype RelevantCode = Omit<Code, 'lang'> & { lang: AllowedLanguage };\n\nconst escapeCurlies = (node: Text | Parent) => {\n if ('value' in node && node.value) {\n node.value = node.value.replace(/{{/g, '\\\\{{');\n }\n\n if ('children' in node && node.children) {\n node.children.forEach((child) => escapeCurlies(child as Parent));\n }\n\n if (!node.data) {\n return;\n }\n\n if ('hChildren' in node.data && Array.isArray(node.data['hChildren'])) {\n node.data['hChildren'].forEach(escapeCurlies);\n\n return;\n }\n};\n\nfunction isLive(meta: string) {\n return meta.includes('live');\n}\n\nfunction isPreview(meta: string) {\n return meta.includes('preview');\n}\n\nfunction isBelow(meta: string) {\n return meta.includes('below');\n}\n\n// TODO: extract and publish remark plugin\nfunction liveCodeExtraction(options: Options = {}) {\n let { copyComponent, snippets, demo } = options;\n let { classList: snippetClasses } = snippets || {};\n let { classList: demoClasses } = demo || {};\n\n snippetClasses ??= [];\n demoClasses ??= [];\n\n function isRelevantCode(node: Code): node is RelevantCode {\n if (node.type !== 'code') return false;\n\n let { meta, lang } = node;\n\n meta = meta?.trim();\n\n if (!meta || !lang) return false;\n\n if (!meta.includes('live')) {\n return false;\n }\n\n if (!(ALLOWED_LANGUAGES as unknown as string[]).includes(lang)) return false;\n\n return true;\n }\n\n let copyNode = {\n type: 'html',\n value: copyComponent,\n };\n\n function enhance(code: Code) {\n code.data ??= {};\n code.data['hProperties'] ??= {};\n // This is secret-to-us-only API, so we don't really care about the type\n (code.data['hProperties'] as any)[GLIMDOWN_PREVIEW] = true;\n\n return {\n data: {\n hProperties: { className: snippetClasses },\n },\n type: 'div',\n hProperties: { className: snippetClasses },\n children: [code, copyNode],\n };\n }\n\n function flatReplaceAt<T>(array: T[], index: number, replacement: T[]) {\n array.splice(index, 1, ...replacement);\n }\n\n // because we mutate the tree as we iterate,\n // we need to make sure we don't loop forever\n const seen = new Set();\n\n return function transformer(tree: Parent, file: VFileWithMeta) {\n visit(tree, ['code'], function (node, index, parent) {\n if (parent === null) return;\n if (index === null) return;\n\n if (!isRelevantCode(node as Code)) {\n let enhanced = enhance(node as Code);\n\n parent.children[index] = enhanced;\n\n return 'skip';\n }\n\n if (seen.has(node)) return 'skip';\n\n seen.add(node);\n\n let { meta, lang, value } = node as Code;\n\n if (!meta) return 'skip';\n if (!lang) return 'skip';\n\n file.data.liveCode ??= [];\n\n let code = value.trim();\n let name = nameFor(code);\n let invocation = invocationOf(name);\n\n let shadow = options.shadowComponent;\n\n let wrapInShadow = shadow && !meta?.includes('no-shadow');\n\n if (wrapInShadow) {\n invocation = `<${shadow}>${invocation}</${shadow}>`;\n }\n\n let invokeNode = {\n type: 'html',\n data: {\n hProperties: { [GLIMDOWN_RENDER]: true },\n },\n value: `<div class=\"${demoClasses}\">${invocation}</div>`,\n };\n\n let wrapper = enhance(node as Code);\n\n file.data.liveCode.push({\n lang,\n name,\n code,\n });\n\n let live = isLive(meta);\n let preview = isPreview(meta);\n let below = isBelow(meta);\n\n if (live && preview && below) {\n flatReplaceAt(parent.children, index, [wrapper, invokeNode]);\n\n return 'skip';\n }\n\n if (live && preview) {\n flatReplaceAt(parent.children, index, [invokeNode, wrapper]);\n\n return 'skip';\n }\n\n if (live) {\n parent.children[index] = invokeNode;\n\n return 'skip';\n }\n\n parent.children[index] = wrapper;\n\n return;\n });\n };\n}\n\nfunction buildCompiler(options: ParseMarkdownOptions) {\n return (\n unified()\n // .use(markdown)\n .use(remarkParse)\n // TODO: we only want to do this when we have pre > code.\n // code can exist inline.\n .use(liveCodeExtraction, {\n snippets: {\n classList: ['glimdown-snippet', 'relative'],\n },\n demo: {\n classList: ['glimdown-render'],\n },\n copyComponent: options?.CopyComponent,\n shadowComponent: options?.ShadowComponent,\n })\n // .use(() => (tree) => visit(tree, (node) => console.log('i', node)))\n // remark rehype is needed to convert markdown to HTML\n // However, it also changes all the nodes, so we need another pass\n // to make sure our Glimmer-aware nodes are in tact\n .use(remarkRehype, { allowDangerousHtml: true })\n // Convert invocables to raw format, so Glimmer can invoke them\n .use(() => (tree: Node) => {\n visit(tree, function (node) {\n // We rely on an implicit transformation of data.hProperties => properties\n let properties = (node as any).properties;\n\n if (properties?.[GLIMDOWN_PREVIEW]) {\n // Have to sanitize anything Glimmer could try to render\n escapeCurlies(node as Parent);\n\n return 'skip';\n }\n\n if (node.type === 'element' || ('tagName' in node && node.tagName === 'code')) {\n if (properties?.[GLIMDOWN_RENDER]) {\n node.type = 'glimmer_raw';\n\n return;\n }\n\n escapeCurlies(node as Parent);\n\n return 'skip';\n }\n\n if (node.type === 'text' || node.type === 'raw') {\n // definitively not the better way, but this is supposed to detect \"glimmer\" nodes\n if (\n 'value' in node &&\n typeof node.value === 'string' &&\n node.value.match(/<\\/?[_A-Z:0-9].*>/g)\n ) {\n node.type = 'glimmer_raw';\n }\n\n node.type = 'glimmer_raw';\n\n return 'skip';\n }\n\n return;\n });\n })\n .use(rehypeRaw, { passThrough: ['glimmer_raw', 'raw'] })\n .use(() => (tree) => {\n visit(tree, 'glimmer_raw', (node: Node) => {\n node.type = 'raw';\n });\n })\n .use(rehypeStringify, {\n collapseEmptyAttributes: true,\n closeSelfClosing: true,\n allowParseErrors: true,\n allowDangerousCharacters: true,\n allowDangerousHtml: true,\n })\n );\n}\n\ninterface ParseMarkdownOptions {\n CopyComponent?: string;\n ShadowComponent?: string;\n}\n\n/**\n * @internal not under semver\n */\nexport async function parseMarkdown(\n input: string,\n options: ParseMarkdownOptions = {}\n): Promise<LiveCodeExtraction> {\n let markdownCompiler = buildCompiler(options);\n let processed = await markdownCompiler.process(input);\n let liveCode = (processed.data as LiveData).liveCode || [];\n let templateOnly = processed.toString();\n\n return { templateOnlyGlimdown: templateOnly, blocks: liveCode };\n}\n"],"names":["GLIMDOWN_PREVIEW","Symbol","GLIMDOWN_RENDER","ALLOWED_LANGUAGES","escapeCurlies","node","value","replace","children","forEach","child","data","Array","isArray","isLive","meta","includes","isPreview","isBelow","liveCodeExtraction","options","copyComponent","snippets","demo","classList","snippetClasses","demoClasses","isRelevantCode","type","lang","trim","copyNode","enhance","code","hProperties","className","flatReplaceAt","array","index","replacement","splice","seen","Set","transformer","tree","file","visit","parent","enhanced","has","add","liveCode","name","nameFor","invocation","invocationOf","shadow","shadowComponent","wrapInShadow","invokeNode","wrapper","push","live","preview","below","buildCompiler","unified","use","remarkParse","CopyComponent","ShadowComponent","remarkRehype","allowDangerousHtml","properties","tagName","match","rehypeRaw","passThrough","rehypeStringify","collapseEmptyAttributes","closeSelfClosing","allowParseErrors","allowDangerousCharacters","parseMarkdown","input","markdownCompiler","processed","process","templateOnly","toString","templateOnlyGlimdown","blocks"],"mappings":"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"}
1
+ {"version":3,"file":"markdown-to-ember.js","sources":["../../../src/browser/compile/markdown-to-ember.ts"],"sourcesContent":["import rehypeRaw from 'rehype-raw';\nimport rehypeStringify from 'rehype-stringify';\nimport remarkGfm from 'remark-gfm';\nimport remarkParse from 'remark-parse';\nimport remarkRehype from 'remark-rehype';\nimport { unified } from 'unified';\nimport { visit } from 'unist-util-visit';\n\nimport { invocationOf, nameFor } from '../utils';\n\nimport type { Node } from 'hast';\nimport type { Code, Text } from 'mdast';\nimport type { Parent } from 'unist';\nimport type { VFile } from 'vfile';\n\nexport interface ExtractedCode {\n name: string;\n code: string;\n lang: string;\n}\n\nexport interface LiveCodeExtraction {\n templateOnlyGlimdown: string;\n blocks: ExtractedCode[];\n}\ntype LiveData = {\n liveCode?: ExtractedCode[];\n};\ntype VFileWithMeta = VFile & {\n data: LiveData;\n};\n\ninterface Options {\n snippets?: {\n classList?: string[];\n };\n demo?: {\n classList?: string[];\n };\n copyComponent?: string;\n shadowComponent?: string;\n}\n\nconst GLIMDOWN_PREVIEW = Symbol('__GLIMDOWN_PREVIEW__');\nconst GLIMDOWN_RENDER = Symbol('__GLIMDOWN_RENDER__');\nconst ALLOWED_LANGUAGES = ['gjs', 'hbs'] as const;\n\ntype AllowedLanguage = (typeof ALLOWED_LANGUAGES)[number];\ntype RelevantCode = Omit<Code, 'lang'> & { lang: AllowedLanguage };\n\nconst escapeCurlies = (node: Text | Parent) => {\n if ('value' in node && node.value) {\n node.value = node.value.replace(/{{/g, '\\\\{{');\n }\n\n if ('children' in node && node.children) {\n node.children.forEach((child) => escapeCurlies(child as Parent));\n }\n\n if (!node.data) {\n return;\n }\n\n if ('hChildren' in node.data && Array.isArray(node.data['hChildren'])) {\n node.data['hChildren'].forEach(escapeCurlies);\n\n return;\n }\n};\n\nfunction isLive(meta: string) {\n return meta.includes('live');\n}\n\nfunction isPreview(meta: string) {\n return meta.includes('preview');\n}\n\nfunction isBelow(meta: string) {\n return meta.includes('below');\n}\n\n// TODO: extract and publish remark plugin\nfunction liveCodeExtraction(options: Options = {}) {\n let { copyComponent, snippets, demo } = options;\n let { classList: snippetClasses } = snippets || {};\n let { classList: demoClasses } = demo || {};\n\n snippetClasses ??= [];\n demoClasses ??= [];\n\n function isRelevantCode(node: Code): node is RelevantCode {\n if (node.type !== 'code') return false;\n\n let { meta, lang } = node;\n\n meta = meta?.trim();\n\n if (!meta || !lang) return false;\n\n if (!meta.includes('live')) {\n return false;\n }\n\n if (!(ALLOWED_LANGUAGES as unknown as string[]).includes(lang)) return false;\n\n return true;\n }\n\n let copyNode = {\n type: 'html',\n value: copyComponent,\n };\n\n function enhance(code: Code) {\n code.data ??= {};\n code.data['hProperties'] ??= {};\n // This is secret-to-us-only API, so we don't really care about the type\n (code.data['hProperties'] as any)[GLIMDOWN_PREVIEW] = true;\n\n return {\n data: {\n hProperties: { className: snippetClasses },\n },\n type: 'div',\n hProperties: { className: snippetClasses },\n children: [code, copyNode],\n };\n }\n\n function flatReplaceAt<T>(array: T[], index: number, replacement: T[]) {\n array.splice(index, 1, ...replacement);\n }\n\n // because we mutate the tree as we iterate,\n // we need to make sure we don't loop forever\n const seen = new Set();\n\n return function transformer(tree: Parent, file: VFileWithMeta) {\n visit(tree, ['code'], function (node, index, parent) {\n if (parent === null) return;\n if (index === null) return;\n\n if (!isRelevantCode(node as Code)) {\n let enhanced = enhance(node as Code);\n\n parent.children[index] = enhanced;\n\n return 'skip';\n }\n\n if (seen.has(node)) return 'skip';\n\n seen.add(node);\n\n let { meta, lang, value } = node as Code;\n\n if (!meta) return 'skip';\n if (!lang) return 'skip';\n\n file.data.liveCode ??= [];\n\n let code = value.trim();\n let name = nameFor(code);\n let invocation = invocationOf(name);\n\n let shadow = options.shadowComponent;\n\n let wrapInShadow = shadow && !meta?.includes('no-shadow');\n\n if (wrapInShadow) {\n invocation = `<${shadow}>${invocation}</${shadow}>`;\n }\n\n let invokeNode = {\n type: 'html',\n data: {\n hProperties: { [GLIMDOWN_RENDER]: true },\n },\n value: `<div class=\"${demoClasses}\">${invocation}</div>`,\n };\n\n let wrapper = enhance(node as Code);\n\n file.data.liveCode.push({\n lang,\n name,\n code,\n });\n\n let live = isLive(meta);\n let preview = isPreview(meta);\n let below = isBelow(meta);\n\n if (live && preview && below) {\n flatReplaceAt(parent.children, index, [wrapper, invokeNode]);\n\n return 'skip';\n }\n\n if (live && preview) {\n flatReplaceAt(parent.children, index, [invokeNode, wrapper]);\n\n return 'skip';\n }\n\n if (live) {\n parent.children[index] = invokeNode;\n\n return 'skip';\n }\n\n parent.children[index] = wrapper;\n\n return;\n });\n };\n}\n\nfunction buildCompiler(options: ParseMarkdownOptions) {\n return (\n unified()\n .use(remarkParse)\n .use(remarkGfm)\n // TODO: we only want to do this when we have pre > code.\n // code can exist inline.\n .use(liveCodeExtraction, {\n snippets: {\n classList: ['glimdown-snippet', 'relative'],\n },\n demo: {\n classList: ['glimdown-render'],\n },\n copyComponent: options?.CopyComponent,\n shadowComponent: options?.ShadowComponent,\n })\n // .use(() => (tree) => visit(tree, (node) => console.log('i', node)))\n // remark rehype is needed to convert markdown to HTML\n // However, it also changes all the nodes, so we need another pass\n // to make sure our Glimmer-aware nodes are in tact\n .use(remarkRehype, { allowDangerousHtml: true })\n // Convert invocables to raw format, so Glimmer can invoke them\n .use(() => (tree: Node) => {\n visit(tree, function (node) {\n // We rely on an implicit transformation of data.hProperties => properties\n let properties = (node as any).properties;\n\n if (properties?.[GLIMDOWN_PREVIEW]) {\n // Have to sanitize anything Glimmer could try to render\n escapeCurlies(node as Parent);\n\n return 'skip';\n }\n\n if (node.type === 'element' || ('tagName' in node && node.tagName === 'code')) {\n if (properties?.[GLIMDOWN_RENDER]) {\n node.type = 'glimmer_raw';\n\n return;\n }\n\n escapeCurlies(node as Parent);\n\n return 'skip';\n }\n\n if (node.type === 'text' || node.type === 'raw') {\n // definitively not the better way, but this is supposed to detect \"glimmer\" nodes\n if (\n 'value' in node &&\n typeof node.value === 'string' &&\n node.value.match(/<\\/?[_A-Z:0-9].*>/g)\n ) {\n node.type = 'glimmer_raw';\n }\n\n node.type = 'glimmer_raw';\n\n return 'skip';\n }\n\n return;\n });\n })\n .use(rehypeRaw, { passThrough: ['glimmer_raw', 'raw'] })\n .use(() => (tree) => {\n visit(tree, 'glimmer_raw', (node: Node) => {\n node.type = 'raw';\n });\n })\n .use(rehypeStringify, {\n collapseEmptyAttributes: true,\n closeSelfClosing: true,\n allowParseErrors: true,\n allowDangerousCharacters: true,\n allowDangerousHtml: true,\n })\n );\n}\n\ninterface ParseMarkdownOptions {\n CopyComponent?: string;\n ShadowComponent?: string;\n}\n\n/**\n * @internal not under semver\n */\nexport async function parseMarkdown(\n input: string,\n options: ParseMarkdownOptions = {}\n): Promise<LiveCodeExtraction> {\n let markdownCompiler = buildCompiler(options);\n let processed = await markdownCompiler.process(input);\n let liveCode = (processed.data as LiveData).liveCode || [];\n let templateOnly = processed.toString();\n\n return { templateOnlyGlimdown: templateOnly, blocks: liveCode };\n}\n"],"names":["GLIMDOWN_PREVIEW","Symbol","GLIMDOWN_RENDER","ALLOWED_LANGUAGES","escapeCurlies","node","value","replace","children","forEach","child","data","Array","isArray","isLive","meta","includes","isPreview","isBelow","liveCodeExtraction","options","copyComponent","snippets","demo","classList","snippetClasses","demoClasses","isRelevantCode","type","lang","trim","copyNode","enhance","code","hProperties","className","flatReplaceAt","array","index","replacement","splice","seen","Set","transformer","tree","file","visit","parent","enhanced","has","add","liveCode","name","nameFor","invocation","invocationOf","shadow","shadowComponent","wrapInShadow","invokeNode","wrapper","push","live","preview","below","buildCompiler","unified","use","remarkParse","remarkGfm","CopyComponent","ShadowComponent","remarkRehype","allowDangerousHtml","properties","tagName","match","rehypeRaw","passThrough","rehypeStringify","collapseEmptyAttributes","closeSelfClosing","allowParseErrors","allowDangerousCharacters","parseMarkdown","input","markdownCompiler","processed","process","templateOnly","toString","templateOnlyGlimdown","blocks"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-repl",
3
- "version": "3.0.0-beta.1",
3
+ "version": "3.0.0-beta.3",
4
4
  "description": "Addon for enabling REPL and Playground creation with Ember/Glimmer",
5
5
  "keywords": [
6
6
  "ember-addon"
@@ -57,6 +57,7 @@
57
57
  "parse-static-imports": "^1.1.0",
58
58
  "rehype-raw": "^6.1.1",
59
59
  "rehype-stringify": "^9.0.3",
60
+ "remark-gfm": "^3.0.1",
60
61
  "remark-parse": "^10.0.2",
61
62
  "remark-rehype": "^10.1.0",
62
63
  "unified": "^10.1.2",
@@ -69,7 +70,7 @@
69
70
  "@babel/types": "^7.21.5",
70
71
  "@ember/test-helpers": "^2.9.3",
71
72
  "@ember/test-waiters": "^3.0.2",
72
- "@embroider/addon-dev": "3.1.0",
73
+ "@embroider/addon-dev": "3.1.1",
73
74
  "@glimmer/compiler": "^0.84.3",
74
75
  "@glimmer/component": "^1.1.2",
75
76
  "@glimmer/interfaces": "^0.84.3",
@@ -82,7 +83,7 @@
82
83
  "@glint/environment-ember-template-imports": "^1.0.2",
83
84
  "@glint/template": "^1.0.2",
84
85
  "@nullvoxpopuli/eslint-configs": "^3.1.3",
85
- "@rollup/plugin-commonjs": "^25.0.0",
86
+ "@rollup/plugin-commonjs": "^25.0.1",
86
87
  "@tsconfig/ember": "^2.0.0",
87
88
  "@types/babel__core": "^7.20.0",
88
89
  "@types/babel__standalone": "^7.1.4",
@@ -91,15 +92,15 @@
91
92
  "@types/mdast": "^3.0.11",
92
93
  "@types/unist": "^2.0.6",
93
94
  "@types/uuid": "^9.0.1",
94
- "@typescript-eslint/eslint-plugin": "^5.59.6",
95
- "@typescript-eslint/parser": "^5.59.6",
95
+ "@typescript-eslint/eslint-plugin": "^5.59.11",
96
+ "@typescript-eslint/parser": "^5.59.11",
96
97
  "concurrently": "^8.0.1",
97
98
  "ember-resources": "^6.1.0",
98
99
  "ember-source": "^5.0.0",
99
100
  "ember-template-imports": "^3.4.2",
100
- "ember-template-lint": "^5.7.3",
101
- "eslint": "^8.41.0",
102
- "eslint-plugin-ember": "^11.7.1",
101
+ "ember-template-lint": "^5.10.1",
102
+ "eslint": "^8.42.0",
103
+ "eslint-plugin-ember": "^11.8.0",
103
104
  "eslint-plugin-node": "^11.1.0",
104
105
  "eslint-plugin-prettier": "^4.2.1",
105
106
  "prettier": "^2.8.8",
@@ -87,6 +87,7 @@ export async function compileMD(
87
87
  importMap?: EvalImportMap;
88
88
  topLevelScope?: ScopeMap;
89
89
  CopyComponent?: string;
90
+ ShadowComponent?: string;
90
91
  }
91
92
  ): Promise<CompileResult & { rootTemplate?: string }> {
92
93
  let importMap = options?.importMap;
@@ -108,6 +109,7 @@ export async function compileMD(
108
109
  let { parseMarkdown } = await import('./markdown-to-ember');
109
110
  let { templateOnlyGlimdown, blocks } = await parseMarkdown(glimdownInput, {
110
111
  CopyComponent: options?.CopyComponent,
112
+ ShadowComponent: options?.ShadowComponent,
111
113
  });
112
114
 
113
115
  rootTemplate = templateOnlyGlimdown;
@@ -35,6 +35,7 @@ export async function compile(
35
35
  onCompileStart: () => Promise<unknown> | unknown;
36
36
  importMap?: EvalImportMap;
37
37
  CopyComponent?: string;
38
+ ShadowComponent?: string;
38
39
  topLevelScope?: ScopeMap;
39
40
  }
40
41
  ) {
@@ -1,5 +1,6 @@
1
1
  import rehypeRaw from 'rehype-raw';
2
2
  import rehypeStringify from 'rehype-stringify';
3
+ import remarkGfm from 'remark-gfm';
3
4
  import remarkParse from 'remark-parse';
4
5
  import remarkRehype from 'remark-rehype';
5
6
  import { unified } from 'unified';
@@ -219,8 +220,8 @@ function liveCodeExtraction(options: Options = {}) {
219
220
  function buildCompiler(options: ParseMarkdownOptions) {
220
221
  return (
221
222
  unified()
222
- // .use(markdown)
223
223
  .use(remarkParse)
224
+ .use(remarkGfm)
224
225
  // TODO: we only want to do this when we have pre > code.
225
226
  // code can exist inline.
226
227
  .use(liveCodeExtraction, {