From 5938936d9d7471d1ab03e0dbe1ee9eba23f47634 Mon Sep 17 00:00:00 2001
From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com>
Date: Fri, 17 Mar 2023 08:44:10 -0400
Subject: [PATCH] Add option for the old behavior

---
 .changeset/odd-vans-repair.md                 | 21 +++++
 README.md                                     | 38 +++++++++
 .../src/rollup-plugin.js                      | 25 +++++-
 packages/test-app/package.json                |  1 +
 .../tests/integration/loose-mode-test.ts      | 10 +++
 packages/test-app/types/index.d.ts            |  6 +-
 .../test-rollup-addon-split-gts/.eslintignore |  1 +
 .../test-rollup-addon-split-gts/.eslintrc.cjs |  9 ++
 .../test-rollup-addon-split-gts/.gitignore    |  1 +
 .../.prettierignore                           |  1 +
 .../.prettierrc.cjs                           |  6 ++
 .../addon-main.cjs                            |  5 ++
 .../babel.config.json                         | 15 ++++
 .../test-rollup-addon-split-gts/package.json  | 83 +++++++++++++++++++
 .../rollup.config.mjs                         | 28 +++++++
 .../src/components/ts-split-class-demo.gts    | 15 ++++
 .../src/components/ts-split-demo.gts          |  5 ++
 .../src/glint-registry.ts                     |  6 ++
 .../test-rollup-addon-split-gts/src/index.ts  |  2 +
 .../test-rollup-addon-split-gts/tsconfig.json |  7 ++
 .../unpublished-development-types/index.d.ts  |  2 +
 pnpm-lock.yaml                                | 63 +++++++++++++-
 22 files changed, 343 insertions(+), 7 deletions(-)
 create mode 100644 .changeset/odd-vans-repair.md
 create mode 100644 packages/test-rollup-addon-split-gts/.eslintignore
 create mode 100644 packages/test-rollup-addon-split-gts/.eslintrc.cjs
 create mode 100644 packages/test-rollup-addon-split-gts/.gitignore
 create mode 100644 packages/test-rollup-addon-split-gts/.prettierignore
 create mode 100644 packages/test-rollup-addon-split-gts/.prettierrc.cjs
 create mode 100644 packages/test-rollup-addon-split-gts/addon-main.cjs
 create mode 100644 packages/test-rollup-addon-split-gts/babel.config.json
 create mode 100644 packages/test-rollup-addon-split-gts/package.json
 create mode 100644 packages/test-rollup-addon-split-gts/rollup.config.mjs
 create mode 100644 packages/test-rollup-addon-split-gts/src/components/ts-split-class-demo.gts
 create mode 100644 packages/test-rollup-addon-split-gts/src/components/ts-split-demo.gts
 create mode 100644 packages/test-rollup-addon-split-gts/src/glint-registry.ts
 create mode 100644 packages/test-rollup-addon-split-gts/src/index.ts
 create mode 100644 packages/test-rollup-addon-split-gts/tsconfig.json
 create mode 100644 packages/test-rollup-addon-split-gts/unpublished-development-types/index.d.ts

