ember-repl 4.3.0 → 4.3.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/compile/formats/gjs/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,OAAO,CAAC,aAAa,CAAC,CAkBxB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/compile/formats/gjs/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,OAAO,CAAC,aAAa,CAAC,CAkBxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"hbs.d.ts","sourceRoot":"","sources":["../../../src/compile/formats/hbs.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQjD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,aAAa,CAehG;AAED,UAAU,sBAAsB;IAC9B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC"}
1
+ {"version":3,"file":"hbs.d.ts","sourceRoot":"","sources":["../../../src/compile/formats/hbs.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,aAAa,CAehG;AAED,UAAU,sBAAsB;IAC9B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC"}
@@ -1,5 +1,5 @@
1
- import { importSync } from '@embroider/macros';
2
1
  import babelPluginEmberTemplateCompilation from 'babel-plugin-ember-template-compilation';
2
+ import * as compiler from 'ember-template-compiler';
3
3
  import { nameFor } from '../../utils.js';
4
4
  import { evalSnippet } from './eval.js';
5
5
 
@@ -56,7 +56,6 @@ async function transpile({
56
56
  } = result;
57
57
  return code;
58
58
  }
59
- const compiler = importSync('ember-source/dist/ember-template-compiler.js');
60
59
  let processor;
61
60
  let fetchingPromise;
62
61
  async function preprocess(input, name) {
@@ -69,7 +68,10 @@ async function preprocess(input, name) {
69
68
  } = await fetchingPromise;
70
69
  processor = new Preprocessor();
71
70
  }
72
- return processor.process(input, `${name}.js`);
71
+ return processor.process(input, {
72
+ filename: `${name}.js`,
73
+ inline_source_map: true
74
+ });
73
75
  }
