ember-repl 3.0.0-beta.4 → 3.0.0-beta.5

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.
Files changed (88) hide show
  1. package/declarations/browser/cjs/eval.d.ts +9 -0
  2. package/declarations/browser/cjs/eval.d.ts.map +1 -0
  3. package/declarations/browser/cjs/index.d.ts +7 -0
  4. package/declarations/browser/cjs/index.d.ts.map +1 -0
  5. package/declarations/browser/compile/formats.d.ts +16 -0
  6. package/declarations/browser/compile/formats.d.ts.map +1 -0
  7. package/{dist → declarations}/browser/compile/index.d.ts +14 -13
  8. package/declarations/browser/compile/index.d.ts.map +1 -0
  9. package/{dist → declarations}/browser/compile/markdown-to-ember.d.ts +5 -4
  10. package/declarations/browser/compile/markdown-to-ember.d.ts.map +1 -0
  11. package/declarations/browser/compile/types.d.ts +7 -0
  12. package/declarations/browser/compile/types.d.ts.map +1 -0
  13. package/declarations/browser/esm/index.d.ts +8 -0
  14. package/declarations/browser/esm/index.d.ts.map +1 -0
  15. package/{dist → declarations}/browser/eti/babel-plugin.d.ts +2 -2
  16. package/declarations/browser/eti/babel-plugin.d.ts.map +1 -0
  17. package/declarations/browser/eti/debug.d.ts +2 -0
  18. package/declarations/browser/eti/debug.d.ts.map +1 -0
  19. package/{dist → declarations}/browser/eti/parse-templates.d.ts +7 -7
  20. package/declarations/browser/eti/parse-templates.d.ts.map +1 -0
  21. package/{dist → declarations}/browser/eti/preprocess.d.ts +3 -2
  22. package/declarations/browser/eti/preprocess.d.ts.map +1 -0
  23. package/{dist → declarations}/browser/eti/template-tag-transform.d.ts +2 -2
  24. package/declarations/browser/eti/template-tag-transform.d.ts.map +1 -0
  25. package/declarations/browser/eti/util.d.ts +14 -0
  26. package/declarations/browser/eti/util.d.ts.map +1 -0
  27. package/declarations/browser/gjs.d.ts +4 -0
  28. package/declarations/browser/gjs.d.ts.map +1 -0
  29. package/{dist → declarations}/browser/hbs.d.ts +4 -3
  30. package/declarations/browser/hbs.d.ts.map +1 -0
  31. package/declarations/browser/index.d.ts +7 -0
  32. package/declarations/browser/index.d.ts.map +1 -0
  33. package/{dist → declarations}/browser/js.d.ts +3 -3
  34. package/declarations/browser/js.d.ts.map +1 -0
  35. package/{dist → declarations}/browser/known-modules.d.ts +6 -5
  36. package/declarations/browser/known-modules.d.ts.map +1 -0
  37. package/declarations/browser/types.d.ts +21 -0
  38. package/declarations/browser/types.d.ts.map +1 -0
  39. package/{dist → declarations}/browser/utils.d.ts +4 -4
  40. package/declarations/browser/utils.d.ts.map +1 -0
  41. package/declarations/test-support/index.d.ts +2 -0
  42. package/declarations/test-support/index.d.ts.map +1 -0
  43. package/dist/browser/cjs/eval.js.map +1 -1
  44. package/dist/browser/cjs/index.js.map +1 -1
  45. package/dist/browser/compile/formats.js.map +1 -1
  46. package/dist/browser/compile/index.js.map +1 -1
  47. package/dist/browser/compile/markdown-to-ember.js +2 -2
  48. package/dist/browser/compile/markdown-to-ember.js.map +1 -1
  49. package/dist/browser/esm/index.js.map +1 -1
  50. package/dist/browser/eti/babel-plugin.js.map +1 -1
  51. package/dist/browser/eti/parse-templates.js.map +1 -1
  52. package/dist/browser/eti/preprocess.js +2 -167
  53. package/dist/browser/eti/preprocess.js.map +1 -1
  54. package/dist/browser/eti/template-tag-transform.js.map +1 -1
  55. package/dist/browser/eti/util.js.map +1 -1
  56. package/dist/browser/gjs.js.map +1 -1
  57. package/dist/browser/hbs.js.map +1 -1
  58. package/dist/browser/js.js.map +1 -1
  59. package/dist/test-support/index.js.map +1 -1
  60. package/package.json +76 -56
  61. package/src/browser/cjs/eval.ts +2 -2
  62. package/src/browser/cjs/index.ts +4 -4
  63. package/src/browser/compile/formats.ts +14 -11
  64. package/src/browser/compile/index.ts +6 -6
  65. package/src/browser/compile/markdown-to-ember.ts +5 -5
  66. package/src/browser/esm/index.ts +4 -4
  67. package/src/browser/eti/babel-plugin.ts +2 -2
  68. package/src/browser/eti/parse-templates.ts +2 -2
  69. package/src/browser/eti/preprocess.ts +3 -3
  70. package/src/browser/eti/template-tag-transform.ts +1 -1
  71. package/src/browser/eti/util.ts +1 -1
  72. package/src/browser/gjs.ts +4 -4
  73. package/src/browser/hbs.ts +2 -2
  74. package/src/browser/index.ts +5 -5
  75. package/src/browser/js.ts +3 -3
  76. package/src/test-support/index.ts +1 -1
  77. package/dist/browser/cjs/eval.d.ts +0 -10
  78. package/dist/browser/cjs/eval.d.ts.map +0 -1
  79. package/dist/browser/cjs/index.d.ts +0 -7
  80. package/dist/browser/compile/formats.d.ts +0 -16
  81. package/dist/browser/compile/types.d.ts +0 -7
  82. package/dist/browser/esm/index.d.ts +0 -8
  83. package/dist/browser/eti/debug.d.ts +0 -2
  84. package/dist/browser/eti/util.d.ts +0 -14
  85. package/dist/browser/gjs.d.ts +0 -4
  86. package/dist/browser/index.d.ts +0 -6
  87. package/dist/browser/types.d.ts +0 -21
  88. package/dist/test-support/index.d.ts +0 -2
