From 9c880bb16e56c9c48b2ed992b8a33dcc22ceafe5 Mon Sep 17 00:00:00 2001 From: patrickpircher Date: Thu, 22 Feb 2024 15:22:59 +0100 Subject: [PATCH 1/8] vite: fix hbs filter --- packages/vite/src/hbs.ts | 6 +----- tests/vite-app/app/components/old/component.js | 5 +++++ tests/vite-app/app/components/old/template.hbs | 1 + tests/vite-app/app/templates/application.hbs | 1 + 4 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 tests/vite-app/app/components/old/component.js create mode 100644 tests/vite-app/app/components/old/template.hbs diff --git a/packages/vite/src/hbs.ts b/packages/vite/src/hbs.ts index a759f607b..0f8691fb1 100644 --- a/packages/vite/src/hbs.ts +++ b/packages/vite/src/hbs.ts @@ -1,6 +1,4 @@ // TODO: I copied this from @embroider/addon-dev, it needs to be its own package -// (or be in shared-internals or core) -import { createFilter } from '@rollup/pluginutils'; import type { PluginContext, ResolvedId } from 'rollup'; import type { Plugin } from 'vite'; import { hbsToJS } from '@embroider/core'; @@ -113,10 +111,8 @@ async function maybeSynthesizeComponentJS(context: PluginContext, source: string }; } -const hbsFilter = createFilter('**/*.hbs?(\\?)*'); - function maybeRewriteHBS(resolution: ResolvedId) { - if (!hbsFilter(resolution.id)) { + if (!resolution.id.split('?')[0].endsWith('.hbs')) { return null; } debug('emitting hbs rewrite: %s', resolution.id); diff --git a/tests/vite-app/app/components/old/component.js b/tests/vite-app/app/components/old/component.js new file mode 100644 index 000000000..6e87f704f --- /dev/null +++ b/tests/vite-app/app/components/old/component.js @@ -0,0 +1,5 @@ +import Component from '@glimmer/component'; + +export default class extends Component { + message = 'hi'; +} diff --git a/tests/vite-app/app/components/old/template.hbs b/tests/vite-app/app/components/old/template.hbs new file mode 100644 index 000000000..6224387ee --- /dev/null +++ b/tests/vite-app/app/components/old/template.hbs @@ -0,0 +1 @@ +
hey {{@message}}
\ No newline at end of file diff --git a/tests/vite-app/app/templates/application.hbs b/tests/vite-app/app/templates/application.hbs index d28e8e4cc..d01955f70 100644 --- a/tests/vite-app/app/templates/application.hbs +++ b/tests/vite-app/app/templates/application.hbs @@ -1,6 +1,7 @@ {{page-title "ViteApp"}} + {{! Feel free to remove this! }} From 65231e66a5ce1749bb6b8876728bdf5ac0bb0ea1 Mon Sep 17 00:00:00 2001 From: patrickpircher Date: Tue, 12 Mar 2024 17:35:57 +0100 Subject: [PATCH 2/8] fix direct template imports --- packages/vite/src/hbs.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/vite/src/hbs.ts b/packages/vite/src/hbs.ts index 0f8691fb1..f628c2c0e 100644 --- a/packages/vite/src/hbs.ts +++ b/packages/vite/src/hbs.ts @@ -97,6 +97,18 @@ async function maybeSynthesizeComponentJS(context: PluginContext, source: string if (!templateResolution) { return null; } + + if (templateResolution.id.endsWith('/template.hbs' || templateResolution.id.includes('/templates/'))) { + return { + ...templateResolution, + meta: { + 'rollup-hbs-plugin': { + type: 'template', + }, + }, + }; + } + debug(`emitting template only component: %s`, templateResolution.id); // we're trying to resolve a JS module but only the corresponding HBS From 71d110010a1a27e8606302bdda386f6932a93dc6 Mon Sep 17 00:00:00 2001 From: patrickpircher Date: Tue, 12 Mar 2024 17:37:26 +0100 Subject: [PATCH 3/8] fix virtual pair component --- packages/core/src/virtual-content.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/core/src/virtual-content.ts b/packages/core/src/virtual-content.ts index 55ac3a903..1e3969cd4 100644 --- a/packages/core/src/virtual-content.ts +++ b/packages/core/src/virtual-content.ts @@ -2,6 +2,7 @@ import { dirname, basename, resolve, posix, sep, join } from 'path'; import type { Resolver, AddonPackage, Package } from '.'; import { explicitRelative, extensionsPattern } from '.'; import { compile } from './js-handlebars'; +import { cleanUrl } from '.'; const externalESPrefix = '/@embroider/ext-es/'; const externalCJSPrefix = '/@embroider/ext-cjs/'; @@ -138,11 +139,12 @@ const pairComponentMarker = '-embroider-pair-component'; const pairComponentPattern = /^(?.*)\/(?[^\/]*)-embroider-pair-component$/; export function virtualPairComponent(hbsModule: string, jsModule: string | undefined): string { + let clearHbsModule = cleanUrl(hbsModule); let relativeJSModule = ''; if (jsModule) { - relativeJSModule = explicitRelative(hbsModule, jsModule); + relativeJSModule = explicitRelative(clearHbsModule, jsModule); } - return `${hbsModule}/${encodeURIComponent(relativeJSModule)}${pairComponentMarker}`; + return `${clearHbsModule}/${encodeURIComponent(relativeJSModule)}${pairComponentMarker}`; } function decodeVirtualPairComponent( From 4c2f4e1c5123116b25ff3649879dbc3a4372f35e Mon Sep 17 00:00:00 2001 From: patrick Date: Thu, 29 Feb 2024 16:22:25 +0100 Subject: [PATCH 4/8] fix tests --- packages/core/src/virtual-content.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/virtual-content.ts b/packages/core/src/virtual-content.ts index 1e3969cd4..b960ae2cd 100644 --- a/packages/core/src/virtual-content.ts +++ b/packages/core/src/virtual-content.ts @@ -1,5 +1,5 @@ import { dirname, basename, resolve, posix, sep, join } from 'path'; -import type { Resolver, AddonPackage, Package } from '.'; +import { Resolver, AddonPackage, Package, cleanUrl } from '.'; import { explicitRelative, extensionsPattern } from '.'; import { compile } from './js-handlebars'; import { cleanUrl } from '.'; From 0b1f6f79e48c4457bdc24a3609b9665959cae80e Mon Sep 17 00:00:00 2001 From: patrick Date: Tue, 19 Mar 2024 15:42:34 +0100 Subject: [PATCH 5/8] check if not in components & only on app --- packages/vite/src/hbs.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/hbs.ts b/packages/vite/src/hbs.ts index f628c2c0e..56cf28f07 100644 --- a/packages/vite/src/hbs.ts +++ b/packages/vite/src/hbs.ts @@ -1,12 +1,13 @@ // TODO: I copied this from @embroider/addon-dev, it needs to be its own package import type { PluginContext, ResolvedId } from 'rollup'; import type { Plugin } from 'vite'; -import { hbsToJS } from '@embroider/core'; +import { hbsToJS, ResolverLoader } from '@embroider/core'; import assertNever from 'assert-never'; import { parse as pathParse } from 'path'; import makeDebug from 'debug'; const debug = makeDebug('embroider:hbs-plugin'); +const resolverLoader = new ResolverLoader(process.cwd()); export function hbs(): Plugin { return { @@ -98,7 +99,10 @@ async function maybeSynthesizeComponentJS(context: PluginContext, source: string return null; } - if (templateResolution.id.endsWith('/template.hbs' || templateResolution.id.includes('/templates/'))) { + const pkg = resolverLoader.resolver.packageCache.ownerOfFile(templateResolution.id); + const isInComponents = pkg?.isV2App() && templateResolution.id.slice(pkg?.root.length).startsWith('/components'); + + if (templateResolution.id.endsWith('/template.hbs' || !isInComponents)) { return { ...templateResolution, meta: { From d7e96250c2cd09d9a00ccc1cc35003ba95c3722d Mon Sep 17 00:00:00 2001 From: patrick Date: Tue, 19 Mar 2024 15:47:20 +0100 Subject: [PATCH 6/8] fix hbs --- packages/core/src/virtual-content.ts | 8 +++----- packages/vite/src/hbs.ts | 9 ++++++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/core/src/virtual-content.ts b/packages/core/src/virtual-content.ts index b960ae2cd..55ac3a903 100644 --- a/packages/core/src/virtual-content.ts +++ b/packages/core/src/virtual-content.ts @@ -1,8 +1,7 @@ import { dirname, basename, resolve, posix, sep, join } from 'path'; -import { Resolver, AddonPackage, Package, cleanUrl } from '.'; +import type { Resolver, AddonPackage, Package } from '.'; import { explicitRelative, extensionsPattern } from '.'; import { compile } from './js-handlebars'; -import { cleanUrl } from '.'; const externalESPrefix = '/@embroider/ext-es/'; const externalCJSPrefix = '/@embroider/ext-cjs/'; @@ -139,12 +138,11 @@ const pairComponentMarker = '-embroider-pair-component'; const pairComponentPattern = /^(?.*)\/(?[^\/]*)-embroider-pair-component$/; export function virtualPairComponent(hbsModule: string, jsModule: string | undefined): string { - let clearHbsModule = cleanUrl(hbsModule); let relativeJSModule = ''; if (jsModule) { - relativeJSModule = explicitRelative(clearHbsModule, jsModule); + relativeJSModule = explicitRelative(hbsModule, jsModule); } - return `${clearHbsModule}/${encodeURIComponent(relativeJSModule)}${pairComponentMarker}`; + return `${hbsModule}/${encodeURIComponent(relativeJSModule)}${pairComponentMarker}`; } function decodeVirtualPairComponent( diff --git a/packages/vite/src/hbs.ts b/packages/vite/src/hbs.ts index 56cf28f07..a614fff7c 100644 --- a/packages/vite/src/hbs.ts +++ b/packages/vite/src/hbs.ts @@ -99,10 +99,13 @@ async function maybeSynthesizeComponentJS(context: PluginContext, source: string return null; } - const pkg = resolverLoader.resolver.packageCache.ownerOfFile(templateResolution.id); - const isInComponents = pkg?.isV2App() && templateResolution.id.slice(pkg?.root.length).startsWith('/components'); + const resolvedId = templateResolution.id.split('?')[0]; + templateResolution.id = resolvedId; - if (templateResolution.id.endsWith('/template.hbs' || !isInComponents)) { + const pkg = resolverLoader.resolver.packageCache.ownerOfFile(resolvedId); + const isInComponents = pkg?.isV2App() && resolvedId.slice(pkg?.root.length).startsWith('/components'); + + if (resolvedId.endsWith('/template.hbs' || !isInComponents)) { return { ...templateResolution, meta: { From 9772251c57fda758456840ae2c46702c3e071195 Mon Sep 17 00:00:00 2001 From: Patrick Pircher Date: Thu, 21 Mar 2024 12:58:50 +0100 Subject: [PATCH 7/8] fix check --- packages/vite/src/hbs.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite/src/hbs.ts b/packages/vite/src/hbs.ts index a614fff7c..8678f4f37 100644 --- a/packages/vite/src/hbs.ts +++ b/packages/vite/src/hbs.ts @@ -105,7 +105,7 @@ async function maybeSynthesizeComponentJS(context: PluginContext, source: string const pkg = resolverLoader.resolver.packageCache.ownerOfFile(resolvedId); const isInComponents = pkg?.isV2App() && resolvedId.slice(pkg?.root.length).startsWith('/components'); - if (resolvedId.endsWith('/template.hbs' || !isInComponents)) { + if (resolvedId.endsWith('/template.hbs') || !isInComponents) { return { ...templateResolution, meta: { From 23173c2d6f9387d424465e5d89721c262b9eea7a Mon Sep 17 00:00:00 2001 From: Chris Manson Date: Thu, 21 Mar 2024 14:25:16 +0000 Subject: [PATCH 8/8] go back to using hbsFilter --- packages/vite/src/hbs.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/vite/src/hbs.ts b/packages/vite/src/hbs.ts index 8678f4f37..7b6f799ca 100644 --- a/packages/vite/src/hbs.ts +++ b/packages/vite/src/hbs.ts @@ -1,4 +1,6 @@ // TODO: I copied this from @embroider/addon-dev, it needs to be its own package +// (or be in shared-internals or core) +import { createFilter } from '@rollup/pluginutils'; import type { PluginContext, ResolvedId } from 'rollup'; import type { Plugin } from 'vite'; import { hbsToJS, ResolverLoader } from '@embroider/core'; @@ -130,8 +132,10 @@ async function maybeSynthesizeComponentJS(context: PluginContext, source: string }; } +const hbsFilter = createFilter('**/*.hbs?(\\?)*'); + function maybeRewriteHBS(resolution: ResolvedId) { - if (!resolution.id.split('?')[0].endsWith('.hbs')) { + if (!hbsFilter(resolution.id)) { return null; } debug('emitting hbs rewrite: %s', resolution.id);