diff --git a/.changeset/odd-vans-repair.md b/.changeset/odd-vans-repair.md
new file mode 100644
index 0000000..dd53be8
--- /dev/null
+++ b/.changeset/odd-vans-repair.md
@@ -0,0 +1,21 @@
+---
+"rollup-plugin-glimmer-template-tag": minor
+---
+
+Add option to the rollup plugin so that folks can choose to separately due to the two-step transform.
+
+In 0.2.0, it became possible to _only_ use the rollup plugin for the entirety of the transform, whereas in 0.1.0, a babel plugin was needed as well.
+
+In this version, you may go back to the 0.1.0 style configuration via:
+
+```js
+// rollup.config.mjs
+export default {
+  output: addon.output(),
+  plugins: [
+    // ...
+    glimmerTemplateTag({ preprocessOnly: true }),
+    // ...
+  ],
+};
+```
diff --git a/README.md b/README.md
index f6b2f83..5ed668a 100644
--- a/README.md
+++ b/README.md
@@ -129,3 +129,41 @@ Without setting `transpileOnly: true` (using the default or explicitly setting t
     This exposes internal information about the `<template>` transformation process. 
     Though, you could try to get around the issue if you _really_ want `transpileOnly: false` by `declare module`ing for `@ember/template-compilation` in your `unpublished-development-types` _except_ that `@ember/template-compilation` is not presently a real package, so the part of the error saying `Cannot find module ` is still true, even though a corresponding type declaration is defined -- both the module and the type declarations are needed.
 
+
+### Manually choosing the two-stage transformation
+
+There is an option available to the rollup plugin so that folks can choose to separately due to the two-step transform.
+
+Normally, these are done wholly within the rollup plugin:
+ 1. preprocess the `<template>` tag into a secret internal format
+ 2. convert that secret internal format into vanilla JS that a consuming build environment knows how to handle
+
+However, for performance or compatibility reasons, it may not be desireable to allow both steps to be handled automatically.
+
+You'd want these changes to your config files:
+
+```js
+// rollup.config.mjs
+export default {
+  output: addon.output(),
+  plugins: [
+    // ...
+    glimmerTemplateTag({ preprocessOnly: true }),
+    // ...
+  ],
+};
+```
+
+```diff
+ // babel.config.js / json / etc
+ 'use strict';
+ module.exports = {
+   plugins: [
++    'ember-template-imports/src/babel-plugin',
+     '@embroider/addon-dev/template-colocation-plugin',
+     ['@babel/plugin-proposal-decorators', { legacy: true }],
+     '@babel/plugin-proposal-class-properties'
+   ]
+ };
+```
+
diff --git a/packages/rollup-plugin-glimmer-template-tag/src/rollup-plugin.js b/packages/rollup-plugin-glimmer-template-tag/src/rollup-plugin.js
index b385e77..df25aa0 100644
--- a/packages/rollup-plugin-glimmer-template-tag/src/rollup-plugin.js
+++ b/packages/rollup-plugin-glimmer-template-tag/src/rollup-plugin.js
@@ -13,8 +13,20 @@ import { TEMPLATE_TAG_NAME, TEMPLATE_TAG_PLACEHOLDER } from 'ember-template-impo
 const PLUGIN_KEY = 'glimmer-template-tag';
 const RELEVANT_EXTENSION_REGEX = /\.g([jt]s)$/;
 
-/** @type {PluginImpl} */
-export function glimmerTemplateTag() {
+/**
+ * Rollup plugin that does a two-phase transform to convert <template> tags to vanilla JS.
+ * 1. preprocess the <template> tag into a secret internal format
+ * 2. convert that secret internal format into vanilla JS that a consuming build environment knows how to handle
+ *
+ * @typedef {object} Options
+ * @property {boolean} [preprocessOnly] tells this rollup plugin to only do the first part of the <template> transform
+ * @param {Options} options
+ *
+ * @type {PluginImpl}
+ * */
+export function glimmerTemplateTag(options) {
+  let { preprocessOnly } = options || {};
+
   return {
     name: 'preprocess-glimmer-template-tag',
     async resolveId(source, importer, options) {
@@ -50,7 +62,7 @@ export function glimmerTemplateTag() {
       }
 
       if (RELEVANT_EXTENSION_REGEX.test(originalId)) {
-        return transformGlimmerTemplateTag(originalId);
+        return transformGlimmerTemplateTag(originalId, preprocessOnly);
       }
 
       return;
@@ -60,10 +72,15 @@ export function glimmerTemplateTag() {
 
 /**
  * @param {string} originalId
+ * @param {boolean} [ preprocessOnly ]
  */
-async function transformGlimmerTemplateTag(originalId) {
+async function transformGlimmerTemplateTag(originalId, preprocessOnly) {
   let intermediate = await preprocessTemplates(originalId);
 
+  if (preprocessOnly) {
+    return intermediate;
+  }
+
   let config = await babel.loadPartialConfigAsync();
 
   // Use the basename so we don't accidentally operate on real files
diff --git a/packages/test-app/package.json b/packages/test-app/package.json
index 75d6049..8101da2 100644
--- a/packages/test-app/package.json
+++ b/packages/test-app/package.json
@@ -23,6 +23,7 @@
   },
   "dependencies": {
     "@nullvoxpopuli/test-rollup-addon-gjs": "workspace:*",
+    "@nullvoxpopuli/test-rollup-addon-split-gts": "workspace:*",
     "@nullvoxpopuli/test-rollup-addon-gts": "workspace:*"
   },
   "devDependencies": {
diff --git a/packages/test-app/tests/integration/loose-mode-test.ts b/packages/test-app/tests/integration/loose-mode-test.ts
index 7a9cc93..4f56389 100644
--- a/packages/test-app/tests/integration/loose-mode-test.ts
+++ b/packages/test-app/tests/integration/loose-mode-test.ts
@@ -25,4 +25,14 @@ module('loose mode', function (hooks) {
     assert.dom().containsText('TS Demo: Hello World');
     assert.dom().containsText('TS Class Demo: Hello World');
   });
+
+  test('ts components using the split compilation are correct', async function (assert) {
+    await render(hbs`
+      <TsSplitDemo />
+      <TsSplitClassDemo />
+    `);
+
+    assert.dom().containsText('TS Split Demo: Hello World');
+    assert.dom().containsText('TS Split Class Demo: Hello World');
+  });
 });
diff --git a/packages/test-app/types/index.d.ts b/packages/test-app/types/index.d.ts
index 834911b..91ba142 100644
--- a/packages/test-app/types/index.d.ts
+++ b/packages/test-app/types/index.d.ts
@@ -5,9 +5,13 @@ import '@glint/environment-ember-loose/native-integration';
 
 import type { Registry as JSRegistry } from '@nullvoxpopuli/test-rollup-addon-gjs/glint-registry';
 import type { Registry as TSRegistry } from '@nullvoxpopuli/test-rollup-addon-gts/glint-registry';
+import type { Registry as TSSplitRegistry } from '@nullvoxpopuli/test-rollup-addon-split-gts/glint-registry';
 
 declare module '@glint/environment-ember-loose/registry' {
-  export default interface Registry extends JSRegistry, TSRegistry {
+  export default interface Registry
+    extends JSRegistry,
+      TSRegistry,
+      TSSplitRegistry {
     // Custom stuff would be added here, but we don't
     // yet have anything custom in the globals
   }
diff --git a/packages/test-rollup-addon-split-gts/.eslintignore b/packages/test-rollup-addon-split-gts/.eslintignore
new file mode 100644
index 0000000..849ddff
--- /dev/null
+++ b/packages/test-rollup-addon-split-gts/.eslintignore
@@ -0,0 +1 @@
+dist/
diff --git a/packages/test-rollup-addon-split-gts/.eslintrc.cjs b/packages/test-rollup-addon-split-gts/.eslintrc.cjs
new file mode 100644
index 0000000..bd51a22
--- /dev/null
+++ b/packages/test-rollup-addon-split-gts/.eslintrc.cjs
@@ -0,0 +1,9 @@
+'use strict';
+
+const { configs } = require('@nullvoxpopuli/eslint-configs');
+
+let config = configs.ember();
+
+module.exports = {
+  overrides: [...config.overrides],
+};
diff --git a/packages/test-rollup-addon-split-gts/.gitignore b/packages/test-rollup-addon-split-gts/.gitignore
new file mode 100644
index 0000000..849ddff
--- /dev/null
+++ b/packages/test-rollup-addon-split-gts/.gitignore
@@ -0,0 +1 @@
+dist/
diff --git a/packages/test-rollup-addon-split-gts/.prettierignore b/packages/test-rollup-addon-split-gts/.prettierignore
new file mode 100644
index 0000000..849ddff
--- /dev/null
+++ b/packages/test-rollup-addon-split-gts/.prettierignore
@@ -0,0 +1 @@
+dist/
diff --git a/packages/test-rollup-addon-split-gts/.prettierrc.cjs b/packages/test-rollup-addon-split-gts/.prettierrc.cjs
new file mode 100644
index 0000000..7cdd43b
--- /dev/null
+++ b/packages/test-rollup-addon-split-gts/.prettierrc.cjs
@@ -0,0 +1,6 @@
+'use strict';
+
+module.exports = {
+  singleQuote: true,
+  printWidth: 100,
+};
diff --git a/packages/test-rollup-addon-split-gts/addon-main.cjs b/packages/test-rollup-addon-split-gts/addon-main.cjs
new file mode 100644
index 0000000..d36b0c8
--- /dev/null
+++ b/packages/test-rollup-addon-split-gts/addon-main.cjs
@@ -0,0 +1,5 @@
+'use strict';
+
+const { addonV1Shim } = require('@embroider/addon-shim');
+
+module.exports = addonV1Shim(__dirname);
diff --git a/packages/test-rollup-addon-split-gts/babel.config.json b/packages/test-rollup-addon-split-gts/babel.config.json
new file mode 100644
index 0000000..00793ca
--- /dev/null
+++ b/packages/test-rollup-addon-split-gts/babel.config.json
@@ -0,0 +1,15 @@
+{
+  "presets": ["@babel/preset-typescript"],
+  "plugins": [
+    "ember-template-imports/src/babel-plugin",
+    [
+      "@babel/plugin-transform-typescript",
+      {
+        "allowDeclareFields": true
+      }
+    ],
+    "@embroider/addon-dev/template-colocation-plugin",
+    ["@babel/plugin-proposal-decorators", { "legacy": true }],
+    "@babel/plugin-proposal-class-properties"
+  ]
+}
diff --git a/packages/test-rollup-addon-split-gts/package.json b/packages/test-rollup-addon-split-gts/package.json
new file mode 100644
index 0000000..dd8b304
--- /dev/null
+++ b/packages/test-rollup-addon-split-gts/package.json
@@ -0,0 +1,83 @@
+{
+  "name": "@nullvoxpopuli/test-rollup-addon-split-gts",
+  "version": "0.0.0",
+  "private": true,
+  "keywords": [
+    "ember-addon"
+  ],
+  "exports": {
+    ".": "dist/index.js",
+    "./components/ts-split-demo": "dist/components/ts-split-demo.js",
+    "./components/ts-split-class-demo": "dist/components/ts-split-class-demo.js",
+    "./glint-registry": {
+      "types": "dist/glint-registry.d.ts"
+    }
+  },
+  "typesVersions": {
+    "*": {
+      "glint-registry": [
+        "dist/glint-registry.d.ts"
+      ]
+    }
+  },
+  "files": [
+    "dist",
+    "addon-main.cjs"
+  ],
+  "scripts": {
+    "build": "rollup -c",
+    "lint": "concurrently 'npm:lint:*(!fix)' --names 'lint:'",
+    "lint:types": "glint",
+    "lint:fix": "concurrently 'npm:lint:*:fix' --names 'fix:'",
+    "lint:js": "eslint . --cache",
+    "lint:prettier": "prettier --check .",
+    "lint:prettier:fix": "prettier --write .",
+    "lint:js:fix": "eslint . --fix"
+  },
+  "devDependencies": {
+    "@babel/core": "^7.21.3",
+    "@babel/eslint-parser": "^7.21.3",
+    "@babel/plugin-proposal-class-properties": "^7.18.6",
+    "@babel/plugin-proposal-decorators": "^7.21.0",
+    "@babel/preset-typescript": "^7.21.0",
+    "@babel/runtime": "^7.21.0",
+    "@embroider/addon-dev": "^3.0.0",
+    "@glimmer/component": "^1.1.2",
+    "@glint/core": "^1.0.0-beta.3",
+    "@glint/environment-ember-loose": "^1.0.0-beta.3",
+    "@glint/environment-ember-template-imports": "^1.0.0-beta.3",
+    "@glint/template": "^1.0.0-beta.3",
+    "@nullvoxpopuli/eslint-configs": "^3.1.3",
+    "@tsconfig/ember": "^2.0.0",
+    "@types/rsvp": "^4.0.4",
+    "ember-source": "^4.11.0",
+    "ember-template-imports": "^3.4.1",
+    "eslint": "^8.36.0",
+    "eslint-plugin-ember": "^11.4.7",
+    "eslint-plugin-qunit": "^7.3.4",
+    "prettier": "^2.8.4",
+    "rollup": "^3.19.1",
+    "rollup-plugin-glimmer-template-tag": "workspace:*",
+    "rollup-plugin-ts": "^3.2.0",
+    "typescript": "^4.9.5"
+  },
+  "ember-addon": {
+    "version": 2,
+    "type": "addon",
+    "main": "addon-main.cjs",
+    "app-js": {
+      "./components/ts-split-class-demo.js": "./dist/_app_/components/ts-split-class-demo.js",
+      "./components/ts-split-demo.js": "./dist/_app_/components/ts-split-demo.js"
+    }
+  },
+  "dependencies": {
+    "@embroider/addon-shim": "^1.8.4"
+  },
+  "peerDependencies": {
+    "@glimmer/component": "^1.1.2",
+    "ember-source": "^4.11.0"
+  },
+  "volta": {
+    "extends": "../../package.json"
+  }
+}
diff --git a/packages/test-rollup-addon-split-gts/rollup.config.mjs b/packages/test-rollup-addon-split-gts/rollup.config.mjs
new file mode 100644
index 0000000..2e8376f
--- /dev/null
+++ b/packages/test-rollup-addon-split-gts/rollup.config.mjs
@@ -0,0 +1,28 @@
+import { Addon } from '@embroider/addon-dev/rollup';
+
+import typescript from 'rollup-plugin-ts';
+import { defineConfig } from 'rollup';
+import { glimmerTemplateTag } from 'rollup-plugin-glimmer-template-tag';
+
+const addon = new Addon({
+  srcDir: 'src',
+  destDir: 'dist',
+});
+
+export default defineConfig({
+  output: addon.output(),
+  plugins: [
+    addon.publicEntrypoints(['**/*.js']),
+    addon.appReexports(['components/**/*.js']),
+    glimmerTemplateTag({ preprocessOnly: true }),
+    typescript({
+      transpiler: 'babel',
+      // Babel defaults to "guessing" when there is no browserslist past
+      // We want to do the least amount of work
+      browserslist: ['last 1 firefox versions'],
+      transpileOnly: true,
+    }),
+    addon.dependencies(),
+    addon.clean(),
+  ],
+});
diff --git a/packages/test-rollup-addon-split-gts/src/components/ts-split-class-demo.gts b/packages/test-rollup-addon-split-gts/src/components/ts-split-class-demo.gts
new file mode 100644
index 0000000..0cdd9ff
--- /dev/null
+++ b/packages/test-rollup-addon-split-gts/src/components/ts-split-class-demo.gts
@@ -0,0 +1,15 @@
+import Component from '@glimmer/component';
+import { service } from '@ember/service';
+
+import type RouterService from '@ember/routing/router-service';
+
+export default class TsClassDemo extends Component {
+  // Need TS Syntax for confident test
+  @service declare router: RouterService;
+
+  greeting = 'Hello World!';
+
+  <template>
+    TS Split Class Demo: {{this.greeting}}
+  </template>
+}
diff --git a/packages/test-rollup-addon-split-gts/src/components/ts-split-demo.gts b/packages/test-rollup-addon-split-gts/src/components/ts-split-demo.gts
new file mode 100644
index 0000000..32ba743
--- /dev/null
+++ b/packages/test-rollup-addon-split-gts/src/components/ts-split-demo.gts
@@ -0,0 +1,5 @@
+const greeting = 'Hello World!';
+
+<template>
+  TS Split Demo: {{greeting}}
+</template>
diff --git a/packages/test-rollup-addon-split-gts/src/glint-registry.ts b/packages/test-rollup-addon-split-gts/src/glint-registry.ts
new file mode 100644
index 0000000..af6fee0
--- /dev/null
+++ b/packages/test-rollup-addon-split-gts/src/glint-registry.ts
@@ -0,0 +1,6 @@
+import type { ComponentLike } from '@glint/template';
+
+export interface Registry {
+  TsSplitDemo: ComponentLike;
+  TsSplitClassDemo: ComponentLike;
+}
diff --git a/packages/test-rollup-addon-split-gts/src/index.ts b/packages/test-rollup-addon-split-gts/src/index.ts
new file mode 100644
index 0000000..03eab54
--- /dev/null
+++ b/packages/test-rollup-addon-split-gts/src/index.ts
@@ -0,0 +1,2 @@
+export { default as TSClassDemo } from './components/ts-split-class-demo';
+export { default as TSDemo } from './components/ts-split-demo';
diff --git a/packages/test-rollup-addon-split-gts/tsconfig.json b/packages/test-rollup-addon-split-gts/tsconfig.json
new file mode 100644
index 0000000..33809bb
--- /dev/null
+++ b/packages/test-rollup-addon-split-gts/tsconfig.json
@@ -0,0 +1,7 @@
+{
+  "extends": "@tsconfig/ember/tsconfig.json",
+  "include": ["src/**/*", "unpublished-development-types/**/*"],
+  "glint": {
+    "environment": ["ember-loose", "ember-template-imports"]
+  }
+}
diff --git a/packages/test-rollup-addon-split-gts/unpublished-development-types/index.d.ts b/packages/test-rollup-addon-split-gts/unpublished-development-types/index.d.ts
new file mode 100644
index 0000000..2109bac
--- /dev/null
+++ b/packages/test-rollup-addon-split-gts/unpublished-development-types/index.d.ts
@@ -0,0 +1,2 @@
+import 'ember-source/types';
+import 'ember-source/types/preview';
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8b1347c..f81f601 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -63,6 +63,7 @@ importers:
       '@nullvoxpopuli/eslint-configs': ^3.1.3
       '@nullvoxpopuli/test-rollup-addon-gjs': workspace:*
       '@nullvoxpopuli/test-rollup-addon-gts': workspace:*
+      '@nullvoxpopuli/test-rollup-addon-split-gts': workspace:*
       '@tsconfig/ember': ^2.0.0
       '@types/qunit': ^2.19.4
       '@types/rsvp': ^4.0.4
@@ -107,6 +108,7 @@ importers:
     dependencies:
       '@nullvoxpopuli/test-rollup-addon-gjs': link:../test-rollup-addon-gjs
       '@nullvoxpopuli/test-rollup-addon-gts': link:../test-rollup-addon-gts
+      '@nullvoxpopuli/test-rollup-addon-split-gts': link:../test-rollup-addon-split-gts
     devDependencies:
       '@ember/optional-features': 2.0.0
       '@ember/string': 3.0.1
@@ -253,6 +255,63 @@ importers:
       rollup-plugin-ts: 3.2.0_ydk6ocwts2f26py227ahyuhk5i
       typescript: 4.9.5
 
+  packages/test-rollup-addon-split-gts:
+    specifiers:
+      '@babel/core': ^7.21.3
+      '@babel/eslint-parser': ^7.21.3
+      '@babel/plugin-proposal-class-properties': ^7.18.6
+      '@babel/plugin-proposal-decorators': ^7.21.0
+      '@babel/preset-typescript': ^7.21.0
+      '@babel/runtime': ^7.21.0
+      '@embroider/addon-dev': ^3.0.0
+      '@embroider/addon-shim': ^1.8.4
+      '@glimmer/component': ^1.1.2
+      '@glint/core': ^1.0.0-beta.3
+      '@glint/environment-ember-loose': ^1.0.0-beta.3
+      '@glint/environment-ember-template-imports': ^1.0.0-beta.3
+      '@glint/template': ^1.0.0-beta.3
+      '@nullvoxpopuli/eslint-configs': ^3.1.3
+      '@tsconfig/ember': ^2.0.0
+      '@types/rsvp': ^4.0.4
+      ember-source: ^4.11.0
+      ember-template-imports: ^3.4.1
+      eslint: ^8.36.0
+      eslint-plugin-ember: ^11.4.7
+      eslint-plugin-qunit: ^7.3.4
+      prettier: ^2.8.4
+      rollup: ^3.19.1
+      rollup-plugin-glimmer-template-tag: workspace:*
+      rollup-plugin-ts: ^3.2.0
+      typescript: ^4.9.5
+    dependencies:
+      '@embroider/addon-shim': 1.8.4
+    devDependencies:
+      '@babel/core': 7.21.3
+      '@babel/eslint-parser': 7.21.3_pxuto7xgangxlusvzceggvrmde
+      '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3
+      '@babel/plugin-proposal-decorators': 7.21.0_@babel+core@7.21.3
+      '@babel/preset-typescript': 7.21.0_@babel+core@7.21.3
+      '@babel/runtime': 7.21.0
+      '@embroider/addon-dev': 3.0.0_rollup@3.19.1
+      '@glimmer/component': 1.1.2_@babel+core@7.21.3
+      '@glint/core': 1.0.0-beta.3_typescript@4.9.5
+      '@glint/environment-ember-loose': 1.0.0-beta.3_acn5lxfzqsyvoloees6qvx3wku
+      '@glint/environment-ember-template-imports': 1.0.0-beta.3_vycqboguq2ondhtbsrsjhy7tvi
+      '@glint/template': 1.0.0-beta.3
+      '@nullvoxpopuli/eslint-configs': 3.1.3_yrs52uff32x2ahkkmgmhaom464
+      '@tsconfig/ember': 2.0.0
+      '@types/rsvp': 4.0.4
+      ember-source: 4.11.0_wdt64mjlww5fpvzagecura56i4
+      ember-template-imports: 3.4.1
+      eslint: 8.36.0
+      eslint-plugin-ember: 11.4.7_eslint@8.36.0
+      eslint-plugin-qunit: 7.3.4_eslint@8.36.0
+      prettier: 2.8.4
+      rollup: 3.19.1
+      rollup-plugin-glimmer-template-tag: link:../rollup-plugin-glimmer-template-tag
+      rollup-plugin-ts: 3.2.0_ydk6ocwts2f26py227ahyuhk5i
+      typescript: 4.9.5
+
 packages:
 
   /@ampproject/remapping/2.2.0:
@@ -2941,7 +3000,7 @@ packages:
       '@types/ember__routing':
         optional: true
     dependencies:
-      '@glint/environment-ember-loose': 1.0.0-beta.3_wt3zkvip3eqybjfuwsq2agrquy
+      '@glint/environment-ember-loose': 1.0.0-beta.3_acn5lxfzqsyvoloees6qvx3wku
       '@glint/template': 1.0.0-beta.3
       ember-template-imports: 3.4.1
     dev: true
@@ -8150,7 +8209,7 @@ packages:
       debug: 4.3.4
       enhanced-resolve: 5.12.0
       eslint: 8.36.0
-      eslint-plugin-import: 2.27.5_v7jo3sddp7aqau7pajjy572cju
+      eslint-plugin-import: 2.27.5_dw7h2zvvpl2lt26j7ah2hqkw6y
       get-tsconfig: 4.4.0
       globby: 13.1.3
       is-core-module: 2.11.0