74
76
  async function transform(intermediate, name, options = {}) {
75
77
  let babel = await import('@babel/standalone');
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/compile/formats/gjs/index.ts"],"sourcesContent":["import { importSync } from '@embroider/macros';\n\nimport babelPluginEmberTemplateCompilation from 'babel-plugin-ember-template-compilation';\n\nimport { nameFor } from '../../utils.ts';\nimport { evalSnippet } from './eval.ts';\n\nimport type { CompileResult } from '../../types.ts';\nimport type { ComponentLike } from '@glint/template';\n\nexport interface Info {\n code: string;\n name: string;\n}\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 async function compileJS(\n code: string,\n extraModules?: Record<string, unknown>\n): Promise<CompileResult> {\n let name = nameFor(code);\n let component: undefined | ComponentLike;\n let error: undefined | Error;\n\n try {\n let compiled = await transpile({ code: code, name });\n\n if (!compiled) {\n throw new Error(`Compiled output is missing`);\n }\n\n component = evalSnippet(compiled, extraModules).default as unknown as ComponentLike;\n } catch (e) {\n error = e as Error | undefined;\n }\n\n return { name, component, error };\n}\n\nasync function transpile({ code: input, name }: Info) {\n let preprocessed = await preprocess(input, name);\n let result = await transform(preprocessed, name);\n\n if (!result) {\n return;\n }\n\n let { code } = result;\n\n return code;\n}\n\nimport type { Babel } from './babel.ts';\n\nconst compiler = importSync('ember-source/dist/ember-template-compiler.js');\n\nlet processor: any;\nlet fetchingPromise: Promise<any>;\n\nasync function preprocess(input: string, name: string): Promise<string> {\n if (!fetchingPromise) {\n fetchingPromise = import('content-tag');\n }\n\n if (!processor) {\n let { Preprocessor } = await fetchingPromise;\n\n processor = new Preprocessor();\n }\n\n return processor.process(input, `${name}.js`);\n}\n\nasync 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":["compileJS","code","extraModules","name","nameFor","component","error","compiled","transpile","Error","evalSnippet","default","e","input","preprocessed","preprocess","result","transform","compiler","importSync","processor","fetchingPromise","Preprocessor","process","intermediate","options","babel","filename","plugins","babelPluginEmberTemplateCompilation","availablePlugins","legacy","presets","availablePresets","modules","targets","esmodules","forceAllTransforms"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/compile/formats/gjs/index.ts"],"sourcesContent":["import babelPluginEmberTemplateCompilation from 'babel-plugin-ember-template-compilation';\nimport * as compiler from 'ember-template-compiler';\n\nimport { nameFor } from '../../utils.ts';\nimport { evalSnippet } from './eval.ts';\n\nimport type { CompileResult } from '../../types.ts';\nimport type { ComponentLike } from '@glint/template';\n\nexport interface Info {\n code: string;\n name: string;\n}\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 async function compileJS(\n code: string,\n extraModules?: Record<string, unknown>\n): Promise<CompileResult> {\n let name = nameFor(code);\n let component: undefined | ComponentLike;\n let error: undefined | Error;\n\n try {\n let compiled = await transpile({ code: code, name });\n\n if (!compiled) {\n throw new Error(`Compiled output is missing`);\n }\n\n component = evalSnippet(compiled, extraModules).default as unknown as ComponentLike;\n } catch (e) {\n error = e as Error | undefined;\n }\n\n return { name, component, error };\n}\n\nasync function transpile({ code: input, name }: Info) {\n let preprocessed = await preprocess(input, name);\n let result = await transform(preprocessed, name);\n\n if (!result) {\n return;\n }\n\n let { code } = result;\n\n return code;\n}\n\nimport type { Babel } from './babel.ts';\n\nlet processor: any;\nlet fetchingPromise: Promise<any>;\n\nasync function preprocess(input: string, name: string): Promise<string> {\n if (!fetchingPromise) {\n fetchingPromise = import('content-tag');\n }\n\n if (!processor) {\n let { Preprocessor } = await fetchingPromise;\n\n processor = new Preprocessor();\n }\n\n return processor.process(input, { filename: `${name}.js`, inline_source_map: true });\n}\n\nasync 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":["compileJS","code","extraModules","name","nameFor","component","error","compiled","transpile","Error","evalSnippet","default","e","input","preprocessed","preprocess","result","transform","processor","fetchingPromise","Preprocessor","process","filename","inline_source_map","intermediate","options","babel","plugins","babelPluginEmberTemplateCompilation","compiler","availablePlugins","legacy","presets","availablePresets","modules","targets","esmodules","forceAllTransforms"],"mappings":"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"}
@@ -1,9 +1,10 @@
1
+ import { precompileJSON } from '@glimmer/compiler';
2
+ import { getTemplateLocals } from '@glimmer/syntax';
1
3
  import { setComponentTemplate } from '@ember/component';
2
4
  import _TO from '@ember/component/template-only';
3
5
  import { array, concat, fn, get, hash } from '@ember/helper';
4
6
  import { on } from '@ember/modifier';
5
7
  import { createTemplateFactory } from '@ember/template-factory';
6
- import { importSync } from '@embroider/macros';
7
8
  import { nameFor } from '../utils.js';
8
9
 
9
10
  /* eslint-disable @typescript-eslint/no-explicit-any */
@@ -12,13 +13,6 @@ import { nameFor } from '../utils.js';
12
13
  // @ts-ignore
13
14
  // These things are pre-bundled in the old system.
14
15
  // ember-template-compiler defines them in AMD/requirejs