@@ -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 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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"}
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.ts';\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 as any)['hProperties'] ??= {};\n // This is secret-to-us-only API, so we don't really care about the type\n (code.data as any)['hProperties'][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 || parent === undefined) return;\n if (index === null || index === undefined) 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","undefined","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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/browser/esm/index.ts"],"sourcesContent":["import { preprocess, transform } from '../gjs';\nimport { modules } from '../known-modules';\nimport { nameFor } from '../utils';\n\nimport type { CompileResult, ExtraModules } from '../types';\nimport type Component from '@glimmer/component';\nimport type { ComponentLike } from '@glint/template';\n\nexport interface Info {\n code: string;\n name: string;\n}\n\nexport async function compileJS(code: string, extraModules?: ExtraModules): Promise<CompileResult> {\n let name = nameFor(code);\n let component: undefined | ComponentLike;\n let error: undefined | Error;\n\n try {\n let compiled = await compileGJS({ code: code, name });\n\n if (!compiled) {\n throw new Error(`Compiled output is missing`);\n }\n\n // NOTE: we cannot `eval` ESM\n compiled = proxyToSkypack(compiled, extraModules);\n component = (await evalSnippet(compiled)) as unknown as ComponentLike;\n } catch (e) {\n error = e as Error | undefined;\n }\n\n return { name, component, error };\n}\n\nexport function proxyToSkypack(code: string, extraModules?: ExtraModules) {\n let knownModules = [...Object.keys(extraModules || {}), ...Object.keys(modules)];\n let origin = location.origin;\n\n let result = code.replaceAll(/from ('|\")([^\"']+)('|\")/g, (_, __, modulePath) => {\n if (knownModules.includes(modulePath)) {\n return `from '${origin}/${modulePath}'`;\n }\n\n return `from 'https://cdn.skypack.dev/${modulePath}'`;\n });\n\n return result;\n}\n\nasync function evalSnippet(code: string) {\n let encodedJs = encodeURIComponent(code);\n let result = await import(\n /* webpackIgnore: true */ `data:text/javascript;charset=utf-8,${encodedJs}`\n );\n\n if (!result.default) {\n throw new Error(`Expected module to have a default export, found ${Object.keys(result)}`);\n }\n\n return result as {\n default: Component;\n services?: { [key: string]: unknown };\n };\n}\n\nasync function compileGJS({ code: input, name }: Info) {\n let preprocessed = preprocess(input, name);\n let result = await transform(preprocessed, name, {\n modules: false,\n });\n\n if (!result) {\n return;\n }\n\n let { code } = result;\n\n return code;\n}\n"],"names":["compileJS","code","extraModules","name","nameFor","component","error","compiled","compileGJS","Error","proxyToSkypack","evalSnippet","e","knownModules","Object","keys","modules","origin","location","result","replaceAll","_","__","modulePath","includes","encodedJs","encodeURIComponent","default","input","preprocessed","preprocess","transform"],"mappings":";;;;AAaO,eAAeA,SAASA,CAACC,IAAY,EAAEC,YAA2B,EAA0B;AACjG,EAAA,IAAIC,IAAI,GAAGC,OAAO,CAACH,IAAI,CAAC,CAAA;AACxB,EAAA,IAAII,SAAoC,CAAA;AACxC,EAAA,IAAIC,KAAwB,CAAA;EAE5B,IAAI;AACF,IAAA,IAAIC,QAAQ,GAAG,MAAMC,UAAU,CAAC;AAAEP,MAAAA,IAAI,EAAEA,IAAI;AAAEE,MAAAA,IAAAA;AAAK,KAAC,CAAC,CAAA;IAErD,IAAI,CAACI,QAAQ,EAAE;AACb,MAAA,MAAM,IAAIE,KAAK,CAAE,CAAA,0BAAA,CAA2B,CAAC,CAAA;AAC/C,KAAA;;AAEA;AACAF,IAAAA,QAAQ,GAAGG,cAAc,CAACH,QAAQ,EAAEL,YAAY,CAAC,CAAA;AACjDG,IAAAA,SAAS,GAAI,MAAMM,WAAW,CAACJ,QAAQ,CAA8B,CAAA;GACtE,CAAC,OAAOK,CAAC,EAAE;AACVN,IAAAA,KAAK,GAAGM,CAAsB,CAAA;AAChC,GAAA;EAEA,OAAO;IAAET,IAAI;IAAEE,SAAS;AAAEC,IAAAA,KAAAA;GAAO,CAAA;AACnC,CAAA;AAEO,SAASI,cAAcA,CAACT,IAAY,EAAEC,YAA2B,EAAE;EACxE,IAAIW,YAAY,GAAG,CAAC,GAAGC,MAAM,CAACC,IAAI,CAACb,YAAY,IAAI,EAAE,CAAC,EAAE,GAAGY,MAAM,CAACC,IAAI,CAACC,OAAO,CAAC,CAAC,CAAA;AAChF,EAAA,IAAIC,MAAM,GAAGC,QAAQ,CAACD,MAAM,CAAA;AAE5B,EAAA,IAAIE,MAAM,GAAGlB,IAAI,CAACmB,UAAU,CAAC,0BAA0B,EAAE,CAACC,CAAC,EAAEC,EAAE,EAAEC,UAAU,KAAK;AAC9E,IAAA,IAAIV,YAAY,CAACW,QAAQ,CAACD,UAAU,CAAC,EAAE;AACrC,MAAA,OAAQ,CAAQN,MAAAA,EAAAA,MAAO,CAAGM,CAAAA,EAAAA,UAAW,CAAE,CAAA,CAAA,CAAA;AACzC,KAAA;IAEA,OAAQ,CAAA,8BAAA,EAAgCA,UAAW,CAAE,CAAA,CAAA,CAAA;AACvD,GAAC,CAAC,CAAA;AAEF,EAAA,OAAOJ,MAAM,CAAA;AACf,CAAA;AAEA,eAAeR,WAAWA,CAACV,IAAY,EAAE;AACvC,EAAA,IAAIwB,SAAS,GAAGC,kBAAkB,CAACzB,IAAI,CAAC,CAAA;EACxC,IAAIkB,MAAM,GAAG,MAAM,iCACU,CAAA,mCAAA,EAAqCM,SAAU,CAAA,CAC5E,CAAC,CAAA;AAED,EAAA,IAAI,CAACN,MAAM,CAACQ,OAAO,EAAE;IACnB,MAAM,IAAIlB,KAAK,CAAE,CAAkDK,gDAAAA,EAAAA,MAAM,CAACC,IAAI,CAACI,MAAM,CAAE,CAAA,CAAC,CAAC,CAAA;AAC3F,GAAA;AAEA,EAAA,OAAOA,MAAM,CAAA;AAIf,CAAA;AAEA,eAAeX,UAAUA,CAAC;AAAEP,EAAAA,IAAI,EAAE2B,KAAK;AAAEzB,EAAAA,IAAAA;AAAW,CAAC,EAAE;AACrD,EAAA,IAAI0B,YAAY,GAAGC,UAAU,CAACF,KAAK,EAAEzB,IAAI,CAAC,CAAA;EAC1C,IAAIgB,MAAM,GAAG,MAAMY,SAAS,CAACF,YAAY,EAAE1B,IAAI,EAAE;AAC/Ca,IAAAA,OAAO,EAAE,KAAA;AACX,GAAC,CAAC,CAAA;EAEF,IAAI,CAACG,MAAM,EAAE;AACX,IAAA,OAAA;AACF,GAAA;EAEA,IAAI;AAAElB,IAAAA,IAAAA;AAAK,GAAC,GAAGkB,MAAM,CAAA;AAErB,EAAA,OAAOlB,IAAI,CAAA;AACb;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/browser/esm/index.ts"],"sourcesContent":["import { preprocess, transform } from '../gjs.ts';\nimport { modules } from '../known-modules.ts';\nimport { nameFor } from '../utils.ts';\n\nimport type { CompileResult, ExtraModules } from '../types.ts';\nimport type Component from '@glimmer/component';\nimport type { ComponentLike } from '@glint/template';\n\nexport interface Info {\n code: string;\n name: string;\n}\n\nexport async function compileJS(code: string, extraModules?: ExtraModules): Promise<CompileResult> {\n let name = nameFor(code);\n let component: undefined | ComponentLike;\n let error: undefined | Error;\n\n try {\n let compiled = await compileGJS({ code: code, name });\n\n if (!compiled) {\n throw new Error(`Compiled output is missing`);\n }\n\n // NOTE: we cannot `eval` ESM\n compiled = proxyToSkypack(compiled, extraModules);\n component = (await evalSnippet(compiled)) as unknown as ComponentLike;\n } catch (e) {\n error = e as Error | undefined;\n }\n\n return { name, component, error };\n}\n\nexport function proxyToSkypack(code: string, extraModules?: ExtraModules) {\n let knownModules = [...Object.keys(extraModules || {}), ...Object.keys(modules)];\n let origin = location.origin;\n\n let result = code.replaceAll(/from ('|\")([^\"']+)('|\")/g, (_, __, modulePath) => {\n if (knownModules.includes(modulePath)) {\n return `from '${origin}/${modulePath}'`;\n }\n\n return `from 'https://cdn.skypack.dev/${modulePath}'`;\n });\n\n return result;\n}\n\nasync function evalSnippet(code: string) {\n let encodedJs = encodeURIComponent(code);\n let result = await import(\n /* webpackIgnore: true */ `data:text/javascript;charset=utf-8,${encodedJs}`\n );\n\n if (!result.default) {\n throw new Error(`Expected module to have a default export, found ${Object.keys(result)}`);\n }\n\n return result as {\n default: Component;\n services?: { [key: string]: unknown };\n };\n}\n\nasync function compileGJS({ code: input, name }: Info) {\n let preprocessed = preprocess(input, name);\n let result = await transform(preprocessed, name, {\n modules: false,\n });\n\n if (!result) {\n return;\n }\n\n let { code } = result;\n\n return code;\n}\n"],"names":["compileJS","code","extraModules","name","nameFor","component","error","compiled","compileGJS","Error","proxyToSkypack","evalSnippet","e","knownModules","Object","keys","modules","origin","location","result","replaceAll","_","__","modulePath","includes","encodedJs","encodeURIComponent","default","input","preprocessed","preprocess","transform"],"mappings":";;;;AAaO,eAAeA,SAASA,CAACC,IAAY,EAAEC,YAA2B,EAA0B;AACjG,EAAA,IAAIC,IAAI,GAAGC,OAAO,CAACH,IAAI,CAAC,CAAA;AACxB,EAAA,IAAII,SAAoC,CAAA;AACxC,EAAA,IAAIC,KAAwB,CAAA;EAE5B,IAAI;AACF,IAAA,IAAIC,QAAQ,GAAG,MAAMC,UAAU,CAAC;AAAEP,MAAAA,IAAI,EAAEA,IAAI;AAAEE,MAAAA,IAAAA;AAAK,KAAC,CAAC,CAAA;IAErD,IAAI,CAACI,QAAQ,EAAE;AACb,MAAA,MAAM,IAAIE,KAAK,CAAE,CAAA,0BAAA,CAA2B,CAAC,CAAA;AAC/C,KAAA;;AAEA;AACAF,IAAAA,QAAQ,GAAGG,cAAc,CAACH,QAAQ,EAAEL,YAAY,CAAC,CAAA;AACjDG,IAAAA,SAAS,GAAI,MAAMM,WAAW,CAACJ,QAAQ,CAA8B,CAAA;GACtE,CAAC,OAAOK,CAAC,EAAE;AACVN,IAAAA,KAAK,GAAGM,CAAsB,CAAA;AAChC,GAAA;EAEA,OAAO;IAAET,IAAI;IAAEE,SAAS;AAAEC,IAAAA,KAAAA;GAAO,CAAA;AACnC,CAAA;AAEO,SAASI,cAAcA,CAACT,IAAY,EAAEC,YAA2B,EAAE;EACxE,IAAIW,YAAY,GAAG,CAAC,GAAGC,MAAM,CAACC,IAAI,CAACb,YAAY,IAAI,EAAE,CAAC,EAAE,GAAGY,MAAM,CAACC,IAAI,CAACC,OAAO,CAAC,CAAC,CAAA;AAChF,EAAA,IAAIC,MAAM,GAAGC,QAAQ,CAACD,MAAM,CAAA;AAE5B,EAAA,IAAIE,MAAM,GAAGlB,IAAI,CAACmB,UAAU,CAAC,0BAA0B,EAAE,CAACC,CAAC,EAAEC,EAAE,EAAEC,UAAU,KAAK;AAC9E,IAAA,IAAIV,YAAY,CAACW,QAAQ,CAACD,UAAU,CAAC,EAAE;AACrC,MAAA,OAAQ,CAAQN,MAAAA,EAAAA,MAAO,CAAGM,CAAAA,EAAAA,UAAW,CAAE,CAAA,CAAA,CAAA;AACzC,KAAA;IAEA,OAAQ,CAAA,8BAAA,EAAgCA,UAAW,CAAE,CAAA,CAAA,CAAA;AACvD,GAAC,CAAC,CAAA;AAEF,EAAA,OAAOJ,MAAM,CAAA;AACf,CAAA;AAEA,eAAeR,WAAWA,CAACV,IAAY,EAAE;AACvC,EAAA,IAAIwB,SAAS,GAAGC,kBAAkB,CAACzB,IAAI,CAAC,CAAA;EACxC,IAAIkB,MAAM,GAAG,MAAM,iCACU,CAAA,mCAAA,EAAqCM,SAAU,CAAA,CAC5E,CAAC,CAAA;AAED,EAAA,IAAI,CAACN,MAAM,CAACQ,OAAO,EAAE;IACnB,MAAM,IAAIlB,KAAK,CAAE,CAAkDK,gDAAAA,EAAAA,MAAM,CAACC,IAAI,CAACI,MAAM,CAAE,CAAA,CAAC,CAAC,CAAA;AAC3F,GAAA;AAEA,EAAA,OAAOA,MAAM,CAAA;AAIf,CAAA;AAEA,eAAeX,UAAUA,CAAC;AAAEP,EAAAA,IAAI,EAAE2B,KAAK;AAAEzB,EAAAA,IAAAA;AAAW,CAAC,EAAE;AACrD,EAAA,IAAI0B,YAAY,GAAGC,UAAU,CAACF,KAAK,EAAEzB,IAAI,CAAC,CAAA;EAC1C,IAAIgB,MAAM,GAAG,MAAMY,SAAS,CAACF,YAAY,EAAE1B,IAAI,EAAE;AAC/Ca,IAAAA,OAAO,EAAE,KAAA;AACX,GAAC,CAAC,CAAA;EAEF,IAAI,CAACG,MAAM,EAAE;AACX,IAAA,OAAA;AACF,GAAA;EAEA,IAAI;AAAElB,IAAAA,IAAAA;AAAK,GAAC,GAAGkB,MAAM,CAAA;AAErB,EAAA,OAAOlB,IAAI,CAAA;AACb;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"babel-plugin.js","sources":["../../../src/browser/eti/babel-plugin.ts"],"sourcesContent":["import { ImportUtil } from 'babel-import-util';\n\nimport { transformTemplateTag } from './template-tag-transform';\nimport * as util from './util';\n\nimport type { NodePath } from '@babel/traverse';\nimport type { CallExpression, Class, Program } from '@babel/types';\n\n/**\n * This Babel plugin takes parseable code emitted by the string-based\n * preprocessor plugin in this package and converts it into calls to\n * the standardized `precompileTemplate` macro from `@ember/template-compilation`.\n *\n * Its goal is to convert code like this:\n *\n * ```js\n * import { hbs } from 'ember-template-imports';\n *\n * const A = hbs(`A`, {...});\n * const B = [__GLIMMER_TEMPLATE(`B`, {...})];\n * class C {\n * template = hbs(`C`, {...});\n * }\n *\n * [__GLIMMER_TEMPLATE(`default`, {...})];\n *\n * class D {\n * [__GLIMMER_TEMPLATE(`D`, {...})]\n * }\n * ```\n *\n * Into this:\n *\n * ```js\n * import { precompileTemplate } from '@ember/template-compilation';\n * import { setComponentTemplate } from '@ember/component';\n * import templateOnlyComponent from '@ember/component/template-only';\n *\n * const A = setComponentTemplate(\n * precompileTemplate(`A`, {...}),\n * templateOnlyComponent('this-module.js', 'A')\n * );\n * const B = setComponentTemplate(\n * precompileTemplate(`B`, {...}),\n * templateOnlyComponent('this-module.js', 'B')\n * );\n * class C {}\n * setComponentTemplate(precompileTemplate(`C`, {...}), C);\n *\n * export default setComponentTemplate(\n * precompileTemplate(`default`, {...}),\n * templateOnlyComponent('this-module.js', '_thisModule')\n * );\n *\n * class D {}\n * setComponentTemplate(precompileTemplate(`D`, {...}), D);\n * ```\n */\nexport default function (babel: any) {\n let t = babel.types;\n\n let visitor: any = {\n Program: {\n enter(path: NodePath<Program>, state: any) {\n state.importUtil = new ImportUtil(t, path);\n },\n },\n\n // Process class bodies before things like class properties get transformed\n // into imperative constructor code that we can't recognize. Taken directly\n // from babel-plugin-htmlbars-inline-precompile https://git.io/JMi1G\n Class(path: NodePath<Class>, state: any) {\n let bodyPath = path.get('body.body');\n\n if (!Array.isArray(bodyPath)) return;\n\n bodyPath.forEach((path) => {\n if (path.type !== 'ClassProperty') return;\n\n let keyPath = path.get('key');\n let valuePath = path.get('value');\n\n if (Array.isArray(keyPath)) return;\n\n if (keyPath && visitor[keyPath.type]) {\n visitor[keyPath.type](keyPath, state);\n }\n\n if (Array.isArray(valuePath)) return;\n\n if (valuePath && visitor[valuePath.type]) {\n visitor[valuePath.type](valuePath, state);\n }\n });\n },\n\n CallExpression(path: NodePath<CallExpression>, state: any) {\n if (util.isTemplateTag(path)) {\n transformTemplateTag(t, path, state);\n }\n },\n };\n\n return { visitor };\n}\n"],"names":["babel","t","types","visitor","Program","enter","path","state","importUtil","ImportUtil","Class","bodyPath","get","Array","isArray","forEach","type","keyPath","valuePath","CallExpression","util","transformTemplateTag"],"mappings":";;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,mCAAA,EAAUA,KAAU,EAAE;AACnC,EAAA,IAAIC,CAAC,GAAGD,KAAK,CAACE,KAAK,CAAA;AAEnB,EAAA,IAAIC,OAAY,GAAG;AACjBC,IAAAA,OAAO,EAAE;AACPC,MAAAA,KAAKA,CAACC,IAAuB,EAAEC,KAAU,EAAE;QACzCA,KAAK,CAACC,UAAU,GAAG,IAAIC,UAAU,CAACR,CAAC,EAAEK,IAAI,CAAC,CAAA;AAC5C,OAAA;KACD;AAED;AACA;AACA;AACAI,IAAAA,KAAKA,CAACJ,IAAqB,EAAEC,KAAU,EAAE;AACvC,MAAA,IAAII,QAAQ,GAAGL,IAAI,CAACM,GAAG,CAAC,WAAW,CAAC,CAAA;AAEpC,MAAA,IAAI,CAACC,KAAK,CAACC,OAAO,CAACH,QAAQ,CAAC,EAAE,OAAA;AAE9BA,MAAAA,QAAQ,CAACI,OAAO,CAAET,IAAI,IAAK;AACzB,QAAA,IAAIA,IAAI,CAACU,IAAI,KAAK,eAAe,EAAE,OAAA;AAEnC,QAAA,IAAIC,OAAO,GAAGX,IAAI,CAACM,GAAG,CAAC,KAAK,CAAC,CAAA;AAC7B,QAAA,IAAIM,SAAS,GAAGZ,IAAI,CAACM,GAAG,CAAC,OAAO,CAAC,CAAA;AAEjC,QAAA,IAAIC,KAAK,CAACC,OAAO,CAACG,OAAO,CAAC,EAAE,OAAA;QAE5B,IAAIA,OAAO,IAAId,OAAO,CAACc,OAAO,CAACD,IAAI,CAAC,EAAE;UACpCb,OAAO,CAACc,OAAO,CAACD,IAAI,CAAC,CAACC,OAAO,EAAEV,KAAK,CAAC,CAAA;AACvC,SAAA;AAEA,QAAA,IAAIM,KAAK,CAACC,OAAO,CAACI,SAAS,CAAC,EAAE,OAAA;QAE9B,IAAIA,SAAS,IAAIf,OAAO,CAACe,SAAS,CAACF,IAAI,CAAC,EAAE;UACxCb,OAAO,CAACe,SAAS,CAACF,IAAI,CAAC,CAACE,SAAS,EAAEX,KAAK,CAAC,CAAA;AAC3C,SAAA;AACF,OAAC,CAAC,CAAA;KACH;AAEDY,IAAAA,cAAcA,CAACb,IAA8B,EAAEC,KAAU,EAAE;AACzD,MAAA,IAAIa,aAAkB,CAACd,IAAI,CAAC,EAAE;AAC5Be,QAAAA,oBAAoB,CAACpB,CAAC,EAAEK,IAAI,EAAEC,KAAK,CAAC,CAAA;AACtC,OAAA;AACF,KAAA;GACD,CAAA;EAED,OAAO;AAAEJ,IAAAA,OAAAA;GAAS,CAAA;AACpB;;;;"}
1
+ {"version":3,"file":"babel-plugin.js","sources":["../../../src/browser/eti/babel-plugin.ts"],"sourcesContent":["import { ImportUtil } from 'babel-import-util';\n\nimport { transformTemplateTag } from './template-tag-transform.ts';\nimport * as util from './util.ts';\n\nimport type { NodePath } from '@babel/traverse';\nimport type { CallExpression, Class, Program } from '@babel/types';\n\n/**\n * This Babel plugin takes parseable code emitted by the string-based\n * preprocessor plugin in this package and converts it into calls to\n * the standardized `precompileTemplate` macro from `@ember/template-compilation`.\n *\n * Its goal is to convert code like this:\n *\n * ```js\n * import { hbs } from 'ember-template-imports';\n *\n * const A = hbs(`A`, {...});\n * const B = [__GLIMMER_TEMPLATE(`B`, {...})];\n * class C {\n * template = hbs(`C`, {...});\n * }\n *\n * [__GLIMMER_TEMPLATE(`default`, {...})];\n *\n * class D {\n * [__GLIMMER_TEMPLATE(`D`, {...})]\n * }\n * ```\n *\n * Into this:\n *\n * ```js\n * import { precompileTemplate } from '@ember/template-compilation';\n * import { setComponentTemplate } from '@ember/component';\n * import templateOnlyComponent from '@ember/component/template-only';\n *\n * const A = setComponentTemplate(\n * precompileTemplate(`A`, {...}),\n * templateOnlyComponent('this-module.js', 'A')\n * );\n * const B = setComponentTemplate(\n * precompileTemplate(`B`, {...}),\n * templateOnlyComponent('this-module.js', 'B')\n * );\n * class C {}\n * setComponentTemplate(precompileTemplate(`C`, {...}), C);\n *\n * export default setComponentTemplate(\n * precompileTemplate(`default`, {...}),\n * templateOnlyComponent('this-module.js', '_thisModule')\n * );\n *\n * class D {}\n * setComponentTemplate(precompileTemplate(`D`, {...}), D);\n * ```\n */\nexport default function (babel: any) {\n let t = babel.types;\n\n let visitor: any = {\n Program: {\n enter(path: NodePath<Program>, state: any) {\n state.importUtil = new ImportUtil(t, path);\n },\n },\n\n // Process class bodies before things like class properties get transformed\n // into imperative constructor code that we can't recognize. Taken directly\n // from babel-plugin-htmlbars-inline-precompile https://git.io/JMi1G\n Class(path: NodePath<Class>, state: any) {\n let bodyPath = path.get('body.body');\n\n if (!Array.isArray(bodyPath)) return;\n\n bodyPath.forEach((path) => {\n if (path.type !== 'ClassProperty') return;\n\n let keyPath = path.get('key');\n let valuePath = path.get('value');\n\n if (Array.isArray(keyPath)) return;\n\n if (keyPath && visitor[keyPath.type]) {\n visitor[keyPath.type](keyPath, state);\n }\n\n if (Array.isArray(valuePath)) return;\n\n if (valuePath && visitor[valuePath.type]) {\n visitor[valuePath.type](valuePath, state);\n }\n });\n },\n\n CallExpression(path: NodePath<CallExpression>, state: any) {\n if (util.isTemplateTag(path)) {\n transformTemplateTag(t, path, state);\n }\n },\n };\n\n return { visitor };\n}\n"],"names":["babel","t","types","visitor","Program","enter","path","state","importUtil","ImportUtil","Class","bodyPath","get","Array","isArray","forEach","type","keyPath","valuePath","CallExpression","util","transformTemplateTag"],"mappings":";;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,mCAAA,EAAUA,KAAU,EAAE;AACnC,EAAA,IAAIC,CAAC,GAAGD,KAAK,CAACE,KAAK,CAAA;AAEnB,EAAA,IAAIC,OAAY,GAAG;AACjBC,IAAAA,OAAO,EAAE;AACPC,MAAAA,KAAKA,CAACC,IAAuB,EAAEC,KAAU,EAAE;QACzCA,KAAK,CAACC,UAAU,GAAG,IAAIC,UAAU,CAACR,CAAC,EAAEK,IAAI,CAAC,CAAA;AAC5C,OAAA;KACD;AAED;AACA;AACA;AACAI,IAAAA,KAAKA,CAACJ,IAAqB,EAAEC,KAAU,EAAE;AACvC,MAAA,IAAII,QAAQ,GAAGL,IAAI,CAACM,GAAG,CAAC,WAAW,CAAC,CAAA;AAEpC,MAAA,IAAI,CAACC,KAAK,CAACC,OAAO,CAACH,QAAQ,CAAC,EAAE,OAAA;AAE9BA,MAAAA,QAAQ,CAACI,OAAO,CAAET,IAAI,IAAK;AACzB,QAAA,IAAIA,IAAI,CAACU,IAAI,KAAK,eAAe,EAAE,OAAA;AAEnC,QAAA,IAAIC,OAAO,GAAGX,IAAI,CAACM,GAAG,CAAC,KAAK,CAAC,CAAA;AAC7B,QAAA,IAAIM,SAAS,GAAGZ,IAAI,CAACM,GAAG,CAAC,OAAO,CAAC,CAAA;AAEjC,QAAA,IAAIC,KAAK,CAACC,OAAO,CAACG,OAAO,CAAC,EAAE,OAAA;QAE5B,IAAIA,OAAO,IAAId,OAAO,CAACc,OAAO,CAACD,IAAI,CAAC,EAAE;UACpCb,OAAO,CAACc,OAAO,CAACD,IAAI,CAAC,CAACC,OAAO,EAAEV,KAAK,CAAC,CAAA;AACvC,SAAA;AAEA,QAAA,IAAIM,KAAK,CAACC,OAAO,CAACI,SAAS,CAAC,EAAE,OAAA;QAE9B,IAAIA,SAAS,IAAIf,OAAO,CAACe,SAAS,CAACF,IAAI,CAAC,EAAE;UACxCb,OAAO,CAACe,SAAS,CAACF,IAAI,CAAC,CAACE,SAAS,EAAEX,KAAK,CAAC,CAAA;AAC3C,SAAA;AACF,OAAC,CAAC,CAAA;KACH;AAEDY,IAAAA,cAAcA,CAACb,IAA8B,EAAEC,KAAU,EAAE;AACzD,MAAA,IAAIa,aAAkB,CAACd,IAAI,CAAC,EAAE;AAC5Be,QAAAA,oBAAoB,CAACpB,CAAC,EAAEK,IAAI,EAAEC,KAAK,CAAC,CAAA;AACtC,OAAA;AACF,KAAA;GACD,CAAA;EAED,OAAO;AAAEJ,IAAAA,OAAAA;GAAS,CAAA;AACpB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-templates.js","sources":["../../../src/browser/eti/parse-templates.ts"],"sourcesContent":["import { expect } from './debug';\nimport { TEMPLATE_TAG_NAME } from './util';\n\nexport type TemplateMatch = TemplateTagMatch;\n\nexport interface TemplateTagMatch {\n type: 'template-tag';\n tagName: string;\n start: RegExpMatchArray;\n end: RegExpMatchArray;\n contents: string;\n}\n\n/**\n * Represents a static import of a template literal.\n */\nexport interface StaticImportConfig {\n /**\n * The path to the package from which we want to import the template literal\n * (e.g.: 'ember-cli-htmlbars')\n */\n importPath: string;\n /**\n * The name of the template literal (e.g.: 'hbs') or 'default' if this package\n * exports a default function\n */\n importIdentifier: string;\n}\n\n/**\n * The input options to instruct parseTemplates on how to parse the input.\n *\n * @param templateTag\n */\nexport interface ParseTemplatesOptions {\n /** Tag to use, if parsing template tags is enabled. */\n templateTag?: string;\n}\n\nconst escapeChar = '\\\\';\nconst stringDelimiter = /['\"]/;\n\nconst singleLineCommentStart = /\\/\\//;\nconst newLine = /\\n/;\nconst multiLineCommentStart = /\\/\\*/;\nconst multiLineCommentEnd = /\\*\\//;\n\nconst templateLiteralStart = /([$a-zA-Z_][0-9a-zA-Z_$]*)?`/;\nconst templateLiteralEnd = /`/;\n\nconst dynamicSegmentStart = /\\${/;\nconst blockStart = /{/;\nconst dynamicSegmentEnd = /}/;\n\nfunction isEscaped(template: string, _offset: number | undefined) {\n let offset = expect(_offset, 'Expected an index to check escaping');\n\n let count = 0;\n\n while (template[offset - 1] === escapeChar) {\n count++;\n offset--;\n }\n\n return count % 2 === 1;\n}\n\nexport const DEFAULT_PARSE_TEMPLATES_OPTIONS = {\n templateTag: TEMPLATE_TAG_NAME,\n};\n\n/**\n * Parses a template to find all possible valid matches for an embedded template.\n * Supported syntaxes are template literals:\n *\n * hbs`Hello, world!`\n *\n * And template tags\n *\n * <template></template>\n *\n * The parser excludes any values found within strings recursively, and also\n * excludes any string literals with dynamic segments (e.g `${}`) since these\n * cannot be valid templates.\n *\n * @param template The template to parse\n * @param relativePath Relative file path for the template (for errors)\n * @param options optional configuration options for how to parse templates\n * @returns\n */\nexport function parseTemplates(\n template: string,\n relativePath: string,\n options: ParseTemplatesOptions = DEFAULT_PARSE_TEMPLATES_OPTIONS\n): TemplateMatch[] {\n const results: TemplateMatch[] = [];\n const templateTag = options?.templateTag;\n\n const templateTagStart = new RegExp(`<${templateTag}[^<]*>`);\n const templateTagEnd = new RegExp(`</${templateTag}>`);\n const argumentsMatchRegex = new RegExp(`<${templateTag}[^<]*\\\\S[^<]*>`);\n\n const allTokens = new RegExp(\n [\n singleLineCommentStart.source,\n newLine.source,\n multiLineCommentStart.source,\n multiLineCommentEnd.source,\n stringDelimiter.source,\n templateLiteralStart.source,\n templateLiteralEnd.source,\n dynamicSegmentStart.source,\n dynamicSegmentEnd.source,\n blockStart.source,\n templateTagStart.source,\n templateTagEnd.source,\n ].join('|'),\n 'g'\n );\n\n const tokens = Array.from(template.matchAll(allTokens));\n\n while (tokens.length > 0) {\n const currentToken = tokens.shift()!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n\n parseToken(results, template, currentToken, tokens, true);\n }\n\n /**\n * Parse the current token. If top level, then template tags can be parsed.\n * Else, we are nested within a dynamic segment, which is currently unsupported.\n */\n function parseToken(\n results: TemplateMatch[],\n template: string,\n token: RegExpMatchArray,\n tokens: RegExpMatchArray[],\n isTopLevel = false\n ) {\n if (token[0].match(multiLineCommentStart)) {\n parseMultiLineComment(results, template, token, tokens);\n } else if (token[0].match(singleLineCommentStart)) {\n parseSingleLineComment(results, template, token, tokens);\n } else if (token[0].match(templateLiteralStart)) {\n parseTemplateLiteral(template, tokens);\n } else if (\n isTopLevel &&\n templateTag !== undefined &&\n templateTagStart &&\n token[0].match(templateTagStart)\n ) {\n parseTemplateTag(results, template, token, tokens, templateTag);\n } else if (token[0].match(stringDelimiter)) {\n parseString(results, template, token, tokens);\n }\n }\n\n /**\n * Parse a template literal. If a dynamic segment is found, enters the dynamic\n * segment and parses it recursively. If no dynamic segments are found and the\n * literal is top level (e.g. not nested within a dynamic segment) and has a\n * tag, pushes it into the list of results.\n */\n function parseTemplateLiteral(template: string, tokens: RegExpMatchArray[]) {\n while (tokens.length > 0) {\n let currentToken = expect(tokens.shift(), 'expected token');\n\n if (isEscaped(template, currentToken.index)) continue;\n\n if (currentToken[0].match(templateLiteralEnd)) {\n return;\n }\n }\n }\n\n /**\n * Parse a string. All tokens within a string are ignored\n * since there are no dynamic segments within these.\n */\n function parseString(\n _results: TemplateMatch[],\n template: string,\n startToken: RegExpMatchArray,\n tokens: RegExpMatchArray[]\n ) {\n while (tokens.length > 0) {\n const currentToken = expect(tokens.shift(), 'expected token');\n\n if (currentToken[0] === startToken[0] && !isEscaped(template, currentToken.index)) {\n return;\n }\n }\n }\n\n /**\n * Parse a single-line comment. All tokens within a single-line comment are ignored\n * since there are no dynamic segments within them.\n */\n function parseSingleLineComment(\n _results: TemplateMatch[],\n _template: string,\n _startToken: RegExpMatchArray,\n tokens: RegExpMatchArray[]\n ) {\n while (tokens.length > 0) {\n const currentToken = expect(tokens.shift(), 'expected token');\n\n if (currentToken[0] === '\\n') {\n return;\n }\n }\n }\n\n /**\n * Parse a multi-line comment. All tokens within a multi-line comment are ignored\n * since there are no dynamic segments within them.\n */\n function parseMultiLineComment(\n _results: TemplateMatch[],\n _template: string,\n _startToken: RegExpMatchArray,\n tokens: RegExpMatchArray[]\n ) {\n while (tokens.length > 0) {\n const currentToken = expect(tokens.shift(), 'expected token');\n\n if (currentToken[0] === '*/') {\n return;\n }\n }\n }\n\n /**\n * Parses a template tag. Continues parsing until the template tag has closed,\n * accounting for nested template tags.\n */\n function parseTemplateTag(\n results: TemplateMatch[],\n _template: string,\n startToken: RegExpMatchArray,\n tokens: RegExpMatchArray[],\n templateTag: string\n ) {\n let stack = 1;\n\n if (argumentsMatchRegex && startToken[0].match(argumentsMatchRegex)) {\n throw new Error(\n `embedded template preprocessing currently does not support passing arguments, found args in: ${relativePath}`\n );\n }\n\n while (tokens.length > 0) {\n const currentToken = expect(tokens.shift(), 'expected token');\n\n if (currentToken[0].match(templateTagStart)) {\n stack++;\n } else if (currentToken[0].match(templateTagEnd)) {\n stack--;\n }\n\n if (stack === 0) {\n let contents = '';\n\n if (startToken.index !== undefined) {\n const templateStart = startToken.index + startToken[0].length;\n\n contents = template.slice(templateStart, currentToken.index);\n }\n\n results.push({\n type: 'template-tag',\n tagName: templateTag,\n contents: contents,\n start: startToken,\n end: currentToken,\n });\n\n return;\n }\n }\n }\n\n return results;\n}\n"],"names":["escapeChar","stringDelimiter","singleLineCommentStart","newLine","multiLineCommentStart","multiLineCommentEnd","templateLiteralStart","templateLiteralEnd","dynamicSegmentStart","blockStart","dynamicSegmentEnd","isEscaped","template","_offset","offset","expect","count","DEFAULT_PARSE_TEMPLATES_OPTIONS","templateTag","TEMPLATE_TAG_NAME","parseTemplates","relativePath","options","results","templateTagStart","RegExp","templateTagEnd","argumentsMatchRegex","allTokens","source","join","tokens","Array","from","matchAll","length","currentToken","shift","parseToken","token","isTopLevel","match","parseMultiLineComment","parseSingleLineComment","parseTemplateLiteral","undefined","parseTemplateTag","parseString","index","_results","startToken","_template","_startToken","stack","Error","contents","templateStart","slice","push","type","tagName","start","end"],"mappings":"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"}
1
+ {"version":3,"file":"parse-templates.js","sources":["../../../src/browser/eti/parse-templates.ts"],"sourcesContent":["import { expect } from './debug.ts';\nimport { TEMPLATE_TAG_NAME } from './util.ts';\n\nexport type TemplateMatch = TemplateTagMatch;\n\nexport interface TemplateTagMatch {\n type: 'template-tag';\n tagName: string;\n start: RegExpMatchArray;\n end: RegExpMatchArray;\n contents: string;\n}\n\n/**\n * Represents a static import of a template literal.\n */\nexport interface StaticImportConfig {\n /**\n * The path to the package from which we want to import the template literal\n * (e.g.: 'ember-cli-htmlbars')\n */\n importPath: string;\n /**\n * The name of the template literal (e.g.: 'hbs') or 'default' if this package\n * exports a default function\n */\n importIdentifier: string;\n}\n\n/**\n * The input options to instruct parseTemplates on how to parse the input.\n *\n * @param templateTag\n */\nexport interface ParseTemplatesOptions {\n /** Tag to use, if parsing template tags is enabled. */\n templateTag?: string;\n}\n\nconst escapeChar = '\\\\';\nconst stringDelimiter = /['\"]/;\n\nconst singleLineCommentStart = /\\/\\//;\nconst newLine = /\\n/;\nconst multiLineCommentStart = /\\/\\*/;\nconst multiLineCommentEnd = /\\*\\//;\n\nconst templateLiteralStart = /([$a-zA-Z_][0-9a-zA-Z_$]*)?`/;\nconst templateLiteralEnd = /`/;\n\nconst dynamicSegmentStart = /\\${/;\nconst blockStart = /{/;\nconst dynamicSegmentEnd = /}/;\n\nfunction isEscaped(template: string, _offset: number | undefined) {\n let offset = expect(_offset, 'Expected an index to check escaping');\n\n let count = 0;\n\n while (template[offset - 1] === escapeChar) {\n count++;\n offset--;\n }\n\n return count % 2 === 1;\n}\n\nexport const DEFAULT_PARSE_TEMPLATES_OPTIONS = {\n templateTag: TEMPLATE_TAG_NAME,\n};\n\n/**\n * Parses a template to find all possible valid matches for an embedded template.\n * Supported syntaxes are template literals:\n *\n * hbs`Hello, world!`\n *\n * And template tags\n *\n * <template></template>\n *\n * The parser excludes any values found within strings recursively, and also\n * excludes any string literals with dynamic segments (e.g `${}`) since these\n * cannot be valid templates.\n *\n * @param template The template to parse\n * @param relativePath Relative file path for the template (for errors)\n * @param options optional configuration options for how to parse templates\n * @returns\n */\nexport function parseTemplates(\n template: string,\n relativePath: string,\n options: ParseTemplatesOptions = DEFAULT_PARSE_TEMPLATES_OPTIONS\n): TemplateMatch[] {\n const results: TemplateMatch[] = [];\n const templateTag = options?.templateTag;\n\n const templateTagStart = new RegExp(`<${templateTag}[^<]*>`);\n const templateTagEnd = new RegExp(`</${templateTag}>`);\n const argumentsMatchRegex = new RegExp(`<${templateTag}[^<]*\\\\S[^<]*>`);\n\n const allTokens = new RegExp(\n [\n singleLineCommentStart.source,\n newLine.source,\n multiLineCommentStart.source,\n multiLineCommentEnd.source,\n stringDelimiter.source,\n templateLiteralStart.source,\n templateLiteralEnd.source,\n dynamicSegmentStart.source,\n dynamicSegmentEnd.source,\n blockStart.source,\n templateTagStart.source,\n templateTagEnd.source,\n ].join('|'),\n 'g'\n );\n\n const tokens = Array.from(template.matchAll(allTokens));\n\n while (tokens.length > 0) {\n const currentToken = tokens.shift()!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n\n parseToken(results, template, currentToken, tokens, true);\n }\n\n /**\n * Parse the current token. If top level, then template tags can be parsed.\n * Else, we are nested within a dynamic segment, which is currently unsupported.\n */\n function parseToken(\n results: TemplateMatch[],\n template: string,\n token: RegExpMatchArray,\n tokens: RegExpMatchArray[],\n isTopLevel = false\n ) {\n if (token[0].match(multiLineCommentStart)) {\n parseMultiLineComment(results, template, token, tokens);\n } else if (token[0].match(singleLineCommentStart)) {\n parseSingleLineComment(results, template, token, tokens);\n } else if (token[0].match(templateLiteralStart)) {\n parseTemplateLiteral(template, tokens);\n } else if (\n isTopLevel &&\n templateTag !== undefined &&\n templateTagStart &&\n token[0].match(templateTagStart)\n ) {\n parseTemplateTag(results, template, token, tokens, templateTag);\n } else if (token[0].match(stringDelimiter)) {\n parseString(results, template, token, tokens);\n }\n }\n\n /**\n * Parse a template literal. If a dynamic segment is found, enters the dynamic\n * segment and parses it recursively. If no dynamic segments are found and the\n * literal is top level (e.g. not nested within a dynamic segment) and has a\n * tag, pushes it into the list of results.\n */\n function parseTemplateLiteral(template: string, tokens: RegExpMatchArray[]) {\n while (tokens.length > 0) {\n let currentToken = expect(tokens.shift(), 'expected token');\n\n if (isEscaped(template, currentToken.index)) continue;\n\n if (currentToken[0].match(templateLiteralEnd)) {\n return;\n }\n }\n }\n\n /**\n * Parse a string. All tokens within a string are ignored\n * since there are no dynamic segments within these.\n */\n function parseString(\n _results: TemplateMatch[],\n template: string,\n startToken: RegExpMatchArray,\n tokens: RegExpMatchArray[]\n ) {\n while (tokens.length > 0) {\n const currentToken = expect(tokens.shift(), 'expected token');\n\n if (currentToken[0] === startToken[0] && !isEscaped(template, currentToken.index)) {\n return;\n }\n }\n }\n\n /**\n * Parse a single-line comment. All tokens within a single-line comment are ignored\n * since there are no dynamic segments within them.\n */\n function parseSingleLineComment(\n _results: TemplateMatch[],\n _template: string,\n _startToken: RegExpMatchArray,\n tokens: RegExpMatchArray[]\n ) {\n while (tokens.length > 0) {\n const currentToken = expect(tokens.shift(), 'expected token');\n\n if (currentToken[0] === '\\n') {\n return;\n }\n }\n }\n\n /**\n * Parse a multi-line comment. All tokens within a multi-line comment are ignored\n * since there are no dynamic segments within them.\n */\n function parseMultiLineComment(\n _results: TemplateMatch[],\n _template: string,\n _startToken: RegExpMatchArray,\n tokens: RegExpMatchArray[]\n ) {\n while (tokens.length > 0) {\n const currentToken = expect(tokens.shift(), 'expected token');\n\n if (currentToken[0] === '*/') {\n return;\n }\n }\n }\n\n /**\n * Parses a template tag. Continues parsing until the template tag has closed,\n * accounting for nested template tags.\n */\n function parseTemplateTag(\n results: TemplateMatch[],\n _template: string,\n startToken: RegExpMatchArray,\n tokens: RegExpMatchArray[],\n templateTag: string\n ) {\n let stack = 1;\n\n if (argumentsMatchRegex && startToken[0].match(argumentsMatchRegex)) {\n throw new Error(\n `embedded template preprocessing currently does not support passing arguments, found args in: ${relativePath}`\n );\n }\n\n while (tokens.length > 0) {\n const currentToken = expect(tokens.shift(), 'expected token');\n\n if (currentToken[0].match(templateTagStart)) {\n stack++;\n } else if (currentToken[0].match(templateTagEnd)) {\n stack--;\n }\n\n if (stack === 0) {\n let contents = '';\n\n if (startToken.index !== undefined) {\n const templateStart = startToken.index + startToken[0].length;\n\n contents = template.slice(templateStart, currentToken.index);\n }\n\n results.push({\n type: 'template-tag',\n tagName: templateTag,\n contents: contents,\n start: startToken,\n end: currentToken,\n });\n\n return;\n }\n }\n }\n\n return results;\n}\n"],"names":["escapeChar","stringDelimiter","singleLineCommentStart","newLine","multiLineCommentStart","multiLineCommentEnd","templateLiteralStart","templateLiteralEnd","dynamicSegmentStart","blockStart","dynamicSegmentEnd","isEscaped","template","_offset","offset","expect","count","DEFAULT_PARSE_TEMPLATES_OPTIONS","templateTag","TEMPLATE_TAG_NAME","parseTemplates","relativePath","options","results","templateTagStart","RegExp","templateTagEnd","argumentsMatchRegex","allTokens","source","join","tokens","Array","from","matchAll","length","currentToken","shift","parseToken","token","isTopLevel","match","parseMultiLineComment","parseSingleLineComment","parseTemplateLiteral","undefined","parseTemplateTag","parseString","index","_results","startToken","_template","_startToken","stack","Error","contents","templateStart","slice","push","type","tagName","start","end"],"mappings":"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"}
@@ -1,174 +1,9 @@
1
1
  import { getTemplateLocals } from '@glimmer/syntax';
2
+ import lineColumn from 'line-column';
2
3
  import MagicString from 'magic-string';
3
4
  import { expect } from './debug.js';
4
5
  import { parseTemplates } from './parse-templates.js';
5
6
 
6
- function getDefaultExportFromCjs (x) {
7
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
8
- }
9
-
10
- var toString = {}.toString;
11
- var isarray = Array.isArray || function (arr) {
12
- return toString.call(arr) == '[object Array]';
13
- };
14
-
15
- /*!
16
- * isobject <https://github.com/jonschlinkert/isobject>
17
- *
18
- * Copyright (c) 2014-2015, Jon Schlinkert.
19
- * Licensed under the MIT License.
20
- */
21
-
22
- var isArray$1 = isarray;
23
- var isobject = function isObject(val) {
24
- return val != null && typeof val === 'object' && isArray$1(val) === false;
25
- };
26
-
27
- /**
28
- * line-column - Convert efficiently index to/from line-column in a string
29
- * @module lineColumn
30
- * @license MIT
31
- */
32
-
33
- var isArray = isarray;
34
- var isObject = isobject;
35
- var lineColumn = LineColumnFinder;
36
-
37
- /**
38
- * Finder for index and line-column from given string.
39
- *
40
- * You can call this without `new` operator as it returns an instance anyway.
41
- *
42
- * @class
43
- * @param {string} str - A string to be parsed.
44
- * @param {Object|number} [options] - Options.
45
- * This can be an index in the string for shorthand of `lineColumn(str, index)`.
46
- * @param {number} [options.origin=1] - The origin value of line and column.
47
- */
48
- function LineColumnFinder(str, options) {
49
- if (!(this instanceof LineColumnFinder)) {
50
- if (typeof options === "number") {
51
- return new LineColumnFinder(str).fromIndex(options);
52
- }
53
- return new LineColumnFinder(str, options);
54
- }
55
- this.str = str || "";
56
- this.lineToIndex = buildLineToIndex(this.str);
57
- options = options || {};
58
- this.origin = typeof options.origin === "undefined" ? 1 : options.origin;
59
- }
60
-
61
- /**
62
- * Find line and column from index in the string.
63
- *
64
- * @param {number} index - Index in the string. (0-origin)
65
- * @return {Object|null}
66
- * Found line number and column number in object `{ line: X, col: Y }`.
67
- * If the given index is out of range, it returns `null`.
68
- */
69
- LineColumnFinder.prototype.fromIndex = function (index) {
70
- if (index < 0 || index >= this.str.length || isNaN(index)) {
71
- return null;
72
- }
73
- var line = findLowerIndexInRangeArray(index, this.lineToIndex);
74
- return {
75
- line: line + this.origin,
76
- col: index - this.lineToIndex[line] + this.origin
77
- };
78
- };
79
-
80
- /**
81
- * Find index from line and column in the string.
82
- *
83
- * @param {number|Object|Array} line - Line number in the string.
84
- * This can be an Object of `{ line: X, col: Y }`, or
85
- * an Array of `[line, col]`.
86
- * @param {number} [column] - Column number in the string.
87
- * This must be omitted or undefined when Object or Array is given
88
- * to the first argument.
89
- * @return {number}
90
- * Found index in the string. (always 0-origin)
91
- * If the given line or column is out of range, it returns `-1`.
92
- */
93
- LineColumnFinder.prototype.toIndex = function (line, column) {
94
- if (typeof column === "undefined") {
95
- if (isArray(line) && line.length >= 2) {
96
- return this.toIndex(line[0], line[1]);
97
- }
98
- if (isObject(line) && "line" in line && ("col" in line || "column" in line)) {
99
- return this.toIndex(line.line, "col" in line ? line.col : line.column);
100
- }
101
- return -1;
102
- }
103
- if (isNaN(line) || isNaN(column)) {
104
- return -1;
105
- }
106
- line -= this.origin;
107
- column -= this.origin;
108
- if (line >= 0 && column >= 0 && line < this.lineToIndex.length) {
109
- var lineIndex = this.lineToIndex[line];
110
- var nextIndex = line === this.lineToIndex.length - 1 ? this.str.length : this.lineToIndex[line + 1];
111
- if (column < nextIndex - lineIndex) {
112
- return lineIndex + column;
113
- }
114
- }
115
- return -1;
116
- };
117
-
118
- /**
119
- * Build an array of indexes of each line from a string.
120
- *
121
- * @private
122
- * @param str {string} An input string.
123
- * @return {number[]} Built array of indexes. The key is line number.
124
- */
125
- function buildLineToIndex(str) {
126
- var lines = str.split("\n"),
127
- lineToIndex = new Array(lines.length),
128
- index = 0;
129
- for (var i = 0, l = lines.length; i < l; i++) {
130
- lineToIndex[i] = index;
131
- index += lines[i].length + /* "\n".length */1;
132
- }
133
- return lineToIndex;
134
- }
135
-
136
- /**
137
- * Find a lower-bound index of a value in a sorted array of ranges.
138
- *
139
- * Assume `arr = [0, 5, 10, 15, 20]` and
140
- * this returns `1` for `value = 7` (5 <= value < 10),
141
- * and returns `3` for `value = 18` (15 <= value < 20).
142
- *
143
- * @private
144
- * @param arr {number[]} An array of values representing ranges.
145
- * @param value {number} A value to be searched.
146
- * @return {number} Found index. If not found `-1`.
147
- */
148
- function findLowerIndexInRangeArray(value, arr) {
149
- if (value >= arr[arr.length - 1]) {
150
- return arr.length - 1;
151
- }
152
- var min = 0,
153
- max = arr.length - 2,
154
- mid;
155
- while (min < max) {
156
- mid = min + (max - min >> 1);
157
- if (value < arr[mid]) {
158
- max = mid - 1;
159
- } else if (value >= arr[mid + 1]) {
160
- min = mid + 1;
161
- } else {
162
- // value >= arr[mid] && value < arr[mid + 1]
163
- min = mid;
164
- break;
165
- }
166
- }
167
- return min;
168
- }
169
-
170
- var lineColumn$1 = /*@__PURE__*/getDefaultExportFromCjs(lineColumn);
171
-
172
7
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
173
8
  // @ts-ignore
174
9
  function getMatchStartAndEnd(match) {
@@ -178,7 +13,7 @@ function getMatchStartAndEnd(match) {
178
13
  };
179
14
  }
180
15
  function replacementFrom(template, index, oldLength, newLength, type) {
181
- const loc = expect(lineColumn$1(template).fromIndex(index), 'BUG: expected to find a line/column based on index');
16
+ const loc = expect(lineColumn(template).fromIndex(index), 'BUG: expected to find a line/column based on index');
182
17
  return {
183
18
  type,
184
19
  index,
@@ -1 +1 @@
1
- {"version":3,"file":"preprocess.js","sources":["../../../../../../node_modules/.pnpm/isarray@1.0.0/node_modules/isarray/index.js","../../../../../../node_modules/.pnpm/isobject@2.1.0/node_modules/isobject/index.js","../../../../../../node_modules/.pnpm/line-column@1.0.2/node_modules/line-column/lib/line-column.js","../../../src/browser/eti/preprocess.ts"],"sourcesContent":["var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*!\n * isobject <https://github.com/jonschlinkert/isobject>\n *\n * Copyright (c) 2014-2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nvar isArray = require('isarray');\n\nmodule.exports = function isObject(val) {\n return val != null && typeof val === 'object' && isArray(val) === false;\n};\n","/**\n * line-column - Convert efficiently index to/from line-column in a string\n * @module lineColumn\n * @license MIT\n */\n\"use strict\";\n\nvar isArray = require(\"isarray\");\nvar isObject = require(\"isobject\");\nvar slice = Array.prototype.slice;\n\nmodule.exports = LineColumnFinder;\n\n/**\n * Finder for index and line-column from given string.\n *\n * You can call this without `new` operator as it returns an instance anyway.\n *\n * @class\n * @param {string} str - A string to be parsed.\n * @param {Object|number} [options] - Options.\n * This can be an index in the string for shorthand of `lineColumn(str, index)`.\n * @param {number} [options.origin=1] - The origin value of line and column.\n */\nfunction LineColumnFinder(str, options) {\n if (!(this instanceof LineColumnFinder)) {\n if (typeof options === \"number\") {\n return (new LineColumnFinder(str)).fromIndex(options);\n }\n return new LineColumnFinder(str, options);\n }\n\n this.str = str || \"\";\n this.lineToIndex = buildLineToIndex(this.str);\n\n options = options || {};\n this.origin = typeof options.origin === \"undefined\" ? 1 : options.origin;\n}\n\n/**\n * Find line and column from index in the string.\n *\n * @param {number} index - Index in the string. (0-origin)\n * @return {Object|null}\n * Found line number and column number in object `{ line: X, col: Y }`.\n * If the given index is out of range, it returns `null`.\n */\nLineColumnFinder.prototype.fromIndex = function (index) {\n if (index < 0 || index >= this.str.length || isNaN(index)) {\n return null;\n }\n\n var line = findLowerIndexInRangeArray(index, this.lineToIndex);\n return {\n line: line + this.origin,\n col: index - this.lineToIndex[line] + this.origin\n };\n}\n\n/**\n * Find index from line and column in the string.\n *\n * @param {number|Object|Array} line - Line number in the string.\n * This can be an Object of `{ line: X, col: Y }`, or\n * an Array of `[line, col]`.\n * @param {number} [column] - Column number in the string.\n * This must be omitted or undefined when Object or Array is given\n * to the first argument.\n * @return {number}\n * Found index in the string. (always 0-origin)\n * If the given line or column is out of range, it returns `-1`.\n */\nLineColumnFinder.prototype.toIndex = function (line, column) {\n if (typeof column === \"undefined\") {\n if (isArray(line) && line.length >= 2) {\n return this.toIndex(line[0], line[1]);\n }\n if (isObject(line) && \"line\" in line && (\"col\" in line || \"column\" in line)) {\n return this.toIndex(line.line, (\"col\" in line ? line.col : line.column));\n }\n return -1;\n }\n if (isNaN(line) || isNaN(column)) {\n return -1;\n }\n\n line -= this.origin;\n column -= this.origin;\n\n if (line >= 0 && column >= 0 && line < this.lineToIndex.length) {\n var lineIndex = this.lineToIndex[line];\n var nextIndex = (\n line === this.lineToIndex.length - 1\n ? this.str.length\n : this.lineToIndex[line + 1]\n );\n\n if (column < nextIndex - lineIndex) {\n return lineIndex + column;\n }\n }\n return -1;\n}\n\n/**\n * Build an array of indexes of each line from a string.\n *\n * @private\n * @param str {string} An input string.\n * @return {number[]} Built array of indexes. The key is line number.\n */\nfunction buildLineToIndex(str) {\n var lines = str.split(\"\\n\"),\n lineToIndex = new Array(lines.length),\n index = 0;\n\n for (var i = 0, l = lines.length; i < l; i++) {\n lineToIndex[i] = index;\n index += lines[i].length + /* \"\\n\".length */ 1;\n }\n return lineToIndex;\n}\n\n/**\n * Find a lower-bound index of a value in a sorted array of ranges.\n *\n * Assume `arr = [0, 5, 10, 15, 20]` and\n * this returns `1` for `value = 7` (5 <= value < 10),\n * and returns `3` for `value = 18` (15 <= value < 20).\n *\n * @private\n * @param arr {number[]} An array of values representing ranges.\n * @param value {number} A value to be searched.\n * @return {number} Found index. If not found `-1`.\n */\nfunction findLowerIndexInRangeArray(value, arr) {\n if (value >= arr[arr.length - 1]) {\n return arr.length - 1;\n }\n\n var min = 0, max = arr.length - 2, mid;\n while (min < max) {\n mid = min + ((max - min) >> 1);\n\n if (value < arr[mid]) {\n max = mid - 1;\n } else if (value >= arr[mid + 1]) {\n min = mid + 1;\n } else { // value >= arr[mid] && value < arr[mid + 1]\n min = mid;\n break;\n }\n }\n return min;\n}\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { getTemplateLocals } from '@glimmer/syntax';\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport lineColumn from 'line-column';\nimport MagicString from 'magic-string';\n\nimport { expect } from './debug';\nimport { parseTemplates } from './parse-templates';\n\nimport type { ParseTemplatesOptions, TemplateMatch } from './parse-templates';\n\ninterface PreprocessOptionsEager {\n importIdentifier?: string;\n importPath?: string;\n templateTag?: string;\n templateTagReplacement?: string;\n\n relativePath: string;\n includeSourceMaps: boolean;\n includeTemplateTokens: boolean;\n}\n\ninterface PreprocessOptionsLazy {\n importIdentifier?: string;\n importPath?: string;\n templateTag?: string;\n templateTagReplacement?: string;\n\n relativePath: string;\n includeSourceMaps: boolean;\n includeTemplateTokens: boolean;\n}\n\ntype PreprocessOptions = PreprocessOptionsLazy | PreprocessOptionsEager;\n\ninterface PreprocessedOutput {\n output: string;\n replacements: Replacement[];\n}\n\ninterface Replacement {\n type: 'start' | 'end';\n index: number;\n oldLength: number;\n newLength: number;\n originalLine: number;\n originalCol: number;\n}\n\nfunction getMatchStartAndEnd(match: RegExpMatchArray) {\n return {\n start: expect(match.index, 'Expected regular expression match to have an index'),\n end:\n expect(match.index, 'Expected regular expression match to have an index') + match[0].length,\n };\n}\n\nfunction replacementFrom(\n template: string,\n index: number,\n oldLength: number,\n newLength: number,\n type: 'start' | 'end'\n): Replacement {\n const loc = expect(\n lineColumn(template).fromIndex(index),\n 'BUG: expected to find a line/column based on index'\n );\n\n return {\n type,\n index,\n oldLength,\n newLength,\n originalCol: loc.col,\n originalLine: loc.line,\n };\n}\n\nfunction replaceMatch(\n s: MagicString,\n match: TemplateMatch,\n startReplacement: string,\n endReplacement: string,\n template: string,\n includeTemplateTokens: boolean\n): Replacement[] {\n const { start: openStart, end: openEnd } = getMatchStartAndEnd(match.start);\n const { start: closeStart, end: closeEnd } = getMatchStartAndEnd(match.end);\n\n let options = '';\n\n if (includeTemplateTokens) {\n const tokensString = getTemplateLocals(template.slice(openEnd, closeStart))\n .filter((local: string) => local.match(/^[$A-Z_][0-9A-Z_$]*$/i))\n .join(',');\n\n if (tokensString.length > 0) {\n options = `, scope: () => ({${tokensString}})`;\n }\n }\n\n const newStart = `${startReplacement}\\``;\n const newEnd = `\\`, { strictMode: true${options} }${endReplacement}`;\n\n s.overwrite(openStart, openEnd, newStart);\n s.overwrite(closeStart, closeEnd, newEnd);\n ensureBackticksEscaped(s, openEnd + 1, closeStart - 1);\n\n return [\n replacementFrom(template, openStart, openEnd - openStart, newStart.length, 'start'),\n replacementFrom(template, closeStart, closeEnd - closeStart, newEnd.length, 'end'),\n ];\n}\n\n/**\n * Preprocesses all embedded templates within a JavaScript or TypeScript file.\n * This function replaces all embedded templates that match our template syntax\n * with valid, parseable JS. Optionally, it can also include a source map, and\n * it can also include all possible values used within the template.\n *\n * Input:\n *\n * <template><MyComponent/><template>\n *\n * Output:\n *\n * [GLIMMER_TEMPLATE(`<MyComponent/>`, { scope() { return {MyComponent}; } })];\n *\n * It can also be used with template literals to provide the in scope values:\n *\n * Input:\n *\n * hbs`<MyComponent/>`;\n *\n * Output\n *\n * hbs(`<MyComponent/>`, { scope() { return {MyComponent}; } });\n */\nexport function preprocessEmbeddedTemplates(\n template: string,\n options: PreprocessOptions\n): PreprocessedOutput {\n const { templateTag, templateTagReplacement, includeTemplateTokens, relativePath } = options;\n\n const parseTemplatesOptions: ParseTemplatesOptions = {\n templateTag,\n };\n\n const matches = parseTemplates(template, relativePath, parseTemplatesOptions);\n const replacements: Replacement[] = [];\n const s = new MagicString(template);\n\n for (const match of matches) {\n if (match.type === 'template-tag') {\n replacements.push(\n ...replaceMatch(\n s,\n match,\n `[${templateTagReplacement}(`,\n ')]',\n template,\n includeTemplateTokens\n )\n );\n }\n }\n\n let output = s.toString();\n\n return {\n output,\n replacements,\n };\n}\n\nfunction ensureBackticksEscaped(s: MagicString, start: number, end: number) {\n if (start >= end) return;\n\n let content = s.slice(start, end);\n\n content = content.replace(/(?<!\\\\)`/g, '\\\\`');\n s.overwrite(start, end, content, false);\n}\n"],"names":["toString","module","Array","isArray","arr","call","require","isObject","val","LineColumnFinder","str","options","fromIndex","lineToIndex","buildLineToIndex","origin","prototype","index","length","isNaN","line","findLowerIndexInRangeArray","col","toIndex","column","lineIndex","nextIndex","lines","split","i","l","value","min","max","mid","getMatchStartAndEnd","match","start","expect","end","replacementFrom","template","oldLength","newLength","type","loc","lineColumn","originalCol","originalLine","replaceMatch","s","startReplacement","endReplacement","includeTemplateTokens","openStart","openEnd","closeStart","closeEnd","tokensString","getTemplateLocals","slice","filter","local","join","newStart","newEnd","overwrite","ensureBackticksEscaped","preprocessEmbeddedTemplates","templateTag","templateTagReplacement","relativePath","parseTemplatesOptions","matches","parseTemplates","replacements","MagicString","push","output","content","replace"],"mappings":"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","x_google_ignoreList":[0,1,2]}
1
+ {"version":3,"file":"preprocess.js","sources":["../../../src/browser/eti/preprocess.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { getTemplateLocals } from '@glimmer/syntax';\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport lineColumn from 'line-column';\nimport MagicString from 'magic-string';\n\nimport { expect } from './debug.ts';\nimport { parseTemplates } from './parse-templates.ts';\n\nimport type { ParseTemplatesOptions, TemplateMatch } from './parse-templates.ts';\n\ninterface PreprocessOptionsEager {\n importIdentifier?: string;\n importPath?: string;\n templateTag?: string;\n templateTagReplacement?: string;\n\n relativePath: string;\n includeSourceMaps: boolean;\n includeTemplateTokens: boolean;\n}\n\ninterface PreprocessOptionsLazy {\n importIdentifier?: string;\n importPath?: string;\n templateTag?: string;\n templateTagReplacement?: string;\n\n relativePath: string;\n includeSourceMaps: boolean;\n includeTemplateTokens: boolean;\n}\n\ntype PreprocessOptions = PreprocessOptionsLazy | PreprocessOptionsEager;\n\ninterface PreprocessedOutput {\n output: string;\n replacements: Replacement[];\n}\n\ninterface Replacement {\n type: 'start' | 'end';\n index: number;\n oldLength: number;\n newLength: number;\n originalLine: number;\n originalCol: number;\n}\n\nfunction getMatchStartAndEnd(match: RegExpMatchArray) {\n return {\n start: expect(match.index, 'Expected regular expression match to have an index'),\n end:\n expect(match.index, 'Expected regular expression match to have an index') + match[0].length,\n };\n}\n\nfunction replacementFrom(\n template: string,\n index: number,\n oldLength: number,\n newLength: number,\n type: 'start' | 'end'\n): Replacement {\n const loc = expect(\n lineColumn(template).fromIndex(index),\n 'BUG: expected to find a line/column based on index'\n );\n\n return {\n type,\n index,\n oldLength,\n newLength,\n originalCol: loc.col,\n originalLine: loc.line,\n };\n}\n\nfunction replaceMatch(\n s: MagicString,\n match: TemplateMatch,\n startReplacement: string,\n endReplacement: string,\n template: string,\n includeTemplateTokens: boolean\n): Replacement[] {\n const { start: openStart, end: openEnd } = getMatchStartAndEnd(match.start);\n const { start: closeStart, end: closeEnd } = getMatchStartAndEnd(match.end);\n\n let options = '';\n\n if (includeTemplateTokens) {\n const tokensString = getTemplateLocals(template.slice(openEnd, closeStart))\n .filter((local: string) => local.match(/^[$A-Z_][0-9A-Z_$]*$/i))\n .join(',');\n\n if (tokensString.length > 0) {\n options = `, scope: () => ({${tokensString}})`;\n }\n }\n\n const newStart = `${startReplacement}\\``;\n const newEnd = `\\`, { strictMode: true${options} }${endReplacement}`;\n\n s.overwrite(openStart, openEnd, newStart);\n s.overwrite(closeStart, closeEnd, newEnd);\n ensureBackticksEscaped(s, openEnd + 1, closeStart - 1);\n\n return [\n replacementFrom(template, openStart, openEnd - openStart, newStart.length, 'start'),\n replacementFrom(template, closeStart, closeEnd - closeStart, newEnd.length, 'end'),\n ];\n}\n\n/**\n * Preprocesses all embedded templates within a JavaScript or TypeScript file.\n * This function replaces all embedded templates that match our template syntax\n * with valid, parseable JS. Optionally, it can also include a source map, and\n * it can also include all possible values used within the template.\n *\n * Input:\n *\n * <template><MyComponent/><template>\n *\n * Output:\n *\n * [GLIMMER_TEMPLATE(`<MyComponent/>`, { scope() { return {MyComponent}; } })];\n *\n * It can also be used with template literals to provide the in scope values:\n *\n * Input:\n *\n * hbs`<MyComponent/>`;\n *\n * Output\n *\n * hbs(`<MyComponent/>`, { scope() { return {MyComponent}; } });\n */\nexport function preprocessEmbeddedTemplates(\n template: string,\n options: PreprocessOptions\n): PreprocessedOutput {\n const { templateTag, templateTagReplacement, includeTemplateTokens, relativePath } = options;\n\n const parseTemplatesOptions: ParseTemplatesOptions = {\n templateTag,\n };\n\n const matches = parseTemplates(template, relativePath, parseTemplatesOptions);\n const replacements: Replacement[] = [];\n const s = new MagicString(template);\n\n for (const match of matches) {\n if (match.type === 'template-tag') {\n replacements.push(\n ...replaceMatch(\n s,\n match,\n `[${templateTagReplacement}(`,\n ')]',\n template,\n includeTemplateTokens\n )\n );\n }\n }\n\n let output = s.toString();\n\n return {\n output,\n replacements,\n };\n}\n\nfunction ensureBackticksEscaped(s: MagicString, start: number, end: number) {\n if (start >= end) return;\n\n let content = s.slice(start, end);\n\n content = content.replace(/(?<!\\\\)`/g, '\\\\`');\n s.overwrite(start, end, content, false);\n}\n"],"names":["getMatchStartAndEnd","match","start","expect","index","end","length","replacementFrom","template","oldLength","newLength","type","loc","lineColumn","fromIndex","originalCol","col","originalLine","line","replaceMatch","s","startReplacement","endReplacement","includeTemplateTokens","openStart","openEnd","closeStart","closeEnd","options","tokensString","getTemplateLocals","slice","filter","local","join","newStart","newEnd","overwrite","ensureBackticksEscaped","preprocessEmbeddedTemplates","templateTag","templateTagReplacement","relativePath","parseTemplatesOptions","matches","parseTemplates","replacements","MagicString","push","output","toString","content","replace"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"template-tag-transform.js","sources":["../../../src/browser/eti/template-tag-transform.ts"],"sourcesContent":["import { buildPrecompileTemplateCall, registerRefs, TEMPLATE_TAG_NAME } from './util';\n\n/**\n * Supports the following syntaxes:\n *\n * const Foo = [GLIMMER_TEMPLATE('hello')];\n *\n * export const Foo = [GLIMMER_TEMPLATE('hello')];\n *\n * export default [GLIMMER_TEMPLATE('hello')];\n *\n * class Foo {\n * [GLIMMER_TEMPLATE('hello')];\n * }\n */\nexport const transformTemplateTag = function (t: any, templatePath: any, state: any) {\n let compiled = buildPrecompileTemplateCall(t, templatePath, state);\n let path = templatePath.parentPath;\n\n if (path.type === 'ArrayExpression') {\n let arrayParentPath = path.parentPath;\n let varId = arrayParentPath.node.id || path.scope.generateUidIdentifier(templatePath);\n\n const templateOnlyComponentExpression = t.callExpression(\n buildSetComponentTemplate(path, state),\n [\n compiled,\n t.callExpression(\n state.importUtil.import(\n templatePath,\n '@ember/component/template-only',\n 'default',\n 'templateOnly'\n ),\n [t.stringLiteral('dynamic-runtime-file.js'), t.stringLiteral(varId.name)]\n ),\n ]\n );\n\n if (\n arrayParentPath.type === 'ExpressionStatement' &&\n arrayParentPath.parentPath.type === 'Program'\n ) {\n registerRefs(\n arrayParentPath.replaceWith(t.exportDefaultDeclaration(templateOnlyComponentExpression)),\n (newPath: any) => [\n newPath.get('declaration.callee'),\n newPath.get('declaration.arguments.0.callee'),\n newPath.get('declaration.arguments.1.callee'),\n ]\n );\n } else {\n registerRefs(path.replaceWith(templateOnlyComponentExpression), (newPath: any) => [\n newPath.get('callee'),\n newPath.get('arguments.0.callee'),\n newPath.get('arguments.1.callee'),\n ]);\n }\n } else if (path.type === 'ClassProperty') {\n let classPath = path.parentPath.parentPath;\n\n if (classPath.node.type === 'ClassDeclaration') {\n registerRefs(\n classPath.insertAfter(\n t.expressionStatement(\n t.callExpression(buildSetComponentTemplate(path, state), [compiled, classPath.node.id])\n )\n ),\n (newPath: any) => [\n newPath.get('expression.callee'),\n newPath.get('expression.arguments.0.callee'),\n ]\n );\n } else {\n registerRefs(\n classPath.replaceWith(\n t.expressionStatement(\n t.callExpression(buildSetComponentTemplate(path, state), [compiled, classPath.node])\n )\n ),\n (newPath: any) => [\n newPath.parentPath.get('callee'),\n newPath.parentPath.get('arguments.0.callee'),\n ]\n );\n }\n\n path.remove();\n\n return;\n } else {\n throw path.buildCodeFrameError(\n `Attempted to use \\`<${TEMPLATE_TAG_NAME}>\\` to define a template in an unsupported way. Templates defined using this syntax must be:\\n\\n1. Assigned to a variable declaration OR\\n2. The default export of a file OR\\n2. In the top level of the file on their own (sugar for \\`export default\\`) OR\\n4. Used directly within a named class body`\n );\n }\n};\n\nfunction buildSetComponentTemplate(path: any, state: any) {\n return state.importUtil.import(path, '@ember/component', 'setComponentTemplate');\n}\n"],"names":["transformTemplateTag","t","templatePath","state","compiled","buildPrecompileTemplateCall","path","parentPath","type","arrayParentPath","varId","node","id","scope","generateUidIdentifier","templateOnlyComponentExpression","callExpression","buildSetComponentTemplate","importUtil","import","stringLiteral","name","registerRefs","replaceWith","exportDefaultDeclaration","newPath","get","classPath","insertAfter","expressionStatement","remove","buildCodeFrameError","TEMPLATE_TAG_NAME"],"mappings":"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"}
1
+ {"version":3,"file":"template-tag-transform.js","sources":["../../../src/browser/eti/template-tag-transform.ts"],"sourcesContent":["import { buildPrecompileTemplateCall, registerRefs, TEMPLATE_TAG_NAME } from './util.ts';\n\n/**\n * Supports the following syntaxes:\n *\n * const Foo = [GLIMMER_TEMPLATE('hello')];\n *\n * export const Foo = [GLIMMER_TEMPLATE('hello')];\n *\n * export default [GLIMMER_TEMPLATE('hello')];\n *\n * class Foo {\n * [GLIMMER_TEMPLATE('hello')];\n * }\n */\nexport const transformTemplateTag = function (t: any, templatePath: any, state: any) {\n let compiled = buildPrecompileTemplateCall(t, templatePath, state);\n let path = templatePath.parentPath;\n\n if (path.type === 'ArrayExpression') {\n let arrayParentPath = path.parentPath;\n let varId = arrayParentPath.node.id || path.scope.generateUidIdentifier(templatePath);\n\n const templateOnlyComponentExpression = t.callExpression(\n buildSetComponentTemplate(path, state),\n [\n compiled,\n t.callExpression(\n state.importUtil.import(\n templatePath,\n '@ember/component/template-only',\n 'default',\n 'templateOnly'\n ),\n [t.stringLiteral('dynamic-runtime-file.js'), t.stringLiteral(varId.name)]\n ),\n ]\n );\n\n if (\n arrayParentPath.type === 'ExpressionStatement' &&\n arrayParentPath.parentPath.type === 'Program'\n ) {\n registerRefs(\n arrayParentPath.replaceWith(t.exportDefaultDeclaration(templateOnlyComponentExpression)),\n (newPath: any) => [\n newPath.get('declaration.callee'),\n newPath.get('declaration.arguments.0.callee'),\n newPath.get('declaration.arguments.1.callee'),\n ]\n );\n } else {\n registerRefs(path.replaceWith(templateOnlyComponentExpression), (newPath: any) => [\n newPath.get('callee'),\n newPath.get('arguments.0.callee'),\n newPath.get('arguments.1.callee'),\n ]);\n }\n } else if (path.type === 'ClassProperty') {\n let classPath = path.parentPath.parentPath;\n\n if (classPath.node.type === 'ClassDeclaration') {\n registerRefs(\n classPath.insertAfter(\n t.expressionStatement(\n t.callExpression(buildSetComponentTemplate(path, state), [compiled, classPath.node.id])\n )\n ),\n (newPath: any) => [\n newPath.get('expression.callee'),\n newPath.get('expression.arguments.0.callee'),\n ]\n );\n } else {\n registerRefs(\n classPath.replaceWith(\n t.expressionStatement(\n t.callExpression(buildSetComponentTemplate(path, state), [compiled, classPath.node])\n )\n ),\n (newPath: any) => [\n newPath.parentPath.get('callee'),\n newPath.parentPath.get('arguments.0.callee'),\n ]\n );\n }\n\n path.remove();\n\n return;\n } else {\n throw path.buildCodeFrameError(\n `Attempted to use \\`<${TEMPLATE_TAG_NAME}>\\` to define a template in an unsupported way. Templates defined using this syntax must be:\\n\\n1. Assigned to a variable declaration OR\\n2. The default export of a file OR\\n2. In the top level of the file on their own (sugar for \\`export default\\`) OR\\n4. Used directly within a named class body`\n );\n }\n};\n\nfunction buildSetComponentTemplate(path: any, state: any) {\n return state.importUtil.import(path, '@ember/component', 'setComponentTemplate');\n}\n"],"names":["transformTemplateTag","t","templatePath","state","compiled","buildPrecompileTemplateCall","path","parentPath","type","arrayParentPath","varId","node","id","scope","generateUidIdentifier","templateOnlyComponentExpression","callExpression","buildSetComponentTemplate","importUtil","import","stringLiteral","name","registerRefs","replaceWith","exportDefaultDeclaration","newPath","get","classPath","insertAfter","expressionStatement","remove","buildCodeFrameError","TEMPLATE_TAG_NAME"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sources":["../../../src/browser/eti/util.ts"],"sourcesContent":["import type { TemplateMatch } from './parse-templates';\nimport type { NodePath } from '@babel/traverse';\nimport type { CallExpression } from '@babel/types';\nimport type { ImportUtil } from 'babel-import-util';\n\n// const Greeting = <template>Hello</template>\nexport const TEMPLATE_TAG_NAME = 'template';\nexport const TEMPLATE_TAG_PLACEHOLDER = '__GLIMMER_TEMPLATE';\n\nexport function isTemplateTag(callExpressionPath: NodePath<CallExpression>) {\n const callee = callExpressionPath.get('callee');\n\n return (\n !Array.isArray(callee) && callee.isIdentifier() && callee.node.name === TEMPLATE_TAG_PLACEHOLDER\n );\n}\n\nexport function buildPrecompileTemplateCall(\n t: any,\n callExpressionPath: NodePath<CallExpression>,\n state: {\n importUtil: ImportUtil;\n }\n): CallExpression {\n const callee = callExpressionPath.get('callee');\n\n return t.callExpression(\n state.importUtil.import(callee, '@ember/template-compilation', 'precompileTemplate'),\n callExpressionPath.node.arguments\n );\n}\n\nexport function registerRefs(\n newPath: string | string[],\n getRefPaths: (path: string) => NodePath[]\n) {\n if (Array.isArray(newPath)) {\n if (newPath.length > 1) {\n throw new Error(\n 'registerRefs is only meant to handle single node transformations. Received more than one path node.'\n );\n }\n\n newPath = newPath[0] as string;\n }\n\n const refPaths = getRefPaths(newPath);\n\n for (const ref of refPaths) {\n if (!ref.isIdentifier()) {\n throw new Error(\n 'ember-template-imports internal assumption that refPath should of type identifier. Please open an issue.'\n );\n }\n\n const binding = ref.scope.getBinding(ref.node.name);\n\n if (binding !== undefined) {\n binding.reference(ref);\n }\n }\n}\n\nconst SUPPORTED_EXTENSIONS = ['.js', '.ts', '.gjs', '.gts'];\n\nexport function isSupportedScriptFileExtension(filePath: string) {\n return SUPPORTED_EXTENSIONS.some((ext) => filePath.endsWith(ext));\n}\n\nexport function isStrictMode(templateInfo: TemplateMatch): boolean {\n return templateInfo.type === 'template-tag';\n}\n"],"names":["TEMPLATE_TAG_NAME","TEMPLATE_TAG_PLACEHOLDER","isTemplateTag","callExpressionPath","callee","get","Array","isArray","isIdentifier","node","name","buildPrecompileTemplateCall","t","state","callExpression","importUtil","import","arguments","registerRefs","newPath","getRefPaths","length","Error","refPaths","ref","binding","scope","getBinding","undefined","reference","SUPPORTED_EXTENSIONS","isSupportedScriptFileExtension","filePath","some","ext","endsWith","isStrictMode","templateInfo","type"],"mappings":"AAKA;AACO,MAAMA,iBAAiB,GAAG,WAAU;AACpC,MAAMC,wBAAwB,GAAG,qBAAoB;AAErD,SAASC,aAAaA,CAACC,kBAA4C,EAAE;AAC1E,EAAA,MAAMC,MAAM,GAAGD,kBAAkB,CAACE,GAAG,CAAC,QAAQ,CAAC,CAAA;EAE/C,OACE,CAACC,KAAK,CAACC,OAAO,CAACH,MAAM,CAAC,IAAIA,MAAM,CAACI,YAAY,EAAE,IAAIJ,MAAM,CAACK,IAAI,CAACC,IAAI,KAAKT,wBAAwB,CAAA;AAEpG,CAAA;AAEO,SAASU,2BAA2BA,CACzCC,CAAM,EACNT,kBAA4C,EAC5CU,KAEC,EACe;AAChB,EAAA,MAAMT,MAAM,GAAGD,kBAAkB,CAACE,GAAG,CAAC,QAAQ,CAAC,CAAA;EAE/C,OAAOO,CAAC,CAACE,cAAc,CACrBD,KAAK,CAACE,UAAU,CAACC,MAAM,CAACZ,MAAM,EAAE,6BAA6B,EAAE,oBAAoB,CAAC,EACpFD,kBAAkB,CAACM,IAAI,CAACQ,SAC1B,CAAC,CAAA;AACH,CAAA;AAEO,SAASC,YAAYA,CAC1BC,OAA0B,EAC1BC,WAAyC,EACzC;AACA,EAAA,IAAId,KAAK,CAACC,OAAO,CAACY,OAAO,CAAC,EAAE;AAC1B,IAAA,IAAIA,OAAO,CAACE,MAAM,GAAG,CAAC,EAAE;AACtB,MAAA,MAAM,IAAIC,KAAK,CACb,qGACF,CAAC,CAAA;AACH,KAAA;AAEAH,IAAAA,OAAO,GAAGA,OAAO,CAAC,CAAC,CAAW,CAAA;AAChC,GAAA;AAEA,EAAA,MAAMI,QAAQ,GAAGH,WAAW,CAACD,OAAO,CAAC,CAAA;AAErC,EAAA,KAAK,MAAMK,GAAG,IAAID,QAAQ,EAAE;AAC1B,IAAA,IAAI,CAACC,GAAG,CAAChB,YAAY,EAAE,EAAE;AACvB,MAAA,MAAM,IAAIc,KAAK,CACb,0GACF,CAAC,CAAA;AACH,KAAA;AAEA,IAAA,MAAMG,OAAO,GAAGD,GAAG,CAACE,KAAK,CAACC,UAAU,CAACH,GAAG,CAACf,IAAI,CAACC,IAAI,CAAC,CAAA;IAEnD,IAAIe,OAAO,KAAKG,SAAS,EAAE;AACzBH,MAAAA,OAAO,CAACI,SAAS,CAACL,GAAG,CAAC,CAAA;AACxB,KAAA;AACF,GAAA;AACF,CAAA;AAEA,MAAMM,oBAAoB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAEpD,SAASC,8BAA8BA,CAACC,QAAgB,EAAE;AAC/D,EAAA,OAAOF,oBAAoB,CAACG,IAAI,CAAEC,GAAG,IAAKF,QAAQ,CAACG,QAAQ,CAACD,GAAG,CAAC,CAAC,CAAA;AACnE,CAAA;AAEO,SAASE,YAAYA,CAACC,YAA2B,EAAW;AACjE,EAAA,OAAOA,YAAY,CAACC,IAAI,KAAK,cAAc,CAAA;AAC7C;;;;"}
1
+ {"version":3,"file":"util.js","sources":["../../../src/browser/eti/util.ts"],"sourcesContent":["import type { TemplateMatch } from './parse-templates.ts';\nimport type { NodePath } from '@babel/traverse';\nimport type { CallExpression } from '@babel/types';\nimport type { ImportUtil } from 'babel-import-util';\n\n// const Greeting = <template>Hello</template>\nexport const TEMPLATE_TAG_NAME = 'template';\nexport const TEMPLATE_TAG_PLACEHOLDER = '__GLIMMER_TEMPLATE';\n\nexport function isTemplateTag(callExpressionPath: NodePath<CallExpression>) {\n const callee = callExpressionPath.get('callee');\n\n return (\n !Array.isArray(callee) && callee.isIdentifier() && callee.node.name === TEMPLATE_TAG_PLACEHOLDER\n );\n}\n\nexport function buildPrecompileTemplateCall(\n t: any,\n callExpressionPath: NodePath<CallExpression>,\n state: {\n importUtil: ImportUtil;\n }\n): CallExpression {\n const callee = callExpressionPath.get('callee');\n\n return t.callExpression(\n state.importUtil.import(callee, '@ember/template-compilation', 'precompileTemplate'),\n callExpressionPath.node.arguments\n );\n}\n\nexport function registerRefs(\n newPath: string | string[],\n getRefPaths: (path: string) => NodePath[]\n) {\n if (Array.isArray(newPath)) {\n if (newPath.length > 1) {\n throw new Error(\n 'registerRefs is only meant to handle single node transformations. Received more than one path node.'\n );\n }\n\n newPath = newPath[0] as string;\n }\n\n const refPaths = getRefPaths(newPath);\n\n for (const ref of refPaths) {\n if (!ref.isIdentifier()) {\n throw new Error(\n 'ember-template-imports internal assumption that refPath should of type identifier. Please open an issue.'\n );\n }\n\n const binding = ref.scope.getBinding(ref.node.name);\n\n if (binding !== undefined) {\n binding.reference(ref);\n }\n }\n}\n\nconst SUPPORTED_EXTENSIONS = ['.js', '.ts', '.gjs', '.gts'];\n\nexport function isSupportedScriptFileExtension(filePath: string) {\n return SUPPORTED_EXTENSIONS.some((ext) => filePath.endsWith(ext));\n}\n\nexport function isStrictMode(templateInfo: TemplateMatch): boolean {\n return templateInfo.type === 'template-tag';\n}\n"],"names":["TEMPLATE_TAG_NAME","TEMPLATE_TAG_PLACEHOLDER","isTemplateTag","callExpressionPath","callee","get","Array","isArray","isIdentifier","node","name","buildPrecompileTemplateCall","t","state","callExpression","importUtil","import","arguments","registerRefs","newPath","getRefPaths","length","Error","refPaths","ref","binding","scope","getBinding","undefined","reference","SUPPORTED_EXTENSIONS","isSupportedScriptFileExtension","filePath","some","ext","endsWith","isStrictMode","templateInfo","type"],"mappings":"AAKA;AACO,MAAMA,iBAAiB,GAAG,WAAU;AACpC,MAAMC,wBAAwB,GAAG,qBAAoB;AAErD,SAASC,aAAaA,CAACC,kBAA4C,EAAE;AAC1E,EAAA,MAAMC,MAAM,GAAGD,kBAAkB,CAACE,GAAG,CAAC,QAAQ,CAAC,CAAA;EAE/C,OACE,CAACC,KAAK,CAACC,OAAO,CAACH,MAAM,CAAC,IAAIA,MAAM,CAACI,YAAY,EAAE,IAAIJ,MAAM,CAACK,IAAI,CAACC,IAAI,KAAKT,wBAAwB,CAAA;AAEpG,CAAA;AAEO,SAASU,2BAA2BA,CACzCC,CAAM,EACNT,kBAA4C,EAC5CU,KAEC,EACe;AAChB,EAAA,MAAMT,MAAM,GAAGD,kBAAkB,CAACE,GAAG,CAAC,QAAQ,CAAC,CAAA;EAE/C,OAAOO,CAAC,CAACE,cAAc,CACrBD,KAAK,CAACE,UAAU,CAACC,MAAM,CAACZ,MAAM,EAAE,6BAA6B,EAAE,oBAAoB,CAAC,EACpFD,kBAAkB,CAACM,IAAI,CAACQ,SAC1B,CAAC,CAAA;AACH,CAAA;AAEO,SAASC,YAAYA,CAC1BC,OAA0B,EAC1BC,WAAyC,EACzC;AACA,EAAA,IAAId,KAAK,CAACC,OAAO,CAACY,OAAO,CAAC,EAAE;AAC1B,IAAA,IAAIA,OAAO,CAACE,MAAM,GAAG,CAAC,EAAE;AACtB,MAAA,MAAM,IAAIC,KAAK,CACb,qGACF,CAAC,CAAA;AACH,KAAA;AAEAH,IAAAA,OAAO,GAAGA,OAAO,CAAC,CAAC,CAAW,CAAA;AAChC,GAAA;AAEA,EAAA,MAAMI,QAAQ,GAAGH,WAAW,CAACD,OAAO,CAAC,CAAA;AAErC,EAAA,KAAK,MAAMK,GAAG,IAAID,QAAQ,EAAE;AAC1B,IAAA,IAAI,CAACC,GAAG,CAAChB,YAAY,EAAE,EAAE;AACvB,MAAA,MAAM,IAAIc,KAAK,CACb,0GACF,CAAC,CAAA;AACH,KAAA;AAEA,IAAA,MAAMG,OAAO,GAAGD,GAAG,CAACE,KAAK,CAACC,UAAU,CAACH,GAAG,CAACf,IAAI,CAACC,IAAI,CAAC,CAAA;IAEnD,IAAIe,OAAO,KAAKG,SAAS,EAAE;AACzBH,MAAAA,OAAO,CAACI,SAAS,CAACL,GAAG,CAAC,CAAA;AACxB,KAAA;AACF,GAAA;AACF,CAAA;AAEA,MAAMM,oBAAoB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAEpD,SAASC,8BAA8BA,CAACC,QAAgB,EAAE;AAC/D,EAAA,OAAOF,oBAAoB,CAACG,IAAI,CAAEC,GAAG,IAAKF,QAAQ,CAACG,QAAQ,CAACD,GAAG,CAAC,CAAC,CAAA;AACnE,CAAA;AAEO,SAASE,YAAYA,CAACC,YAA2B,EAAW;AACjE,EAAA,OAAOA,YAAY,CAACC,IAAI,KAAK,cAAc,CAAA;AAC7C;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"gjs.js","sources":["../../src/browser/gjs.ts"],"sourcesContent":["import { importSync } from '@embroider/macros';\n\nimport babelPluginEmberTemplateCompilation from 'babel-plugin-ember-template-compilation';\n\n// TODO: use real packages, and not these copied files from ember-template-imports\nimport babelPluginIntermediateGJS from './eti/babel-plugin';\nimport { preprocessEmbeddedTemplates } from './eti/preprocess';\nimport { TEMPLATE_TAG_NAME, TEMPLATE_TAG_PLACEHOLDER } from './eti/util';\n\nimport type { Babel } from './types';\n\nconst compiler = importSync('ember-source/dist/ember-template-compiler.js');\n\nexport function preprocess(input: string, name: string) {\n let preprocessed = preprocessEmbeddedTemplates(input, {\n relativePath: `${name}.js`,\n includeSourceMaps: false,\n includeTemplateTokens: true,\n templateTag: TEMPLATE_TAG_NAME,\n templateTagReplacement: TEMPLATE_TAG_PLACEHOLDER,\n });\n\n return preprocessed.output;\n}\n\nexport async function transform(\n intermediate: string,\n name: string,\n options: any = {}\n): Promise<ReturnType<Babel['transform']>> {\n let babel = (await import('@babel/standalone')) as Babel;\n\n return babel.transform(intermediate, {\n filename: `${name}.js`,\n plugins: [\n [babelPluginIntermediateGJS],\n [\n babelPluginEmberTemplateCompilation,\n {\n compiler,\n },\n ],\n [babel.availablePlugins['proposal-decorators'], { legacy: true }],\n [babel.availablePlugins['proposal-class-properties']],\n ],\n presets: [\n [\n babel.availablePresets['env'],\n {\n // false -- keeps ES Modules\n modules: 'cjs',\n targets: { esmodules: true },\n forceAllTransforms: false,\n ...options,\n },\n ],\n ],\n });\n}\n"],"names":["compiler","importSync","preprocess","input","name","preprocessed","preprocessEmbeddedTemplates","relativePath","includeSourceMaps","includeTemplateTokens","templateTag","TEMPLATE_TAG_NAME","templateTagReplacement","TEMPLATE_TAG_PLACEHOLDER","output","transform","intermediate","options","babel","filename","plugins","babelPluginIntermediateGJS","babelPluginEmberTemplateCompilation","availablePlugins","legacy","presets","availablePresets","modules","targets","esmodules","forceAllTransforms"],"mappings":";;;;;;AAWA,MAAMA,QAAQ,GAAGC,UAAU,CAAC,8CAA8C,CAAC,CAAA;AAEpE,SAASC,UAAUA,CAACC,KAAa,EAAEC,IAAY,EAAE;AACtD,EAAA,IAAIC,YAAY,GAAGC,2BAA2B,CAACH,KAAK,EAAE;IACpDI,YAAY,EAAG,CAAEH,EAAAA,IAAK,CAAI,GAAA,CAAA;AAC1BI,IAAAA,iBAAiB,EAAE,KAAK;AACxBC,IAAAA,qBAAqB,EAAE,IAAI;AAC3BC,IAAAA,WAAW,EAAEC,iBAAiB;AAC9BC,IAAAA,sBAAsB,EAAEC,wBAAAA;AAC1B,GAAC,CAAC,CAAA;EAEF,OAAOR,YAAY,CAACS,MAAM,CAAA;AAC5B,CAAA;AAEO,eAAeC,SAASA,CAC7BC,YAAoB,EACpBZ,IAAY,EACZa,OAAY,GAAG,EAAE,EACwB;AACzC,EAAA,IAAIC,KAAK,GAAI,MAAM,OAAO,mBAAmB,CAAW,CAAA;AAExD,EAAA,OAAOA,KAAK,CAACH,SAAS,CAACC,YAAY,EAAE;IACnCG,QAAQ,EAAG,CAAEf,EAAAA,IAAK,CAAI,GAAA,CAAA;IACtBgB,OAAO,EAAE,CACP,CAACC,0BAA0B,CAAC,EAC5B,CACEC,mCAAmC,EACnC;AACEtB,MAAAA,QAAAA;KACD,CACF,EACD,CAACkB,KAAK,CAACK,gBAAgB,CAAC,qBAAqB,CAAC,EAAE;AAAEC,MAAAA,MAAM,EAAE,IAAA;KAAM,CAAC,EACjE,CAACN,KAAK,CAACK,gBAAgB,CAAC,2BAA2B,CAAC,CAAC,CACtD;IACDE,OAAO,EAAE,CACP,CACEP,KAAK,CAACQ,gBAAgB,CAAC,KAAK,CAAC,EAC7B;AACE;AACAC,MAAAA,OAAO,EAAE,KAAK;AACdC,MAAAA,OAAO,EAAE;AAAEC,QAAAA,SAAS,EAAE,IAAA;OAAM;AAC5BC,MAAAA,kBAAkB,EAAE,KAAK;MACzB,GAAGb,OAAAA;AACL,KAAC,CACF,CAAA;AAEL,GAAC,CAAC,CAAA;AACJ;;;;"}
1
+ {"version":3,"file":"gjs.js","sources":["../../src/browser/gjs.ts"],"sourcesContent":["import { importSync } from '@embroider/macros';\n\nimport babelPluginEmberTemplateCompilation from 'babel-plugin-ember-template-compilation';\n\n// TODO: use real packages, and not these copied files from ember-template-imports\nimport babelPluginIntermediateGJS from './eti/babel-plugin.ts';\nimport { preprocessEmbeddedTemplates } from './eti/preprocess.ts';\nimport { TEMPLATE_TAG_NAME, TEMPLATE_TAG_PLACEHOLDER } from './eti/util.ts';\n\nimport type { Babel } from './types.ts';\n\nconst compiler = importSync('ember-source/dist/ember-template-compiler.js');\n\nexport function preprocess(input: string, name: string) {\n let preprocessed = preprocessEmbeddedTemplates(input, {\n relativePath: `${name}.js`,\n includeSourceMaps: false,\n includeTemplateTokens: true,\n templateTag: TEMPLATE_TAG_NAME,\n templateTagReplacement: TEMPLATE_TAG_PLACEHOLDER,\n });\n\n return preprocessed.output;\n}\n\nexport async function transform(\n intermediate: string,\n name: string,\n options: any = {}\n): Promise<ReturnType<Babel['transform']>> {\n let babel = (await import('@babel/standalone')) as Babel;\n\n return babel.transform(intermediate, {\n filename: `${name}.js`,\n plugins: [\n [babelPluginIntermediateGJS],\n [\n babelPluginEmberTemplateCompilation,\n {\n compiler,\n },\n ],\n [babel.availablePlugins['proposal-decorators'], { legacy: true }],\n [babel.availablePlugins['proposal-class-properties']],\n ],\n presets: [\n [\n babel.availablePresets['env'],\n {\n // false -- keeps ES Modules\n modules: 'cjs',\n targets: { esmodules: true },\n forceAllTransforms: false,\n ...options,\n },\n ],\n ],\n });\n}\n"],"names":["compiler","importSync","preprocess","input","name","preprocessed","preprocessEmbeddedTemplates","relativePath","includeSourceMaps","includeTemplateTokens","templateTag","TEMPLATE_TAG_NAME","templateTagReplacement","TEMPLATE_TAG_PLACEHOLDER","output","transform","intermediate","options","babel","filename","plugins","babelPluginIntermediateGJS","babelPluginEmberTemplateCompilation","availablePlugins","legacy","presets","availablePresets","modules","targets","esmodules","forceAllTransforms"],"mappings":";;;;;;AAWA,MAAMA,QAAQ,GAAGC,UAAU,CAAC,8CAA8C,CAAC,CAAA;AAEpE,SAASC,UAAUA,CAACC,KAAa,EAAEC,IAAY,EAAE;AACtD,EAAA,IAAIC,YAAY,GAAGC,2BAA2B,CAACH,KAAK,EAAE;IACpDI,YAAY,EAAG,CAAEH,EAAAA,IAAK,CAAI,GAAA,CAAA;AAC1BI,IAAAA,iBAAiB,EAAE,KAAK;AACxBC,IAAAA,qBAAqB,EAAE,IAAI;AAC3BC,IAAAA,WAAW,EAAEC,iBAAiB;AAC9BC,IAAAA,sBAAsB,EAAEC,wBAAAA;AAC1B,GAAC,CAAC,CAAA;EAEF,OAAOR,YAAY,CAACS,MAAM,CAAA;AAC5B,CAAA;AAEO,eAAeC,SAASA,CAC7BC,YAAoB,EACpBZ,IAAY,EACZa,OAAY,GAAG,EAAE,EACwB;AACzC,EAAA,IAAIC,KAAK,GAAI,MAAM,OAAO,mBAAmB,CAAW,CAAA;AAExD,EAAA,OAAOA,KAAK,CAACH,SAAS,CAACC,YAAY,EAAE;IACnCG,QAAQ,EAAG,CAAEf,EAAAA,IAAK,CAAI,GAAA,CAAA;IACtBgB,OAAO,EAAE,CACP,CAACC,0BAA0B,CAAC,EAC5B,CACEC,mCAAmC,EACnC;AACEtB,MAAAA,QAAAA;KACD,CACF,EACD,CAACkB,KAAK,CAACK,gBAAgB,CAAC,qBAAqB,CAAC,EAAE;AAAEC,MAAAA,MAAM,EAAE,IAAA;KAAM,CAAC,EACjE,CAACN,KAAK,CAACK,gBAAgB,CAAC,2BAA2B,CAAC,CAAC,CACtD;IACDE,OAAO,EAAE,CACP,CACEP,KAAK,CAACQ,gBAAgB,CAAC,KAAK,CAAC,EAC7B;AACE;AACAC,MAAAA,OAAO,EAAE,KAAK;AACdC,MAAAA,OAAO,EAAE;AAAEC,QAAAA,SAAS,EAAE,IAAA;OAAM;AAC5BC,MAAAA,kBAAkB,EAAE,KAAK;MACzB,GAAGb,OAAAA;AACL,KAAC,CACF,CAAA;AAEL,GAAC,CAAC,CAAA;AACJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"hbs.js","sources":["../../src/browser/hbs.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n// import { precompileJSON } from '@glimmer/compiler';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { setComponentTemplate } from '@ember/component';\nimport templateOnlyComponent from '@ember/component/template-only';\nimport { array, concat, fn, get, hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { createTemplateFactory } from '@ember/template-factory';\nimport { importSync } from '@embroider/macros';\n\nimport { nameFor } from './utils';\n\nimport type { CompileResult } from './types';\nimport type { ComponentLike } from '@glint/template';\n\n// These things are pre-bundled in the old system.\n// ember-template-compiler defines them in AMD/requirejs\nconst { precompileJSON } = importSync('@glimmer/compiler') as any;\nconst { getTemplateLocals } = importSync('@glimmer/syntax') as any;\n\n/**\n * compile a template with an empty scope\n * to use components, helpers, etc, you will need to compile with JS\n *\n * (templates alone do not have a way to import / define complex structures)\n */\nexport function compileHBS(template: string, options: CompileTemplateOptions = {}): CompileResult {\n let name = nameFor(template);\n let component: undefined | ComponentLike;\n let error: undefined | Error;\n\n try {\n component = setComponentTemplate(\n compileTemplate(template, { moduleName: options.moduleName || name, ...options }),\n templateOnlyComponent(options.moduleName || name)\n ) as ComponentLike;\n } catch (e) {\n error = e as Error | undefined;\n }\n\n return { name, component, error };\n}\n\ninterface CompileTemplateOptions {\n /**\n * Used for debug viewing\n */\n moduleName?: string;\n scope?: Record<string, unknown>;\n}\n\n/**\n * The reason why we can't use precompile directly is because of this:\n * https://github.com/glimmerjs/glimmer-vm/blob/master/packages/%40glimmer/compiler/lib/compiler.ts#L132\n *\n * Support for dynamically compiling templates in strict mode doesn't seem to be fully their yet.\n * That JSON.stringify (and the lines after) prevent us from easily setting the scope function,\n * which means that *everything* is undefined.\n */\nfunction compileTemplate(source: string, { moduleName, scope = {} }: CompileTemplateOptions) {\n let localScope = { array, concat, fn, get, hash, on, ...scope } as any;\n let locals = getTemplateLocals(source);\n\n let options = {\n strictMode: true,\n moduleName,\n locals,\n isProduction: false,\n meta: { moduleName },\n };\n\n // Copied from @glimmer/compiler/lib/compiler#precompile\n let [block, usedLocals] = precompileJSON(source, options);\n\n let usedScope = usedLocals.map((key: string) => localScope[key]);\n\n let blockJSON = JSON.stringify(block);\n let templateJSONObject = {\n id: moduleName,\n block: blockJSON,\n moduleName: moduleName ?? '(unknown template module)',\n scope: () => usedScope,\n isStrictMode: true,\n };\n\n let factory = createTemplateFactory(templateJSONObject);\n\n return factory;\n}\n"],"names":["precompileJSON","importSync","getTemplateLocals","compileHBS","template","options","name","nameFor","component","error","setComponentTemplate","compileTemplate","moduleName","templateOnlyComponent","e","source","scope","localScope","array","concat","fn","get","hash","on","locals","strictMode","isProduction","meta","block","usedLocals","usedScope","map","key","blockJSON","JSON","stringify","templateJSONObject","id","isStrictMode","factory","createTemplateFactory"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AAeA;AACA;AACA,MAAM;AAAEA,EAAAA,cAAAA;AAAe,CAAC,GAAGC,UAAU,CAAC,mBAAmB,CAAQ,CAAA;AACjE,MAAM;AAAEC,EAAAA,iBAAAA;AAAkB,CAAC,GAAGD,UAAU,CAAC,iBAAiB,CAAQ,CAAA;;AAElE;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,UAAUA,CAACC,QAAgB,EAAEC,OAA+B,GAAG,EAAE,EAAiB;AAChG,EAAA,IAAIC,IAAI,GAAGC,OAAO,CAACH,QAAQ,CAAC,CAAA;AAC5B,EAAA,IAAII,SAAoC,CAAA;AACxC,EAAA,IAAIC,KAAwB,CAAA;EAE5B,IAAI;AACFD,IAAAA,SAAS,GAAGE,oBAAoB,CAC9BC,eAAe,CAACP,QAAQ,EAAE;AAAEQ,MAAAA,UAAU,EAAEP,OAAO,CAACO,UAAU,IAAIN,IAAI;MAAE,GAAGD,OAAAA;KAAS,CAAC,EACjFQ,GAAqB,CAACR,OAAO,CAACO,UAAU,IAAIN,IAAI,CAClD,CAAkB,CAAA;GACnB,CAAC,OAAOQ,CAAC,EAAE;AACVL,IAAAA,KAAK,GAAGK,CAAsB,CAAA;AAChC,GAAA;EAEA,OAAO;IAAER,IAAI;IAAEE,SAAS;AAAEC,IAAAA,KAAAA;GAAO,CAAA;AACnC,CAAA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,eAAeA,CAACI,MAAc,EAAE;EAAEH,UAAU;AAAEI,EAAAA,KAAK,GAAG,EAAC;AAA0B,CAAC,EAAE;AAC3F,EAAA,IAAIC,UAAU,GAAG;IAAEC,KAAK;IAAEC,MAAM;IAAEC,EAAE;IAAEC,GAAG;IAAEC,IAAI;IAAEC,EAAE;IAAE,GAAGP,KAAAA;GAAc,CAAA;AACtE,EAAA,IAAIQ,MAAM,GAAGtB,iBAAiB,CAACa,MAAM,CAAC,CAAA;AAEtC,EAAA,IAAIV,OAAO,GAAG;AACZoB,IAAAA,UAAU,EAAE,IAAI;IAChBb,UAAU;IACVY,MAAM;AACNE,IAAAA,YAAY,EAAE,KAAK;AACnBC,IAAAA,IAAI,EAAE;AAAEf,MAAAA,UAAAA;AAAW,KAAA;GACpB,CAAA;;AAED;EACA,IAAI,CAACgB,KAAK,EAAEC,UAAU,CAAC,GAAG7B,cAAc,CAACe,MAAM,EAAEV,OAAO,CAAC,CAAA;AAEzD,EAAA,IAAIyB,SAAS,GAAGD,UAAU,CAACE,GAAG,CAAEC,GAAW,IAAKf,UAAU,CAACe,GAAG,CAAC,CAAC,CAAA;AAEhE,EAAA,IAAIC,SAAS,GAAGC,IAAI,CAACC,SAAS,CAACP,KAAK,CAAC,CAAA;AACrC,EAAA,IAAIQ,kBAAkB,GAAG;AACvBC,IAAAA,EAAE,EAAEzB,UAAU;AACdgB,IAAAA,KAAK,EAAEK,SAAS;IAChBrB,UAAU,EAAEA,UAAU,IAAI,2BAA2B;IACrDI,KAAK,EAAEA,MAAMc,SAAS;AACtBQ,IAAAA,YAAY,EAAE,IAAA;GACf,CAAA;AAED,EAAA,IAAIC,OAAO,GAAGC,qBAAqB,CAACJ,kBAAkB,CAAC,CAAA;AAEvD,EAAA,OAAOG,OAAO,CAAA;AAChB;;;;"}
1
+ {"version":3,"file":"hbs.js","sources":["../../src/browser/hbs.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n// import { precompileJSON } from '@glimmer/compiler';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { setComponentTemplate } from '@ember/component';\nimport templateOnlyComponent from '@ember/component/template-only';\nimport { array, concat, fn, get, hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { createTemplateFactory } from '@ember/template-factory';\nimport { importSync } from '@embroider/macros';\n\nimport { nameFor } from './utils.ts';\n\nimport type { CompileResult } from './types.ts';\nimport type { ComponentLike } from '@glint/template';\n\n// These things are pre-bundled in the old system.\n// ember-template-compiler defines them in AMD/requirejs\nconst { precompileJSON } = importSync('@glimmer/compiler') as any;\nconst { getTemplateLocals } = importSync('@glimmer/syntax') as any;\n\n/**\n * compile a template with an empty scope\n * to use components, helpers, etc, you will need to compile with JS\n *\n * (templates alone do not have a way to import / define complex structures)\n */\nexport function compileHBS(template: string, options: CompileTemplateOptions = {}): CompileResult {\n let name = nameFor(template);\n let component: undefined | ComponentLike;\n let error: undefined | Error;\n\n try {\n component = setComponentTemplate(\n compileTemplate(template, { moduleName: options.moduleName || name, ...options }),\n templateOnlyComponent(options.moduleName || name)\n ) as ComponentLike;\n } catch (e) {\n error = e as Error | undefined;\n }\n\n return { name, component, error };\n}\n\ninterface CompileTemplateOptions {\n /**\n * Used for debug viewing\n */\n moduleName?: string;\n scope?: Record<string, unknown>;\n}\n\n/**\n * The reason why we can't use precompile directly is because of this:\n * https://github.com/glimmerjs/glimmer-vm/blob/master/packages/%40glimmer/compiler/lib/compiler.ts#L132\n *\n * Support for dynamically compiling templates in strict mode doesn't seem to be fully their yet.\n * That JSON.stringify (and the lines after) prevent us from easily setting the scope function,\n * which means that *everything* is undefined.\n */\nfunction compileTemplate(source: string, { moduleName, scope = {} }: CompileTemplateOptions) {\n let localScope = { array, concat, fn, get, hash, on, ...scope } as any;\n let locals = getTemplateLocals(source);\n\n let options = {\n strictMode: true,\n moduleName,\n locals,\n isProduction: false,\n meta: { moduleName },\n };\n\n // Copied from @glimmer/compiler/lib/compiler#precompile\n let [block, usedLocals] = precompileJSON(source, options);\n\n let usedScope = usedLocals.map((key: string) => localScope[key]);\n\n let blockJSON = JSON.stringify(block);\n let templateJSONObject = {\n id: moduleName,\n block: blockJSON,\n moduleName: moduleName ?? '(unknown template module)',\n scope: () => usedScope,\n isStrictMode: true,\n };\n\n let factory = createTemplateFactory(templateJSONObject);\n\n return factory;\n}\n"],"names":["precompileJSON","importSync","getTemplateLocals","compileHBS","template","options","name","nameFor","component","error","setComponentTemplate","compileTemplate","moduleName","templateOnlyComponent","e","source","scope","localScope","array","concat","fn","get","hash","on","locals","strictMode","isProduction","meta","block","usedLocals","usedScope","map","key","blockJSON","JSON","stringify","templateJSONObject","id","isStrictMode","factory","createTemplateFactory"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AAeA;AACA;AACA,MAAM;AAAEA,EAAAA,cAAAA;AAAe,CAAC,GAAGC,UAAU,CAAC,mBAAmB,CAAQ,CAAA;AACjE,MAAM;AAAEC,EAAAA,iBAAAA;AAAkB,CAAC,GAAGD,UAAU,CAAC,iBAAiB,CAAQ,CAAA;;AAElE;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,UAAUA,CAACC,QAAgB,EAAEC,OAA+B,GAAG,EAAE,EAAiB;AAChG,EAAA,IAAIC,IAAI,GAAGC,OAAO,CAACH,QAAQ,CAAC,CAAA;AAC5B,EAAA,IAAII,SAAoC,CAAA;AACxC,EAAA,IAAIC,KAAwB,CAAA;EAE5B,IAAI;AACFD,IAAAA,SAAS,GAAGE,oBAAoB,CAC9BC,eAAe,CAACP,QAAQ,EAAE;AAAEQ,MAAAA,UAAU,EAAEP,OAAO,CAACO,UAAU,IAAIN,IAAI;MAAE,GAAGD,OAAAA;KAAS,CAAC,EACjFQ,GAAqB,CAACR,OAAO,CAACO,UAAU,IAAIN,IAAI,CAClD,CAAkB,CAAA;GACnB,CAAC,OAAOQ,CAAC,EAAE;AACVL,IAAAA,KAAK,GAAGK,CAAsB,CAAA;AAChC,GAAA;EAEA,OAAO;IAAER,IAAI;IAAEE,SAAS;AAAEC,IAAAA,KAAAA;GAAO,CAAA;AACnC,CAAA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,eAAeA,CAACI,MAAc,EAAE;EAAEH,UAAU;AAAEI,EAAAA,KAAK,GAAG,EAAC;AAA0B,CAAC,EAAE;AAC3F,EAAA,IAAIC,UAAU,GAAG;IAAEC,KAAK;IAAEC,MAAM;IAAEC,EAAE;IAAEC,GAAG;IAAEC,IAAI;IAAEC,EAAE;IAAE,GAAGP,KAAAA;GAAc,CAAA;AACtE,EAAA,IAAIQ,MAAM,GAAGtB,iBAAiB,CAACa,MAAM,CAAC,CAAA;AAEtC,EAAA,IAAIV,OAAO,GAAG;AACZoB,IAAAA,UAAU,EAAE,IAAI;IAChBb,UAAU;IACVY,MAAM;AACNE,IAAAA,YAAY,EAAE,KAAK;AACnBC,IAAAA,IAAI,EAAE;AAAEf,MAAAA,UAAAA;AAAW,KAAA;GACpB,CAAA;;AAED;EACA,IAAI,CAACgB,KAAK,EAAEC,UAAU,CAAC,GAAG7B,cAAc,CAACe,MAAM,EAAEV,OAAO,CAAC,CAAA;AAEzD,EAAA,IAAIyB,SAAS,GAAGD,UAAU,CAACE,GAAG,CAAEC,GAAW,IAAKf,UAAU,CAACe,GAAG,CAAC,CAAC,CAAA;AAEhE,EAAA,IAAIC,SAAS,GAAGC,IAAI,CAACC,SAAS,CAACP,KAAK,CAAC,CAAA;AACrC,EAAA,IAAIQ,kBAAkB,GAAG;AACvBC,IAAAA,EAAE,EAAEzB,UAAU;AACdgB,IAAAA,KAAK,EAAEK,SAAS;IAChBrB,UAAU,EAAEA,UAAU,IAAI,2BAA2B;IACrDI,KAAK,EAAEA,MAAMc,SAAS;AACtBQ,IAAAA,YAAY,EAAE,IAAA;GACf,CAAA;AAED,EAAA,IAAIC,OAAO,GAAGC,qBAAqB,CAACJ,kBAAkB,CAAC,CAAA;AAEvD,EAAA,OAAOG,OAAO,CAAA;AAChB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"js.js","sources":["../../src/browser/js.ts"],"sourcesContent":["import { compileJS as compileAMD } from './cjs';\nimport { compileJS as compileESM } from './esm';\n\nimport type { CompileResult, ExtraModules, Options } from './types';\n\n/**\n * @public\n * Transpiles GlimmerJS (*.gjs) formatted text into and evaluates as a JS Module.\n * The returned component can be invoked explicitly in the consuming project.\n *\n * SEE: README for example usage\n *\n * @param {string} code: the code to be compiled\n * @param {Object} extraModules: map of import paths to modules. This isn't needed\n * for classic ember projects, but for strict static ember projects, extraModules\n * will need to be pasesd if compileJS is intended to be used in a styleguide or\n * if there are additional modules that could be imported in the passed `code`.\n *\n * Later on, imports that are not present by default (ember/glimmer) or that\n * are not provided by extraModules will be searched on npm to see if a package\n * needs to be downloaded before running the `code` / invoking the component\n */\nexport function compileJS(\n code: string,\n extraModules?: ExtraModules,\n options?: Options\n): Promise<CompileResult> {\n if (options?.skypack) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // if (!(window as any).webpackChunkDummy) {\n // return {\n // component: undefined,\n // name: undefined,\n // error: `Your environment is using AMD utilities -- using native ESM is not allowed unless the environment is also ESM`,\n // };\n // }\n\n return compileESM(code, extraModules);\n }\n\n return compileAMD(code, extraModules);\n}\n"],"names":["compileJS","code","extraModules","options","skypack","compileESM","compileAMD"],"mappings":";;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,SAASA,CACvBC,IAAY,EACZC,YAA2B,EAC3BC,OAAiB,EACO;EACxB,IAAIA,OAAO,EAAEC,OAAO,EAAE;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAA,OAAOC,WAAU,CAACJ,IAAI,EAAEC,YAAY,CAAC,CAAA;AACvC,GAAA;AAEA,EAAA,OAAOI,WAAU,CAACL,IAAI,EAAEC,YAAY,CAAC,CAAA;AACvC;;;;"}
1
+ {"version":3,"file":"js.js","sources":["../../src/browser/js.ts"],"sourcesContent":["import { compileJS as compileAMD } from './cjs/index.ts';\nimport { compileJS as compileESM } from './esm/index.ts';\n\nimport type { CompileResult, ExtraModules, Options } from './types.ts';\n\n/**\n * @public\n * Transpiles GlimmerJS (*.gjs) formatted text into and evaluates as a JS Module.\n * The returned component can be invoked explicitly in the consuming project.\n *\n * SEE: README for example usage\n *\n * @param {string} code: the code to be compiled\n * @param {Object} extraModules: map of import paths to modules. This isn't needed\n * for classic ember projects, but for strict static ember projects, extraModules\n * will need to be pasesd if compileJS is intended to be used in a styleguide or\n * if there are additional modules that could be imported in the passed `code`.\n *\n * Later on, imports that are not present by default (ember/glimmer) or that\n * are not provided by extraModules will be searched on npm to see if a package\n * needs to be downloaded before running the `code` / invoking the component\n */\nexport function compileJS(\n code: string,\n extraModules?: ExtraModules,\n options?: Options\n): Promise<CompileResult> {\n if (options?.skypack) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // if (!(window as any).webpackChunkDummy) {\n // return {\n // component: undefined,\n // name: undefined,\n // error: `Your environment is using AMD utilities -- using native ESM is not allowed unless the environment is also ESM`,\n // };\n // }\n\n return compileESM(code, extraModules);\n }\n\n return compileAMD(code, extraModules);\n}\n"],"names":["compileJS","code","extraModules","options","skypack","compileESM","compileAMD"],"mappings":";;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,SAASA,CACvBC,IAAY,EACZC,YAA2B,EAC3BC,OAAiB,EACO;EACxB,IAAIA,OAAO,EAAEC,OAAO,EAAE;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAA,OAAOC,WAAU,CAACJ,IAAI,EAAEC,YAAY,CAAC,CAAA;AACvC,GAAA;AAEA,EAAA,OAAOI,WAAU,CAACL,IAAI,EAAEC,YAAY,CAAC,CAAA;AACvC;;;;"}