15
- const {
16
- precompileJSON
17
- } = importSync('@glimmer/compiler');
18
- const {
19
- getTemplateLocals
20
- } = importSync('@glimmer/syntax');
21
-
22
16
  /**
23
17
  * compile a template with an empty scope
24
18
  * to use components, helpers, etc, you will need to compile with JS
@@ -1 +1 @@
1
- {"version":3,"file":"hbs.js","sources":["../../../src/compile/formats/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) => {\n let value = localScope[key];\n\n if (!value) {\n throw new Error(\n `Attempt to use ${key} in compiled hbs, but it was not available in scope. ` +\n `Available scope includes: ${Object.keys(localScope)}`\n );\n }\n\n return value;\n });\n\n let blockJSON = JSON.stringify(block);\n let templateJSONObject = {\n id: moduleName,\n block: blockJSON,\n moduleName: moduleName ?? '(dynamically compiled component)',\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","value","Error","Object","keys","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,IAAK;AAC9C,IAAA,IAAIC,KAAK,GAAGhB,UAAU,CAACe,GAAG,CAAC,CAAA;IAE3B,IAAI,CAACC,KAAK,EAAE;AACV,MAAA,MAAM,IAAIC,KAAK,CACb,CAAA,eAAA,EAAkBF,GAAG,CAAuD,qDAAA,CAAA,GAC1E,CAA6BG,0BAAAA,EAAAA,MAAM,CAACC,IAAI,CAACnB,UAAU,CAAC,EACxD,CAAC,CAAA;AACH,KAAA;AAEA,IAAA,OAAOgB,KAAK,CAAA;AACd,GAAC,CAAC,CAAA;AAEF,EAAA,IAAII,SAAS,GAAGC,IAAI,CAACC,SAAS,CAACX,KAAK,CAAC,CAAA;AACrC,EAAA,IAAIY,kBAAkB,GAAG;AACvBC,IAAAA,EAAE,EAAE7B,UAAU;AACdgB,IAAAA,KAAK,EAAES,SAAS;IAChBzB,UAAU,EAAEA,UAAU,IAAI,kCAAkC;IAC5DI,KAAK,EAAEA,MAAMc,SAAS;AACtBY,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/compile/formats/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\n// These things are pre-bundled in the old system.\n// ember-template-compiler defines them in AMD/requirejs\nimport { precompileJSON } from '@glimmer/compiler';\nimport { getTemplateLocals } from '@glimmer/syntax';\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';\n\nimport { nameFor } from '../utils.ts';\n\nimport type { CompileResult } from '../types.ts';\nimport type { ComponentLike } from '@glint/template';\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) => {\n let value = localScope[key];\n\n if (!value) {\n throw new Error(\n `Attempt to use ${key} in compiled hbs, but it was not available in scope. ` +\n `Available scope includes: ${Object.keys(localScope)}`\n );\n }\n\n return value;\n });\n\n let blockJSON = JSON.stringify(block);\n let templateJSONObject = {\n id: moduleName,\n block: blockJSON,\n moduleName: moduleName ?? '(dynamically compiled component)',\n scope: () => usedScope,\n isStrictMode: true,\n };\n\n let factory = createTemplateFactory(templateJSONObject);\n\n return factory;\n}\n"],"names":["compileHBS","template","options","name","nameFor","component","error","setComponentTemplate","compileTemplate","moduleName","templateOnlyComponent","e","source","scope","localScope","array","concat","fn","get","hash","on","locals","getTemplateLocals","strictMode","isProduction","meta","block","usedLocals","precompileJSON","usedScope","map","key","value","Error","Object","keys","blockJSON","JSON","stringify","templateJSONObject","id","isStrictMode","factory","createTemplateFactory"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AAgBA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,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,GAAGC,iBAAiB,CAACV,MAAM,CAAC,CAAA;AAEtC,EAAA,IAAIV,OAAO,GAAG;AACZqB,IAAAA,UAAU,EAAE,IAAI;IAChBd,UAAU;IACVY,MAAM;AACNG,IAAAA,YAAY,EAAE,KAAK;AACnBC,IAAAA,IAAI,EAAE;AAAEhB,MAAAA,UAAAA;AAAW,KAAA;GACpB,CAAA;;AAED;EACA,IAAI,CAACiB,KAAK,EAAEC,UAAU,CAAC,GAAGC,cAAc,CAAChB,MAAM,EAAEV,OAAO,CAAC,CAAA;AAEzD,EAAA,IAAI2B,SAAS,GAAGF,UAAU,CAACG,GAAG,CAAEC,GAAW,IAAK;AAC9C,IAAA,IAAIC,KAAK,GAAGlB,UAAU,CAACiB,GAAG,CAAC,CAAA;IAE3B,IAAI,CAACC,KAAK,EAAE;AACV,MAAA,MAAM,IAAIC,KAAK,CACb,CAAA,eAAA,EAAkBF,GAAG,CAAuD,qDAAA,CAAA,GAC1E,CAA6BG,0BAAAA,EAAAA,MAAM,CAACC,IAAI,CAACrB,UAAU,CAAC,EACxD,CAAC,CAAA;AACH,KAAA;AAEA,IAAA,OAAOkB,KAAK,CAAA;AACd,GAAC,CAAC,CAAA;AAEF,EAAA,IAAII,SAAS,GAAGC,IAAI,CAACC,SAAS,CAACZ,KAAK,CAAC,CAAA;AACrC,EAAA,IAAIa,kBAAkB,GAAG;AACvBC,IAAAA,EAAE,EAAE/B,UAAU;AACdiB,IAAAA,KAAK,EAAEU,SAAS;IAChB3B,UAAU,EAAEA,UAAU,IAAI,kCAAkC;IAC5DI,KAAK,EAAEA,MAAMgB,SAAS;AACtBY,IAAAA,YAAY,EAAE,IAAA;GACf,CAAA;AAED,EAAA,IAAIC,OAAO,GAAGC,qBAAqB,CAACJ,kBAAkB,CAAC,CAAA;AAEvD,EAAA,OAAOG,OAAO,CAAA;AAChB;;;;"}
@@ -140,12 +140,12 @@ function liveCodeExtraction(options = {}) {
140
140
  });
141
141
  };
142
142
  }
143
- function sanitizeForGlimmer( /* options */
143
+ function sanitizeForGlimmer(/* options */
144
144
  ) {
145
145
  return tree => {
146
146
  visit(tree, 'element', node => {
147
147
  if ('tagName' in node) {
148
- if (node.tagName !== 'pre') return;
148
+ if (!['pre', 'code'].includes(node.tagName)) return;
149
149
  visit(node, 'text', textNode => {
150
150
  if ('value' in textNode && textNode.value) {
151
151
  textNode.value = textNode.value.replace(/{{/g, '\\{{');
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","sources":["../../../src/compile/formats/markdown.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 { UnifiedPlugin } from '../types.ts';\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\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 sanitizeForGlimmer(/* options */) {\n return (tree: Parent) => {\n visit(tree, 'element', (node: Parent) => {\n if ('tagName' in node) {\n if (node.tagName !== 'pre') return;\n\n visit(node, 'text', (textNode: Text) => {\n if ('value' in textNode && textNode.value) {\n textNode.value = textNode.value.replace(/{{/g, '\\\\{{');\n }\n });\n\n return 'skip';\n }\n });\n };\n}\n\nfunction buildCompiler(options: ParseMarkdownOptions) {\n let compiler = unified().use(remarkParse).use(remarkGfm);\n\n /**\n * If this were \"use\"d after `remarkRehype`,\n * remark is gone, and folks would need to work with rehype trees\n */\n if (options.remarkPlugins) {\n options.remarkPlugins.forEach((plugin) => {\n // Arrays are how plugins are passed options (for some reason?)\n // why not just invoke the the function?\n let p = Array.isArray(plugin) ? plugin : [plugin];\n\n compiler = compiler.use(...(p as [any]));\n });\n }\n\n // TODO: we only want to do this when we have pre > code.\n // code can exist inline.\n compiler = compiler.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\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 compiler = compiler.use(remarkRehype, { allowDangerousHtml: true });\n\n // Convert invocables to raw format, so Glimmer can invoke them\n compiler = compiler.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 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 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\n if (options.rehypePlugins) {\n options.rehypePlugins.forEach((plugin) => {\n // Arrays are how plugins are passed options (for some reason?)\n // why not just invoke the the function?\n let p = Array.isArray(plugin) ? plugin : [plugin];\n\n compiler = compiler.use(...(p as [any]));\n });\n }\n\n compiler = compiler.use(rehypeRaw, { passThrough: ['glimmer_raw', 'raw'] }).use(() => (tree) => {\n visit(tree, 'glimmer_raw', (node: Node) => {\n node.type = 'raw';\n });\n });\n\n compiler = compiler.use(sanitizeForGlimmer);\n\n // Finally convert to string! oofta!\n compiler = compiler.use(rehypeStringify, {\n collapseEmptyAttributes: true,\n closeSelfClosing: true,\n allowParseErrors: true,\n allowDangerousCharacters: true,\n allowDangerousHtml: true,\n }) as any;\n\n return compiler as ReturnType<typeof unified>;\n}\n\ninterface ParseMarkdownOptions {\n CopyComponent?: string;\n ShadowComponent?: string;\n remarkPlugins?: UnifiedPlugin[];\n rehypePlugins?: UnifiedPlugin[];\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","isLive","meta","includes","isPreview","isBelow","liveCodeExtraction","options","copyComponent","snippets","demo","classList","snippetClasses","demoClasses","isRelevantCode","node","type","lang","trim","copyNode","value","enhance","code","data","hProperties","className","children","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","sanitizeForGlimmer","tagName","textNode","replace","buildCompiler","compiler","unified","use","remarkParse","remarkGfm","remarkPlugins","forEach","plugin","p","Array","isArray","CopyComponent","ShadowComponent","remarkRehype","allowDangerousHtml","properties","match","rehypePlugins","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.js","sources":["../../../src/compile/formats/markdown.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 { UnifiedPlugin } from '../types.ts';\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\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 sanitizeForGlimmer(/* options */) {\n return (tree: Parent) => {\n visit(tree, 'element', (node: Parent) => {\n if ('tagName' in node) {\n if (!['pre', 'code'].includes(node.tagName as string)) return;\n\n visit(node, 'text', (textNode: Text) => {\n if ('value' in textNode && textNode.value) {\n textNode.value = textNode.value.replace(/{{/g, '\\\\{{');\n }\n });\n\n return 'skip';\n }\n });\n };\n}\n\nfunction buildCompiler(options: ParseMarkdownOptions) {\n let compiler = unified().use(remarkParse).use(remarkGfm);\n\n /**\n * If this were \"use\"d after `remarkRehype`,\n * remark is gone, and folks would need to work with rehype trees\n */\n if (options.remarkPlugins) {\n options.remarkPlugins.forEach((plugin) => {\n // Arrays are how plugins are passed options (for some reason?)\n // why not just invoke the the function?\n let p = Array.isArray(plugin) ? plugin : [plugin];\n\n compiler = compiler.use(...(p as [any]));\n });\n }\n\n // TODO: we only want to do this when we have pre > code.\n // code can exist inline.\n compiler = compiler.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\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 compiler = compiler.use(remarkRehype, { allowDangerousHtml: true });\n\n // Convert invocables to raw format, so Glimmer can invoke them\n compiler = compiler.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 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 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\n if (options.rehypePlugins) {\n options.rehypePlugins.forEach((plugin) => {\n // Arrays are how plugins are passed options (for some reason?)\n // why not just invoke the the function?\n let p = Array.isArray(plugin) ? plugin : [plugin];\n\n compiler = compiler.use(...(p as [any]));\n });\n }\n\n compiler = compiler.use(rehypeRaw, { passThrough: ['glimmer_raw', 'raw'] }).use(() => (tree) => {\n visit(tree, 'glimmer_raw', (node: Node) => {\n node.type = 'raw';\n });\n });\n\n compiler = compiler.use(sanitizeForGlimmer);\n\n // Finally convert to string! oofta!\n compiler = compiler.use(rehypeStringify, {\n collapseEmptyAttributes: true,\n closeSelfClosing: true,\n allowParseErrors: true,\n allowDangerousCharacters: true,\n allowDangerousHtml: true,\n }) as any;\n\n return compiler as ReturnType<typeof unified>;\n}\n\ninterface ParseMarkdownOptions {\n CopyComponent?: string;\n ShadowComponent?: string;\n remarkPlugins?: UnifiedPlugin[];\n rehypePlugins?: UnifiedPlugin[];\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","isLive","meta","includes","isPreview","isBelow","liveCodeExtraction","options","copyComponent","snippets","demo","classList","snippetClasses","demoClasses","isRelevantCode","node","type","lang","trim","copyNode","value","enhance","code","data","hProperties","className","children","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","sanitizeForGlimmer","tagName","textNode","replace","buildCompiler","compiler","unified","use","remarkParse","remarkGfm","remarkPlugins","forEach","plugin","p","Array","isArray","CopyComponent","ShadowComponent","remarkRehype","allowDangerousHtml","properties","match","rehypePlugins","rehypeRaw","passThrough","rehypeStringify","collapseEmptyAttributes","closeSelfClosing","allowParseErrors","allowDangerousCharacters","parseMarkdown","input","markdownCompiler","processed","process","templateOnly","toString","templateOnlyGlimdown","blocks"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-repl",
3
- "version": "4.3.0",
3
+ "version": "4.3.2",
4
4
  "description": "Addon for enabling REPL and Playground creation with Ember/Glimmer",
5
5
  "keywords": [
6
6
  "ember-addon"
@@ -60,17 +60,17 @@
60
60
  "addon-main.cjs"
61
61
  ],
62
62
  "dependencies": {
63
- "@babel/helper-plugin-utils": "^7.24.5",
64
- "@babel/standalone": "^7.24.5",
63
+ "@babel/helper-plugin-utils": "^7.25.7",
64
+ "@babel/standalone": "^7.25.7",
65
65
  "@embroider/addon-shim": "1.8.9",
66
- "@embroider/macros": "1.16.3",
66
+ "@embroider/macros": "1.16.9",
67
67
  "babel-import-util": "^3.0.0",
68
- "babel-plugin-ember-template-compilation": "^2.2.5",
68
+ "babel-plugin-ember-template-compilation": "^2.3.0",
69
69
  "broccoli-file-creator": "^2.1.1",
70
70
  "change-case": "^5.4.4",
71
71
  "common-tags": "^1.8.2",
72
- "content-tag": "^1.2.1",
73
- "decorator-transforms": "^2.0.0",
72
+ "content-tag": "^2.0.2",
73
+ "decorator-transforms": "^2.2.2",
74
74
  "ember-resources": "^7.0.1",
75
75
  "line-column": "^1.0.2",
76
76
  "magic-string": "^0.30.6",
@@ -83,31 +83,31 @@
83
83
  "remark-rehype": "^10.1.0",
84
84
  "unified": "^10.1.2",
85
85
  "unist-util-visit": "^5.0.0",
86
- "uuid": "^9.0.1",
86
+ "uuid": "^10.0.0",
87
87
  "vfile": "^6.0.1"
88
88
  },
89
89
  "devDependencies": {
90
- "@babel/core": "^7.24.5",
91
- "@babel/plugin-transform-typescript": "^7.24.5",
92
- "@babel/preset-typescript": "^7.23.3",
93
- "@babel/types": "^7.24.5",
94
- "@ember/test-helpers": "^3.2.1",
90
+ "@babel/core": "^7.25.7",
91
+ "@babel/plugin-transform-typescript": "^7.25.7",
92
+ "@babel/preset-typescript": "^7.25.7",
93
+ "@babel/types": "^7.25.7",
94
+ "@ember/test-helpers": "^4.0.4",
95
95
  "@ember/test-waiters": "^3.1.0",
96
- "@embroider/addon-dev": "4.3.1",
96
+ "@embroider/addon-dev": "^5.0.0",
97
97
  "@glimmer/compiler": "^0.92.0",
98
- "@glimmer/component": "^1.1.2",
98
+ "@glimmer/component": "^2.0.0",
99
99
  "@glimmer/interfaces": "^0.92.0",
100
100
  "@glimmer/reference": "^0.92.0",
101
101
  "@glimmer/syntax": "^0.92.0",
102
102
  "@glimmer/tracking": "^1.1.2",
103
103
  "@glimmer/util": "^0.92.0",
104
- "@glint/core": "1.4.0",
105
- "@glint/environment-ember-loose": "1.4.0",
106
- "@glint/environment-ember-template-imports": "1.4.0",
107
- "@glint/template": "1.4.0",
104
+ "@glint/core": "1.4.1-unstable.ff9ea6c",
105
+ "@glint/environment-ember-loose": "1.4.1-unstable.ff9ea6c",
106
+ "@glint/environment-ember-template-imports": "1.4.1-unstable.ff9ea6c",
107
+ "@glint/template": "1.4.1-unstable.ff9ea6c",
108
108
  "@nullvoxpopuli/eslint-configs": "^4.0.0",
109
109
  "@rollup/plugin-babel": "^6.0.4",
110
- "@rollup/plugin-commonjs": "^25.0.7",
110
+ "@rollup/plugin-commonjs": "^28.0.0",
111
111
  "@tsconfig/ember": "^3.0.7",
112
112
  "@types/babel__core": "^7.20.5",
113
113
  "@types/babel__standalone": "^7.1.7",
@@ -115,25 +115,26 @@
115
115
  "@types/hast": "^3.0.3",
116
116
  "@types/mdast": "^4.0.4",
117
117
  "@types/unist": "^3.0.2",
118
- "@types/uuid": "^9.0.8",
119
- "@typescript-eslint/eslint-plugin": "^7.9.0",
120
- "@typescript-eslint/parser": "^7.9.0",
121
- "concurrently": "^8.2.2",
118
+ "@types/uuid": "^10.0.0",
119
+ "@typescript-eslint/eslint-plugin": "^8.8.0",
120
+ "@typescript-eslint/parser": "^8.8.0",
121
+ "concurrently": "^9.0.1",
122
122
  "ember-resources": "^7.0.0",
123
- "ember-source": ">= 5.9.0",
124
- "ember-template-imports": "^4.1.1",
123
+ "ember-source": ">= 5.10.2",
124
+ "ember-template-imports": "^4.1.2",
125
125
  "ember-template-lint": "^6.0.0",
126
126
  "eslint": "^8.55.0",
127
- "eslint-plugin-ember": "^12.1.0",
128
- "eslint-plugin-n": "^17.7.0",
129
- "eslint-plugin-prettier": "^5.1.3",
127
+ "eslint-plugin-ember": "^12.2.1",
128
+ "eslint-plugin-n": "^17.10.3",
129
+ "eslint-plugin-prettier": "^5.2.1",
130
130
  "execa": "^8.0.1",
131
- "prettier": "^3.2.5",
131
+ "prettier": "^3.3.3",
132
132
  "prettier-plugin-ember-template-tag": "2.0.2",
133
133
  "publint": "^0.2.6",
134
- "rollup": "~4.17.2",
134
+ "rollup": "~4.24.0",
135
135
  "rollup-plugin-copy": "^3.5.0",
136
136
  "typescript": "^5.4.5",
137
+ "webpack": ">= 5.92.0",
137
138
  "@nullvoxpopuli/limber-untyped": "0.0.1"
138
139
  },
139
140
  "volta": {
@@ -146,12 +147,16 @@
146
147
  "version": 2,
147
148
  "type": "addon",
148
149
  "main": "addon-main.cjs",
150
+ "externals": [
151
+ "ember-template-compiler"
152
+ ],
149
153
  "app-js": {}
150
154
  },
151
155
  "peerDependencies": {
152
156
  "@glimmer/compiler": ">= 0.86.0",
153
157
  "@glimmer/syntax": ">= 0.86.0",
154
- "@glint/template": ">= 1.3.0"
158
+ "@glint/template": "1.4.1-unstable.ff9ea6c",
159
+ "webpack": ">= 5.92.0"
155
160
  },
156
161
  "peerDependenciesMeta": {
157
162
  "@glint/template": {
@@ -1,6 +1,5 @@
1
- import { importSync } from '@embroider/macros';
2
-
3
1
  import babelPluginEmberTemplateCompilation from 'babel-plugin-ember-template-compilation';
2
+ import * as compiler from 'ember-template-compiler';
4
3
 
5
4
  import { nameFor } from '../../utils.ts';
6
5
  import { evalSnippet } from './eval.ts';
@@ -68,8 +67,6 @@ async function transpile({ code: input, name }: Info) {
68
67
 
69
68
  import type { Babel } from './babel.ts';
70
69
 
71
- const compiler = importSync('ember-source/dist/ember-template-compiler.js');
72
-
73
70
  let processor: any;
74
71
  let fetchingPromise: Promise<any>;
75
72
 
@@ -84,7 +81,7 @@ async function preprocess(input: string, name: string): Promise<string> {
84
81
  processor = new Preprocessor();
85
82
  }
86
83
 
87
- return processor.process(input, `${name}.js`);
84
+ return processor.process(input, { filename: `${name}.js`, inline_source_map: true });
88
85
  }
89
86
 
90
87
  async function transform(
@@ -2,6 +2,10 @@
2
2
  // import { precompileJSON } from '@glimmer/compiler';
3
3
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
4
4
  // @ts-ignore
5
+ // These things are pre-bundled in the old system.
6
+ // ember-template-compiler defines them in AMD/requirejs
7
+ import { precompileJSON } from '@glimmer/compiler';
8
+ import { getTemplateLocals } from '@glimmer/syntax';
5
9
  import { setComponentTemplate } from '@ember/component';
6
10
  import templateOnlyComponent from '@ember/component/template-only';
7
11
  import { array, concat, fn, get, hash } from '@ember/helper';
@@ -9,18 +13,12 @@ import { on } from '@ember/modifier';
9
13
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
10
14
  // @ts-ignore
11
15
  import { createTemplateFactory } from '@ember/template-factory';
12
- import { importSync } from '@embroider/macros';
13
16
 
14
17
  import { nameFor } from '../utils.ts';
15
18
 
16
19
  import type { CompileResult } from '../types.ts';
17
20
  import type { ComponentLike } from '@glint/template';
18
21
 
19
- // These things are pre-bundled in the old system.
20
- // ember-template-compiler defines them in AMD/requirejs
21
- const { precompileJSON } = importSync('@glimmer/compiler') as any;
22
- const { getTemplateLocals } = importSync('@glimmer/syntax') as any;
23
-
24
22
  /**
25
23
  * compile a template with an empty scope
26
24
  * to use components, helpers, etc, you will need to compile with JS
@@ -202,7 +202,7 @@ function sanitizeForGlimmer(/* options */) {
202
202
  return (tree: Parent) => {
203
203
  visit(tree, 'element', (node: Parent) => {
204
204
  if ('tagName' in node) {
205
- if (node.tagName !== 'pre') return;
205
+ if (!['pre', 'code'].includes(node.tagName as string)) return;
206
206
 
207
207
  visit(node, 'text', (textNode: Text) => {
208
208
  if ('value' in textNode && textNode.value) {