From d9bb0a90d55c75cb7d7d92b98e767d294d4f1937 Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Mon, 5 May 2025 19:28:29 -0400 Subject: [PATCH 001/222] Copy the main things from #1881 --- packages/repl-sdk/.eslintignore | 1 + packages/repl-sdk/.eslintrc.cjs | 32 ++ packages/repl-sdk/.prettierignore | 1 + packages/repl-sdk/.prettierrc.cjs | 1 + packages/repl-sdk/NOTES.md | 6 + packages/repl-sdk/README.md | 15 + packages/repl-sdk/example/index.html | 154 +++++++ packages/repl-sdk/example/samples.js | 91 +++++ packages/repl-sdk/example/vite.config.mts | 3 + packages/repl-sdk/package.json | 59 +++ packages/repl-sdk/src/compilers.js | 170 ++++++++ packages/repl-sdk/src/compilers/cdn.js | 83 ++++ .../repl-sdk/src/compilers/ember/macros.js | 17 + packages/repl-sdk/src/compilers/glimmer-js.js | 166 ++++++++ packages/repl-sdk/src/compilers/markdown.js | 385 ++++++++++++++++++ packages/repl-sdk/src/compilers/packages.js | 14 + packages/repl-sdk/src/index.d.ts | 19 + packages/repl-sdk/src/index.js | 324 +++++++++++++++ packages/repl-sdk/src/types.ts | 144 +++++++ packages/repl-sdk/src/utils.js | 16 + packages/repl-sdk/tests-ember/.editorconfig | 19 + packages/repl-sdk/tests-ember/.ember-cli | 7 + .../tests-ember/.github/workflows/ci.yml | 53 +++ packages/repl-sdk/tests-ember/.gitignore | 25 ++ packages/repl-sdk/tests-ember/.prettierignore | 13 + packages/repl-sdk/tests-ember/.prettierrc.cjs | 39 ++ .../repl-sdk/tests-ember/.stylelintignore | 8 + packages/repl-sdk/tests-ember/.stylelintrc.js | 5 + .../repl-sdk/tests-ember/.template-lintrc.js | 5 + packages/repl-sdk/tests-ember/.watchmanconfig | 3 + packages/repl-sdk/tests-ember/README.md | 57 +++ packages/repl-sdk/tests-ember/app/app.ts | 13 + .../tests-ember/app/components/.gitkeep | 0 .../tests-ember/app/config/environment.d.ts | 14 + .../tests-ember/app/config/environment.js | 3 + .../tests-ember/app/controllers/.gitkeep | 0 .../repl-sdk/tests-ember/app/helpers/.gitkeep | 0 .../repl-sdk/tests-ember/app/models/.gitkeep | 0 packages/repl-sdk/tests-ember/app/router.ts | 11 + .../repl-sdk/tests-ember/app/routes/.gitkeep | 0 .../repl-sdk/tests-ember/app/styles/app.css | 1 + .../tests-ember/app/templates/application.gts | 14 + .../tests-ember/app/templates/demo.gts | 67 +++ .../repl-sdk/tests-ember/babel.config.cjs | 50 +++ .../tests-ember/config/ember-cli-update.json | 1 + .../tests-ember/config/environment.js | 48 +++ .../tests-ember/config/optional-features.json | 7 + .../repl-sdk/tests-ember/config/targets.js | 11 + .../repl-sdk/tests-ember/ember-cli-build.js | 10 + .../repl-sdk/tests-ember/eslint.config.mjs | 146 +++++++ packages/repl-sdk/tests-ember/index.html | 29 ++ packages/repl-sdk/tests-ember/package.json | 114 ++++++ .../repl-sdk/tests-ember/public/robots.txt | 3 + packages/repl-sdk/tests-ember/testem.js | 25 ++ .../tests-ember/tests/helpers/index.ts | 43 ++ .../repl-sdk/tests-ember/tests/index.html | 40 ++ .../tests-ember/tests/integration/.gitkeep | 0 .../repl-sdk/tests-ember/tests/test-helper.ts | 14 + .../repl-sdk/tests-ember/tests/unit/.gitkeep | 0 packages/repl-sdk/tests-ember/tsconfig.json | 45 ++ .../repl-sdk/tests-ember/types/index.d.ts | 1 + packages/repl-sdk/tests-ember/vite.config.mjs | 108 +++++ packages/repl-sdk/tests-self/.eslintrc.cjs | 20 + packages/repl-sdk/tests-self/package.json | 31 ++ .../repl-sdk/tests-self/tests/custom.test.ts | 27 ++ .../repl-sdk/tests-self/tests/ember.test.ts | 64 +++ .../tests-self/tests/jsx/react.test.ts | 27 ++ .../tests-self/tests/markdown.test.ts | 123 ++++++ .../repl-sdk/tests-self/tests/mermaid.test.ts | 26 ++ .../repl-sdk/tests-self/tests/svelte.test.ts | 29 ++ .../repl-sdk/tests-self/tests/vue.test.ts | 38 ++ packages/repl-sdk/tests-self/tsconfig.json | 7 + packages/repl-sdk/tests-self/vite.config.js | 11 + packages/repl-sdk/tests-self/vitest.config.ts | 11 + packages/repl-sdk/tsconfig.json | 9 + packages/repl-sdk/vite.config.mts | 52 +++ spikes/es-module-shim/index.html | 152 +++++++ spikes/es-module-shim/package.json | 18 + 78 files changed, 3398 insertions(+) create mode 120000 packages/repl-sdk/.eslintignore create mode 100644 packages/repl-sdk/.eslintrc.cjs create mode 120000 packages/repl-sdk/.prettierignore create mode 120000 packages/repl-sdk/.prettierrc.cjs create mode 100644 packages/repl-sdk/NOTES.md create mode 100644 packages/repl-sdk/README.md create mode 100644 packages/repl-sdk/example/index.html create mode 100644 packages/repl-sdk/example/samples.js create mode 100644 packages/repl-sdk/example/vite.config.mts create mode 100644 packages/repl-sdk/package.json create mode 100644 packages/repl-sdk/src/compilers.js create mode 100644 packages/repl-sdk/src/compilers/cdn.js create mode 100644 packages/repl-sdk/src/compilers/ember/macros.js create mode 100644 packages/repl-sdk/src/compilers/glimmer-js.js create mode 100644 packages/repl-sdk/src/compilers/markdown.js create mode 100644 packages/repl-sdk/src/compilers/packages.js create mode 100644 packages/repl-sdk/src/index.d.ts create mode 100644 packages/repl-sdk/src/index.js create mode 100644 packages/repl-sdk/src/types.ts create mode 100644 packages/repl-sdk/src/utils.js create mode 100644 packages/repl-sdk/tests-ember/.editorconfig create mode 100644 packages/repl-sdk/tests-ember/.ember-cli create mode 100644 packages/repl-sdk/tests-ember/.github/workflows/ci.yml create mode 100644 packages/repl-sdk/tests-ember/.gitignore create mode 100644 packages/repl-sdk/tests-ember/.prettierignore create mode 100644 packages/repl-sdk/tests-ember/.prettierrc.cjs create mode 100644 packages/repl-sdk/tests-ember/.stylelintignore create mode 100644 packages/repl-sdk/tests-ember/.stylelintrc.js create mode 100644 packages/repl-sdk/tests-ember/.template-lintrc.js create mode 100644 packages/repl-sdk/tests-ember/.watchmanconfig create mode 100644 packages/repl-sdk/tests-ember/README.md create mode 100644 packages/repl-sdk/tests-ember/app/app.ts create mode 100644 packages/repl-sdk/tests-ember/app/components/.gitkeep create mode 100644 packages/repl-sdk/tests-ember/app/config/environment.d.ts create mode 100644 packages/repl-sdk/tests-ember/app/config/environment.js create mode 100644 packages/repl-sdk/tests-ember/app/controllers/.gitkeep create mode 100644 packages/repl-sdk/tests-ember/app/helpers/.gitkeep create mode 100644 packages/repl-sdk/tests-ember/app/models/.gitkeep create mode 100644 packages/repl-sdk/tests-ember/app/router.ts create mode 100644 packages/repl-sdk/tests-ember/app/routes/.gitkeep create mode 100644 packages/repl-sdk/tests-ember/app/styles/app.css create mode 100644 packages/repl-sdk/tests-ember/app/templates/application.gts create mode 100644 packages/repl-sdk/tests-ember/app/templates/demo.gts create mode 100644 packages/repl-sdk/tests-ember/babel.config.cjs create mode 100644 packages/repl-sdk/tests-ember/config/ember-cli-update.json create mode 100644 packages/repl-sdk/tests-ember/config/environment.js create mode 100644 packages/repl-sdk/tests-ember/config/optional-features.json create mode 100644 packages/repl-sdk/tests-ember/config/targets.js create mode 100644 packages/repl-sdk/tests-ember/ember-cli-build.js create mode 100644 packages/repl-sdk/tests-ember/eslint.config.mjs create mode 100644 packages/repl-sdk/tests-ember/index.html create mode 100644 packages/repl-sdk/tests-ember/package.json create mode 100644 packages/repl-sdk/tests-ember/public/robots.txt create mode 100644 packages/repl-sdk/tests-ember/testem.js create mode 100644 packages/repl-sdk/tests-ember/tests/helpers/index.ts create mode 100644 packages/repl-sdk/tests-ember/tests/index.html create mode 100644 packages/repl-sdk/tests-ember/tests/integration/.gitkeep create mode 100644 packages/repl-sdk/tests-ember/tests/test-helper.ts create mode 100644 packages/repl-sdk/tests-ember/tests/unit/.gitkeep create mode 100644 packages/repl-sdk/tests-ember/tsconfig.json create mode 100644 packages/repl-sdk/tests-ember/types/index.d.ts create mode 100644 packages/repl-sdk/tests-ember/vite.config.mjs create mode 100644 packages/repl-sdk/tests-self/.eslintrc.cjs create mode 100644 packages/repl-sdk/tests-self/package.json create mode 100644 packages/repl-sdk/tests-self/tests/custom.test.ts create mode 100644 packages/repl-sdk/tests-self/tests/ember.test.ts create mode 100644 packages/repl-sdk/tests-self/tests/jsx/react.test.ts create mode 100644 packages/repl-sdk/tests-self/tests/markdown.test.ts create mode 100644 packages/repl-sdk/tests-self/tests/mermaid.test.ts create mode 100644 packages/repl-sdk/tests-self/tests/svelte.test.ts create mode 100644 packages/repl-sdk/tests-self/tests/vue.test.ts create mode 100644 packages/repl-sdk/tests-self/tsconfig.json create mode 100644 packages/repl-sdk/tests-self/vite.config.js create mode 100644 packages/repl-sdk/tests-self/vitest.config.ts create mode 100644 packages/repl-sdk/tsconfig.json create mode 100644 packages/repl-sdk/vite.config.mts create mode 100644 spikes/es-module-shim/index.html create mode 100644 spikes/es-module-shim/package.json diff --git a/packages/repl-sdk/.eslintignore b/packages/repl-sdk/.eslintignore new file mode 120000 index 000000000..86039baf5 --- /dev/null +++ b/packages/repl-sdk/.eslintignore @@ -0,0 +1 @@ +../../.eslintignore \ No newline at end of file diff --git a/packages/repl-sdk/.eslintrc.cjs b/packages/repl-sdk/.eslintrc.cjs new file mode 100644 index 000000000..600e4883f --- /dev/null +++ b/packages/repl-sdk/.eslintrc.cjs @@ -0,0 +1,32 @@ +'use strict'; + +const { configs } = require('@nullvoxpopuli/eslint-configs'); + +// accommodates: JS, TS, App, and Addon +const config = configs.ember(); + +module.exports = { + ...config, + overrides: [ + ...config.overrides, + { + files: ['example/**'], + parserOptions: { + sourceType: 'module', + ecmaVersion: 2023, + }, + }, + { + files: ['src/index.js'], + globals: { + importShim: true, + }, + }, + { + files: ['src/types.ts'], + rules: { + '@typescript-eslint/no-explicit-any': 'off', + }, + }, + ], +}; diff --git a/packages/repl-sdk/.prettierignore b/packages/repl-sdk/.prettierignore new file mode 120000 index 000000000..6b4a30a2c --- /dev/null +++ b/packages/repl-sdk/.prettierignore @@ -0,0 +1 @@ +../../.prettierignore \ No newline at end of file diff --git a/packages/repl-sdk/.prettierrc.cjs b/packages/repl-sdk/.prettierrc.cjs new file mode 120000 index 000000000..b3f8f24ec --- /dev/null +++ b/packages/repl-sdk/.prettierrc.cjs @@ -0,0 +1 @@ +../../.prettierrc.cjs \ No newline at end of file diff --git a/packages/repl-sdk/NOTES.md b/packages/repl-sdk/NOTES.md new file mode 100644 index 000000000..31cfa2a96 --- /dev/null +++ b/packages/repl-sdk/NOTES.md @@ -0,0 +1,6 @@ +Using `@swc/wasm-web` in Vitest is difficult, because I could not get `vite-plugin-wasm` to work. +(error unchanged): +``` +WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error: + [TypeError: Failed to execute 'compile' on 'WebAssembly': HTTP status code is not ok] +``` diff --git a/packages/repl-sdk/README.md b/packages/repl-sdk/README.md new file mode 100644 index 000000000..47bc65d07 --- /dev/null +++ b/packages/repl-sdk/README.md @@ -0,0 +1,15 @@ +# REPL SDK + +A Runtime compiler for anything that you could want to build a lighting fast REPL with. + + +Features: +- Uses [es-module-shims](https://github.com/guybedford/es-module-shims) +- Built in support for JavaScript, Mermaid, React, Vue, Svelte, Ember, Markdown + - On-Demand Runtime: only pay for what you compile for - the async APIs mean that your users only load what they need. +- Supports nested languages (for markdown) +- Add any additional compiler/renderer at any time -- the flexible API allows for new libraries/frameworks to be added easily + +## Usage + + diff --git a/packages/repl-sdk/example/index.html b/packages/repl-sdk/example/index.html new file mode 100644 index 000000000..60a499410 --- /dev/null +++ b/packages/repl-sdk/example/index.html @@ -0,0 +1,154 @@ + + + + + + + REPL SDK Example + + + +
+
+ + + + + +
+
+ output + +
+
+
+ + + + + + diff --git a/packages/repl-sdk/example/samples.js b/packages/repl-sdk/example/samples.js new file mode 100644 index 000000000..0028905f2 --- /dev/null +++ b/packages/repl-sdk/example/samples.js @@ -0,0 +1,91 @@ +export const mermaid = ` +graph TD; + A-->B; + A-->C; + B-->D; + C-->D; +`.trim(); + +const react = ` +import React from 'react'; + +export default <> +

Hello World

+ + GENERAL KENOBI! +; +`.trim(); + +export const jsx = { react }; + +export const vue = ` + + + + +`.trim(); + +export const svelte = ` + + + +

Hello {name}!

+`.trim(); + +export const gjs = ` +const greeting = 'hello there'; + + +`.trim(); + +export const md = ` +# Markdown + +With the markdown compiler, all configured compilers can be used +with their respective codefences + flavors (if applicable). + +## JSX React + +\`\`\`jsx react live +${jsx.react} +\`\`\` + +## Mermaid + +\`\`\`mermaid +${mermaid} +\`\`\` + +## Svelte + +\`\`\`svelte live +${svelte} +\`\`\` + +## Vue + +\`\`\`vue live +${vue} +\`\`\`\ + +`.trim(); diff --git a/packages/repl-sdk/example/vite.config.mts b/packages/repl-sdk/example/vite.config.mts new file mode 100644 index 000000000..6150f9a69 --- /dev/null +++ b/packages/repl-sdk/example/vite.config.mts @@ -0,0 +1,3 @@ +import { defineConfig } from "vite"; + +export default defineConfig({}); diff --git a/packages/repl-sdk/package.json b/packages/repl-sdk/package.json new file mode 100644 index 000000000..da34d9902 --- /dev/null +++ b/packages/repl-sdk/package.json @@ -0,0 +1,59 @@ +{ + "name": "repl-sdk", + "version": "0.0.0", + "type": "module", + "exports": { + ".": { + "types": "./src/index.d.ts", + "default": "./src/index.js" + }, + "./compilers/ember/*": { + "default": "./src/compilers/ember/*.js" + } + }, + "scripts": { + "lint:fix": "pnpm -w exec lint fix", + "example": "cd example && vite", + "start": "vite build --watch", + "prepack": "vite build", + "lint:package": "pnpm publint", + "lint:js": "pnpm -w exec lint js", + "lint:js:fix": "pnpm -w exec lint js:fix", + "lint:prettier:fix": "pnpm -w exec lint prettier:fix", + "lint:prettier": "pnpm -w exec lint prettier" + }, + "keywords": [ + "repl", + "playground", + "SDK", + "render", + "play", + "javascript", + "live", + "interactive" + ], + "author": "NullVoxPopuli", + "files": [ + "dist", + "declarations", + "src" + ], + "license": "MIT", + "devDependencies": { + "@babel/plugin-proposal-decorators": "^7.23.9", + "@nullvoxpopuli/eslint-configs": "^4.0.0", + "@tsconfig/ember": "^3.0.7", + "eslint": "^8.55.0", + "prettier": "^3.2.5", + "publint": "^0.2.6", + "typescript": "^5.4.5", + "vite": "^5.3.5", + "vite-plugin-dts": "4.0.0-beta.1" + }, + "dependencies": { + "es-module-shims": "^1.10.0" + }, + "volta": { + "extends": "../../package.json" + } +} diff --git a/packages/repl-sdk/src/compilers.js b/packages/repl-sdk/src/compilers.js new file mode 100644 index 000000000..15d2e17a9 --- /dev/null +++ b/packages/repl-sdk/src/compilers.js @@ -0,0 +1,170 @@ +import { esmsh, jsdelivr } from './compilers/cdn.js'; + +export const compilers = { + /** + * JSX is too overloaded to treat one way. + * We need to split this, and then make folks choose which one to use + * - jsx-react + * - jsx-vue + * - jsx-solid + * - (etc) + * + * This means that as a generic compiler, we can't just have jsx support. + * And in markdown, we'll need to support choosing which flavor of jsx + * via meta tags on the codefences. + * + * For example: + * ```jsx solid + * export default <>; + * ``` + * + * or + * ```jsx react + * export default <>; + * ``` + * + */ + jsx: { + /** + * https://react.dev/ + */ + react: { + compiler: async (config = {}) => { + const versions = config.versions || {}; + + const [{ createRoot }, babel] = await esmsh.importAll(versions, [ + 'react-dom', + '@babel/standalone', + ]); + + return { + compile: async (text) => { + const result = babel.transform(text, { + filename: `repl.js`, + presets: [babel.availablePresets.react], + }); + + return result.code; + }, + render: async (element, component) => { + const root = createRoot(element); + + root.render(component); + + // Wait for react-dom to render + await new Promise((resolve) => requestIdleCallback(resolve)); + }, + }; + }, + }, + }, + /** + * https://mermaid.js.org/ + */ + mermaid: { + needsLiveMeta: false, + compiler: async (config = {}) => { + const versions = config.versions || {}; + const { default: mermaid } = await esmsh.import(versions, 'mermaid'); + + let id = 0; + + return { + compile: async (text) => { + return `export default \`${text}\`;`; + }, + render: async (element, text) => { + let { svg } = await mermaid.render('graphDiv' + id++, text); + + element.innerHTML = svg; + }, + }; + }, + }, + /** + * https://svelte.dev/ + */ + svelte: { + compiler: async (config = {}) => { + const versions = config.versions || {}; + const { compile } = await esmsh.import(versions, 'svelte/compiler'); + + return { + compile: async (text) => { + let output = await compile(text); + + return { compiled: output.js.code, css: output.css.code }; + }, + render: async (element, component, { css }) => { + let div = document.createElement('div'); + let style = document.createElement('style'); + + style.innerHTML = css; + + element.appendChild(div); + element.appendChild(style); + + new component({ + target: div, + }); + }, + }; + }, + }, + /** + * https://vuejs.org/ + */ + vue: { + compiler: async (config = {}) => { + const versions = config.versions || {}; + + const [{ createApp }, { compileFile, useStore }] = await jsdelivr.importAll(versions, [ + 'vue', + '@vue/repl', + ]); + + const store = useStore(); + + return { + compile: async (text, fileName) => { + const output = { js: '', css: '', ssr: '' }; + + // @ts-ignore + await compileFile(store, { + code: text, + filename: fileName, + language: 'vue', + compiled: output, + }); + + return { compiled: output.js, css: output.css }; + }, + render: async (element, component, { css }) => { + let div = document.createElement('div'); + let style = document.createElement('style'); + + style.innerHTML = css; + + element.appendChild(div); + element.appendChild(style); + + createApp(component).mount(div); + }, + }; + }, + }, + md: { + compiler: async (...args) => { + const markdown = await import('./compilers/markdown.js'); + + return markdown.compiler(...args); + }, + }, + gjs: { + compiler: async (...args) => { + const gjs = await import('./compilers/glimmer-js.js'); + + return gjs.compiler(...args); + }, + }, +}; diff --git a/packages/repl-sdk/src/compilers/cdn.js b/packages/repl-sdk/src/compilers/cdn.js new file mode 100644 index 000000000..5b8700a17 --- /dev/null +++ b/packages/repl-sdk/src/compilers/cdn.js @@ -0,0 +1,83 @@ +import { splitSubPath } from './packages.js'; + +/** + * Generate an import URL for esm.sh + * + * @param {Record} versions + * @param {string} importPath + * @param {string} subPath + */ +export function esmSh(versions, importPath) { + let [name, subPath] = splitSubPath(importPath); + + let version = versions[name]; + let subPathExport = subPath.length === 0 || subPath.startsWith('/') ? subPath : `/${subPath}`; + + return version + ? `https://esm.sh/${name}@${version}${subPathExport}` + : `https://esm.sh/${name}${subPathExport}`; +} + +/** + * Generate an import URL for esm.run (jsdelivr) + * + * @param {Record} versions + * @param {string} importPath + * @param {string} subPath + */ +export function esmRun(versions, importPath) { + let [name, subPath] = splitSubPath(importPath); + + let version = versions[name]; + let subPathExport = subPath.length === 0 || subPath.startsWith('/') ? subPath : `/${subPath}`; + + return version + ? `https://esm.run/${name}@latest${subPathExport}` + : `https://esm.run/${name}${subPathExport}`; +} + +export const jsdelivr = { + /** + * @param {Record} versions + * @param {string} importPath + */ + async import(versions, importPath) { + let url = esmRun(versions, importPath); + + return await import(/* @vite-ignore */ url); + }, + /** + * @param {Record} versions + * @param {string[]} deps the names of deps to pull from esm.sh + */ + async importAll(versions, deps = []) { + return await Promise.all( + deps.map((dep) => { + return jsdelivr.import(versions, dep); + }) + ); + }, +}; + +export const esmsh = { + /** + * @param {Record} versions + * @param {string} importPath + */ + async import(versions, importPath) { + let url = esmSh(versions, importPath); + + return await import(/* @vite-ignore */ url); + }, + /** + * @param {Record} versions + * @param {string[]} deps the names of deps to pull from esm.sh + */ + async importAll(versions, deps = []) { + return await Promise.all( + deps.map((dep) => { + return esmsh.import(versions, dep); + }) + ); + }, +}; diff --git a/packages/repl-sdk/src/compilers/ember/macros.js b/packages/repl-sdk/src/compilers/ember/macros.js new file mode 100644 index 000000000..418c9e49a --- /dev/null +++ b/packages/repl-sdk/src/compilers/ember/macros.js @@ -0,0 +1,17 @@ +/** + * This is a replacement module for `@embroider/macros` which is a babel plugin that was never meant to be ran in the browser. + * + * This provides runtime implementations of all the macros' behaviors. + */ + +export function macroCondition(result) { + return result; +} + +export function dependencySatisfies() { + return true; +} + +export function isDevelopingApp() { + return true; +} diff --git a/packages/repl-sdk/src/compilers/glimmer-js.js b/packages/repl-sdk/src/compilers/glimmer-js.js new file mode 100644 index 000000000..137f5d3ff --- /dev/null +++ b/packages/repl-sdk/src/compilers/glimmer-js.js @@ -0,0 +1,166 @@ +import { esmsh } from './cdn.js'; + +const buildDependencies = [ + /** + * The only version of babel that is easily runnable in the browser + * This includes way too much stuff. + */ + '@babel/standalone', + /** + * We will be using this decorator transform + * instead of the babel one. + * The babel transform does way too much transforming. + */ + 'decorator-transforms', + + /** + * Babel plugin that understands all the different ways + * which templates have been authored and what they need to + * compile to over the years. + */ + 'babel-plugin-ember-template-compilation', + /** + * The actual template-compiler is ember-sounce-dependent, + * because the underlying format / bytecodes / etc is private, + * and can change between versions of ember-source. + */ + 'ember-source/dist/ember-template-compiler.js', + /** + * Converts gjs/gts to standard js/ts + */ + 'content-tag', + /** + * Older-style build macros + * (before import.meta.env was even a thing) + * + * These remove `@glimmer/env` and DEBUG usages + */ + 'babel-plugin-debug-macros', +]; + +/** + * @param {import('../types.ts').ResolvedCompilerOptions} config + * @param {import('../types.ts').PublicMethods} api + */ +export async function compiler(config = {}, api) { + const versions = config.versions || {}; + + const [ + _babel, + _decoratorTransforms, + _emberTemplateCompilation, + compiler, + { Preprocessor }, + { default: DebugMacros }, + ] = await api.tryResolveAll(buildDependencies, (moduleName) => + esmsh.import(versions, moduleName) + ); + + // These libraries are compiled incorrectly for cjs<->ESM compat + const decoratorTransforms = + 'default' in _decoratorTransforms ? _decoratorTransforms.default : _decoratorTransforms; + + const emberTemplateCompilation = + 'default' in _emberTemplateCompilation + ? _emberTemplateCompilation.default + : _emberTemplateCompilation; + + let babel = 'availablePlugins' in _babel ? _babel : _babel.default; + + async function transform(text) { + return babel.transform(text, { + filename: `dynamic-repl.js`, + plugins: [ + [ + emberTemplateCompilation, + { + compiler, + transforms: [], + targetFormat: 'wire', + }, + ], + [ + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore - we don't care about types here.. + decoratorTransforms, + { + runtime: { + import: 'decorator-transforms/runtime', + }, + }, + ], + [ + DebugMacros, + { + flags: [ + { + source: '@glimmer/env', + flags: { + DEBUG: true, + CI: false, + }, + }, + ], + debugTools: { + isDebug: true, + source: '@ember/debug', + assertPredicateIndex: 1, + }, + externalizeHelpers: { + module: '@ember/debug', + }, + }, + '@ember/debug stripping', + ], + [ + DebugMacros, + { + externalizeHelpers: { + module: '@ember/application/deprecations', + }, + debugTools: { + isDebug: true, + source: '@ember/application/deprecations', + assertPredicateIndex: 1, + }, + }, + '@ember/application/deprecations stripping', + ], + ], + presets: [], + }); + } + + const preprocessor = new Preprocessor(); + + return { + resolve: (id) => { + if (id.startsWith('@ember')) { + return `https://esm.sh/*ember-source/dist/packages/${id}`; + } + + if (id.startsWith('@glimmer')) { + return `https://esm.sh/*ember-source/dist/dependencies/${id}.js`; + } + + console.log('custom resolve for compiler', { id }); + + if (id.startsWith('@embroider/macros')) { + return `repl-sdk/compilers/ember/macros.js`; + } + }, + compile: async (text) => { + let { code: preprocessed } = preprocessor.process(text, { filename: 'dynamic-repl.js' }); + let transformed = await transform(preprocessed); + + let code = transformed.code; + + console.log('[compile:code]', code); + return code; + }, + render: async (element, compiled /*, extra, compiler */) => { + console.log('[render:compiled]', compiled); + element.innerHTML = compiled.toString(); + }, + }; +} diff --git a/packages/repl-sdk/src/compilers/markdown.js b/packages/repl-sdk/src/compilers/markdown.js new file mode 100644 index 000000000..1c879405f --- /dev/null +++ b/packages/repl-sdk/src/compilers/markdown.js @@ -0,0 +1,385 @@ +import { assert, nextId } from '../utils.js'; +import { esmsh } from './cdn.js'; + +const GLIMDOWN_PREVIEW = Symbol('__GLIMDOWN_PREVIEW__'); +const GLIMDOWN_RENDER = Symbol('__GLIMDOWN_RENDER__'); + +/** + * @param {import('../types.ts').ResolvedCompilerOptions} config + * @param {import('../types.ts').PublicMethods} api + */ +export async function compiler(config = {}, api) { + const versions = config.versions || {}; + + function needsLive(lang) { + return api.optionsFor(lang).needsLiveMeta; + } + + function isLive(meta, lang) { + if (!needsLive(lang)) return true; + if (!meta) return false; + + return meta.includes('live'); + } + + function isPreview(meta) { + if (!meta) return false; + + return meta.includes('preview'); + } + + function isBelow(meta) { + if (!meta) return false; + + return meta.includes('below'); + } + + const [ + { default: rehypeRaw }, + { default: rehypeStringify }, + { default: remarkGfm }, + { default: remarkParse }, + { default: remarkRehype }, + { unified }, + { visit }, + ] = await esmsh.importAll(versions, [ + 'rehype-raw', + 'rehype-stringify', + 'remark-gfm', + 'remark-parse', + 'remark-rehype', + 'unified', + 'unist-util-visit', + ]); + + const { compilers } = await import('../compilers.js'); + + // No recursing for now. + const ALLOWED_FORMATS = Object.keys(compilers).filter((format) => format !== 'md'); + + /** + * Swaps live codeblocks with placeholders that the compiler can then + * use to insert compiled-from-other-sources' code into those placeholders. + * + * @param {{ + * demo: { + * classList: string[] + * }, + * code: { + * classList: string[] + * }, + * }} options + */ + function liveCodeExtraction(options) { + let { code, demo } = options; + let { classList: snippetClasses } = code || {}; + let { classList: demoClasses } = demo || {}; + + snippetClasses ??= []; + demoClasses ??= []; + + function isRelevantCode(node) { + if (node.type !== 'code') return false; + + let { meta, lang } = node; + + if (!lang) { + return false; + } + + meta = meta?.trim(); + + if (!isLive(meta, lang)) { + return false; + } + + if (!ALLOWED_FORMATS.includes(lang)) { + return false; + } + + return true; + } + + function enhance(code) { + code.data ??= {}; + code.data['hProperties'] ??= {}; + // This is secret-to-us-only API, so we don't really care about the type + code.data['hProperties'][GLIMDOWN_PREVIEW] = true; + + return { + data: { + hProperties: { className: snippetClasses }, + }, + type: 'div', + hProperties: { className: snippetClasses }, + children: [code], + }; + } + + function flatReplaceAt(array, index, replacement) { + array.splice(index, 1, ...replacement); + } + + // because we mutate the tree as we iterate, + // we need to make sure we don't loop forever + const seen = new Set(); + + return function transformer(tree, file) { + visit(tree, ['code'], function (node, index, parent) { + if (parent === null || parent === undefined) return; + if (index === null || index === undefined) return; + + let isRelevant = isRelevantCode(node); + + if (!isRelevant) { + let enhanced = enhance(node); + + parent.children[index] = enhanced; + + return 'skip'; + } + + if (seen.has(node)) { + return 'skip'; + } + + seen.add(node); + + let { meta, lang, value } = node; + + if (!lang) { + return 'skip'; + } + + /** + * Sometimes, meta is not required, + * like with the `mermaid` language + */ + if (!meta) { + if (needsLive(lang)) { + return 'skip'; + } + } + + file.data.liveCode ??= []; + + let code = value.trim(); + let id = nextId(); + + let invokeNode = { + type: 'html', + data: { + hProperties: { [GLIMDOWN_RENDER]: true }, + }, + value: `
`, + }; + + let wrapper = enhance(node); + + file.data.liveCode.push({ + format: lang, + /* flavor, */ + code, + placeholderId: id, + meta, + }); + + let live = isLive(meta, lang); + let preview = isPreview(meta); + let below = isBelow(meta); + + if (live && preview && below) { + flatReplaceAt(parent.children, index, [wrapper, invokeNode]); + + return 'skip'; + } + + if (live && preview) { + flatReplaceAt(parent.children, index, [invokeNode, wrapper]); + + return 'skip'; + } + + if (live) { + parent.children[index] = invokeNode; + + return 'skip'; + } + + parent.children[index] = wrapper; + + return; + }); + }; + } + + function sanitizeForGlimmer(/* options */) { + return (tree) => { + visit(tree, 'element', (node) => { + if ('tagName' in node) { + if (!['pre', 'code'].includes(node.tagName)) return; + + visit(node, 'text', (textNode) => { + if ('value' in textNode && textNode.value) { + textNode.value = textNode.value.replace(/{{/g, '\\{{'); + } + }); + + return 'skip'; + } + }); + }; + } + + function buildCompiler(options) { + let compiler = unified().use(remarkParse).use(remarkGfm); + + /** + * If this were "use"d after `remarkRehype`, + * remark is gone, and folks would need to work with rehype trees + */ + if (options.remarkPlugins) { + options.remarkPlugins.forEach((plugin) => { + // Arrays are how plugins are passed options (for some reason?) + // why not just invoke the the function? + let p = Array.isArray(plugin) ? plugin : [plugin]; + + compiler = compiler.use(...p); + }); + } + + // TODO: we only want to do this when we have pre > code. + // code can exist inline. + compiler = compiler.use(liveCodeExtraction, { + snippets: { + classList: ['glimdown-snippet', 'relative'], + }, + demo: { + classList: ['glimdown-render'], + }, + copyComponent: options?.CopyComponent, + shadowComponent: options?.ShadowComponent, + }); + + // .use(() => (tree) => visit(tree, (node) => console.log('i', node))) + // remark rehype is needed to convert markdown to HTML + // However, it also changes all the nodes, so we need another pass + // to make sure our Glimmer-aware nodes are in tact + compiler = compiler.use(remarkRehype, { allowDangerousHtml: true }); + + // Convert invocables to raw format, so Glimmer can invoke them + compiler = compiler.use(() => (tree) => { + visit(tree, function (node) { + // We rely on an implicit transformation of data.hProperties => properties + let properties = node.properties; + + if (properties?.[GLIMDOWN_PREVIEW]) { + return 'skip'; + } + + if (node.type === 'element' || ('tagName' in node && node.tagName === 'code')) { + if (properties?.[GLIMDOWN_RENDER]) { + node.type = 'glimmer_raw'; + + return; + } + + return 'skip'; + } + + if (node.type === 'text' || node.type === 'raw') { + // definitively not the better way, but this is supposed to detect "glimmer" nodes + if ( + 'value' in node && + typeof node.value === 'string' && + node.value.match(/<\/?[_A-Z:0-9].*>/g) + ) { + node.type = 'glimmer_raw'; + } + + node.type = 'glimmer_raw'; + + return 'skip'; + } + + return; + }); + }); + + if (options.rehypePlugins) { + options.rehypePlugins.forEach((plugin) => { + // Arrays are how plugins are passed options (for some reason?) + // why not just invoke the the function? + let p = Array.isArray(plugin) ? plugin : [plugin]; + + compiler = compiler.use(...p); + }); + } + + compiler = compiler + .use(rehypeRaw, { passThrough: ['glimmer_raw', 'raw'] }) + .use(() => (tree) => { + visit(tree, 'glimmer_raw', (node) => { + node.type = 'raw'; + }); + }); + + compiler = compiler.use(sanitizeForGlimmer); + + // Finally convert to string! oofta! + compiler = compiler.use(rehypeStringify, { + collapseEmptyAttributes: true, + closeSelfClosing: true, + allowParseErrors: true, + allowDangerousCharacters: true, + allowDangerousHtml: true, + }); + + return compiler; + } + + /** + * @param {string} input + * @param {{ CopyComponent?: string, ShadowComponent?: string, remarkPlugins?: UnifiedPlugin[], rehypePlugins?: UnifiedPlugin[] }} options + * @returns {Promise<{ compiled: string; liveCode: { lang: string; flavor: string; code: string; name: string }[] }>} + */ + async function parseMarkdown(input, options = {}) { + let markdownCompiler = buildCompiler(options); + let processed = await markdownCompiler.process(input); + let liveCode = processed.data.liveCode || []; + let templateOnly = processed.toString(); + + return { text: templateOnly, codeBlocks: liveCode }; + } + + return { + compile: async (text) => { + let result = await parseMarkdown(text, {}); + let escaped = result.text.replace(/`/g, '\\`'); + + return { compiled: `export default \`${escaped}\``, ...result }; + }, + render: async (element, compiled, extra, compiler) => { + element.innerHTML = compiled; + + await Promise.all( + extra.codeBlocks.map(async (info) => { + let subElement = await compiler.compile(info.format, info.code, { + flavor: info.flavor, + }); + + let selector = `#${info.placeholderId}`; + let target = element.querySelector(selector); + + assert( + `Could not find placeholder / target element (using selector: \`${selector}\`). ` + + `Could not render ${info.format} block.`, + target + ); + + target.appendChild(subElement); + }) + ); + }, + }; +} diff --git a/packages/repl-sdk/src/compilers/packages.js b/packages/repl-sdk/src/compilers/packages.js new file mode 100644 index 000000000..9b7305129 --- /dev/null +++ b/packages/repl-sdk/src/compilers/packages.js @@ -0,0 +1,14 @@ +/** + * @param {string} importPath + */ +export function splitSubPath(importPath) { + if (importPath.startsWith('@')) { + const [org, name, ...subPaths] = importPath.split('/'); + + return [`${org}/${name}`, subPaths.join('/')]; + } + + const [name, ...subPaths] = importPath.split('/'); + + return [name, subPaths.join('/')]; +} diff --git a/packages/repl-sdk/src/index.d.ts b/packages/repl-sdk/src/index.d.ts new file mode 100644 index 000000000..e2d398646 --- /dev/null +++ b/packages/repl-sdk/src/index.d.ts @@ -0,0 +1,19 @@ +import type { CompilerConfig, Options } from './types.ts'; + +export const defaultFormats: keyof Options['formats']; +export const defaults: Options; + +export class Compiler { + constructor(options?: Options); + + compile( + format: string, + text: string, + options?: { + flavor?: string; + fileName?: string; + } + ): Promise; + + optionsFor(format: string, flavor?: string): Omit; +} diff --git a/packages/repl-sdk/src/index.js b/packages/repl-sdk/src/index.js new file mode 100644 index 000000000..a5cd72efc --- /dev/null +++ b/packages/repl-sdk/src/index.js @@ -0,0 +1,324 @@ +/** + * @typedef {import("./types.ts").Options} Options + */ +import { compilers } from './compilers.js'; +import { assert, nextId } from './utils.js'; + +assert(`There is no document. repl-sdk is meant to be ran in a browser`, globalThis.document); + +export const defaultFormats = Object.keys(compilers); + +export const defaults = { + formats: compilers, +}; + +const secretKey = '__repl-sdk__compiler__'; +const secret = Symbol.for(secretKey); + +assert( + `There is already an instance of repl-sdk, and there can only be one. Make sure that your dependency graph is correct.`, + !globalThis[secret] +); + +export class Compiler { + /** @type {Options} */ + #options; + + /** + * Options may be passed to the compiler to add to its behavior. + */ + constructor(options = defaults) { + this.#options = options; + + let explicitResolve = this.#options.resolve ?? {}; + + globalThis[secret] = this; + globalThis.window.esmsInitOptions = { + shimMode: true, + skip: `https://esm.sh/`, + revokeBlobURLs: true, // default false + // Permit overrides to import maps + mapOverrides: true, // default false + // Hook all module resolutions + resolve: (id, parentUrl, resolve) => { + if (this.#options.logging) { + console.debug('[resolve]', id); + } + + if (id.startsWith('blob:')) return id; + if (id.startsWith('https://')) return id; + if (id.startsWith('.')) return id; + + if (this.#options.resolve?.[id]) { + if (this.#options.logging) { + console.debug(`[resolve] ${id} found in manually specified resolver`); + } + + return `manual:${id}`; + } + + if (this.#options.logging) { + console.debug(`[resolve] ${id} not found, deferring to esm.sh`); + } + + return `esm.sh:${id}`; + }, + // Hook source fetch function + fetch: async (url, options) => { + if (this.#options.resolve) { + if (url.startsWith('manual:')) { + let name = url.replace(/^manual:/, ''); + + if (this.#options.logging) { + console.debug('[fetch] resolved url in manually specified resolver', url); + } + + let result = this.#options.resolve[name]; + + if (this.#options.logging && !result) { + console.error(`[fetch] Could not resolve ${url}`); + } + + if (typeof result === 'function') { + if (this.#options.logging && !result) { + console.error(`[fetch] Value for ${url} is a function. Invoking.`); + } + + result = await result(); + } + + window[secret].resolves ||= {}; + window[secret].resolves[name] ||= result; + + let blobContent = + `const mod = window[Symbol.for('${secretKey}')].resolves?.['${name}'];\n` + + `${Object.keys(result) + .map((exportName) => { + if (exportName === 'default') { + return `export default mod.default;`; + } + + return `export const ${exportName} = mod.${exportName};`; + }) + .join('\n')} + `; + + let blob = new Blob(Array.from(blobContent), { type: 'application/javascript' }); + + if (this.#options.logging) { + console.debug( + `[fetch] returning blob mapping to manually resolved import for ${name}` + // blobContent + ); + // console.debug(await blob.text()); + } + + return new Response(blob); + } + } + + if (this.#options.logging) { + console.debug('[fetch] fetching url', url, options); + } + + // return `https://esm.sh/*${id}`; + if (url.startsWith('esm.sh:')) { + let name = url.replace(/^esm\.sh:/, ''); + let newUrl = `https://esm.sh/v135/*${name}`; + + const response = await fetch(newUrl, options); + + if (!response.ok) return response; + + const source = await response.text(); + + console.log({ source, url, newUrl }); + + return new Response(new Blob([source], { type: 'application/javascript' })); + } + + const response = await fetch(url, options); + + if (!response.ok) return response; + + const source = await response.text(); + + // const transformed = tsCompile(source); + // + console.log({ source, url }); + + return new Response(new Blob([source], { type: 'application/javascript' })); + }, + + // onimport: async (url, options, parentUrl) => { + // console.log('[onimport]', url, options, parentUrl); + // }, + }; + // addShim(); + } + + /** + * @param {string} format + * @param {string} text + * @param {{ fileName?: string, flavor?: string }} [ options ] + * @returns {} + */ + async compile(format, text, options = {}) { + await import('es-module-shims'); + + let opts = { ...options }; + + opts.fileName ||= `dynamic.${format}`; + + const compiler = await this.#getCompiler(format, opts.flavor); + const compiled = await compiler.compile(text, opts.fileName); + + let compiledText = 'export default "failed to compile"'; + let extras = {}; + + if (typeof compiled === 'string') { + compiledText = compiled; + extras = { compiled: compiledText }; + } else { + let { compiled: text } = compiled; + + compiledText = text; + extras = compiled; + } + + const asBlobUrl = textToBlobUrl(compiledText); + + const { default: defaultExport } = await importShim(/* @vite-ignore */ asBlobUrl); + + return this.#render(compiler, defaultExport, extras); + } + + #compilerCache = new WeakMap(); + /** + * @param {string} format + * @param {string | undefined} flavor + */ + async #getCompiler(format, flavor) { + const config = this.#resolveFormat(format, flavor); + + if (this.#compilerCache.has(config)) { + return this.#compilerCache.get(config); + } + + const compiler = await config.compiler(this.optionsFor(format, flavor), this.#nestedPublicAPI); + + this.#compilerCache.set(config, compiler); + + return compiler; + } + + /** + * @param {string} format + * @param {string | undefined} flavor + */ + #resolveFormat(format, flavor) { + let config = this.#options.formats[format]; + + assert( + `${format} is not a configured format / extension. ` + + `The currently configured formats are ${Object.keys(this.#options.formats).join(', ')}`, + config + ); + + if (flavor && flavor in config) { + config = config[flavor]; + } + + assert( + `The config for ${format}${flavor ? ` (using flavor ${flavor})` : ''} is missing the 'compiler' function. It had keys: ${Object.keys(config)}. If this is a language with multiple flavors, make sure you specify the flavor.`, + 'compiler' in config + ); + + return config; + } + + async #render(compiler, whatToRender, extras) { + const div = this.#createDiv(); + + await compiler.render(div, whatToRender, extras, this.#nestedPublicAPI); + + // Wait for render + await new Promise((resolve) => requestIdleCallback(resolve)); + + return div; + } + + /** + * @param {string} format + * @param {string} [ flavor ] + * @returns {import('./types.ts').ResolvedCompilerOptions)} + */ + optionsFor = (format, flavor) => { + const { needsLiveMeta } = this.#resolveFormat(format, flavor); + + return { + needsLiveMeta: needsLiveMeta ?? true, + importMap: this.#options.importMap ?? {}, + resolve: this.#options.resolve ?? {}, + versions: this.#options.versions ?? {}, + }; + }; + + #nestedPublicAPI = { + tryResolve: (name) => importShim(/* vite-ignore */ name), + tryResolveAll: async (names, fallback) => { + let results = await Promise.all(names.map(this.#nestedPublicAPI.tryResolve)); + + if (fallback) { + let morePromises = {}; + + for (let i = 0; i < results.length; i++) { + let result = results[i]; + let name = names[i]; + + if (!result) { + if (this.#options.logging) { + console.warn(`Could not load ${name}. Trying fallback.`); + } + + morePromises[i] = fallback(name); + } + } + + await Promise.all(Object.values(morePromises)); + + for (let i = 0; i < results.length; i++) { + let result = results[i]; + + if (!result && morePromises[i]) { + result = morePromises[i]; + } + } + } + + return results; + }, + compile: (...args) => this.compile(...args), + optionsFor: (...args) => this.optionsFor(...args), + }; + + #createDiv() { + let div = document.createElement('div'); + + div.setAttribute('data-repl-output', ''); + div.id = nextId(); + + return div; + } +} + +/** + * @param {string} text + */ +function textToBlobUrl(text) { + const blob = new Blob([text], { type: 'text/javascript' }); + + const blobUrl = URL.createObjectURL(blob); + + return blobUrl; +} diff --git a/packages/repl-sdk/src/types.ts b/packages/repl-sdk/src/types.ts new file mode 100644 index 000000000..17fe92502 --- /dev/null +++ b/packages/repl-sdk/src/types.ts @@ -0,0 +1,144 @@ +interface PublicMethods { + /** + * Will try to use a shimmed import, or will return null. + */ + tryResolve: (moduleName: string) => Promise; + + /** + * Import many modules in parallel. + * For each array entry, + * Will try to use a shimmed import, or will return null. + * + * Optionally accepts a fallback function for proxying to a CDN, if desired. + * + */ + tryResolveAll: ( + moduleNames: string[], + fallback?: (moduleName: string) => Promise + ) => Promise; + compile: ( + format: string, + text: string, + options?: { + flavor?: string; + fileName?: string; + } + ) => Promise; + + optionsFor: (format: string, flavor?: string) => Omit; +} +export interface ResolvedCompilerOptions { + importMap: { [importPath: string]: string }; + resolve: { [importPath: string]: unknown }; + needsLiveMeta?: boolean; + versions: { [packageName: string]: string }; +} + +export interface CompilerConfig { + /** + * When using this file extension in markdown documents, + * should we only evaluate the code block if the "live" + * meta is attached to the codefence? + * + * If you don't use markdown-embedded rendering, + * you can ignore this option. Default behavior is "false", + * but it doesn't matter if you don't render markdown anyway. + * + * For example, with `needsLiveMeta: false`: + * \`\`\`js + * console.log('hello'); + * \`\`\` + * will be evaluated and log to the console. + * However, with `needsLiveMeta: true`, the above snippet would not + * be evaluated. To evaluate a snippet with `needsLiveMeta: true`: + * \`\`\`js live + * console.log('hello'); + * \`\`\` + */ + needsLiveMeta?: boolean; + + compiler: ( + /** + * The config for the compiler may be passed by the caller. + * Common use case for this object is specifying what versions + * of the compiler/library/framework dependencies to use. + */ + config: Record + ) => Promise<{ + /** + * Convert a string from "fileExtension" to standard JavaScript. + * This will be loaded as a module and then passed to the render method. + * + * You may return either just a string, or an object with a `compiled` property that is a string -- any additional properties will be passde through to the render function -- which may be useful if there is accompanying CSS. + */ + compile: (text: string) => Promise)>; + /** + * For the root of a node rendered for this compiler, + * how will this particular library / framework + * render in to the given element? + * + * Example: + * ```js + * { + * async compiler() { + * const { createRoot } = await import('react-dom/client'); + * + * return { + * render(element, defaultExport) { + * const root = createRoot(element); + * + * root.render(defaultExport); + * }, + * // ... + * } + * } + * } + * ``` + * + * @param {HTMLElement} the element to render in to, this is provided by repl-sdk. + * @param {any} defaultExport the default export from the compiled module. + * @param {{ compiled: string } & Record} extras the compiled string (for reference), as well as any extra information that may have been returned from the compile function. + */ + render: ( + element: HTMLElement, + defaultExport: any, + extras: { compiled: string } & Record, + compiler: PublicMethods + ) => void; + }>; +} + +export interface Options { + /** + * Map of import paths to URLs + * + * Thehse will take precedence over the default CDN fallback. + */ + importMap?: { [importPath: string]: string }; + /** + * Map of pre-resolved JS values to use as the import map + * These could assume the role of runtime virtual modules. + * + * These will take precedence over the importMap, and implicit CDN fallback. + */ + resolve?: { [importPath: string]: unknown }; + + /** + * Specifies which vesions of dependencies to when pulling from a CDN. + * Defaults to latest. + */ + versions?: { [packageName: string]: string }; + + formats: { + [fileExtension: string]: + | CompilerConfig + | { + [flavor: string]: CompilerConfig; + }; + }; + + /** + * Show extra debug logging or not + */ + logging?: boolean | undefined; +} diff --git a/packages/repl-sdk/src/utils.js b/packages/repl-sdk/src/utils.js new file mode 100644 index 000000000..f5be4e9f6 --- /dev/null +++ b/packages/repl-sdk/src/utils.js @@ -0,0 +1,16 @@ +/** + * @param {string} message + * @param {unknown} test + * @asserts test + */ +export function assert(message, test) { + if (!test) { + throw new Error(message); + } +} + +let i = 0; + +export function nextId() { + return `repl_${i++}`; +} diff --git a/packages/repl-sdk/tests-ember/.editorconfig b/packages/repl-sdk/tests-ember/.editorconfig new file mode 100644 index 000000000..c35a00240 --- /dev/null +++ b/packages/repl-sdk/tests-ember/.editorconfig @@ -0,0 +1,19 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +indent_style = space +indent_size = 2 + +[*.hbs] +insert_final_newline = false + +[*.{diff,md}] +trim_trailing_whitespace = false diff --git a/packages/repl-sdk/tests-ember/.ember-cli b/packages/repl-sdk/tests-ember/.ember-cli new file mode 100644 index 000000000..4defd284e --- /dev/null +++ b/packages/repl-sdk/tests-ember/.ember-cli @@ -0,0 +1,7 @@ +{ + /** + Setting `isTypeScriptProject` to true will force the blueprint generators to generate TypeScript + rather than JavaScript by default, when a TypeScript version of a given blueprint is available. + */ + "isTypeScriptProject": true +} diff --git a/packages/repl-sdk/tests-ember/.github/workflows/ci.yml b/packages/repl-sdk/tests-ember/.github/workflows/ci.yml new file mode 100644 index 000000000..092cb5a70 --- /dev/null +++ b/packages/repl-sdk/tests-ember/.github/workflows/ci.yml @@ -0,0 +1,53 @@ +name: CI + +on: + push: + branches: + - main + - master + pull_request: {} + +concurrency: + group: ci-${{ github.head_ref || github.ref }} + cancel-in-progress: true + +jobs: + lint: + name: "Lint" + runs-on: ubuntu-latest + timeout-minutes: 10 + + steps: + - uses: actions/checkout@v3 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - name: Install Node + uses: actions/setup-node@v3 + with: + node-version: 18 + cache: pnpm + - name: Install Dependencies + run: pnpm install --frozen-lockfile + - name: Lint + run: pnpm lint + + test: + name: "Test" + runs-on: ubuntu-latest + timeout-minutes: 10 + + steps: + - uses: actions/checkout@v3 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - name: Install Node + uses: actions/setup-node@v3 + with: + node-version: 18 + cache: pnpm + - name: Install Dependencies + run: pnpm install --frozen-lockfile + - name: Run Tests + run: pnpm test diff --git a/packages/repl-sdk/tests-ember/.gitignore b/packages/repl-sdk/tests-ember/.gitignore new file mode 100644 index 000000000..71ad79d02 --- /dev/null +++ b/packages/repl-sdk/tests-ember/.gitignore @@ -0,0 +1,25 @@ +# compiled output +/dist/ +/declarations/ + +# dependencies +/node_modules/ + +# misc +/.env* +/.pnp* +/.eslintcache +/coverage/ +/npm-debug.log* +/testem.log +/yarn-error.log + +# ember-try +/.node_modules.ember-try/ +/npm-shrinkwrap.json.ember-try +/package.json.ember-try +/package-lock.json.ember-try +/yarn.lock.ember-try + +# broccoli-debug +/DEBUG/ diff --git a/packages/repl-sdk/tests-ember/.prettierignore b/packages/repl-sdk/tests-ember/.prettierignore new file mode 100644 index 000000000..9385391f2 --- /dev/null +++ b/packages/repl-sdk/tests-ember/.prettierignore @@ -0,0 +1,13 @@ +# unconventional js +/blueprints/*/files/ + +# compiled output +/dist/ + +# misc +/coverage/ +!.* +.*/ + +# ember-try +/.node_modules.ember-try/ diff --git a/packages/repl-sdk/tests-ember/.prettierrc.cjs b/packages/repl-sdk/tests-ember/.prettierrc.cjs new file mode 100644 index 000000000..dc136b237 --- /dev/null +++ b/packages/repl-sdk/tests-ember/.prettierrc.cjs @@ -0,0 +1,39 @@ +'use strict'; + +module.exports = { + plugins: ['prettier-plugin-ember-template-tag'], + singleQuote: true, + overrides: [ + { + files: ['*.js', '*.ts', '*.cjs', '.mjs', '.cts', '.mts', '.cts'], + options: { + trailingComma: 'es5', + }, + }, + { + files: ['*.html'], + options: { + singleQuote: false, + }, + }, + { + files: ['*.json'], + options: { + singleQuote: false, + }, + }, + { + files: ['*.hbs'], + options: { + singleQuote: false, + }, + }, + { + files: ['*.gjs', '*.gts'], + options: { + templateSingleQuote: false, + trailingComma: 'es5', + }, + }, + ], +}; diff --git a/packages/repl-sdk/tests-ember/.stylelintignore b/packages/repl-sdk/tests-ember/.stylelintignore new file mode 100644 index 000000000..a0cf71cbd --- /dev/null +++ b/packages/repl-sdk/tests-ember/.stylelintignore @@ -0,0 +1,8 @@ +# unconventional files +/blueprints/*/files/ + +# compiled output +/dist/ + +# addons +/.node_modules.ember-try/ diff --git a/packages/repl-sdk/tests-ember/.stylelintrc.js b/packages/repl-sdk/tests-ember/.stylelintrc.js new file mode 100644 index 000000000..021c539ad --- /dev/null +++ b/packages/repl-sdk/tests-ember/.stylelintrc.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + extends: ['stylelint-config-standard', 'stylelint-prettier/recommended'], +}; diff --git a/packages/repl-sdk/tests-ember/.template-lintrc.js b/packages/repl-sdk/tests-ember/.template-lintrc.js new file mode 100644 index 000000000..f35f61c7b --- /dev/null +++ b/packages/repl-sdk/tests-ember/.template-lintrc.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + extends: 'recommended', +}; diff --git a/packages/repl-sdk/tests-ember/.watchmanconfig b/packages/repl-sdk/tests-ember/.watchmanconfig new file mode 100644 index 000000000..f9c3d8f84 --- /dev/null +++ b/packages/repl-sdk/tests-ember/.watchmanconfig @@ -0,0 +1,3 @@ +{ + "ignore_dirs": ["dist"] +} diff --git a/packages/repl-sdk/tests-ember/README.md b/packages/repl-sdk/tests-ember/README.md new file mode 100644 index 000000000..0ac057e41 --- /dev/null +++ b/packages/repl-sdk/tests-ember/README.md @@ -0,0 +1,57 @@ +# tests-ember + +This README outlines the details of collaborating on this Ember application. +A short introduction of this app could easily go here. + +## Prerequisites + +You will need the following things properly installed on your computer. + +- [Git](https://git-scm.com/) +- [Node.js](https://nodejs.org/) +- [pnpm](https://pnpm.io/) +- [Ember CLI](https://cli.emberjs.com/release/) +- [Google Chrome](https://google.com/chrome/) + +## Installation + +- `git clone ` this repository +- `cd tests-ember` +- `pnpm install` + +## Running / Development + +- `pnpm start` +- Visit your app at [http://localhost:4200](http://localhost:4200). +- Visit your tests at [http://localhost:4200/tests](http://localhost:4200/tests). + +### Code Generators + +Make use of the many generators for code, try `ember help generate` for more details + +### Running Tests + +- `pnpm test` +- `pnpm test:ember --server` + +### Linting + +- `pnpm lint` +- `pnpm lint:fix` + +### Building + +- `pnpm ember build` (development) +- `pnpm build` (production) + +### Deploying + +Specify what it takes to deploy your app. + +## Further Reading / Useful Links + +- [ember.js](https://emberjs.com/) +- [ember-cli](https://cli.emberjs.com/release/) +- Development Browser Extensions + - [ember inspector for chrome](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi) + - [ember inspector for firefox](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/) diff --git a/packages/repl-sdk/tests-ember/app/app.ts b/packages/repl-sdk/tests-ember/app/app.ts new file mode 100644 index 000000000..a3c0402fc --- /dev/null +++ b/packages/repl-sdk/tests-ember/app/app.ts @@ -0,0 +1,13 @@ +import Application from '@ember/application'; +import compatModules from '@embroider/virtual/compat-modules'; +import Resolver from 'ember-resolver'; +import loadInitializers from 'ember-load-initializers'; +import config from './config/environment'; + +export default class App extends Application { + modulePrefix = config.modulePrefix; + podModulePrefix = config.podModulePrefix; + Resolver = Resolver.withModules(compatModules); +} + +loadInitializers(App, config.modulePrefix, compatModules); diff --git a/packages/repl-sdk/tests-ember/app/components/.gitkeep b/packages/repl-sdk/tests-ember/app/components/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/repl-sdk/tests-ember/app/config/environment.d.ts b/packages/repl-sdk/tests-ember/app/config/environment.d.ts new file mode 100644 index 000000000..83410dd15 --- /dev/null +++ b/packages/repl-sdk/tests-ember/app/config/environment.d.ts @@ -0,0 +1,14 @@ +/** + * Type declarations for + * import config from 'tests-ember/config/environment' + */ +declare const config: { + environment: string; + modulePrefix: string; + podModulePrefix: string; + locationType: 'history' | 'hash' | 'none'; + rootURL: string; + APP: Record; +}; + +export default config; diff --git a/packages/repl-sdk/tests-ember/app/config/environment.js b/packages/repl-sdk/tests-ember/app/config/environment.js new file mode 100644 index 000000000..1ce9a009a --- /dev/null +++ b/packages/repl-sdk/tests-ember/app/config/environment.js @@ -0,0 +1,3 @@ +import loadConfigFromMeta from '@embroider/config-meta-loader'; + +export default loadConfigFromMeta('tests-ember'); diff --git a/packages/repl-sdk/tests-ember/app/controllers/.gitkeep b/packages/repl-sdk/tests-ember/app/controllers/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/repl-sdk/tests-ember/app/helpers/.gitkeep b/packages/repl-sdk/tests-ember/app/helpers/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/repl-sdk/tests-ember/app/models/.gitkeep b/packages/repl-sdk/tests-ember/app/models/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/repl-sdk/tests-ember/app/router.ts b/packages/repl-sdk/tests-ember/app/router.ts new file mode 100644 index 000000000..63e7ddad9 --- /dev/null +++ b/packages/repl-sdk/tests-ember/app/router.ts @@ -0,0 +1,11 @@ +import EmberRouter from '@ember/routing/router'; +import config from 'tests-ember/config/environment'; + +export default class Router extends EmberRouter { + location = config.locationType; + rootURL = config.rootURL; +} + +Router.map(function () { + // Add route declarations here +}); diff --git a/packages/repl-sdk/tests-ember/app/routes/.gitkeep b/packages/repl-sdk/tests-ember/app/routes/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/repl-sdk/tests-ember/app/styles/app.css b/packages/repl-sdk/tests-ember/app/styles/app.css new file mode 100644 index 000000000..2763afa4c --- /dev/null +++ b/packages/repl-sdk/tests-ember/app/styles/app.css @@ -0,0 +1 @@ +/* Ember supports plain CSS out of the box. More info: https://cli.emberjs.com/release/advanced-use/stylesheets/ */ diff --git a/packages/repl-sdk/tests-ember/app/templates/application.gts b/packages/repl-sdk/tests-ember/app/templates/application.gts new file mode 100644 index 000000000..94164a889 --- /dev/null +++ b/packages/repl-sdk/tests-ember/app/templates/application.gts @@ -0,0 +1,14 @@ +import Route from 'ember-route-template'; +import { pageTitle } from 'ember-page-title'; + +import { MiniRepl } from './demo'; + +export default Route( + +); diff --git a/packages/repl-sdk/tests-ember/app/templates/demo.gts b/packages/repl-sdk/tests-ember/app/templates/demo.gts new file mode 100644 index 000000000..a601e11c0 --- /dev/null +++ b/packages/repl-sdk/tests-ember/app/templates/demo.gts @@ -0,0 +1,67 @@ +import Component from '@glimmer/component'; + +import * as babelPluginETC from 'babel-plugin-ember-template-compilation'; +import * as templateCompiler from 'ember-source/dist/ember-template-compiler.js'; +import * as babelMacros from 'babel-plugin-debug-macros'; +import * as contentTag from 'content-tag'; +import * as glimmerTracking from '@glimmer/tracking'; + +import { modifier } from 'ember-modifier'; +import { Compiler, defaults } from 'repl-sdk'; + +let compiler = new Compiler({ + ...defaults, + logging: true, + resolve: { + '@babel/standalone': () => import('@babel/standalone'), + 'decorator-transforms': () => import('decorator-transforms'), + // 'babel-plugin-ember-template-compilation': import( + // 'babel-plugin-ember-template-compilation' + // ), + 'babel-plugin-ember-template-compilation': babelPluginETC, + 'babel-plugin-debug-macros': babelMacros, + // 'content-tag': () => import('content-tag'), + 'content-tag': contentTag, + 'ember-template-compiler': templateCompiler, + 'ember-source/dist/ember-template-compiler.js': templateCompiler, + + // Pass all the ember stuff through + // TODO: check if we can do ember-source/dist/packages paths + '@ember/component': () => import('@ember/component'), + '@ember/modifier': () => import('@ember/modifier'), + '@ember/helper': () => import('@ember/helper'), + '@ember/template-factory': () => import('@ember/template-factory'), + '@ember/template-compilation': () => import('@ember/template-compilation'), + '@ember/component/template-only': () => + import('@ember/component/template-only'), + '@glimmer/component': () => import('@glimmer/component'), + // '@glimmer/tracking': () => import('@glimmer/tracking'), + '@glimmer/tracking': glimmerTracking, + }, +}); + +const snippet = ` +import { on } from '@ember/modifier'; +import { cell } from 'ember-resources'; + +const count = cell(0); +const increment = () => count.current++; + + +`; + +const compile = modifier((element) => { + (async () => { + let root = await compiler.compile('gjs', snippet, {}); + + element.appendChild(root); + })(); +}); + +export class MiniRepl extends Component { + +} diff --git a/packages/repl-sdk/tests-ember/babel.config.cjs b/packages/repl-sdk/tests-ember/babel.config.cjs new file mode 100644 index 000000000..957298726 --- /dev/null +++ b/packages/repl-sdk/tests-ember/babel.config.cjs @@ -0,0 +1,50 @@ +const { + babelCompatSupport, + templateCompatSupport, +} = require('@embroider/compat/babel'); + +module.exports = { + plugins: [ + [ + '@babel/plugin-transform-typescript', + { + allExtensions: true, + onlyRemoveTypeImports: true, + allowDeclareFields: true, + }, + ], + [ + 'babel-plugin-ember-template-compilation', + { + compilerPath: 'ember-source/dist/ember-template-compiler.js', + enableLegacyModules: [ + 'ember-cli-htmlbars', + 'ember-cli-htmlbars-inline-precompile', + 'htmlbars-inline-precompile', + ], + transforms: [...templateCompatSupport()], + }, + ], + [ + 'module:decorator-transforms', + { + runtime: { + import: require.resolve('decorator-transforms/runtime-esm'), + }, + }, + ], + [ + '@babel/plugin-transform-runtime', + { + absoluteRuntime: __dirname, + useESModules: true, + regenerator: false, + }, + ], + ...babelCompatSupport(), + ], + + generatorOpts: { + compact: false, + }, +}; diff --git a/packages/repl-sdk/tests-ember/config/ember-cli-update.json b/packages/repl-sdk/tests-ember/config/ember-cli-update.json new file mode 100644 index 000000000..bfa398b62 --- /dev/null +++ b/packages/repl-sdk/tests-ember/config/ember-cli-update.json @@ -0,0 +1 @@ +{"schemaVersion":"1.0.0","packages":[{"name":"@embroider/app-blueprint","version":"0.16.0","blueprints":[{"name":"@embroider/app-blueprint","isBaseBlueprint":true,"options":["--package-manager pnpm"]}]}]} \ No newline at end of file diff --git a/packages/repl-sdk/tests-ember/config/environment.js b/packages/repl-sdk/tests-ember/config/environment.js new file mode 100644 index 000000000..06ef1a9c1 --- /dev/null +++ b/packages/repl-sdk/tests-ember/config/environment.js @@ -0,0 +1,48 @@ +'use strict'; + +module.exports = function (environment) { + const ENV = { + modulePrefix: 'tests-ember', + environment, + rootURL: '/', + locationType: 'history', + EmberENV: { + EXTEND_PROTOTYPES: false, + FEATURES: { + // Here you can enable experimental features on an ember canary build + // e.g. EMBER_NATIVE_DECORATOR_SUPPORT: true + }, + }, + + APP: { + // Here you can pass flags/options to your application instance + // when it is created + }, + }; + + if (environment === 'development') { + // ENV.APP.LOG_RESOLVER = true; + // ENV.APP.LOG_ACTIVE_GENERATION = true; + // ENV.APP.LOG_TRANSITIONS = true; + // ENV.APP.LOG_TRANSITIONS_INTERNAL = true; + // ENV.APP.LOG_VIEW_LOOKUPS = true; + } + + if (environment === 'test') { + // Testem prefers this... + ENV.locationType = 'none'; + + // keep test console output quieter + ENV.APP.LOG_ACTIVE_GENERATION = false; + ENV.APP.LOG_VIEW_LOOKUPS = false; + + ENV.APP.rootElement = '#ember-testing'; + ENV.APP.autoboot = false; + } + + if (environment === 'production') { + // here you can enable a production-specific feature + } + + return ENV; +}; diff --git a/packages/repl-sdk/tests-ember/config/optional-features.json b/packages/repl-sdk/tests-ember/config/optional-features.json new file mode 100644 index 000000000..5329dd991 --- /dev/null +++ b/packages/repl-sdk/tests-ember/config/optional-features.json @@ -0,0 +1,7 @@ +{ + "application-template-wrapper": false, + "default-async-observers": true, + "jquery-integration": false, + "template-only-glimmer-components": true, + "no-implicit-route-model": true +} diff --git a/packages/repl-sdk/tests-ember/config/targets.js b/packages/repl-sdk/tests-ember/config/targets.js new file mode 100644 index 000000000..1e48e0599 --- /dev/null +++ b/packages/repl-sdk/tests-ember/config/targets.js @@ -0,0 +1,11 @@ +'use strict'; + +const browsers = [ + 'last 1 Chrome versions', + 'last 1 Firefox versions', + 'last 1 Safari versions', +]; + +module.exports = { + browsers, +}; diff --git a/packages/repl-sdk/tests-ember/ember-cli-build.js b/packages/repl-sdk/tests-ember/ember-cli-build.js new file mode 100644 index 000000000..ebb76e53a --- /dev/null +++ b/packages/repl-sdk/tests-ember/ember-cli-build.js @@ -0,0 +1,10 @@ +'use strict'; + +const EmberApp = require('ember-cli/lib/broccoli/ember-app'); +const { maybeEmbroider } = require('@embroider/test-setup'); + +module.exports = function (defaults) { + let app = new EmberApp(defaults, {}); + + return maybeEmbroider(app); +}; diff --git a/packages/repl-sdk/tests-ember/eslint.config.mjs b/packages/repl-sdk/tests-ember/eslint.config.mjs new file mode 100644 index 000000000..4fbe283d1 --- /dev/null +++ b/packages/repl-sdk/tests-ember/eslint.config.mjs @@ -0,0 +1,146 @@ +import globals from 'globals'; +import js from '@eslint/js'; + +import ts from 'typescript-eslint'; + +import ember from 'eslint-plugin-ember'; +import emberRecommended from 'eslint-plugin-ember/configs/recommended'; +import gjsRecommended from 'eslint-plugin-ember/configs/recommended-gjs'; +import gtsRecommended from 'eslint-plugin-ember/configs/recommended-gts'; + +import prettier from 'eslint-plugin-prettier/recommended'; +import qunit from 'eslint-plugin-qunit'; +import n from 'eslint-plugin-n'; + +import emberParser from 'ember-eslint-parser'; +import babelParser from '@babel/eslint-parser'; + +const parserOptions = { + esm: { + js: { + ecmaFeatures: { modules: true }, + ecmaVersion: 'latest', + }, + ts: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, + }, +}; + +export default ts.config( + js.configs.recommended, + prettier, + { + files: ['**/*.js'], + languageOptions: { + parser: babelParser, + parserOptions: parserOptions.esm.js, + globals: { + ...globals.browser, + }, + }, + plugins: { + ember, + }, + rules: { + ...emberRecommended.rules, + }, + }, + { + files: ['**/*.ts'], + plugins: { ember }, + languageOptions: { + parserOptions: parserOptions.esm.ts, + }, + extends: [...ts.configs.strictTypeChecked, ...emberRecommended], + }, + { + files: ['**/*.gjs'], + languageOptions: { + parser: emberParser, + parserOptions: parserOptions.esm.js, + globals: { + ...globals.browser, + }, + }, + plugins: { + ember, + }, + rules: { + ...emberRecommended.rules, + ...gjsRecommended.rules, + }, + }, + { + files: ['**/*.gts'], + plugins: { ember }, + languageOptions: { + parserOptions: parserOptions.esm.ts, + }, + extends: [ + ...ts.configs.strictTypeChecked, + ...emberRecommended, + ...gtsRecommended, + ], + }, + { + files: ['tests/**/*-test.{js,gjs}'], + plugins: { + qunit, + }, + }, + /** + * CJS node files + */ + { + files: [ + '**/*.cjs', + 'config/**/*.js', + 'testem.js', + 'testem*.js', + '.prettierrc.js', + '.stylelintrc.js', + '.template-lintrc.js', + 'ember-cli-build.js', + ], + plugins: { + n, + }, + + languageOptions: { + sourceType: 'script', + ecmaVersion: 'latest', + globals: { + ...globals.node, + }, + }, + }, + /** + * ESM node files + */ + { + files: ['*.mjs'], + plugins: { + n, + }, + + languageOptions: { + sourceType: 'module', + ecmaVersion: 'latest', + parserOptions: parserOptions.esm.js, + globals: { + ...globals.node, + }, + }, + }, + /** + * Settings + */ + { + ignores: ['dist/', 'node_modules/', 'coverage/', '!**/.*'], + linterOptions: { + reportUnusedDisableDirectives: 'error', + }, + }, +); diff --git a/packages/repl-sdk/tests-ember/index.html b/packages/repl-sdk/tests-ember/index.html new file mode 100644 index 000000000..730c0e18a --- /dev/null +++ b/packages/repl-sdk/tests-ember/index.html @@ -0,0 +1,29 @@ + + + + + AppTemplate + + + + {{content-for "head"}} + + + + + {{content-for "head-footer"}} + + + {{content-for "body"}} + + + + + {{content-for "body-footer"}} + + diff --git a/packages/repl-sdk/tests-ember/package.json b/packages/repl-sdk/tests-ember/package.json new file mode 100644 index 000000000..aa55fbb89 --- /dev/null +++ b/packages/repl-sdk/tests-ember/package.json @@ -0,0 +1,114 @@ +{ + "name": "tests-ember", + "version": "0.0.0", + "private": true, + "description": "Small description for tests-ember goes here", + "repository": "", + "license": "MIT", + "author": "", + "directories": { + "doc": "doc", + "test": "tests" + }, + "scripts": { + "build": "vite build", + "lint": "concurrently \"pnpm:lint:*(!fix)\" --names \"lint:\"", + "lint:css": "stylelint \"**/*.css\"", + "lint:css:fix": "concurrently \"pnpm:lint:css -- --fix\"", + "lint:fix": "concurrently \"pnpm:lint:*:fix\" --names \"fix:\"", + "lint:hbs": "ember-template-lint .", + "lint:hbs:fix": "ember-template-lint . --fix", + "lint:js": "eslint . --cache", + "lint:js:fix": "eslint . --fix", + "lint:types": "glint", + "start": "vite", + "test": "concurrently \"pnpm:lint\" \"pnpm:test:*\" --names \"lint,test:\"", + "test:ember": "vite build --mode test && ember test --path dist" + }, + "devDependencies": { + "@babel/core": "^7.26.0", + "@babel/eslint-parser": "^7.25.9", + "@babel/plugin-transform-runtime": "^7.25.7", + "@babel/plugin-transform-typescript": "^7.25.9", + "@babel/runtime": "^7.26.0", + "@babel/standalone": "^7.26.2", + "@ember/optional-features": "^2.2.0", + "@ember/string": "^4.0.0", + "@ember/test-helpers": "^4.0.4", + "@embroider/compat": "3.7.1-unstable.0aa8fc6", + "@embroider/config-meta-loader": "0.0.1-unstable.0aa8fc6", + "@embroider/core": "3.4.20-unstable.0aa8fc6", + "@embroider/macros": "1.16.9", + "@embroider/test-setup": "4.0.1-unstable.0aa8fc6", + "@embroider/vite": "0.2.2-unstable.0aa8fc6", + "@glimmer/component": "^1.1.2", + "@glimmer/tracking": "^1.1.2", + "@glint/core": "1.4.1-unstable.34c4510", + "@glint/environment-ember-loose": "1.4.1-unstable.34c4510", + "@glint/environment-ember-template-imports": "1.4.1-unstable.34c4510", + "@glint/template": "1.4.1-unstable.34c4510", + "@rollup/plugin-babel": "^6.0.4", + "@tsconfig/ember": "^3.0.8", + "@types/eslint__js": "^8.42.3", + "@types/qunit": "^2.19.12", + "@types/rsvp": "^4.0.9", + "@typescript-eslint/eslint-plugin": "^8.15.0", + "@typescript-eslint/parser": "^8.15.0", + "babel-plugin-ember-template-compilation": "^2.3.0", + "concurrently": "^9.1.0", + "content-tag": "^3.0.0", + "decorator-transforms": "^2.3.0", + "ember-auto-import": "^2.10.0", + "ember-cli": "~6.0.1", + "ember-cli-babel": "^8.2.0", + "ember-cli-htmlbars": "^6.3.0", + "ember-load-initializers": "^3.0.1", + "ember-modifier": "^4.2.0", + "ember-page-title": "^8.2.3", + "ember-qunit": "^8.1.1", + "ember-resolver": "^13.0.2", + "ember-route-template": "^1.0.3", + "ember-source": "~6.0.0", + "ember-template-lint": "^6.0.0", + "eslint": "^9.15.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-ember": "^12.3.1", + "eslint-plugin-n": "^17.14.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-qunit": "^8.1.2", + "globals": "^15.12.0", + "loader.js": "^4.7.0", + "prettier": "^3.3.3", + "prettier-plugin-ember-template-tag": "^2.0.2", + "qunit": "^2.22.0", + "qunit-dom": "^3.3.0", + "repl-sdk": "workspace:*", + "stylelint": "^15.11.0", + "stylelint-config-standard": "^34.0.0", + "stylelint-prettier": "^4.1.0", + "tracked-built-ins": "^3.3.0", + "typescript": "^5.5.4", + "typescript-eslint": "^8.15.0", + "vite": "^5.4.11", + "vite-plugin-wasm": "^3.3.0", + "webpack": "^5.96.1" + }, + "engines": { + "node": ">= 18" + }, + "ember": { + "edition": "octane" + }, + "ember-addon": { + "type": "app", + "version": 2 + }, + "exports": { + "./tests/*": "./tests/*", + "./*": "./app/*" + }, + "dependencies": { + "babel-plugin-debug-macros": "^1.0.2", + "path-browserify": "^1.0.1" + } +} diff --git a/packages/repl-sdk/tests-ember/public/robots.txt b/packages/repl-sdk/tests-ember/public/robots.txt new file mode 100644 index 000000000..f5916452e --- /dev/null +++ b/packages/repl-sdk/tests-ember/public/robots.txt @@ -0,0 +1,3 @@ +# http://www.robotstxt.org +User-agent: * +Disallow: diff --git a/packages/repl-sdk/tests-ember/testem.js b/packages/repl-sdk/tests-ember/testem.js new file mode 100644 index 000000000..b4b6691fd --- /dev/null +++ b/packages/repl-sdk/tests-ember/testem.js @@ -0,0 +1,25 @@ +'use strict'; + +if (typeof module !== 'undefined') { + module.exports = { + test_page: 'tests/index.html?hidepassed', + disable_watching: true, + launch_in_ci: ['Chrome'], + launch_in_dev: ['Chrome'], + browser_start_timeout: 120, + browser_args: { + Chrome: { + ci: [ + // --no-sandbox is needed when running Chrome inside a container + process.env.CI ? '--no-sandbox' : null, + '--headless', + '--disable-dev-shm-usage', + '--disable-software-rasterizer', + '--mute-audio', + '--remote-debugging-port=0', + '--window-size=1440,900', + ].filter(Boolean), + }, + }, + }; +} diff --git a/packages/repl-sdk/tests-ember/tests/helpers/index.ts b/packages/repl-sdk/tests-ember/tests/helpers/index.ts new file mode 100644 index 000000000..e190f567e --- /dev/null +++ b/packages/repl-sdk/tests-ember/tests/helpers/index.ts @@ -0,0 +1,43 @@ +import { + setupApplicationTest as upstreamSetupApplicationTest, + setupRenderingTest as upstreamSetupRenderingTest, + setupTest as upstreamSetupTest, + type SetupTestOptions, +} from 'ember-qunit'; + +// This file exists to provide wrappers around ember-qunit's +// test setup functions. This way, you can easily extend the setup that is +// needed per test type. + +function setupApplicationTest(hooks: NestedHooks, options?: SetupTestOptions) { + upstreamSetupApplicationTest(hooks, options); + + // Additional setup for application tests can be done here. + // + // For example, if you need an authenticated session for each + // application test, you could do: + // + // hooks.beforeEach(async function () { + // await authenticateSession(); // ember-simple-auth + // }); + // + // This is also a good place to call test setup functions coming + // from other addons: + // + // setupIntl(hooks, 'en-us'); // ember-intl + // setupMirage(hooks); // ember-cli-mirage +} + +function setupRenderingTest(hooks: NestedHooks, options?: SetupTestOptions) { + upstreamSetupRenderingTest(hooks, options); + + // Additional setup for rendering tests can be done here. +} + +function setupTest(hooks: NestedHooks, options?: SetupTestOptions) { + upstreamSetupTest(hooks, options); + + // Additional setup for unit tests can be done here. +} + +export { setupApplicationTest, setupRenderingTest, setupTest }; diff --git a/packages/repl-sdk/tests-ember/tests/index.html b/packages/repl-sdk/tests-ember/tests/index.html new file mode 100644 index 000000000..5c6bc5ca8 --- /dev/null +++ b/packages/repl-sdk/tests-ember/tests/index.html @@ -0,0 +1,40 @@ + + + + + AppTemplate Tests + + + + {{content-for "head"}} {{content-for "test-head"}} + + + + + + {{content-for "head-footer"}} {{content-for "test-head-footer"}} + + + {{content-for "body"}} {{content-for "test-body"}} + +
+
+
+
+
+
+ + + + + + + + + {{content-for "body-footer"}} + + diff --git a/packages/repl-sdk/tests-ember/tests/integration/.gitkeep b/packages/repl-sdk/tests-ember/tests/integration/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/repl-sdk/tests-ember/tests/test-helper.ts b/packages/repl-sdk/tests-ember/tests/test-helper.ts new file mode 100644 index 000000000..74977ce99 --- /dev/null +++ b/packages/repl-sdk/tests-ember/tests/test-helper.ts @@ -0,0 +1,14 @@ +import Application from 'tests-ember/app'; +import config from 'tests-ember/config/environment'; +import * as QUnit from 'qunit'; +import { setApplication } from '@ember/test-helpers'; +import { setup } from 'qunit-dom'; +import { start as qunitStart } from 'ember-qunit'; + +export function start() { + setApplication(Application.create(config.APP)); + + setup(QUnit.assert); + + qunitStart({ loadTests: false }); +} diff --git a/packages/repl-sdk/tests-ember/tests/unit/.gitkeep b/packages/repl-sdk/tests-ember/tests/unit/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/repl-sdk/tests-ember/tsconfig.json b/packages/repl-sdk/tests-ember/tsconfig.json new file mode 100644 index 000000000..b698aad7a --- /dev/null +++ b/packages/repl-sdk/tests-ember/tsconfig.json @@ -0,0 +1,45 @@ +{ + "extends": "@tsconfig/ember/tsconfig.json", + "include": [ + "app", "tests", "types" + ], + "glint": { + "environment": [ + "ember-loose", + "ember-template-imports" + ] + }, + "compilerOptions": { + "allowJs": true, + /** + https://www.typescriptlang.org/tsconfig#noEmitOnError + Do not block emit on TS errors. + */ + "noEmitOnError": false, + + "declaration": false, + "declarationMap": false, + + /** + https://www.typescriptlang.org/tsconfig#allowImportingTsExtensions + + We want our tooling to know how to resolve our custom files so the appropriate plugins + can do the proper transformations on those files. + */ + "allowImportingTsExtensions": true, + "paths": { + "tests-ember/tests/*": [ + "./tests/*" + ], + "tests-ember/*": [ + "./app/*" + ], + "*": [ + "./types/*" + ] + }, + "types": [ + "ember-source/types" + ] + }, +} diff --git a/packages/repl-sdk/tests-ember/types/index.d.ts b/packages/repl-sdk/tests-ember/types/index.d.ts new file mode 100644 index 000000000..217abbb25 --- /dev/null +++ b/packages/repl-sdk/tests-ember/types/index.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/repl-sdk/tests-ember/vite.config.mjs b/packages/repl-sdk/tests-ember/vite.config.mjs new file mode 100644 index 000000000..5af55a427 --- /dev/null +++ b/packages/repl-sdk/tests-ember/vite.config.mjs @@ -0,0 +1,108 @@ +import { defineConfig } from 'vite'; +import wasm from 'vite-plugin-wasm'; +import { createRequire } from 'node:module'; +import { + resolver, + hbs, + scripts, + templateTag, + optimizeDeps, + compatPrebuild, + assets, + contentFor, +} from '@embroider/vite'; +import { babel } from '@rollup/plugin-babel'; +const require = createRequire(import.meta.url); + +const extensions = [ + '.mjs', + '.gjs', + '.js', + '.mts', + '.gts', + '.ts', + '.hbs', + '.json', +]; + +const optimization = optimizeDeps(); + +export default defineConfig(({ mode }) => { + return { + resolve: { + extensions, + alias: { + 'ember-template-compiler': 'ember-source/dist/ember-template-compiler', + // 'content-tag': import.meta.resolve('content-tag'), + // The fact that this is required + // reveals a problem with babel-plugin-debug-macros. + // *Nothing* should be touching path. + path: 'path-browserify', + }, + }, + plugins: [ + // wasm(), + hbs(), + templateTag(), + scripts(), + resolver(), + compatPrebuild(), + assets(), + contentFor(), + + babel({ + babelHelpers: 'runtime', + extensions, + }), + ], + + optimizeDeps: { + ...optimization, + exclude: ['content-tag', ...optimization.exclude], + esbuildOptions: { + ...optimization.esbuildOptions, + target: 'esnext', + plugins: [ + { + name: 'deal-with-weird-pre-official-runtime-compiler', + setup(build) { + build.onResolve({ filter: /content-tag/ }, (path) => ({ + path: 'content-tag', + external: true, + })); + }, + }, + ...optimization.esbuildOptions.plugins, + ], + }, + }, + server: { + port: 4200, + mimeTypes: { + 'application/wasm': ['wasm'], + }, + }, + esbuild: { + target: 'esnext', + supported: { + 'top-level-await': true, + }, + }, + build: { + outDir: 'dist', + target: 'esnext', + rollupOptions: { + input: { + main: 'index.html', + ...(shouldBuildTests(mode) + ? { tests: 'tests/index.html' } + : undefined), + }, + }, + }, + }; +}); + +function shouldBuildTests(mode) { + return mode !== 'production' || process.env.FORCE_BUILD_TESTS; +} diff --git a/packages/repl-sdk/tests-self/.eslintrc.cjs b/packages/repl-sdk/tests-self/.eslintrc.cjs new file mode 100644 index 000000000..ab97ae875 --- /dev/null +++ b/packages/repl-sdk/tests-self/.eslintrc.cjs @@ -0,0 +1,20 @@ +'use strict'; + +const { configs } = require('@nullvoxpopuli/eslint-configs'); + +// accommodates: JS, TS, App, and Addon +const config = configs.ember(); + +module.exports = { + ...config, + overrides: [ + ...config.overrides, + { + files: ['**/*.ts'], + rules: { + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + }, + }, + ], +}; diff --git a/packages/repl-sdk/tests-self/package.json b/packages/repl-sdk/tests-self/package.json new file mode 100644 index 000000000..5134e6831 --- /dev/null +++ b/packages/repl-sdk/tests-self/package.json @@ -0,0 +1,31 @@ +{ + "name": "@nullvoxpopuli/repl-sdk-tests-vue", + "private": true, + "type": "module", + "scripts": { + "test": "pnpm test:firefox", + "test:chrome": "vitest --browser.name=chrome --browser.headless=true", + "test:firefox": "vitest --browser.name=firefox --browser.headless=true" + }, + "author": "NullvoxPopuli", + "devDependencies": { + "@babel/plugin-proposal-decorators": "^7.23.9", + "@babel/standalone": "^7.24.5", + "@nullvoxpopuli/eslint-configs": "^4.0.0", + "@testing-library/dom": "^10.3.2", + "@tsconfig/ember": "^3.0.7", + "@vitest/browser": "^2.0.3", + "vite": "^5.3.5", + "vite-plugin-wasm": "^3.3.0", + "vitest": "^2.0.3", + "webdriverio": "^8.39.1" + }, + "dependencies": { + "@vue/repl": "^4.3.1", + "repl-sdk": "workspace:^", + "vue": "^3.4.33" + }, + "volta": { + "extends": "../../../package.json" + } +} diff --git a/packages/repl-sdk/tests-self/tests/custom.test.ts b/packages/repl-sdk/tests-self/tests/custom.test.ts new file mode 100644 index 000000000..4f0ec5b8c --- /dev/null +++ b/packages/repl-sdk/tests-self/tests/custom.test.ts @@ -0,0 +1,27 @@ +import { Compiler } from 'repl-sdk'; +import { describe, expect, test } from 'vitest'; + +describe('custom', () => { + test('it works', async () => { + let compiler = new Compiler({ + formats: { + custom: { + compiler: async () => { + return { + compile: async (text) => { + return `export default \`${text + '!!'} \``; + }, + render: async (element, compiled) => { + element.innerHTML = compiled; + }, + }; + }, + }, + }, + }); + + let element = await compiler.compile('custom', `example text`); + + expect(element.textContent).toContain('example text!!'); + }); +}); diff --git a/packages/repl-sdk/tests-self/tests/ember.test.ts b/packages/repl-sdk/tests-self/tests/ember.test.ts new file mode 100644 index 000000000..3d52e0daf --- /dev/null +++ b/packages/repl-sdk/tests-self/tests/ember.test.ts @@ -0,0 +1,64 @@ +import { Compiler } from 'repl-sdk'; +import { describe, expect, test } from 'vitest'; + +describe('ember', () => { + describe('gjs', () => { + test('template-only', async () => { + let compiler = new Compiler(); + let element = await compiler.compile( + 'gjs', + ` + const name = 'world'; + + + ` + ); + + // getComputedStyle doesn't work without the element existing in the document + document.body.appendChild(element); + + let h1 = element.querySelector('h1'); + + expect(h1).toBeTruthy(); + expect(h1?.textContent).toContain('Hello world!'); + expect(window.getComputedStyle(h1!).color).toBe('rgb(255, 0, 0)'); + }); + + test('class component', async () => { + let compiler = new Compiler(); + let element = await compiler.compile( + 'gjs', + ` + import Component from '@glimmer/component'; + + export default class Demo extends Component { + name = 'world'; + + + } + ` + ); + + // getComputedStyle doesn't work without the element existing in the document + document.body.appendChild(element); + + let h1 = element.querySelector('h1'); + + expect(h1).toBeTruthy(); + expect(h1?.textContent).toContain('Hello world!'); + expect(window.getComputedStyle(h1!).color).toBe('rgb(255, 0, 0)'); + }); + }); +}); diff --git a/packages/repl-sdk/tests-self/tests/jsx/react.test.ts b/packages/repl-sdk/tests-self/tests/jsx/react.test.ts new file mode 100644 index 000000000..7eb387910 --- /dev/null +++ b/packages/repl-sdk/tests-self/tests/jsx/react.test.ts @@ -0,0 +1,27 @@ +import { Compiler } from 'repl-sdk'; +import { describe, expect, test } from 'vitest'; + +describe('jsx', () => { + describe('react', () => { + test('it works', async () => { + let compiler = new Compiler(); + // React comes from esm.sh + let element = await compiler.compile( + 'jsx', + ` + import React from 'react'; + + export default <> +

Hello World

+ + GENERAL KENOBI! + ; + `, + { flavor: 'react' } + ); + + expect(element.querySelector('h1')?.textContent).toContain('Hello World'); + expect(element.textContent).toContain('Hello World'); + }); + }); +}); diff --git a/packages/repl-sdk/tests-self/tests/markdown.test.ts b/packages/repl-sdk/tests-self/tests/markdown.test.ts new file mode 100644 index 000000000..c26a36963 --- /dev/null +++ b/packages/repl-sdk/tests-self/tests/markdown.test.ts @@ -0,0 +1,123 @@ +import { Compiler } from 'repl-sdk'; +import { describe, expect, test } from 'vitest'; + +function escapeFence(code: string) { + return code.replace(/`/g, '\\`'); +} + +function fenced(code: string, meta: string) { + return '```' + meta + '\n' + escapeFence(code) + '\n```'; +} + +describe('markdown', () => { + test('it works', async () => { + let compiler = new Compiler(); + let element = await compiler.compile('md', `# Hello`); + + let h1 = element.querySelector('h1'); + + expect(h1).toBeTruthy(); + expect(h1?.textContent).toContain('Hello'); + }); + + describe('code fences', () => { + let vue = ` + + + + `; + + let jsxReact = ` + import React from 'react'; + + export default <> +

Hello World

+ + GENERAL KENOBI! + ; + `; + + let svelte = ` + + + +

Hello {name}!

+ `; + + const mermaid = ` +graph TD; + A-->B; + A-->C; + B-->D; + C-->D; +`; + + test('vue live', async () => { + let compiler = new Compiler(); + let element = await compiler.compile('md', `# Hello\n\n` + fenced(vue, 'vue live')); + + let h1 = element.querySelector('h1'); + let h2 = element.querySelector('h2'); + + // getComputedStyle doesn't work without the element existing in the document + document.body.appendChild(element); + + expect(h1).toBeTruthy(); + expect(h2).toBeTruthy(); + expect(h1?.textContent).toContain('Hello'); + expect(h2?.textContent).toContain('GENERAL KENOBI!'); + expect(window.getComputedStyle(h2!).color).toBe('rgb(255, 0, 0)'); + }); + + test('jsx requires a flavor to be specified', async () => { + let compiler = new Compiler(); + + expect( + compiler.compile( + 'md', + `# Hello\n\n` + + fenced(jsxReact, 'jsx react live') + + '\n\n' + + fenced(`export default <>hi`, 'jsx live') + ) + ).rejects.toThrow('make sure you specify the flavor.'); + }); + + test('svelte live', async () => { + let compiler = new Compiler(); + let element = await compiler.compile('md', fenced(svelte, 'svelte live')); + + let h1 = element.querySelector('h1'); + + // getComputedStyle doesn't work without the element existing in the document + document.body.appendChild(element); + + expect(h1).toBeTruthy(); + expect(h1?.textContent).toContain('Hello'); + expect(window.getComputedStyle(h1!).color).toBe('rgb(255, 0, 0)'); + }); + + test('mermaid (no live)', async () => { + let compiler = new Compiler(); + let element = await compiler.compile('md', fenced(mermaid, 'mermaid')); + + let rootSVG = element.querySelector('svg'); + + expect(rootSVG, 'Mermaid draws in SVG inside the
 tag').toBeTruthy();
+    });
+  });
+});
diff --git a/packages/repl-sdk/tests-self/tests/mermaid.test.ts b/packages/repl-sdk/tests-self/tests/mermaid.test.ts
new file mode 100644
index 000000000..2ec26a58f
--- /dev/null
+++ b/packages/repl-sdk/tests-self/tests/mermaid.test.ts
@@ -0,0 +1,26 @@
+import { Compiler } from 'repl-sdk';
+import { describe, expect, test } from 'vitest';
+
+describe('Custom compiler', () => {
+  test('it works', async () => {
+    let compiler = new Compiler();
+    // Vue comes from esm.sh
+    let element = await compiler.compile(
+      'mermaid',
+      `
+  graph TD
+
+  A[Client] --> B[Load Balancer]
+  B --> C[Server01]
+  B --> D[Server02]
+    `
+    );
+
+    // getComputedStyle doesn't work without the element existing in the document
+    document.body.appendChild(element);
+
+    let rootSVG = element.querySelector('svg');
+
+    expect(rootSVG, 'Mermaid draws in SVG inside the 
 tag').toBeTruthy();
+  });
+});
diff --git a/packages/repl-sdk/tests-self/tests/svelte.test.ts b/packages/repl-sdk/tests-self/tests/svelte.test.ts
new file mode 100644
index 000000000..7e62e21a5
--- /dev/null
+++ b/packages/repl-sdk/tests-self/tests/svelte.test.ts
@@ -0,0 +1,29 @@
+import { Compiler } from 'repl-sdk';
+import { describe, expect, test } from 'vitest';
+
+describe('svelte', () => {
+  test('it works', async () => {
+    let compiler = new Compiler();
+    let element = await compiler.compile(
+      'svelte',
+      `
+      
+      
+
+      

Hello {name}!

+ ` + ); + + // getComputedStyle doesn't work without the element existing in the document + document.body.appendChild(element); + + let h1 = element.querySelector('h1'); + + expect(h1.textContent).toContain('Hello world!'); + expect(window.getComputedStyle(h1).color).toBe('rgb(255, 0, 0)'); + }); +}); diff --git a/packages/repl-sdk/tests-self/tests/vue.test.ts b/packages/repl-sdk/tests-self/tests/vue.test.ts new file mode 100644 index 000000000..7c1c85004 --- /dev/null +++ b/packages/repl-sdk/tests-self/tests/vue.test.ts @@ -0,0 +1,38 @@ +import { Compiler } from 'repl-sdk'; +import { describe, expect, test } from 'vitest'; + +describe('vue', () => { + test('it works', async () => { + let compiler = new Compiler(); + // Vue comes from esm.sh + let element = await compiler.compile( + 'vue', + ` + + + + + ` + ); + + // getComputedStyle doesn't work without the element existing in the document + document.body.appendChild(element); + + let h1 = element.querySelector('h1'); + + expect(h1).toBeTruthy(); + expect(h1?.textContent).toContain('Hello World'); + expect(window.getComputedStyle(h1!).color).toBe('rgb(255, 0, 0)'); + expect(element.textContent).toContain('Hello World'); + }); +}); diff --git a/packages/repl-sdk/tests-self/tsconfig.json b/packages/repl-sdk/tests-self/tsconfig.json new file mode 100644 index 000000000..61f1cb68d --- /dev/null +++ b/packages/repl-sdk/tests-self/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "@tsconfig/ember/tsconfig.json", + "compilerOptions": { + "skipLibCheck": true, + "allowImportingTsExtensions": true + } +} diff --git a/packages/repl-sdk/tests-self/vite.config.js b/packages/repl-sdk/tests-self/vite.config.js new file mode 100644 index 000000000..d284a24ca --- /dev/null +++ b/packages/repl-sdk/tests-self/vite.config.js @@ -0,0 +1,11 @@ +import { defineConfig } from 'vite'; +import wasm from 'vite-plugin-wasm'; + +export default defineConfig({ + esbuild: { + supported: { + 'top-level-await': true, + }, + }, + plugins: [wasm()], +}); diff --git a/packages/repl-sdk/tests-self/vitest.config.ts b/packages/repl-sdk/tests-self/vitest.config.ts new file mode 100644 index 000000000..ac34f4cb3 --- /dev/null +++ b/packages/repl-sdk/tests-self/vitest.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + browser: { + provider: 'webdriverio', + enabled: true, + name: 'chrome', + }, + }, +}); diff --git a/packages/repl-sdk/tsconfig.json b/packages/repl-sdk/tsconfig.json new file mode 100644 index 000000000..d8f4b91cf --- /dev/null +++ b/packages/repl-sdk/tsconfig.json @@ -0,0 +1,9 @@ + +{ + "extends": "@tsconfig/ember/tsconfig.json", + "include": ["src/**/*", "unpublished-development-types/**/*"], + "compilerOptions": { + "skipLibCheck": true, + "allowImportingTsExtensions": true + } +} diff --git a/packages/repl-sdk/vite.config.mts b/packages/repl-sdk/vite.config.mts new file mode 100644 index 000000000..b69134006 --- /dev/null +++ b/packages/repl-sdk/vite.config.mts @@ -0,0 +1,52 @@ +import { resolve, join } from "node:path"; +import { readFile } from "node:fs/promises"; +import url from "node:url"; + +import { defineConfig } from "vite"; +import dts from "vite-plugin-dts"; + +const __dirname = url.fileURLToPath(new URL(".", import.meta.url)); + +let manifest = await (async () => { + let buffer = await readFile(join(__dirname, "package.json")); + return JSON.parse(buffer.toString()); +})(); + +let externals = Object.keys({ + ...(manifest.dependencies || {}), + ...(manifest.peerDependencies || {}), +}); + +export default defineConfig({ + build: { + outDir: "dist", + // These targets are not "support". + // A consuming app or library should compile further if they need to support + // old browsers. + target: ["esnext"], + // In case folks debug without sourcemaps + // + // TODO: do a dual build, split for development + production + // where production is optimized for CDN loading via + // https://limber.glimdown.com + minify: false, + sourcemap: true, + lib: { + // Could also be a dictionary or array of multiple entry points + entry: resolve(__dirname, "src/index.js"), + name: "repl-sdk", + formats: ["es"], + // the proper extensions will be added + fileName: "index", + }, + rollupOptions: { + external: externals, + }, + }, + plugins: [ + dts({ + rollupTypes: true, + outDir: "declarations", + }), + ], +}); diff --git a/spikes/es-module-shim/index.html b/spikes/es-module-shim/index.html new file mode 100644 index 000000000..c69e1eff4 --- /dev/null +++ b/spikes/es-module-shim/index.html @@ -0,0 +1,152 @@ + + + + + + + JS Bin + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spikes/es-module-shim/package.json b/spikes/es-module-shim/package.json new file mode 100644 index 000000000..b5e7e91b9 --- /dev/null +++ b/spikes/es-module-shim/package.json @@ -0,0 +1,18 @@ +{ + "name": "@nullvoxpopuli/ember-repl-es-module-shim", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "pnpm http-server -c-1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "http-server": "^14.1.1" + }, + "volta": { + "extends": "../../package.json" + } +} From 54c0c68cc3a57fae1d21b2d697661063b83761f3 Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Mon, 5 May 2025 22:04:16 -0400 Subject: [PATCH 002/222] How to load wasm --- .../repl-sdk/src/compilers/ember/macros.js | 3 + packages/repl-sdk/src/index.js | 3 +- pnpm-lock.yaml | 890 +++++++++++++++++- 3 files changed, 894 insertions(+), 2 deletions(-) diff --git a/packages/repl-sdk/src/compilers/ember/macros.js b/packages/repl-sdk/src/compilers/ember/macros.js index 418c9e49a..10540b07c 100644 --- a/packages/repl-sdk/src/compilers/ember/macros.js +++ b/packages/repl-sdk/src/compilers/ember/macros.js @@ -8,6 +8,9 @@ export function macroCondition(result) { return result; } +/** + * This can probably be implemented + */ export function dependencySatisfies() { return true; } diff --git a/packages/repl-sdk/src/index.js b/packages/repl-sdk/src/index.js index a5cd72efc..34a25bf4c 100644 --- a/packages/repl-sdk/src/index.js +++ b/packages/repl-sdk/src/index.js @@ -124,7 +124,8 @@ export class Compiler { // return `https://esm.sh/*${id}`; if (url.startsWith('esm.sh:')) { let name = url.replace(/^esm\.sh:/, ''); - let newUrl = `https://esm.sh/v135/*${name}`; + // Where is this double // coming from? + let newUrl = `https://esm.sh/${name}`.replaceAll('//', '/'); const response = await fetch(newUrl, options); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3bfb04729..9385b5eca 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1510,6 +1510,40 @@ importers: specifier: 5.7.3 version: 5.7.3 + packages/repl-sdk: + dependencies: + es-module-shims: + specifier: ^1.10.0 + version: 1.10.1 + devDependencies: + '@babel/plugin-proposal-decorators': + specifier: ^7.23.9 + version: 7.27.1(@babel/core@7.27.1) + '@nullvoxpopuli/eslint-configs': + specifier: ^5.0.0 + version: 5.1.2(5a544f30e362879c1d9f9b7755520aaa) + '@tsconfig/ember': + specifier: ^3.0.7 + version: 3.0.10 + eslint: + specifier: ^8.55.0 + version: 8.57.1 + prettier: + specifier: ^3.2.5 + version: 3.5.3 + publint: + specifier: ^0.2.6 + version: 0.2.12 + typescript: + specifier: ^5.4.5 + version: 5.7.3 + vite: + specifier: ^5.3.5 + version: 5.4.19(@types/node@22.15.3)(terser@5.39.0) + vite-plugin-dts: + specifier: 4.0.0-beta.1 + version: 4.0.0-beta.1(05ddd15e807b28496c406b941ebaa662) + packages/syntax/-infra: dependencies: '@codemirror/language': @@ -2209,6 +2243,12 @@ importers: specifier: 5.7.3 version: 5.7.3 + spikes/es-module-shim: + devDependencies: + http-server: + specifier: ^14.1.1 + version: 14.1.1 + spikes/url-shortening: dependencies: '@algorithm.ts/base64': @@ -3509,10 +3549,18 @@ packages: resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/js@9.25.1': resolution: {integrity: sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3734,10 +3782,19 @@ packages: resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} engines: {node: '>=18.18.0'} + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.3.1': resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} @@ -3859,6 +3916,19 @@ packages: '@mdn/browser-compat-data@5.7.6': resolution: {integrity: sha512-7xdrMX0Wk7grrTZQwAoy1GkvPMFoizStUoL+VmtUkAxegbCCec+3FKwOM6yc/uGU5+BEczQHXAlWiqvM8JeENg==} + '@microsoft/api-extractor-model@7.29.3': + resolution: {integrity: sha512-kEWjLr2ygL3ku9EGyjeTnL2S5IxyH9NaF1k1UoI0Nzwr4xEJBSWCVsWuF2+0lPUrRPA6mTY95fR264SJ5ETKQA==} + + '@microsoft/api-extractor@7.47.2': + resolution: {integrity: sha512-YWE2HGrSTZaPPSr7xiNizSuViZpC7Jsa7+DwRW5rYVgrMXNbfX/PpBOoSkl5uaz9I2sv2JKLJ75kVNt64BvS3g==} + hasBin: true + + '@microsoft/tsdoc-config@0.17.1': + resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==} + + '@microsoft/tsdoc@0.15.1': + resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} + '@napi-rs/wasm-runtime@0.2.9': resolution: {integrity: sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==} @@ -4288,6 +4358,28 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@rushstack/node-core-library@5.5.0': + resolution: {integrity: sha512-Cl3MYQ74Je5Y/EngMxcA3SpHjGZ/022nKbAO1aycGfQ+7eKyNCBu0oywj5B1f367GCzuHBgy+3BlVLKysHkXZw==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/rig-package@0.5.2': + resolution: {integrity: sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==} + + '@rushstack/terminal@0.13.2': + resolution: {integrity: sha512-t8i0PsGvBHmFBY8pryO3badqFlxQsm2rw3KYrzjcmVkG/WGklKg1qVkr9beAS1Oe8XWDRgj6SkoHkpNjs7aaNw==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/ts-command-line@4.22.2': + resolution: {integrity: sha512-xkvrGd6D9dPlI3I401Thc640WNsEPB1sGEmy12a2VJaPQPwhE6Ik0gEVPZJ/2G1w213eaCAdxUY1xpiTulsmpA==} + '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -4418,6 +4510,9 @@ packages: '@tybys/wasm-util@0.9.0': resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@types/argparse@1.0.38': + resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + '@types/babel__code-frame@7.0.6': resolution: {integrity: sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==} @@ -4803,6 +4898,9 @@ packages: peerDependencies: typescript: '*' + '@volar/language-core@2.2.5': + resolution: {integrity: sha512-2htyAuxRrAgETmFeUhT4XLELk3LiEcqoW/B8YUXMF6BrGWLMwIR09MFaZYvrA2UhbdAeSyeQ726HaWSWkexUcQ==} + '@volar/language-core@2.4.11': resolution: {integrity: sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==} @@ -4812,15 +4910,38 @@ packages: '@volar/language-service@2.4.11': resolution: {integrity: sha512-KIb6g8gjUkS2LzAJ9bJCLIjfsJjeRtmXlu7b2pDFGD3fNqdbC53cCAKzgWDs64xtQVKYBU13DLWbtSNFtGuMLQ==} + '@volar/source-map@2.2.5': + resolution: {integrity: sha512-wrOEIiZNf4E+PWB0AxyM4tfhkfldPsb3bxg8N6FHrxJH2ohar7aGu48e98bp3pR9HUA7P/pR9VrLmkTrgCCnWQ==} + '@volar/source-map@2.4.11': resolution: {integrity: sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==} '@volar/test-utils@2.4.11': resolution: {integrity: sha512-ogkLldPqFa/j9302Ns+nWeyTCQv8d4c7iN4t8ziq7j0XeMKWYsTAjLsx/9z0MTNrecBAcocgzEvCricASSq+Hw==} + '@volar/typescript@2.2.5': + resolution: {integrity: sha512-eSV/n75+ppfEVugMC/salZsI44nXDPAyL6+iTYCNLtiLHGJsnMv9GwiDMujrvAUj/aLQyqRJgYtXRoxop2clCw==} + '@volar/typescript@2.4.11': resolution: {integrity: sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==} + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + + '@vue/language-core@2.0.19': + resolution: {integrity: sha512-A9EGOnvb51jOvnCYoRLnMP+CcoPlbZVxI9gZXE/y2GksRWM6j/PrLEIC++pnosWTN08tFpJgxhSS//E9v/Sg+Q==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -4960,9 +5081,20 @@ packages: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + ajv-keywords@3.5.2: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: @@ -4976,6 +5108,12 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ajv@8.13.0: + resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} @@ -5857,6 +5995,9 @@ packages: commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + compare-versions@6.1.1: + resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + compatfactory@3.0.0: resolution: {integrity: sha512-WD5kF7koPwVoyKL8p0LlrmIZtilrD46sQStyzzxzTFinMKN2Dxk1hN+sddLSQU1mGIZvQfU8c+ONSghvvM40jg==} engines: {node: '>=14.9.0'} @@ -5885,6 +6026,9 @@ packages: engines: {node: '>=18'} hasBin: true + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -6135,6 +6279,10 @@ packages: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} + corser@2.0.1: + resolution: {integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==} + engines: {node: '>= 0.4.0'} + cosmiconfig@6.0.0: resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} engines: {node: '>=8'} @@ -6216,6 +6364,9 @@ packages: date-fns@3.6.0: resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} + de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -6378,6 +6529,10 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dom-element-descriptors@0.5.1: resolution: {integrity: sha512-DLayMRQ+yJaziF4JJX1FMjwjdr7wdTr1y9XvZ+NfHELfOMcYDnCHneAYXAS4FT1gLILh4V0juMZohhH1N5FsoQ==} @@ -6833,6 +6988,9 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-shims@1.10.1: + resolution: {integrity: sha512-HSSkRLkqFEyX6GrCAHrSOR5iz/QzQJRqZUF7bFJOZ4aoSw0WoSggfsTIGN2yFbF8v6xjQFhT4HGP6b+0qQZmEQ==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -7024,6 +7182,12 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + eslint@9.25.1: resolution: {integrity: sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -7046,6 +7210,10 @@ packages: resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + esprima@3.0.0: resolution: {integrity: sha512-xoBq/MIShSydNZOkjkoCEjqod963yHNXTLC40ypBhop6yPqflPz/vTinmCfSrGcywVLnSftRf6a0kJLdFdzemw==} engines: {node: '>=0.10.0'} @@ -7237,6 +7405,10 @@ packages: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -7341,6 +7513,10 @@ packages: resolution: {integrity: sha512-SRgwIMXlxkb6AUgaVjIX+jCEqdhyXu9hah7mcK+lWynjKtX73Ux1TDv71B7XyaQ+LJxkYRHl5yCL8IycAvQRUw==} engines: {node: 10.* || >= 12.*} + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -7597,6 +7773,10 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -7794,6 +7974,10 @@ packages: resolution: {integrity: sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==} engines: {node: ^18.17.0 || >=20.5.0} + html-encoding-sniffer@3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} + html-encoding-sniffer@4.0.0: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} @@ -7843,6 +8027,11 @@ packages: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} + http-server@14.1.1: + resolution: {integrity: sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==} + engines: {node: '>=12'} + hasBin: true + http2-wrapper@2.2.1: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} @@ -7924,6 +8113,10 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + import-local@3.2.0: resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} engines: {node: '>=8'} @@ -8107,6 +8300,10 @@ packages: resolution: {integrity: sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==} engines: {node: '>=12'} + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -8389,6 +8586,9 @@ packages: '@glint/template': '*' ember-source: '>= 6.4.0-alpha.3' + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + ky@1.8.1: resolution: {integrity: sha512-7Bp3TpsE+L+TARSnnDpk3xg8Idi8RwSLdj6CMbNWoOARIrGrbuLGusV0dYwbZOm4bB3jHNxSw8Wk/ByDqJEnDw==} engines: {node: '>=18'} @@ -8449,6 +8649,10 @@ packages: loader.js@4.7.0: resolution: {integrity: sha512-9M2KvGT6duzGMgkOcTkWb+PR/Q2Oe54df/tLgHGVmFpAmtqJ553xJh6N63iFYI2yjo2PeJXbS5skHi/QpJq4vA==} + local-pkg@0.5.1: + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} + engines: {node: '>=14'} + locate-path@2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} @@ -8916,6 +9120,9 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + minimatch@3.0.8: + resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -9014,6 +9221,9 @@ packages: resolution: {integrity: sha512-IXnMcJ6ZyTuhRmJSjzvHSRhlVPiN9Jwc6e59V0bEJ0ba6OBeX2L0E+mRN1QseeOF4mM+F1Rit6Nh7o+rl2Yn/A==} engines: {node: '>0.9'} + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + mocha@10.8.2: resolution: {integrity: sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==} engines: {node: '>= 14.0.0'} @@ -9033,6 +9243,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + mustache@4.2.0: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true @@ -9294,6 +9507,10 @@ packages: onp@2.0.4: resolution: {integrity: sha512-GQD7jcdjF8mUto+St3mRGl6M/5zB00a54kiiOS2zuT15wbwol6zP42pMQf6Qb2op82kZpyjVhjzDNei+CS4mgQ==} + opener@1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -9585,6 +9802,9 @@ packages: pkg-entry-points@1.1.1: resolution: {integrity: sha512-BhZa7iaPmB4b3vKIACoppyUoYn8/sFs17VJJtzrzPZvEnN2nqrgg911tdL65lA2m1ml6UI3iPeYbZQ4VXpn1mA==} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + pkg-up@2.0.0: resolution: {integrity: sha512-fjAPuiws93rm7mPUu21RdBnkeZNrbfCFCwfAhPWY+rR3zG0ubpe5cEReHOw5fIbfmsxEV/g2kSxGTATY3Bpnwg==} engines: {node: '>=4'} @@ -10375,6 +10595,9 @@ packages: resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==} engines: {node: '>= 10.13.0'} + secure-compare@3.0.1: + resolution: {integrity: sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==} + selenium-webdriver@4.31.0: resolution: {integrity: sha512-0MWEwypM0+c1NnZ87UEMxZdwphKoaK2UJ2qXzKWrJiM0gazFjgNVimxlHTOO90G2cOhphZqwpqSCJy62NTEzyA==} engines: {node: '>= 18.20.5'} @@ -10387,6 +10610,11 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + semver@7.7.1: resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} @@ -10663,6 +10891,10 @@ packages: strict-event-emitter-types@2.0.0: resolution: {integrity: sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA==} + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + string-template@0.2.1: resolution: {integrity: sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==} @@ -10863,6 +11095,9 @@ packages: engines: {node: '>= 7.*'} hasBin: true + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + textextensions@2.6.0: resolution: {integrity: sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==} engines: {node: '>=0.8'} @@ -11084,6 +11319,10 @@ packages: resolution: {integrity: sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==} engines: {node: '>=8'} + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -11122,6 +11361,11 @@ packages: typescript-memoize@1.1.1: resolution: {integrity: sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA==} + typescript@5.4.2: + resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} + engines: {node: '>=14.17'} + hasBin: true + typescript@5.7.3: resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} @@ -11137,6 +11381,9 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + uglify-js@3.19.3: resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} @@ -11185,6 +11432,10 @@ packages: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} engines: {node: '>=0.10.0'} + union@0.5.0: + resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==} + engines: {node: '>= 0.8.0'} + unique-filename@1.1.1: resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} @@ -11286,6 +11537,9 @@ packages: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} deprecated: Please see https://github.com/lydell/urix#deprecated + url-join@4.0.1: + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + url-parse-lax@3.0.0: resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} engines: {node: '>=4'} @@ -11362,6 +11616,16 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true + vite-plugin-dts@4.0.0-beta.1: + resolution: {integrity: sha512-4ILGS8ClSYiNMtSRo4YxJ+JeC2P4uZgo9cQ7Yav+CLSxcoWBffjJ6B1QKcn5BhniXJQkb1j6Bi0MCj5C5+i4Sg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + typescript: '*' + vite: '*' + peerDependenciesMeta: + vite: + optional: true + vite-plugin-node-polyfills@0.23.0: resolution: {integrity: sha512-4n+Ys+2bKHQohPBKigFlndwWQ5fFKwaGY6muNDMTb0fSQLyBzS+jjUNRZG9sKF0S/Go4ApG6LFnUGopjkILg3w==} peerDependencies: @@ -11503,6 +11767,15 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + vue-template-compiler@2.7.16: + resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} + + vue-tsc@2.0.19: + resolution: {integrity: sha512-JWay5Zt2/871iodGF72cELIbcAoPyhJxq56mPPh+M2K7IwI688FMrFKc/+DvB05wDWEuCPexQJ6L10zSwzzapg==} + hasBin: true + peerDependencies: + typescript: '*' + w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} @@ -11598,6 +11871,10 @@ packages: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} + whatwg-encoding@2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} + whatwg-encoding@3.1.1: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} @@ -11872,6 +12149,14 @@ snapshots: eslint-visitor-keys: 2.1.0 semver: 6.3.1 + '@babel/eslint-parser@7.27.1(@babel/core@7.27.1)(eslint@8.57.1)': + dependencies: + '@babel/core': 7.27.1 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 8.57.1 + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 + '@babel/generator@7.27.1': dependencies: '@babel/parser': 7.27.1 @@ -13483,6 +13768,11 @@ snapshots: '@esbuild/win32-x64@0.25.3': optional: true + '@eslint-community/eslint-utils@4.6.1(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.6.1(eslint@9.25.1(jiti@1.21.7))': dependencies: eslint: 9.25.1(jiti@1.21.7) @@ -13504,6 +13794,20 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.4.0(supports-color@8.1.1) + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 @@ -13518,6 +13822,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/js@8.57.1': {} + '@eslint/js@9.25.1': {} '@eslint/object-schema@2.1.6': {} @@ -13809,8 +14115,18 @@ snapshots: '@humanfs/core': 0.19.1 '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.0(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + '@humanwhocodes/module-importer@1.0.1': {} + '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.3.1': {} '@humanwhocodes/retry@0.4.2': {} @@ -13996,6 +14312,41 @@ snapshots: '@mdn/browser-compat-data@5.7.6': {} + '@microsoft/api-extractor-model@7.29.3(@types/node@22.15.3)': + dependencies: + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.5.0(@types/node@22.15.3) + transitivePeerDependencies: + - '@types/node' + + '@microsoft/api-extractor@7.47.2(@types/node@22.15.3)': + dependencies: + '@microsoft/api-extractor-model': 7.29.3(@types/node@22.15.3) + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.5.0(@types/node@22.15.3) + '@rushstack/rig-package': 0.5.2 + '@rushstack/terminal': 0.13.2(@types/node@22.15.3) + '@rushstack/ts-command-line': 4.22.2(@types/node@22.15.3) + lodash: 4.17.21 + minimatch: 3.0.8 + resolve: 1.22.10 + semver: 7.5.4 + source-map: 0.6.1 + typescript: 5.4.2 + transitivePeerDependencies: + - '@types/node' + + '@microsoft/tsdoc-config@0.17.1': + dependencies: + '@microsoft/tsdoc': 0.15.1 + ajv: 8.12.0 + jju: 1.4.0 + resolve: 1.22.10 + + '@microsoft/tsdoc@0.15.1': {} + '@napi-rs/wasm-runtime@0.2.9': dependencies: '@emnapi/core': 1.4.3 @@ -14212,6 +14563,32 @@ snapshots: - supports-color - typescript + '@nullvoxpopuli/eslint-configs@5.1.2(5a544f30e362879c1d9f9b7755520aaa)': + dependencies: + '@babel/core': 7.27.1 + '@eslint/js': 9.25.1 + '@typescript-eslint/parser': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + cosmiconfig: 9.0.0(typescript@5.7.3) + ember-eslint: 0.2.1(b9bd9fcc85fee7beefa9215b72c96265) + eslint: 8.57.1 + eslint-import-resolver-typescript: 3.10.1(9177c118ade7ac685e6c2e8bd65ccd80) + eslint-plugin-decorator-position: 6.0.0(f64bfd7f04932902a13ede02b08c0149) + eslint-plugin-import: 2.31.0(428609adc6f036c5df6afa022b08f729) + eslint-plugin-json: 4.0.1 + eslint-plugin-n: 17.17.0(eslint@8.57.1) + eslint-plugin-simple-import-sort: 12.1.1(eslint@8.57.1) + globals: 16.0.0 + prettier-plugin-ember-template-tag: 2.0.4(prettier@3.5.3) + optionalDependencies: + '@babel/eslint-parser': 7.27.1(@babel/core@7.27.1)(eslint@8.57.1) + '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.1) + prettier: 3.5.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + - typescript + '@octokit/auth-token@5.1.2': {} '@octokit/core@6.1.5': @@ -14437,6 +14814,40 @@ snapshots: '@rtsao/scc@1.1.0': {} + '@rushstack/node-core-library@5.5.0(@types/node@22.15.3)': + dependencies: + ajv: 8.13.0 + ajv-draft-04: 1.0.0(ajv@8.13.0) + ajv-formats: 3.0.1 + fs-extra: 7.0.1 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.10 + semver: 7.5.4 + optionalDependencies: + '@types/node': 22.15.3 + + '@rushstack/rig-package@0.5.2': + dependencies: + resolve: 1.22.10 + strip-json-comments: 3.1.1 + + '@rushstack/terminal@0.13.2(@types/node@22.15.3)': + dependencies: + '@rushstack/node-core-library': 5.5.0(@types/node@22.15.3) + supports-color: 8.1.1 + optionalDependencies: + '@types/node': 22.15.3 + + '@rushstack/ts-command-line@4.22.2(@types/node@22.15.3)': + dependencies: + '@rushstack/terminal': 0.13.2(@types/node@22.15.3) + '@types/argparse': 1.0.38 + argparse: 1.0.10 + string-argv: 0.3.2 + transitivePeerDependencies: + - '@types/node' + '@sec-ant/readable-stream@0.4.1': {} '@shikijs/core@1.29.2': @@ -14594,6 +15005,8 @@ snapshots: tslib: 2.8.1 optional: true + '@types/argparse@1.0.38': {} + '@types/babel__code-frame@7.0.6': {} '@types/babel__core@7.20.5': @@ -14838,6 +15251,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@8.31.1(e5438269e90a2b76e391758ddf2fe932)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.31.1 + '@typescript-eslint/type-utils': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/utils': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.31.1 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.31.1(54d0da154413141e84f5f122231c9cc2)': dependencies: '@typescript-eslint/scope-manager': 8.31.1 @@ -14850,6 +15280,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.31.1(eslint@8.57.1)(typescript@5.7.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.31.1 + '@typescript-eslint/types': 8.31.1 + '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.31.1 + debug: 4.4.0(supports-color@8.1.1) + eslint: 8.57.1 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@8.31.1': dependencies: '@typescript-eslint/types': 8.31.1 @@ -14866,6 +15308,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.31.1(eslint@8.57.1)(typescript@5.7.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.7.3) + '@typescript-eslint/utils': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + debug: 4.4.0(supports-color@8.1.1) + eslint: 8.57.1 + ts-api-utils: 2.1.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@8.31.1': {} '@typescript-eslint/typescript-estree@8.31.1(typescript@5.7.3)': @@ -14893,6 +15346,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.31.1(eslint@8.57.1)(typescript@5.7.3)': + dependencies: + '@eslint-community/eslint-utils': 4.6.1(eslint@8.57.1) + '@typescript-eslint/scope-manager': 8.31.1 + '@typescript-eslint/types': 8.31.1 + '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.7.3) + eslint: 8.57.1 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.31.1': dependencies: '@typescript-eslint/types': 8.31.1 @@ -15021,6 +15485,10 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 + '@volar/language-core@2.2.5': + dependencies: + '@volar/source-map': 2.2.5 + '@volar/language-core@2.4.11': dependencies: '@volar/source-map': 2.4.11 @@ -15044,6 +15512,10 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 + '@volar/source-map@2.2.5': + dependencies: + muggle-string: 0.4.1 + '@volar/source-map@2.4.11': {} '@volar/test-utils@2.4.11': @@ -15053,13 +15525,45 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 + '@volar/typescript@2.2.5': + dependencies: + '@volar/language-core': 2.2.5 + path-browserify: 1.0.1 + '@volar/typescript@2.4.11': dependencies: '@volar/language-core': 2.4.11 path-browserify: 1.0.1 vscode-uri: 3.1.0 - '@webassemblyjs/ast@1.14.1': + '@vue/compiler-core@3.5.13': + dependencies: + '@babel/parser': 7.27.1 + '@vue/shared': 3.5.13 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.13': + dependencies: + '@vue/compiler-core': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/language-core@2.0.19(typescript@5.7.3)': + dependencies: + '@volar/language-core': 2.2.5 + '@vue/compiler-dom': 3.5.13 + '@vue/shared': 3.5.13 + computeds: 0.0.1 + minimatch: 9.0.5 + path-browserify: 1.0.1 + vue-template-compiler: 2.7.16 + optionalDependencies: + typescript: 5.7.3 + + '@vue/shared@3.5.13': {} + + '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 @@ -15204,10 +15708,18 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 + ajv-draft-04@1.0.0(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 + ajv-formats@2.1.1: dependencies: ajv: 8.17.1 + ajv-formats@3.0.1: + dependencies: + ajv: 8.17.1 + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 @@ -15224,6 +15736,20 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.12.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ajv@8.13.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -16436,6 +16962,8 @@ snapshots: commondir@1.0.1: {} + compare-versions@6.1.1: {} + compatfactory@3.0.0(typescript@5.7.3): dependencies: helpertypes: 0.0.19 @@ -16473,6 +17001,8 @@ snapshots: tree-kill: 1.2.2 yargs: 17.7.2 + confbox@0.1.8: {} + config-chain@1.1.13: dependencies: ini: 1.3.8 @@ -16564,6 +17094,8 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 + corser@2.0.1: {} + cosmiconfig@6.0.0: dependencies: '@types/parse-json': 4.0.2 @@ -16679,6 +17211,8 @@ snapshots: date-fns@3.6.0: {} + de-indent@1.0.2: {} + debug@2.6.9: dependencies: ms: 2.0.0 @@ -16804,6 +17338,10 @@ snapshots: dependencies: esutils: 2.0.3 + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + dom-element-descriptors@0.5.1: {} dom-serializer@0.2.2: @@ -17337,6 +17875,21 @@ snapshots: transitivePeerDependencies: - supports-color + ember-eslint-parser@0.5.9(5d3c4cfd6892705fbcab567475c9aad1): + dependencies: + '@babel/core': 7.27.1 + '@babel/eslint-parser': 7.27.1(@babel/core@7.27.1)(eslint@8.57.1) + '@glimmer/syntax': 0.92.3 + content-tag: 2.0.3 + eslint-scope: 7.2.2 + html-tags: 3.3.1 + mathml-tag-names: 2.1.3 + svg-tags: 1.0.0 + optionalDependencies: + '@typescript-eslint/parser': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + transitivePeerDependencies: + - eslint + ember-eslint-parser@0.5.9(a535be2b3684a674ff41516a3018459b): dependencies: '@babel/core': 7.27.1 @@ -17352,6 +17905,23 @@ snapshots: transitivePeerDependencies: - eslint + ember-eslint@0.2.1(b9bd9fcc85fee7beefa9215b72c96265): + dependencies: + '@babel/eslint-parser': 7.27.1(@babel/core@7.27.1)(eslint@8.57.1) + '@eslint/js': 9.25.1 + eslint-config-prettier: 10.1.2(eslint@8.57.1) + eslint-plugin-ember: 12.5.0(5d3c4cfd6892705fbcab567475c9aad1) + eslint-plugin-n: 17.17.0(eslint@8.57.1) + eslint-plugin-qunit: 8.1.2(eslint@8.57.1) + globals: 15.15.0 + typescript-eslint: 8.31.1(eslint@8.57.1)(typescript@5.7.3) + transitivePeerDependencies: + - '@babel/core' + - '@typescript-eslint/parser' + - eslint + - supports-color + - typescript + ember-eslint@0.2.1(c1bcb6d22fccf46caa4c33fa572a5552): dependencies: '@babel/eslint-parser': 7.27.1(4a43aebe8aa03544380dbd584f92ba52) @@ -17783,6 +18353,8 @@ snapshots: es-module-lexer@1.7.0: {} + es-module-shims@1.10.1: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -17876,11 +18448,20 @@ snapshots: escape-string-regexp@5.0.0: {} + eslint-compat-utils@0.5.1(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + semver: 7.7.1 + eslint-compat-utils@0.5.1(eslint@9.25.1(jiti@1.21.7)): dependencies: eslint: 9.25.1(jiti@1.21.7) semver: 7.7.1 + eslint-config-prettier@10.1.2(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + eslint-config-prettier@10.1.2(eslint@9.25.1(jiti@1.21.7)): dependencies: eslint: 9.25.1(jiti@1.21.7) @@ -17895,6 +18476,21 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-import-resolver-typescript@3.10.1(9177c118ade7ac685e6c2e8bd65ccd80): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.0(supports-color@8.1.1) + eslint: 8.57.1 + get-tsconfig: 4.10.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.13 + unrs-resolver: 1.7.2 + optionalDependencies: + eslint-plugin-import: 2.31.0(428609adc6f036c5df6afa022b08f729) + transitivePeerDependencies: + - supports-color + eslint-import-resolver-typescript@3.10.1(ef28e62e366c2199181025423683258b): dependencies: '@nolyfill/is-core-module': 1.0.39 @@ -17910,6 +18506,17 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-module-utils@2.12.0(6b344c9e413b69f749699da765e3a196): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(9177c118ade7ac685e6c2e8bd65ccd80) + transitivePeerDependencies: + - supports-color + eslint-module-utils@2.12.0(fc6dd6a4b8161574b4fa726f7fb74ca6): dependencies: debug: 3.2.7 @@ -17934,6 +18541,37 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-plugin-decorator-position@6.0.0(f64bfd7f04932902a13ede02b08c0149): + dependencies: + '@babel/core': 7.27.1 + '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.1) + '@ember-data/rfc395-data': 0.0.4 + ember-rfc176-data: 0.3.18 + eslint: 8.57.1 + snake-case: 3.0.4 + optionalDependencies: + '@babel/eslint-parser': 7.27.1(@babel/core@7.27.1)(eslint@8.57.1) + transitivePeerDependencies: + - supports-color + + eslint-plugin-ember@12.5.0(5d3c4cfd6892705fbcab567475c9aad1): + dependencies: + '@ember-data/rfc395-data': 0.0.4 + css-tree: 3.1.0 + ember-eslint-parser: 0.5.9(5d3c4cfd6892705fbcab567475c9aad1) + ember-rfc176-data: 0.3.18 + eslint: 8.57.1 + eslint-utils: 3.0.0(eslint@8.57.1) + estraverse: 5.3.0 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + requireindex: 1.2.0 + snake-case: 3.0.4 + optionalDependencies: + '@typescript-eslint/parser': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + transitivePeerDependencies: + - '@babel/core' + eslint-plugin-ember@12.5.0(a535be2b3684a674ff41516a3018459b): dependencies: '@ember-data/rfc395-data': 0.0.4 @@ -17952,6 +18590,13 @@ snapshots: transitivePeerDependencies: - '@babel/core' + eslint-plugin-es-x@7.8.0(eslint@8.57.1): + dependencies: + '@eslint-community/eslint-utils': 4.6.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 + eslint: 8.57.1 + eslint-compat-utils: 0.5.1(eslint@8.57.1) + eslint-plugin-es-x@7.8.0(eslint@9.25.1(jiti@1.21.7)): dependencies: '@eslint-community/eslint-utils': 4.6.1(eslint@9.25.1(jiti@1.21.7)) @@ -17959,6 +18604,35 @@ snapshots: eslint: 9.25.1(jiti@1.21.7) eslint-compat-utils: 0.5.1(eslint@9.25.1(jiti@1.21.7)) + eslint-plugin-import@2.31.0(428609adc6f036c5df6afa022b08f729): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: '@nolyfill/array-includes@1.0.44' + array.prototype.findlastindex: '@nolyfill/array.prototype.findlastindex@1.0.44' + array.prototype.flat: '@nolyfill/array.prototype.flat@1.0.44' + array.prototype.flatmap: '@nolyfill/array.prototype.flatmap@1.0.44' + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(6b344c9e413b69f749699da765e3a196) + hasown: '@nolyfill/hasown@1.0.44' + is-core-module: '@nolyfill/is-core-module@1.0.39' + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: '@nolyfill/object.fromentries@1.0.44' + object.groupby: '@nolyfill/object.groupby@1.0.44' + object.values: '@nolyfill/object.values@1.0.44' + semver: 6.3.1 + string.prototype.trimend: '@nolyfill/string.prototype.trimend@1.0.44' + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + eslint-plugin-import@2.31.0(e88e4ed15243864f8818c186c313aaf2): dependencies: '@rtsao/scc': 1.1.0 @@ -17993,6 +18667,18 @@ snapshots: lodash: 4.17.21 vscode-json-languageservice: 4.2.1 + eslint-plugin-n@17.17.0(eslint@8.57.1): + dependencies: + '@eslint-community/eslint-utils': 4.6.1(eslint@8.57.1) + enhanced-resolve: 5.18.1 + eslint: 8.57.1 + eslint-plugin-es-x: 7.8.0(eslint@8.57.1) + get-tsconfig: 4.10.0 + globals: 15.15.0 + ignore: 5.3.2 + minimatch: 9.0.5 + semver: 7.7.1 + eslint-plugin-n@17.17.0(eslint@9.25.1(jiti@1.21.7)): dependencies: '@eslint-community/eslint-utils': 4.6.1(eslint@9.25.1(jiti@1.21.7)) @@ -18005,6 +18691,13 @@ snapshots: minimatch: 9.0.5 semver: 7.7.1 + eslint-plugin-qunit@8.1.2(eslint@8.57.1): + dependencies: + eslint-utils: 3.0.0(eslint@8.57.1) + requireindex: 1.2.0 + transitivePeerDependencies: + - eslint + eslint-plugin-qunit@8.1.2(eslint@9.25.1(jiti@1.21.7)): dependencies: eslint-utils: 3.0.0(eslint@9.25.1(jiti@1.21.7)) @@ -18012,6 +18705,10 @@ snapshots: transitivePeerDependencies: - eslint + eslint-plugin-simple-import-sort@12.1.1(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + eslint-plugin-simple-import-sort@12.1.1(eslint@9.25.1(jiti@1.21.7)): dependencies: eslint: 9.25.1(jiti@1.21.7) @@ -18031,6 +18728,11 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 + eslint-utils@3.0.0(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 2.1.0 + eslint-utils@3.0.0(eslint@9.25.1(jiti@1.21.7)): dependencies: eslint: 9.25.1(jiti@1.21.7) @@ -18042,6 +18744,49 @@ snapshots: eslint-visitor-keys@4.2.0: {} + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.6.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.3.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0(supports-color@8.1.1) + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + eslint@9.25.1(jiti@1.21.7): dependencies: '@eslint-community/eslint-utils': 4.6.1(eslint@9.25.1(jiti@1.21.7)) @@ -18101,6 +18846,12 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 4.2.0 + espree@9.6.1: + dependencies: + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) + eslint-visitor-keys: 3.4.3 + esprima@3.0.0: {} esprima@4.0.1: {} @@ -18369,6 +19120,10 @@ snapshots: dependencies: is-unicode-supported: 2.1.0 + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -18528,6 +19283,12 @@ snapshots: matcher-collection: 2.0.1 walk-sync: 2.2.0 + flat-cache@3.2.0: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + rimraf: 3.0.2 + flat-cache@4.0.1: dependencies: flatted: 3.3.3 @@ -18843,6 +19604,10 @@ snapshots: globals@11.12.0: {} + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + globals@14.0.0: {} globals@15.15.0: {} @@ -19137,6 +19902,10 @@ snapshots: dependencies: lru-cache: 10.4.3 + html-encoding-sniffer@3.0.0: + dependencies: + whatwg-encoding: 2.0.0 + html-encoding-sniffer@4.0.0: dependencies: whatwg-encoding: 3.1.1 @@ -19207,6 +19976,25 @@ snapshots: transitivePeerDependencies: - debug + http-server@14.1.1: + dependencies: + basic-auth: 2.0.1 + chalk: 4.1.2 + corser: 2.0.1 + he: 1.2.0 + html-encoding-sniffer: 3.0.0 + http-proxy: 1.18.1 + mime: 1.6.0 + minimist: 1.2.8 + opener: 1.5.2 + portfinder: 1.0.37 + secure-compare: 3.0.1 + union: 0.5.0 + url-join: 4.0.1 + transitivePeerDependencies: + - debug + - supports-color + http2-wrapper@2.2.1: dependencies: quick-lru: 5.1.1 @@ -19282,6 +20070,8 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-lazy@4.0.0: {} + import-local@3.2.0: dependencies: pkg-dir: 4.2.0 @@ -19458,6 +20248,8 @@ snapshots: is-obj@3.0.0: {} + is-path-inside@3.0.3: {} + is-plain-obj@2.1.0: {} is-plain-obj@4.1.0: {} @@ -19751,6 +20543,8 @@ snapshots: - supports-color - typescript + kolorist@1.8.0: {} + ky@1.8.1: {} language-subtag-registry@0.3.23: {} @@ -19809,6 +20603,11 @@ snapshots: loader.js@4.7.0: {} + local-pkg@0.5.1: + dependencies: + mlly: 1.7.4 + pkg-types: 1.3.1 + locate-path@2.0.0: dependencies: p-locate: 2.0.0 @@ -20475,6 +21274,10 @@ snapshots: minimalistic-crypto-utils@1.0.1: {} + minimatch@3.0.8: + dependencies: + brace-expansion: 1.1.11 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -20573,6 +21376,13 @@ snapshots: mktemp@0.4.0: {} + mlly@1.7.4: + dependencies: + acorn: 8.14.1 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + mocha@10.8.2: dependencies: ansi-colors: 4.1.3 @@ -20612,6 +21422,8 @@ snapshots: ms@2.1.3: {} + muggle-string@0.4.1: {} + mustache@4.2.0: {} mute-stream@0.0.7: {} @@ -20913,6 +21725,8 @@ snapshots: onp@2.0.4: {} + opener@1.5.2: {} + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -21203,6 +22017,12 @@ snapshots: pkg-entry-points@1.1.1: {} + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.3 + pkg-up@2.0.0: dependencies: find-up: 2.1.0 @@ -22018,6 +22838,8 @@ snapshots: ajv-formats: 2.1.1 ajv-keywords: 5.1.0(ajv@8.17.1) + secure-compare@3.0.1: {} + selenium-webdriver@4.31.0: dependencies: '@bazel/runfiles': 6.3.1 @@ -22032,6 +22854,10 @@ snapshots: semver@6.3.1: {} + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 + semver@7.7.1: {} send@0.18.0: @@ -22392,6 +23218,8 @@ snapshots: strict-event-emitter-types@2.0.0: {} + string-argv@0.3.2: {} + string-template@0.2.1: {} string-width@2.1.1: @@ -22767,6 +23595,8 @@ snapshots: - walrus - whiskers + text-table@0.2.0: {} + textextensions@2.6.0: {} thenify-all@1.6.0: @@ -22998,6 +23828,8 @@ snapshots: type-fest@0.11.0: {} + type-fest@0.20.2: {} + type-fest@0.21.3: {} type-fest@4.40.1: {} @@ -23036,8 +23868,20 @@ snapshots: transitivePeerDependencies: - supports-color + typescript-eslint@8.31.1(eslint@8.57.1)(typescript@5.7.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.31.1(e5438269e90a2b76e391758ddf2fe932) + '@typescript-eslint/parser': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/utils': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + eslint: 8.57.1 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + typescript-memoize@1.1.1: {} + typescript@5.4.2: {} + typescript@5.7.3: {} ua-parser-js@1.0.40: {} @@ -23046,6 +23890,8 @@ snapshots: uc.micro@2.1.0: {} + ufo@1.6.1: {} + uglify-js@3.19.3: optional: true @@ -23100,6 +23946,10 @@ snapshots: is-extendable: 0.1.1 set-value: 2.0.1 + union@0.5.0: + dependencies: + qs: 6.14.0 + unique-filename@1.1.1: dependencies: unique-slug: 2.0.2 @@ -23230,6 +24080,8 @@ snapshots: urix@0.1.0: {} + url-join@4.0.1: {} + url-parse-lax@3.0.0: dependencies: prepend-http: 2.0.0 @@ -23327,6 +24179,26 @@ snapshots: - tsx - yaml + vite-plugin-dts@4.0.0-beta.1(05ddd15e807b28496c406b941ebaa662): + dependencies: + '@microsoft/api-extractor': 7.47.2(@types/node@22.15.3) + '@rollup/pluginutils': 5.1.4(rollup@4.40.1) + '@volar/typescript': 2.4.11 + '@vue/language-core': 2.0.19(typescript@5.7.3) + compare-versions: 6.1.1 + debug: 4.4.0(supports-color@8.1.1) + kolorist: 1.8.0 + local-pkg: 0.5.1 + magic-string: 0.30.17 + typescript: 5.7.3 + vue-tsc: 2.0.19(typescript@5.7.3) + optionalDependencies: + vite: 5.4.19(@types/node@22.15.3)(terser@5.39.0) + transitivePeerDependencies: + - '@types/node' + - rollup + - supports-color + vite-plugin-node-polyfills@0.23.0(31546948ebf91a14ce3f9df2a33bf7d7): dependencies: '@rollup/plugin-inject': 5.0.5(rollup@4.40.1) @@ -23441,6 +24313,18 @@ snapshots: vscode-uri@3.1.0: {} + vue-template-compiler@2.7.16: + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + vue-tsc@2.0.19(typescript@5.7.3): + dependencies: + '@volar/typescript': 2.2.5 + '@vue/language-core': 2.0.19(typescript@5.7.3) + semver: 7.7.1 + typescript: 5.7.3 + w3c-keyname@2.2.8: {} w3c-xmlserializer@5.0.0: @@ -23605,6 +24489,10 @@ snapshots: websocket-extensions@0.1.4: {} + whatwg-encoding@2.0.0: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding@3.1.1: dependencies: iconv-lite: 0.6.3 From 6ef63c09cac1929ee85502243d3b83ebbfd45ff7 Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Mon, 5 May 2025 22:44:33 -0400 Subject: [PATCH 003/222] Hmm --- packages/repl-sdk/package.json | 10 +- packages/repl-sdk/src/index.js | 4 +- pnpm-lock.yaml | 1443 ++++++++++++++++++++++++-------- 3 files changed, 1097 insertions(+), 360 deletions(-) diff --git a/packages/repl-sdk/package.json b/packages/repl-sdk/package.json index da34d9902..9d3a87bbc 100644 --- a/packages/repl-sdk/package.json +++ b/packages/repl-sdk/package.json @@ -43,15 +43,15 @@ "@babel/plugin-proposal-decorators": "^7.23.9", "@nullvoxpopuli/eslint-configs": "^4.0.0", "@tsconfig/ember": "^3.0.7", - "eslint": "^8.55.0", + "eslint": "^9.26.0", "prettier": "^3.2.5", - "publint": "^0.2.6", + "publint": "^0.3.12", "typescript": "^5.4.5", - "vite": "^5.3.5", - "vite-plugin-dts": "4.0.0-beta.1" + "vite": "^6.3.5", + "vite-plugin-dts": "4.5.3" }, "dependencies": { - "es-module-shims": "^1.10.0" + "es-module-shims": "^2.4.1" }, "volta": { "extends": "../../package.json" diff --git a/packages/repl-sdk/src/index.js b/packages/repl-sdk/src/index.js index 34a25bf4c..c5e5c5329 100644 --- a/packages/repl-sdk/src/index.js +++ b/packages/repl-sdk/src/index.js @@ -133,7 +133,7 @@ export class Compiler { const source = await response.text(); - console.log({ source, url, newUrl }); + // console.log({ source, url, newUrl }); return new Response(new Blob([source], { type: 'application/javascript' })); } @@ -146,7 +146,7 @@ export class Compiler { // const transformed = tsCompile(source); // - console.log({ source, url }); + // console.log({ source, url }); return new Response(new Blob([source], { type: 'application/javascript' })); }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9385b5eca..d9899cbf2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,10 +47,10 @@ importers: version: 7.27.1 '@glint/core': specifier: 1.4.1-unstable.0e0d936 - version: 1.4.1-unstable.0e0d936(typescript@5.7.3) + version: 1.4.1-unstable.0e0d936(typescript@5.8.2) '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(c4c5d7d3241ad347dd4eb720e9857ce6) concurrently: specifier: ^9.1.2 version: 9.1.2 @@ -986,7 +986,7 @@ importers: version: 7.27.1 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(c4c5d7d3241ad347dd4eb720e9857ce6) autoprefixer: specifier: ^10.4.20 version: 10.4.21(postcss@8.5.3) @@ -1513,36 +1513,36 @@ importers: packages/repl-sdk: dependencies: es-module-shims: - specifier: ^1.10.0 - version: 1.10.1 + specifier: ^2.4.1 + version: 2.4.1 devDependencies: '@babel/plugin-proposal-decorators': specifier: ^7.23.9 version: 7.27.1(@babel/core@7.27.1) '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(5a544f30e362879c1d9f9b7755520aaa) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) '@tsconfig/ember': specifier: ^3.0.7 version: 3.0.10 eslint: - specifier: ^8.55.0 - version: 8.57.1 + specifier: ^9.26.0 + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.2.5 version: 3.5.3 publint: - specifier: ^0.2.6 - version: 0.2.12 + specifier: ^0.3.12 + version: 0.3.12 typescript: specifier: ^5.4.5 version: 5.7.3 vite: - specifier: ^5.3.5 - version: 5.4.19(@types/node@22.15.3)(terser@5.39.0) + specifier: ^6.3.5 + version: 6.3.5(f29614dea4066c5dfbbb8cdc00ed66a1) vite-plugin-dts: - specifier: 4.0.0-beta.1 - version: 4.0.0-beta.1(05ddd15e807b28496c406b941ebaa662) + specifier: 4.5.3 + version: 4.5.3(7b87ff620be75c66e361b8dfb39bab9c) packages/syntax/-infra: dependencies: @@ -3251,6 +3251,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.25.4': + resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} @@ -3263,6 +3269,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.25.4': + resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} @@ -3275,6 +3287,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.25.4': + resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} @@ -3287,6 +3305,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.25.4': + resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} @@ -3299,6 +3323,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.25.4': + resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} @@ -3311,6 +3341,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.25.4': + resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} @@ -3323,6 +3359,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.25.4': + resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} @@ -3335,6 +3377,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.4': + resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} @@ -3347,6 +3395,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.25.4': + resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} @@ -3359,6 +3413,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.25.4': + resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} @@ -3371,6 +3431,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.25.4': + resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} @@ -3383,6 +3449,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.25.4': + resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} @@ -3395,6 +3467,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.25.4': + resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} @@ -3407,6 +3485,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.25.4': + resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} @@ -3419,6 +3503,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.25.4': + resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} @@ -3431,6 +3521,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.25.4': + resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} @@ -3443,12 +3539,24 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.4': + resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-arm64@0.25.3': resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.25.4': + resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} @@ -3461,12 +3569,24 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.4': + resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.25.3': resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.25.4': + resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} @@ -3479,6 +3599,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.4': + resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} @@ -3491,6 +3617,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.25.4': + resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} @@ -3503,6 +3635,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.25.4': + resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} @@ -3515,6 +3653,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.25.4': + resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} @@ -3527,12 +3671,24 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.4': + resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.6.1': resolution: {integrity: sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.7.0': + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -3549,22 +3705,18 @@ packages: resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@9.25.1': resolution: {integrity: sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@9.26.0': + resolution: {integrity: sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3782,19 +3934,10 @@ packages: resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} engines: {node: '>=18.18.0'} - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - '@humanwhocodes/retry@0.3.1': resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} @@ -3916,11 +4059,11 @@ packages: '@mdn/browser-compat-data@5.7.6': resolution: {integrity: sha512-7xdrMX0Wk7grrTZQwAoy1GkvPMFoizStUoL+VmtUkAxegbCCec+3FKwOM6yc/uGU5+BEczQHXAlWiqvM8JeENg==} - '@microsoft/api-extractor-model@7.29.3': - resolution: {integrity: sha512-kEWjLr2ygL3ku9EGyjeTnL2S5IxyH9NaF1k1UoI0Nzwr4xEJBSWCVsWuF2+0lPUrRPA6mTY95fR264SJ5ETKQA==} + '@microsoft/api-extractor-model@7.30.6': + resolution: {integrity: sha512-znmFn69wf/AIrwHya3fxX6uB5etSIn6vg4Q4RB/tb5VDDs1rqREc+AvMC/p19MUN13CZ7+V/8pkYPTj7q8tftg==} - '@microsoft/api-extractor@7.47.2': - resolution: {integrity: sha512-YWE2HGrSTZaPPSr7xiNizSuViZpC7Jsa7+DwRW5rYVgrMXNbfX/PpBOoSkl5uaz9I2sv2JKLJ75kVNt64BvS3g==} + '@microsoft/api-extractor@7.52.7': + resolution: {integrity: sha512-YLdPS644MfbLJt4hArP1WcldcaEUBh9wnFjcLEcQnVG0AMznbLh2sdE0F5Wr+w6+Lyp5/XUPvRAg3sYGSP3GCw==} hasBin: true '@microsoft/tsdoc-config@0.17.1': @@ -3929,6 +4072,10 @@ packages: '@microsoft/tsdoc@0.15.1': resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} + '@modelcontextprotocol/sdk@1.11.0': + resolution: {integrity: sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==} + engines: {node: '>=18'} + '@napi-rs/wasm-runtime@0.2.9': resolution: {integrity: sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==} @@ -4202,6 +4349,10 @@ packages: peerDependencies: prettier: ^3.0.0 + '@publint/pack@0.1.2': + resolution: {integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==} + engines: {node: '>=18'} + '@rollup/plugin-babel@6.0.4': resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} engines: {node: '>=14.0.0'} @@ -4358,27 +4509,27 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@rushstack/node-core-library@5.5.0': - resolution: {integrity: sha512-Cl3MYQ74Je5Y/EngMxcA3SpHjGZ/022nKbAO1aycGfQ+7eKyNCBu0oywj5B1f367GCzuHBgy+3BlVLKysHkXZw==} + '@rushstack/node-core-library@5.13.1': + resolution: {integrity: sha512-5yXhzPFGEkVc9Fu92wsNJ9jlvdwz4RNb2bMso+/+TH0nMm1jDDDsOIf4l8GAkPxGuwPw5DH24RliWVfSPhlW/Q==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/rig-package@0.5.2': - resolution: {integrity: sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==} + '@rushstack/rig-package@0.5.3': + resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} - '@rushstack/terminal@0.13.2': - resolution: {integrity: sha512-t8i0PsGvBHmFBY8pryO3badqFlxQsm2rw3KYrzjcmVkG/WGklKg1qVkr9beAS1Oe8XWDRgj6SkoHkpNjs7aaNw==} + '@rushstack/terminal@0.15.3': + resolution: {integrity: sha512-DGJ0B2Vm69468kZCJkPj3AH5nN+nR9SPmC0rFHtzsS4lBQ7/dgOwtwVxYP7W9JPDMuRBkJ4KHmWKr036eJsj9g==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/ts-command-line@4.22.2': - resolution: {integrity: sha512-xkvrGd6D9dPlI3I401Thc640WNsEPB1sGEmy12a2VJaPQPwhE6Ik0gEVPZJ/2G1w213eaCAdxUY1xpiTulsmpA==} + '@rushstack/ts-command-line@5.0.1': + resolution: {integrity: sha512-bsbUucn41UXrQK7wgM8CNM/jagBytEyJqXw/umtI8d68vFm1Jwxh1OtLrlW7uGZgjCWiiPH6ooUNa1aVsuVr3Q==} '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -4898,41 +5049,44 @@ packages: peerDependencies: typescript: '*' - '@volar/language-core@2.2.5': - resolution: {integrity: sha512-2htyAuxRrAgETmFeUhT4XLELk3LiEcqoW/B8YUXMF6BrGWLMwIR09MFaZYvrA2UhbdAeSyeQ726HaWSWkexUcQ==} - '@volar/language-core@2.4.11': resolution: {integrity: sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==} + '@volar/language-core@2.4.13': + resolution: {integrity: sha512-MnQJ7eKchJx5Oz+YdbqyFUk8BN6jasdJv31n/7r6/WwlOOv7qzvot6B66887l2ST3bUW4Mewml54euzpJWA6bg==} + '@volar/language-server@2.4.11': resolution: {integrity: sha512-W9P8glH1M8LGREJ7yHRCANI5vOvTrRO15EMLdmh5WNF9sZYSEbQxiHKckZhvGIkbeR1WAlTl3ORTrJXUghjk7g==} '@volar/language-service@2.4.11': resolution: {integrity: sha512-KIb6g8gjUkS2LzAJ9bJCLIjfsJjeRtmXlu7b2pDFGD3fNqdbC53cCAKzgWDs64xtQVKYBU13DLWbtSNFtGuMLQ==} - '@volar/source-map@2.2.5': - resolution: {integrity: sha512-wrOEIiZNf4E+PWB0AxyM4tfhkfldPsb3bxg8N6FHrxJH2ohar7aGu48e98bp3pR9HUA7P/pR9VrLmkTrgCCnWQ==} - '@volar/source-map@2.4.11': resolution: {integrity: sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==} + '@volar/source-map@2.4.13': + resolution: {integrity: sha512-l/EBcc2FkvHgz2ZxV+OZK3kMSroMr7nN3sZLF2/f6kWW66q8+tEL4giiYyFjt0BcubqJhBt6soYIrAPhg/Yr+Q==} + '@volar/test-utils@2.4.11': resolution: {integrity: sha512-ogkLldPqFa/j9302Ns+nWeyTCQv8d4c7iN4t8ziq7j0XeMKWYsTAjLsx/9z0MTNrecBAcocgzEvCricASSq+Hw==} - '@volar/typescript@2.2.5': - resolution: {integrity: sha512-eSV/n75+ppfEVugMC/salZsI44nXDPAyL6+iTYCNLtiLHGJsnMv9GwiDMujrvAUj/aLQyqRJgYtXRoxop2clCw==} - '@volar/typescript@2.4.11': resolution: {integrity: sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==} + '@volar/typescript@2.4.13': + resolution: {integrity: sha512-Ukz4xv84swJPupZeoFsQoeJEOm7U9pqsEnaGGgt5ni3SCTa22m8oJP5Nng3Wed7Uw5RBELdLxxORX8YhJPyOgQ==} + '@vue/compiler-core@3.5.13': resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} '@vue/compiler-dom@3.5.13': resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} - '@vue/language-core@2.0.19': - resolution: {integrity: sha512-A9EGOnvb51jOvnCYoRLnMP+CcoPlbZVxI9gZXE/y2GksRWM6j/PrLEIC++pnosWTN08tFpJgxhSS//E9v/Sg+Q==} + '@vue/compiler-vue2@2.7.16': + resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} + + '@vue/language-core@2.2.0': + resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -5047,6 +5201,10 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -5117,6 +5275,9 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + alien-signals@0.4.14: + resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} + amd-name-resolver@1.3.1: resolution: {integrity: sha512-26qTEWqZQ+cxSYygZ4Cf8tsjDBLceJahhtewxtKZA3SRa4PluuqYCuheemDQD+7Mf5B7sr+zhTDWAHDh02a1Dw==} engines: {node: 6.* || 8.* || >= 10.*} @@ -5487,6 +5648,10 @@ packages: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@2.2.0: + resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} + engines: {node: '>=18'} + body@5.1.0: resolution: {integrity: sha512-chUsBxGRtuElD6fmw1gHLpvnKdVLK302peeFa9ZqAEk8TyzZ3fygLyUEDDPTJvL9+Bor0dIwn6ePOsRM2y0zQQ==} @@ -6029,6 +6194,9 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -6223,6 +6391,10 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + content-tag-utils@0.3.1: resolution: {integrity: sha512-uBAmklAxqmem7WX/F7YA4eWBTegGLJ93MOPSJaJliAuzTNgF3u/H9YLlJ6Nae9/FwV+037OuXc75hvcmub1qww==} engines: {node: '>= 18'} @@ -6246,6 +6418,10 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + cookie@0.7.1: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} @@ -6529,10 +6705,6 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dom-element-descriptors@0.5.1: resolution: {integrity: sha512-DLayMRQ+yJaziF4JJX1FMjwjdr7wdTr1y9XvZ+NfHELfOMcYDnCHneAYXAS4FT1gLILh4V0juMZohhH1N5FsoQ==} @@ -6988,8 +7160,8 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - es-module-shims@1.10.1: - resolution: {integrity: sha512-HSSkRLkqFEyX6GrCAHrSOR5iz/QzQJRqZUF7bFJOZ4aoSw0WoSggfsTIGN2yFbF8v6xjQFhT4HGP6b+0qQZmEQ==} + es-module-shims@2.4.1: + resolution: {integrity: sha512-Z0MEWvVg9f1MBCGJLZbGJe5D3hG7ezjJmiLcEVfq3VzK131QwPc1spCWtHKt42jwi8ACS99ziXxvlp5GuD0+Yg==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} @@ -7026,6 +7198,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.25.4: + resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -7182,12 +7359,6 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - eslint@9.25.1: resolution: {integrity: sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -7198,6 +7369,16 @@ packages: jiti: optional: true + eslint@9.26.0: + resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + esm@3.2.25: resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} engines: {node: '>=6'} @@ -7210,10 +7391,6 @@ packages: resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esprima@3.0.0: resolution: {integrity: sha512-xoBq/MIShSydNZOkjkoCEjqod963yHNXTLC40ypBhop6yPqflPz/vTinmCfSrGcywVLnSftRf6a0kJLdFdzemw==} engines: {node: '>=0.10.0'} @@ -7267,6 +7444,14 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + eventsource-parser@3.0.1: + resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==} + engines: {node: '>=18.0.0'} + + eventsource@3.0.6: + resolution: {integrity: sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==} + engines: {node: '>=18.0.0'} + evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} @@ -7312,10 +7497,23 @@ packages: exponential-backoff@3.1.2: resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} + express-rate-limit@7.5.0: + resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} + engines: {node: '>= 16'} + peerDependencies: + express: ^4.11 || 5 || ^5.0.0-beta.1 + express@4.21.2: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} + express@5.1.0: + resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} + engines: {node: '>= 18'} + + exsolve@1.0.5: + resolution: {integrity: sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==} + extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -7405,10 +7603,6 @@ packages: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -7439,6 +7633,10 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} + find-babel-config@1.2.2: resolution: {integrity: sha512-oK59njMyw2y3yxto1BCfVK7MQp/OYf4FleHu0RgosH3riFJ1aOuo/7naLDLAObfrgn3ueFhw5sAT/cp0QuJI3Q==} engines: {node: '>=4.0.0'} @@ -7513,10 +7711,6 @@ packages: resolution: {integrity: sha512-SRgwIMXlxkb6AUgaVjIX+jCEqdhyXu9hah7mcK+lWynjKtX73Ux1TDv71B7XyaQ+LJxkYRHl5yCL8IycAvQRUw==} engines: {node: 10.* || >= 12.*} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -7773,10 +7967,6 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -8300,10 +8490,6 @@ packages: resolution: {integrity: sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==} engines: {node: '>=12'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -8323,6 +8509,9 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} @@ -8649,8 +8838,8 @@ packages: loader.js@4.7.0: resolution: {integrity: sha512-9M2KvGT6duzGMgkOcTkWb+PR/Q2Oe54df/tLgHGVmFpAmtqJ553xJh6N63iFYI2yjo2PeJXbS5skHi/QpJq4vA==} - local-pkg@0.5.1: - resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} + local-pkg@1.1.1: + resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} engines: {node: '>=14'} locate-path@2.0.0: @@ -8916,6 +9105,10 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + mem@5.1.1: resolution: {integrity: sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==} engines: {node: '>=8'} @@ -8934,6 +9127,10 @@ packages: merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -9288,6 +9485,10 @@ packages: resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -9629,6 +9830,9 @@ packages: resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} engines: {node: '>=14.16'} + package-manager-detector@1.3.0: + resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} + package-up@5.0.0: resolution: {integrity: sha512-MQEgDUvXCa3sGvqHg3pzHO8e9gqTCMPVrWUko3vPQGntwegmFo52mZb2abIVTjFnUcW0BcPz0D93jV5Cas1DWA==} engines: {node: '>=18'} @@ -9739,6 +9943,10 @@ packages: path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -9787,6 +9995,10 @@ packages: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} + pkce-challenge@5.0.0: + resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} + engines: {node: '>=16.20.0'} + pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} @@ -9805,6 +10017,9 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + pkg-types@2.1.0: + resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} + pkg-up@2.0.0: resolution: {integrity: sha512-fjAPuiws93rm7mPUu21RdBnkeZNrbfCFCwfAhPWY+rR3zG0ubpe5cEReHOw5fIbfmsxEV/g2kSxGTATY3Bpnwg==} engines: {node: '>=4'} @@ -10104,6 +10319,11 @@ packages: engines: {node: '>=16'} hasBin: true + publint@0.3.12: + resolution: {integrity: sha512-1w3MMtL9iotBjm1mmXtG3Nk06wnq9UhGNRpQ2j6n1Zq7YAD6gnxMMZMIxlRPAydVjVbjSm+n0lhwqsD1m4LD5w==} + engines: {node: '>=18'} + hasBin: true + pump@3.0.2: resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} @@ -10126,6 +10346,9 @@ packages: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} + quansync@0.2.10: + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + querystring-es3@0.2.1: resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} engines: {node: '>=0.4.x'} @@ -10169,6 +10392,10 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + raw-body@3.0.0: + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} + engines: {node: '>= 0.8'} + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -10499,6 +10726,10 @@ packages: route-recognizer@0.3.4: resolution: {integrity: sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g==} + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + router_js@8.0.6: resolution: {integrity: sha512-AjGxRDIpTGoAG8admFmvP/cxn1AlwwuosCclMU4R5oGHGt7ER0XtB3l9O04ToBDdPe4ivM/YcLopgBEpJssJ/Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -10639,6 +10870,10 @@ packages: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} + serve-static@2.2.0: + resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + engines: {node: '>= 18'} + set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -11095,9 +11330,6 @@ packages: engines: {node: '>= 7.*'} hasBin: true - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - textextensions@2.6.0: resolution: {integrity: sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==} engines: {node: '>=0.8'} @@ -11319,10 +11551,6 @@ packages: resolution: {integrity: sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==} engines: {node: '>=8'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -11335,6 +11563,10 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} @@ -11361,13 +11593,13 @@ packages: typescript-memoize@1.1.1: resolution: {integrity: sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA==} - typescript@5.4.2: - resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} hasBin: true - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} hasBin: true @@ -11616,9 +11848,8 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite-plugin-dts@4.0.0-beta.1: - resolution: {integrity: sha512-4ILGS8ClSYiNMtSRo4YxJ+JeC2P4uZgo9cQ7Yav+CLSxcoWBffjJ6B1QKcn5BhniXJQkb1j6Bi0MCj5C5+i4Sg==} - engines: {node: ^14.18.0 || >=16.0.0} + vite-plugin-dts@4.5.3: + resolution: {integrity: sha512-P64VnD00dR+e8S26ESoFELqc17+w7pKkwlBpgXteOljFyT0zDwD8hH4zXp49M/kciy//7ZbVXIwQCekBJjfWzA==} peerDependencies: typescript: '*' vite: '*' @@ -11702,6 +11933,46 @@ packages: yaml: optional: true + vite@6.3.5: + resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vitest@3.1.2: resolution: {integrity: sha512-WaxpJe092ID1C0mr+LH9MmNrhfzi8I65EX/NRU/Ld016KqQNRgxSOlGNP1hHN+a/F8L15Mh8klwaF77zR3GeDQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -11767,15 +12038,6 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - vue-template-compiler@2.7.16: - resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} - - vue-tsc@2.0.19: - resolution: {integrity: sha512-JWay5Zt2/871iodGF72cELIbcAoPyhJxq56mPPh+M2K7IwI688FMrFKc/+DvB05wDWEuCPexQJ6L10zSwzzapg==} - hasBin: true - peerDependencies: - typescript: '*' - w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} @@ -12081,6 +12343,14 @@ packages: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} + zod-to-json-schema@3.24.5: + resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} + peerDependencies: + zod: ^3.24.1 + + zod@3.24.4: + resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -12149,11 +12419,11 @@ snapshots: eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/eslint-parser@7.27.1(@babel/core@7.27.1)(eslint@8.57.1)': + '@babel/eslint-parser@7.27.1(b0a61dc2de373fef4b5bcd5cf244ffe7)': dependencies: '@babel/core': 7.27.1 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.57.1 + eslint: 9.26.0(jiti@1.21.7) eslint-visitor-keys: 2.1.0 semver: 6.3.1 @@ -13630,154 +13900,234 @@ snapshots: '@esbuild/aix-ppc64@0.25.3': optional: true + '@esbuild/aix-ppc64@0.25.4': + optional: true + '@esbuild/android-arm64@0.21.5': optional: true '@esbuild/android-arm64@0.25.3': optional: true + '@esbuild/android-arm64@0.25.4': + optional: true + '@esbuild/android-arm@0.21.5': optional: true '@esbuild/android-arm@0.25.3': optional: true + '@esbuild/android-arm@0.25.4': + optional: true + '@esbuild/android-x64@0.21.5': optional: true '@esbuild/android-x64@0.25.3': optional: true + '@esbuild/android-x64@0.25.4': + optional: true + '@esbuild/darwin-arm64@0.21.5': optional: true '@esbuild/darwin-arm64@0.25.3': optional: true + '@esbuild/darwin-arm64@0.25.4': + optional: true + '@esbuild/darwin-x64@0.21.5': optional: true '@esbuild/darwin-x64@0.25.3': optional: true + '@esbuild/darwin-x64@0.25.4': + optional: true + '@esbuild/freebsd-arm64@0.21.5': optional: true '@esbuild/freebsd-arm64@0.25.3': optional: true + '@esbuild/freebsd-arm64@0.25.4': + optional: true + '@esbuild/freebsd-x64@0.21.5': optional: true '@esbuild/freebsd-x64@0.25.3': optional: true + '@esbuild/freebsd-x64@0.25.4': + optional: true + '@esbuild/linux-arm64@0.21.5': optional: true '@esbuild/linux-arm64@0.25.3': optional: true + '@esbuild/linux-arm64@0.25.4': + optional: true + '@esbuild/linux-arm@0.21.5': optional: true '@esbuild/linux-arm@0.25.3': optional: true + '@esbuild/linux-arm@0.25.4': + optional: true + '@esbuild/linux-ia32@0.21.5': optional: true '@esbuild/linux-ia32@0.25.3': optional: true + '@esbuild/linux-ia32@0.25.4': + optional: true + '@esbuild/linux-loong64@0.21.5': optional: true '@esbuild/linux-loong64@0.25.3': optional: true + '@esbuild/linux-loong64@0.25.4': + optional: true + '@esbuild/linux-mips64el@0.21.5': optional: true '@esbuild/linux-mips64el@0.25.3': optional: true + '@esbuild/linux-mips64el@0.25.4': + optional: true + '@esbuild/linux-ppc64@0.21.5': optional: true '@esbuild/linux-ppc64@0.25.3': optional: true + '@esbuild/linux-ppc64@0.25.4': + optional: true + '@esbuild/linux-riscv64@0.21.5': optional: true '@esbuild/linux-riscv64@0.25.3': optional: true + '@esbuild/linux-riscv64@0.25.4': + optional: true + '@esbuild/linux-s390x@0.21.5': optional: true '@esbuild/linux-s390x@0.25.3': optional: true + '@esbuild/linux-s390x@0.25.4': + optional: true + '@esbuild/linux-x64@0.21.5': optional: true '@esbuild/linux-x64@0.25.3': optional: true + '@esbuild/linux-x64@0.25.4': + optional: true + '@esbuild/netbsd-arm64@0.25.3': optional: true + '@esbuild/netbsd-arm64@0.25.4': + optional: true + '@esbuild/netbsd-x64@0.21.5': optional: true '@esbuild/netbsd-x64@0.25.3': optional: true + '@esbuild/netbsd-x64@0.25.4': + optional: true + '@esbuild/openbsd-arm64@0.25.3': optional: true + '@esbuild/openbsd-arm64@0.25.4': + optional: true + '@esbuild/openbsd-x64@0.21.5': optional: true '@esbuild/openbsd-x64@0.25.3': optional: true + '@esbuild/openbsd-x64@0.25.4': + optional: true + '@esbuild/sunos-x64@0.21.5': optional: true '@esbuild/sunos-x64@0.25.3': optional: true + '@esbuild/sunos-x64@0.25.4': + optional: true + '@esbuild/win32-arm64@0.21.5': optional: true '@esbuild/win32-arm64@0.25.3': optional: true + '@esbuild/win32-arm64@0.25.4': + optional: true + '@esbuild/win32-ia32@0.21.5': optional: true '@esbuild/win32-ia32@0.25.3': optional: true + '@esbuild/win32-ia32@0.25.4': + optional: true + '@esbuild/win32-x64@0.21.5': optional: true '@esbuild/win32-x64@0.25.3': optional: true - '@eslint-community/eslint-utils@4.6.1(eslint@8.57.1)': + '@esbuild/win32-x64@0.25.4': + optional: true + + '@eslint-community/eslint-utils@4.6.1(eslint@9.25.1(jiti@1.21.7))': dependencies: - eslint: 8.57.1 + eslint: 9.25.1(jiti@1.21.7) eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.6.1(eslint@9.25.1(jiti@1.21.7))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.25.1(jiti@1.21.7))': dependencies: eslint: 9.25.1(jiti@1.21.7) eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0(jiti@1.21.7))': + dependencies: + eslint: 9.26.0(jiti@1.21.7) + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.1': {} '@eslint/config-array@0.20.0': @@ -13794,20 +14144,6 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.4.0(supports-color@8.1.1) - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 @@ -13822,10 +14158,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.1': {} - '@eslint/js@9.25.1': {} + '@eslint/js@9.26.0': {} + '@eslint/object-schema@2.1.6': {} '@eslint/plugin-kit@0.2.8': @@ -14090,6 +14426,30 @@ snapshots: transitivePeerDependencies: - supports-color + '@glint/core@1.4.1-unstable.0e0d936(typescript@5.8.2)': + dependencies: + '@glimmer/syntax': 0.84.3 + '@volar/kit': 2.4.11(typescript@5.8.2) + '@volar/language-core': 2.4.11 + '@volar/language-server': 2.4.11 + '@volar/language-service': 2.4.11 + '@volar/source-map': 2.4.11 + '@volar/test-utils': 2.4.11 + '@volar/typescript': 2.4.11 + computeds: 0.0.1 + escape-string-regexp: 4.0.0 + semver: 7.7.1 + silent-error: 1.1.1 + typescript: 5.8.2 + uuid: 8.3.2 + volar-service-typescript: 0.0.64(@volar/language-service@2.4.11) + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + '@glint/environment-ember-loose@1.4.1-unstable.0e0d936(f935a6c828fba30304237d33124e9fbe)': dependencies: '@glimmer/component': 2.0.0 @@ -14115,18 +14475,8 @@ snapshots: '@humanfs/core': 0.19.1 '@humanwhocodes/retry': 0.3.1 - '@humanwhocodes/config-array@0.13.0': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.0(supports-color@8.1.1) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} - '@humanwhocodes/retry@0.3.1': {} '@humanwhocodes/retry@0.4.2': {} @@ -14312,29 +14662,29 @@ snapshots: '@mdn/browser-compat-data@5.7.6': {} - '@microsoft/api-extractor-model@7.29.3(@types/node@22.15.3)': + '@microsoft/api-extractor-model@7.30.6(@types/node@22.15.3)': dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.5.0(@types/node@22.15.3) + '@rushstack/node-core-library': 5.13.1(@types/node@22.15.3) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.47.2(@types/node@22.15.3)': + '@microsoft/api-extractor@7.52.7(@types/node@22.15.3)': dependencies: - '@microsoft/api-extractor-model': 7.29.3(@types/node@22.15.3) + '@microsoft/api-extractor-model': 7.30.6(@types/node@22.15.3) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.5.0(@types/node@22.15.3) - '@rushstack/rig-package': 0.5.2 - '@rushstack/terminal': 0.13.2(@types/node@22.15.3) - '@rushstack/ts-command-line': 4.22.2(@types/node@22.15.3) + '@rushstack/node-core-library': 5.13.1(@types/node@22.15.3) + '@rushstack/rig-package': 0.5.3 + '@rushstack/terminal': 0.15.3(@types/node@22.15.3) + '@rushstack/ts-command-line': 5.0.1(@types/node@22.15.3) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.10 semver: 7.5.4 source-map: 0.6.1 - typescript: 5.4.2 + typescript: 5.8.2 transitivePeerDependencies: - '@types/node' @@ -14347,6 +14697,21 @@ snapshots: '@microsoft/tsdoc@0.15.1': {} + '@modelcontextprotocol/sdk@1.11.0': + dependencies: + content-type: 1.0.5 + cors: 2.8.5 + cross-spawn: 7.0.6 + eventsource: 3.0.6 + express: 5.1.0 + express-rate-limit: 7.5.0(express@5.1.0) + pkce-challenge: 5.0.0 + raw-body: 3.0.0 + zod: 3.24.4 + zod-to-json-schema: 3.24.5(zod@3.24.4) + transitivePeerDependencies: + - supports-color + '@napi-rs/wasm-runtime@0.2.9': dependencies: '@emnapi/core': 1.4.3 @@ -14563,24 +14928,24 @@ snapshots: - supports-color - typescript - '@nullvoxpopuli/eslint-configs@5.1.2(5a544f30e362879c1d9f9b7755520aaa)': + '@nullvoxpopuli/eslint-configs@5.1.2(4a869001d4e2b154ef7f61763dbf75a4)': dependencies: '@babel/core': 7.27.1 '@eslint/js': 9.25.1 - '@typescript-eslint/parser': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/parser': 8.31.1(f9310751980ea81c09f7d2c9b8aa30c2) cosmiconfig: 9.0.0(typescript@5.7.3) - ember-eslint: 0.2.1(b9bd9fcc85fee7beefa9215b72c96265) - eslint: 8.57.1 - eslint-import-resolver-typescript: 3.10.1(9177c118ade7ac685e6c2e8bd65ccd80) - eslint-plugin-decorator-position: 6.0.0(f64bfd7f04932902a13ede02b08c0149) - eslint-plugin-import: 2.31.0(428609adc6f036c5df6afa022b08f729) + ember-eslint: 0.2.1(ed2b763c1a2f38204b6794fa7ecc43e3) + eslint: 9.26.0(jiti@1.21.7) + eslint-import-resolver-typescript: 3.10.1(5bc64c1dfe48047f460551ec2eda23c6) + eslint-plugin-decorator-position: 6.0.0(a6af8e7bb55f687d72ccf2cfb17e3dbc) + eslint-plugin-import: 2.31.0(5e62e55ce7e676b8171fc5001e0614a6) eslint-plugin-json: 4.0.1 - eslint-plugin-n: 17.17.0(eslint@8.57.1) - eslint-plugin-simple-import-sort: 12.1.1(eslint@8.57.1) + eslint-plugin-n: 17.17.0(eslint@9.26.0(jiti@1.21.7)) + eslint-plugin-simple-import-sort: 12.1.1(eslint@9.26.0(jiti@1.21.7)) globals: 16.0.0 prettier-plugin-ember-template-tag: 2.0.4(prettier@3.5.3) optionalDependencies: - '@babel/eslint-parser': 7.27.1(@babel/core@7.27.1)(eslint@8.57.1) + '@babel/eslint-parser': 7.27.1(b0a61dc2de373fef4b5bcd5cf244ffe7) '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.1) prettier: 3.5.3 transitivePeerDependencies: @@ -14589,6 +14954,31 @@ snapshots: - supports-color - typescript + '@nullvoxpopuli/eslint-configs@5.1.2(c4c5d7d3241ad347dd4eb720e9857ce6)': + dependencies: + '@babel/core': 7.27.1 + '@eslint/js': 9.25.1 + '@typescript-eslint/parser': 8.31.1(fc0c2388923949f4574f6f5e00635e50) + cosmiconfig: 9.0.0(typescript@5.8.2) + ember-eslint: 0.2.1(ed84be95ea4c47eac8a9e48402b46d98) + eslint: 9.25.1(jiti@1.21.7) + eslint-import-resolver-typescript: 3.10.1(ef28e62e366c2199181025423683258b) + eslint-plugin-decorator-position: 6.0.0(50deeae86dce8f13aa370e771bd788cf) + eslint-plugin-import: 2.31.0(e539445447c6ca98656cf52fda269ddc) + eslint-plugin-json: 4.0.1 + eslint-plugin-n: 17.17.0(eslint@9.25.1(jiti@1.21.7)) + eslint-plugin-simple-import-sort: 12.1.1(eslint@9.25.1(jiti@1.21.7)) + globals: 16.0.0 + prettier-plugin-ember-template-tag: 2.0.4(prettier@3.5.3) + optionalDependencies: + '@babel/eslint-parser': 7.27.1(4a43aebe8aa03544380dbd584f92ba52) + prettier: 3.5.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + - typescript + '@octokit/auth-token@5.1.2': {} '@octokit/core@6.1.5': @@ -14698,6 +15088,8 @@ snapshots: dependencies: prettier: 3.5.3 + '@publint/pack@0.1.2': {} + '@rollup/plugin-babel@6.0.4(c02d2d5a8fda7d4368cd0ec913e412b4)': dependencies: '@babel/core': 7.27.1 @@ -14814,12 +15206,12 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@rushstack/node-core-library@5.5.0(@types/node@22.15.3)': + '@rushstack/node-core-library@5.13.1(@types/node@22.15.3)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) ajv-formats: 3.0.1 - fs-extra: 7.0.1 + fs-extra: 11.3.0 import-lazy: 4.0.0 jju: 1.4.0 resolve: 1.22.10 @@ -14827,21 +15219,21 @@ snapshots: optionalDependencies: '@types/node': 22.15.3 - '@rushstack/rig-package@0.5.2': + '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.10 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.13.2(@types/node@22.15.3)': + '@rushstack/terminal@0.15.3(@types/node@22.15.3)': dependencies: - '@rushstack/node-core-library': 5.5.0(@types/node@22.15.3) + '@rushstack/node-core-library': 5.13.1(@types/node@22.15.3) supports-color: 8.1.1 optionalDependencies: '@types/node': 22.15.3 - '@rushstack/ts-command-line@4.22.2(@types/node@22.15.3)': + '@rushstack/ts-command-line@5.0.1(@types/node@22.15.3)': dependencies: - '@rushstack/terminal': 0.13.2(@types/node@22.15.3) + '@rushstack/terminal': 0.15.3(@types/node@22.15.3) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -15234,32 +15626,49 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.31.1(d59bc2466e37e4c727f298aa0ba509e7)': + '@typescript-eslint/eslint-plugin@8.31.1(b8ee63e76d534cdb15be9dd6af5dd6c7)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.31.1(54d0da154413141e84f5f122231c9cc2) + '@typescript-eslint/parser': 8.31.1(fc0c2388923949f4574f6f5e00635e50) '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/type-utils': 8.31.1(54d0da154413141e84f5f122231c9cc2) - '@typescript-eslint/utils': 8.31.1(54d0da154413141e84f5f122231c9cc2) + '@typescript-eslint/type-utils': 8.31.1(fc0c2388923949f4574f6f5e00635e50) + '@typescript-eslint/utils': 8.31.1(fc0c2388923949f4574f6f5e00635e50) '@typescript-eslint/visitor-keys': 8.31.1 eslint: 9.25.1(jiti@1.21.7) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/eslint-plugin@8.31.1(d02e92a6c52362194dd8e884eadda2ad)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.31.1(f9310751980ea81c09f7d2c9b8aa30c2) + '@typescript-eslint/scope-manager': 8.31.1 + '@typescript-eslint/type-utils': 8.31.1(f9310751980ea81c09f7d2c9b8aa30c2) + '@typescript-eslint/utils': 8.31.1(f9310751980ea81c09f7d2c9b8aa30c2) + '@typescript-eslint/visitor-keys': 8.31.1 + eslint: 9.26.0(jiti@1.21.7) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.31.1(e5438269e90a2b76e391758ddf2fe932)': + '@typescript-eslint/eslint-plugin@8.31.1(d59bc2466e37e4c727f298aa0ba509e7)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/parser': 8.31.1(54d0da154413141e84f5f122231c9cc2) '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/type-utils': 8.31.1(eslint@8.57.1)(typescript@5.7.3) - '@typescript-eslint/utils': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.31.1(54d0da154413141e84f5f122231c9cc2) + '@typescript-eslint/utils': 8.31.1(54d0da154413141e84f5f122231c9cc2) '@typescript-eslint/visitor-keys': 8.31.1 - eslint: 8.57.1 + eslint: 9.25.1(jiti@1.21.7) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -15280,18 +15689,30 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.31.1(eslint@8.57.1)(typescript@5.7.3)': + '@typescript-eslint/parser@8.31.1(f9310751980ea81c09f7d2c9b8aa30c2)': dependencies: '@typescript-eslint/scope-manager': 8.31.1 '@typescript-eslint/types': 8.31.1 '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.31.1 debug: 4.4.0(supports-color@8.1.1) - eslint: 8.57.1 + eslint: 9.26.0(jiti@1.21.7) typescript: 5.7.3 transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.31.1(fc0c2388923949f4574f6f5e00635e50)': + dependencies: + '@typescript-eslint/scope-manager': 8.31.1 + '@typescript-eslint/types': 8.31.1 + '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.31.1 + debug: 4.4.0(supports-color@8.1.1) + eslint: 9.25.1(jiti@1.21.7) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@8.31.1': dependencies: '@typescript-eslint/types': 8.31.1 @@ -15308,17 +15729,28 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.31.1(eslint@8.57.1)(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.31.1(f9310751980ea81c09f7d2c9b8aa30c2)': dependencies: '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/utils': 8.31.1(f9310751980ea81c09f7d2c9b8aa30c2) debug: 4.4.0(supports-color@8.1.1) - eslint: 8.57.1 + eslint: 9.26.0(jiti@1.21.7) ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.31.1(fc0c2388923949f4574f6f5e00635e50)': + dependencies: + '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.2) + '@typescript-eslint/utils': 8.31.1(fc0c2388923949f4574f6f5e00635e50) + debug: 4.4.0(supports-color@8.1.1) + eslint: 9.25.1(jiti@1.21.7) + ts-api-utils: 2.1.0(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@8.31.1': {} '@typescript-eslint/typescript-estree@8.31.1(typescript@5.7.3)': @@ -15335,9 +15767,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.31.1(typescript@5.8.2)': + dependencies: + '@typescript-eslint/types': 8.31.1 + '@typescript-eslint/visitor-keys': 8.31.1 + debug: 4.4.0(supports-color@8.1.1) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.1.0(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.31.1(54d0da154413141e84f5f122231c9cc2)': dependencies: - '@eslint-community/eslint-utils': 4.6.1(eslint@9.25.1(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.25.1(jiti@1.21.7)) '@typescript-eslint/scope-manager': 8.31.1 '@typescript-eslint/types': 8.31.1 '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.7.3) @@ -15346,17 +15792,28 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.31.1(eslint@8.57.1)(typescript@5.7.3)': + '@typescript-eslint/utils@8.31.1(f9310751980ea81c09f7d2c9b8aa30c2)': dependencies: - '@eslint-community/eslint-utils': 4.6.1(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@1.21.7)) '@typescript-eslint/scope-manager': 8.31.1 '@typescript-eslint/types': 8.31.1 '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.7.3) - eslint: 8.57.1 + eslint: 9.26.0(jiti@1.21.7) typescript: 5.7.3 transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.31.1(fc0c2388923949f4574f6f5e00635e50)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.25.1(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.31.1 + '@typescript-eslint/types': 8.31.1 + '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.2) + eslint: 9.25.1(jiti@1.21.7) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.31.1': dependencies: '@typescript-eslint/types': 8.31.1 @@ -15443,13 +15900,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.2(31d608db47cd080961b235354555fefa)': + '@vitest/mocker@3.1.2(ee26121d02ad443a812b8686b0cf60f8)': dependencies: '@vitest/spy': 3.1.2 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.4(f29614dea4066c5dfbbb8cdc00ed66a1) + vite: 6.3.5(f29614dea4066c5dfbbb8cdc00ed66a1) '@vitest/pretty-format@3.1.2': dependencies: @@ -15485,14 +15942,23 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 - '@volar/language-core@2.2.5': + '@volar/kit@2.4.11(typescript@5.8.2)': dependencies: - '@volar/source-map': 2.2.5 + '@volar/language-service': 2.4.11 + '@volar/typescript': 2.4.11 + typesafe-path: 0.2.2 + typescript: 5.8.2 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 '@volar/language-core@2.4.11': dependencies: '@volar/source-map': 2.4.11 + '@volar/language-core@2.4.13': + dependencies: + '@volar/source-map': 2.4.13 + '@volar/language-server@2.4.11': dependencies: '@volar/language-core': 2.4.11 @@ -15512,12 +15978,10 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 - '@volar/source-map@2.2.5': - dependencies: - muggle-string: 0.4.1 - '@volar/source-map@2.4.11': {} + '@volar/source-map@2.4.13': {} + '@volar/test-utils@2.4.11': dependencies: '@volar/language-core': 2.4.11 @@ -15525,14 +15989,15 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 - '@volar/typescript@2.2.5': + '@volar/typescript@2.4.11': dependencies: - '@volar/language-core': 2.2.5 + '@volar/language-core': 2.4.11 path-browserify: 1.0.1 + vscode-uri: 3.1.0 - '@volar/typescript@2.4.11': + '@volar/typescript@2.4.13': dependencies: - '@volar/language-core': 2.4.11 + '@volar/language-core': 2.4.13 path-browserify: 1.0.1 vscode-uri: 3.1.0 @@ -15549,15 +16014,21 @@ snapshots: '@vue/compiler-core': 3.5.13 '@vue/shared': 3.5.13 - '@vue/language-core@2.0.19(typescript@5.7.3)': + '@vue/compiler-vue2@2.7.16': + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + '@vue/language-core@2.2.0(typescript@5.7.3)': dependencies: - '@volar/language-core': 2.2.5 + '@volar/language-core': 2.4.13 '@vue/compiler-dom': 3.5.13 + '@vue/compiler-vue2': 2.7.16 '@vue/shared': 3.5.13 - computeds: 0.0.1 + alien-signals: 0.4.14 minimatch: 9.0.5 + muggle-string: 0.4.1 path-browserify: 1.0.1 - vue-template-compiler: 2.7.16 optionalDependencies: typescript: 5.7.3 @@ -15677,6 +16148,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + accepts@2.0.0: + dependencies: + mime-types: 3.0.1 + negotiator: 1.0.0 + acorn-jsx@5.3.2(acorn@8.14.1): dependencies: acorn: 8.14.1 @@ -15718,7 +16194,7 @@ snapshots: ajv-formats@3.0.1: dependencies: - ajv: 8.17.1 + ajv: 8.13.0 ajv-keywords@3.5.2(ajv@6.12.6): dependencies: @@ -15757,6 +16233,8 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + alien-signals@0.4.14: {} + amd-name-resolver@1.3.1: dependencies: ensure-posix-path: 1.1.1 @@ -16133,6 +16611,20 @@ snapshots: transitivePeerDependencies: - supports-color + body-parser@2.2.0: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.0(supports-color@8.1.1) + http-errors: 2.0.0 + iconv-lite: 0.6.3 + on-finished: 2.4.1 + qs: 6.14.0 + raw-body: 3.0.0 + type-is: 2.0.1 + transitivePeerDependencies: + - supports-color + body@5.1.0: dependencies: continuable-cache: 0.3.1 @@ -17003,6 +17495,8 @@ snapshots: confbox@0.1.8: {} + confbox@0.2.2: {} + config-chain@1.1.13: dependencies: ini: 1.3.8 @@ -17053,6 +17547,10 @@ snapshots: dependencies: safe-buffer: 5.2.1 + content-disposition@1.0.0: + dependencies: + safe-buffer: 5.2.1 + content-tag-utils@0.3.1: dependencies: content-tag: 3.1.3 @@ -17069,6 +17567,8 @@ snapshots: cookie-signature@1.0.6: {} + cookie-signature@1.2.2: {} + cookie@0.7.1: {} cookie@0.7.2: {} @@ -17113,6 +17613,15 @@ snapshots: optionalDependencies: typescript: 5.7.3 + cosmiconfig@9.0.0(typescript@5.8.2): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.8.2 + create-ecdh@4.0.4: dependencies: bn.js: 4.12.2 @@ -17338,10 +17847,6 @@ snapshots: dependencies: esutils: 2.0.3 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-element-descriptors@0.5.1: {} dom-serializer@0.2.2: @@ -17875,10 +18380,10 @@ snapshots: transitivePeerDependencies: - supports-color - ember-eslint-parser@0.5.9(5d3c4cfd6892705fbcab567475c9aad1): + ember-eslint-parser@0.5.9(18ce584756f27fcfd8808e73eb0c2b12): dependencies: '@babel/core': 7.27.1 - '@babel/eslint-parser': 7.27.1(@babel/core@7.27.1)(eslint@8.57.1) + '@babel/eslint-parser': 7.27.1(b0a61dc2de373fef4b5bcd5cf244ffe7) '@glimmer/syntax': 0.92.3 content-tag: 2.0.3 eslint-scope: 7.2.2 @@ -17886,7 +18391,7 @@ snapshots: mathml-tag-names: 2.1.3 svg-tags: 1.0.0 optionalDependencies: - '@typescript-eslint/parser': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/parser': 8.31.1(f9310751980ea81c09f7d2c9b8aa30c2) transitivePeerDependencies: - eslint @@ -17905,16 +18410,31 @@ snapshots: transitivePeerDependencies: - eslint - ember-eslint@0.2.1(b9bd9fcc85fee7beefa9215b72c96265): + ember-eslint-parser@0.5.9(d0fff7a1dde1f47a4672960c7ac27b59): dependencies: - '@babel/eslint-parser': 7.27.1(@babel/core@7.27.1)(eslint@8.57.1) + '@babel/core': 7.27.1 + '@babel/eslint-parser': 7.27.1(4a43aebe8aa03544380dbd584f92ba52) + '@glimmer/syntax': 0.92.3 + content-tag: 2.0.3 + eslint-scope: 7.2.2 + html-tags: 3.3.1 + mathml-tag-names: 2.1.3 + svg-tags: 1.0.0 + optionalDependencies: + '@typescript-eslint/parser': 8.31.1(fc0c2388923949f4574f6f5e00635e50) + transitivePeerDependencies: + - eslint + + ember-eslint@0.2.1(c1bcb6d22fccf46caa4c33fa572a5552): + dependencies: + '@babel/eslint-parser': 7.27.1(4a43aebe8aa03544380dbd584f92ba52) '@eslint/js': 9.25.1 - eslint-config-prettier: 10.1.2(eslint@8.57.1) - eslint-plugin-ember: 12.5.0(5d3c4cfd6892705fbcab567475c9aad1) - eslint-plugin-n: 17.17.0(eslint@8.57.1) - eslint-plugin-qunit: 8.1.2(eslint@8.57.1) + eslint-config-prettier: 10.1.2(eslint@9.25.1(jiti@1.21.7)) + eslint-plugin-ember: 12.5.0(a535be2b3684a674ff41516a3018459b) + eslint-plugin-n: 17.17.0(eslint@9.25.1(jiti@1.21.7)) + eslint-plugin-qunit: 8.1.2(eslint@9.25.1(jiti@1.21.7)) globals: 15.15.0 - typescript-eslint: 8.31.1(eslint@8.57.1)(typescript@5.7.3) + typescript-eslint: 8.31.1(54d0da154413141e84f5f122231c9cc2) transitivePeerDependencies: - '@babel/core' - '@typescript-eslint/parser' @@ -17922,16 +18442,33 @@ snapshots: - supports-color - typescript - ember-eslint@0.2.1(c1bcb6d22fccf46caa4c33fa572a5552): + ember-eslint@0.2.1(ed2b763c1a2f38204b6794fa7ecc43e3): + dependencies: + '@babel/eslint-parser': 7.27.1(b0a61dc2de373fef4b5bcd5cf244ffe7) + '@eslint/js': 9.25.1 + eslint-config-prettier: 10.1.2(eslint@9.26.0(jiti@1.21.7)) + eslint-plugin-ember: 12.5.0(18ce584756f27fcfd8808e73eb0c2b12) + eslint-plugin-n: 17.17.0(eslint@9.26.0(jiti@1.21.7)) + eslint-plugin-qunit: 8.1.2(eslint@9.26.0(jiti@1.21.7)) + globals: 15.15.0 + typescript-eslint: 8.31.1(f9310751980ea81c09f7d2c9b8aa30c2) + transitivePeerDependencies: + - '@babel/core' + - '@typescript-eslint/parser' + - eslint + - supports-color + - typescript + + ember-eslint@0.2.1(ed84be95ea4c47eac8a9e48402b46d98): dependencies: '@babel/eslint-parser': 7.27.1(4a43aebe8aa03544380dbd584f92ba52) '@eslint/js': 9.25.1 eslint-config-prettier: 10.1.2(eslint@9.25.1(jiti@1.21.7)) - eslint-plugin-ember: 12.5.0(a535be2b3684a674ff41516a3018459b) + eslint-plugin-ember: 12.5.0(d0fff7a1dde1f47a4672960c7ac27b59) eslint-plugin-n: 17.17.0(eslint@9.25.1(jiti@1.21.7)) eslint-plugin-qunit: 8.1.2(eslint@9.25.1(jiti@1.21.7)) globals: 15.15.0 - typescript-eslint: 8.31.1(54d0da154413141e84f5f122231c9cc2) + typescript-eslint: 8.31.1(fc0c2388923949f4574f6f5e00635e50) transitivePeerDependencies: - '@babel/core' - '@typescript-eslint/parser' @@ -18353,7 +18890,7 @@ snapshots: es-module-lexer@1.7.0: {} - es-module-shims@1.10.1: {} + es-module-shims@2.4.1: {} es-object-atoms@1.1.1: dependencies: @@ -18438,6 +18975,34 @@ snapshots: '@esbuild/win32-ia32': 0.25.3 '@esbuild/win32-x64': 0.25.3 + esbuild@0.25.4: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.4 + '@esbuild/android-arm': 0.25.4 + '@esbuild/android-arm64': 0.25.4 + '@esbuild/android-x64': 0.25.4 + '@esbuild/darwin-arm64': 0.25.4 + '@esbuild/darwin-x64': 0.25.4 + '@esbuild/freebsd-arm64': 0.25.4 + '@esbuild/freebsd-x64': 0.25.4 + '@esbuild/linux-arm': 0.25.4 + '@esbuild/linux-arm64': 0.25.4 + '@esbuild/linux-ia32': 0.25.4 + '@esbuild/linux-loong64': 0.25.4 + '@esbuild/linux-mips64el': 0.25.4 + '@esbuild/linux-ppc64': 0.25.4 + '@esbuild/linux-riscv64': 0.25.4 + '@esbuild/linux-s390x': 0.25.4 + '@esbuild/linux-x64': 0.25.4 + '@esbuild/netbsd-arm64': 0.25.4 + '@esbuild/netbsd-x64': 0.25.4 + '@esbuild/openbsd-arm64': 0.25.4 + '@esbuild/openbsd-x64': 0.25.4 + '@esbuild/sunos-x64': 0.25.4 + '@esbuild/win32-arm64': 0.25.4 + '@esbuild/win32-ia32': 0.25.4 + '@esbuild/win32-x64': 0.25.4 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -18448,24 +19013,24 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.5.1(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - semver: 7.7.1 - eslint-compat-utils@0.5.1(eslint@9.25.1(jiti@1.21.7)): dependencies: eslint: 9.25.1(jiti@1.21.7) semver: 7.7.1 - eslint-config-prettier@10.1.2(eslint@8.57.1): + eslint-compat-utils@0.5.1(eslint@9.26.0(jiti@1.21.7)): dependencies: - eslint: 8.57.1 + eslint: 9.26.0(jiti@1.21.7) + semver: 7.7.1 eslint-config-prettier@10.1.2(eslint@9.25.1(jiti@1.21.7)): dependencies: eslint: 9.25.1(jiti@1.21.7) + eslint-config-prettier@10.1.2(eslint@9.26.0(jiti@1.21.7)): + dependencies: + eslint: 9.26.0(jiti@1.21.7) + eslint-formatter-kakoune@1.0.0: {} eslint-import-resolver-node@0.3.9: @@ -18476,18 +19041,18 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(9177c118ade7ac685e6c2e8bd65ccd80): + eslint-import-resolver-typescript@3.10.1(5bc64c1dfe48047f460551ec2eda23c6): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.0(supports-color@8.1.1) - eslint: 8.57.1 + eslint: 9.26.0(jiti@1.21.7) get-tsconfig: 4.10.0 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.13 unrs-resolver: 1.7.2 optionalDependencies: - eslint-plugin-import: 2.31.0(428609adc6f036c5df6afa022b08f729) + eslint-plugin-import: 2.31.0(5e62e55ce7e676b8171fc5001e0614a6) transitivePeerDependencies: - supports-color @@ -18502,18 +19067,29 @@ snapshots: tinyglobby: 0.2.13 unrs-resolver: 1.7.2 optionalDependencies: - eslint-plugin-import: 2.31.0(e88e4ed15243864f8818c186c313aaf2) + eslint-plugin-import: 2.31.0(e539445447c6ca98656cf52fda269ddc) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.0(ae218d62a979fb4ecb9e1116a1034623): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.31.1(f9310751980ea81c09f7d2c9b8aa30c2) + eslint: 9.26.0(jiti@1.21.7) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(5bc64c1dfe48047f460551ec2eda23c6) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(6b344c9e413b69f749699da765e3a196): + eslint-module-utils@2.12.0(da514721e6fb4403e3d82df457b092ff): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.31.1(eslint@8.57.1)(typescript@5.7.3) - eslint: 8.57.1 + '@typescript-eslint/parser': 8.31.1(fc0c2388923949f4574f6f5e00635e50) + eslint: 9.25.1(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(9177c118ade7ac685e6c2e8bd65ccd80) + eslint-import-resolver-typescript: 3.10.1(ef28e62e366c2199181025423683258b) transitivePeerDependencies: - supports-color @@ -18541,34 +19117,34 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-decorator-position@6.0.0(f64bfd7f04932902a13ede02b08c0149): + eslint-plugin-decorator-position@6.0.0(a6af8e7bb55f687d72ccf2cfb17e3dbc): dependencies: '@babel/core': 7.27.1 '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.1) '@ember-data/rfc395-data': 0.0.4 ember-rfc176-data: 0.3.18 - eslint: 8.57.1 + eslint: 9.26.0(jiti@1.21.7) snake-case: 3.0.4 optionalDependencies: - '@babel/eslint-parser': 7.27.1(@babel/core@7.27.1)(eslint@8.57.1) + '@babel/eslint-parser': 7.27.1(b0a61dc2de373fef4b5bcd5cf244ffe7) transitivePeerDependencies: - supports-color - eslint-plugin-ember@12.5.0(5d3c4cfd6892705fbcab567475c9aad1): + eslint-plugin-ember@12.5.0(18ce584756f27fcfd8808e73eb0c2b12): dependencies: '@ember-data/rfc395-data': 0.0.4 css-tree: 3.1.0 - ember-eslint-parser: 0.5.9(5d3c4cfd6892705fbcab567475c9aad1) + ember-eslint-parser: 0.5.9(18ce584756f27fcfd8808e73eb0c2b12) ember-rfc176-data: 0.3.18 - eslint: 8.57.1 - eslint-utils: 3.0.0(eslint@8.57.1) + eslint: 9.26.0(jiti@1.21.7) + eslint-utils: 3.0.0(eslint@9.26.0(jiti@1.21.7)) estraverse: 5.3.0 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 requireindex: 1.2.0 snake-case: 3.0.4 optionalDependencies: - '@typescript-eslint/parser': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/parser': 8.31.1(f9310751980ea81c09f7d2c9b8aa30c2) transitivePeerDependencies: - '@babel/core' @@ -18590,21 +19166,39 @@ snapshots: transitivePeerDependencies: - '@babel/core' - eslint-plugin-es-x@7.8.0(eslint@8.57.1): + eslint-plugin-ember@12.5.0(d0fff7a1dde1f47a4672960c7ac27b59): dependencies: - '@eslint-community/eslint-utils': 4.6.1(eslint@8.57.1) - '@eslint-community/regexpp': 4.12.1 - eslint: 8.57.1 - eslint-compat-utils: 0.5.1(eslint@8.57.1) + '@ember-data/rfc395-data': 0.0.4 + css-tree: 3.1.0 + ember-eslint-parser: 0.5.9(d0fff7a1dde1f47a4672960c7ac27b59) + ember-rfc176-data: 0.3.18 + eslint: 9.25.1(jiti@1.21.7) + eslint-utils: 3.0.0(eslint@9.25.1(jiti@1.21.7)) + estraverse: 5.3.0 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + requireindex: 1.2.0 + snake-case: 3.0.4 + optionalDependencies: + '@typescript-eslint/parser': 8.31.1(fc0c2388923949f4574f6f5e00635e50) + transitivePeerDependencies: + - '@babel/core' eslint-plugin-es-x@7.8.0(eslint@9.25.1(jiti@1.21.7)): dependencies: - '@eslint-community/eslint-utils': 4.6.1(eslint@9.25.1(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.25.1(jiti@1.21.7)) '@eslint-community/regexpp': 4.12.1 eslint: 9.25.1(jiti@1.21.7) eslint-compat-utils: 0.5.1(eslint@9.25.1(jiti@1.21.7)) - eslint-plugin-import@2.31.0(428609adc6f036c5df6afa022b08f729): + eslint-plugin-es-x@7.8.0(eslint@9.26.0(jiti@1.21.7)): + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@1.21.7)) + '@eslint-community/regexpp': 4.12.1 + eslint: 9.26.0(jiti@1.21.7) + eslint-compat-utils: 0.5.1(eslint@9.26.0(jiti@1.21.7)) + + eslint-plugin-import@2.31.0(5e62e55ce7e676b8171fc5001e0614a6): dependencies: '@rtsao/scc': 1.1.0 array-includes: '@nolyfill/array-includes@1.0.44' @@ -18613,9 +19207,9 @@ snapshots: array.prototype.flatmap: '@nolyfill/array.prototype.flatmap@1.0.44' debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.1 + eslint: 9.26.0(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(6b344c9e413b69f749699da765e3a196) + eslint-module-utils: 2.12.0(ae218d62a979fb4ecb9e1116a1034623) hasown: '@nolyfill/hasown@1.0.44' is-core-module: '@nolyfill/is-core-module@1.0.39' is-glob: 4.0.3 @@ -18627,7 +19221,36 @@ snapshots: string.prototype.trimend: '@nolyfill/string.prototype.trimend@1.0.44' tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.31.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/parser': 8.31.1(f9310751980ea81c09f7d2c9b8aa30c2) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-import@2.31.0(e539445447c6ca98656cf52fda269ddc): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: '@nolyfill/array-includes@1.0.44' + array.prototype.findlastindex: '@nolyfill/array.prototype.findlastindex@1.0.44' + array.prototype.flat: '@nolyfill/array.prototype.flat@1.0.44' + array.prototype.flatmap: '@nolyfill/array.prototype.flatmap@1.0.44' + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.25.1(jiti@1.21.7) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(da514721e6fb4403e3d82df457b092ff) + hasown: '@nolyfill/hasown@1.0.44' + is-core-module: '@nolyfill/is-core-module@1.0.39' + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: '@nolyfill/object.fromentries@1.0.44' + object.groupby: '@nolyfill/object.groupby@1.0.44' + object.values: '@nolyfill/object.values@1.0.44' + semver: 6.3.1 + string.prototype.trimend: '@nolyfill/string.prototype.trimend@1.0.44' + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.31.1(fc0c2388923949f4574f6f5e00635e50) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -18667,52 +19290,52 @@ snapshots: lodash: 4.17.21 vscode-json-languageservice: 4.2.1 - eslint-plugin-n@17.17.0(eslint@8.57.1): + eslint-plugin-n@17.17.0(eslint@9.25.1(jiti@1.21.7)): dependencies: - '@eslint-community/eslint-utils': 4.6.1(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.25.1(jiti@1.21.7)) enhanced-resolve: 5.18.1 - eslint: 8.57.1 - eslint-plugin-es-x: 7.8.0(eslint@8.57.1) + eslint: 9.25.1(jiti@1.21.7) + eslint-plugin-es-x: 7.8.0(eslint@9.25.1(jiti@1.21.7)) get-tsconfig: 4.10.0 globals: 15.15.0 ignore: 5.3.2 minimatch: 9.0.5 semver: 7.7.1 - eslint-plugin-n@17.17.0(eslint@9.25.1(jiti@1.21.7)): + eslint-plugin-n@17.17.0(eslint@9.26.0(jiti@1.21.7)): dependencies: - '@eslint-community/eslint-utils': 4.6.1(eslint@9.25.1(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@1.21.7)) enhanced-resolve: 5.18.1 - eslint: 9.25.1(jiti@1.21.7) - eslint-plugin-es-x: 7.8.0(eslint@9.25.1(jiti@1.21.7)) + eslint: 9.26.0(jiti@1.21.7) + eslint-plugin-es-x: 7.8.0(eslint@9.26.0(jiti@1.21.7)) get-tsconfig: 4.10.0 globals: 15.15.0 ignore: 5.3.2 minimatch: 9.0.5 semver: 7.7.1 - eslint-plugin-qunit@8.1.2(eslint@8.57.1): + eslint-plugin-qunit@8.1.2(eslint@9.25.1(jiti@1.21.7)): dependencies: - eslint-utils: 3.0.0(eslint@8.57.1) + eslint-utils: 3.0.0(eslint@9.25.1(jiti@1.21.7)) requireindex: 1.2.0 transitivePeerDependencies: - eslint - eslint-plugin-qunit@8.1.2(eslint@9.25.1(jiti@1.21.7)): + eslint-plugin-qunit@8.1.2(eslint@9.26.0(jiti@1.21.7)): dependencies: - eslint-utils: 3.0.0(eslint@9.25.1(jiti@1.21.7)) + eslint-utils: 3.0.0(eslint@9.26.0(jiti@1.21.7)) requireindex: 1.2.0 transitivePeerDependencies: - eslint - eslint-plugin-simple-import-sort@12.1.1(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - eslint-plugin-simple-import-sort@12.1.1(eslint@9.25.1(jiti@1.21.7)): dependencies: eslint: 9.25.1(jiti@1.21.7) + eslint-plugin-simple-import-sort@12.1.1(eslint@9.26.0(jiti@1.21.7)): + dependencies: + eslint: 9.26.0(jiti@1.21.7) + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 @@ -18728,14 +19351,14 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@8.57.1): + eslint-utils@3.0.0(eslint@9.25.1(jiti@1.21.7)): dependencies: - eslint: 8.57.1 + eslint: 9.25.1(jiti@1.21.7) eslint-visitor-keys: 2.1.0 - eslint-utils@3.0.0(eslint@9.25.1(jiti@1.21.7)): + eslint-utils@3.0.0(eslint@9.26.0(jiti@1.21.7)): dependencies: - eslint: 9.25.1(jiti@1.21.7) + eslint: 9.26.0(jiti@1.21.7) eslint-visitor-keys: 2.1.0 eslint-visitor-keys@2.1.0: {} @@ -18744,62 +19367,62 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@8.57.1: + eslint@9.25.1(jiti@1.21.7): dependencies: - '@eslint-community/eslint-utils': 4.6.1(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.6.1(eslint@9.25.1(jiti@1.21.7)) '@eslint-community/regexpp': 4.12.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 + '@eslint/config-array': 0.20.0 + '@eslint/config-helpers': 0.2.2 + '@eslint/core': 0.13.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.25.1 + '@eslint/plugin-kit': 0.2.8 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.3.0 + '@humanwhocodes/retry': 0.4.2 + '@types/estree': 1.0.7 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.0(supports-color@8.1.1) - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 + optionalDependencies: + jiti: 1.21.7 transitivePeerDependencies: - supports-color - eslint@9.25.1(jiti@1.21.7): + eslint@9.26.0(jiti@1.21.7): dependencies: - '@eslint-community/eslint-utils': 4.6.1(eslint@9.25.1(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@1.21.7)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.20.0 '@eslint/config-helpers': 0.2.2 '@eslint/core': 0.13.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.25.1 + '@eslint/js': 9.26.0 '@eslint/plugin-kit': 0.2.8 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.2 + '@modelcontextprotocol/sdk': 1.11.0 '@types/estree': 1.0.7 '@types/json-schema': 7.0.15 ajv: 6.12.6 @@ -18824,6 +19447,7 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 + zod: 3.24.4 optionalDependencies: jiti: 1.21.7 transitivePeerDependencies: @@ -18846,12 +19470,6 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 4.2.0 - espree@9.6.1: - dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) - eslint-visitor-keys: 3.4.3 - esprima@3.0.0: {} esprima@4.0.1: {} @@ -18894,6 +19512,12 @@ snapshots: events@3.3.0: {} + eventsource-parser@3.0.1: {} + + eventsource@3.0.6: + dependencies: + eventsource-parser: 3.0.1 + evp_bytestokey@1.0.3: dependencies: md5.js: 1.3.5 @@ -18984,6 +19608,10 @@ snapshots: exponential-backoff@3.1.2: {} + express-rate-limit@7.5.0(express@5.1.0): + dependencies: + express: 5.1.0 + express@4.21.2: dependencies: accepts: 1.3.8 @@ -19020,6 +19648,40 @@ snapshots: transitivePeerDependencies: - supports-color + express@5.1.0: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.0 + content-disposition: 1.0.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.0(supports-color@8.1.1) + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.0 + fresh: 2.0.0 + http-errors: 2.0.0 + merge-descriptors: 2.0.0 + mime-types: 3.0.1 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.14.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.0 + serve-static: 2.2.0 + statuses: 2.0.1 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + exsolve@1.0.5: {} + extend-shallow@2.0.1: dependencies: is-extendable: 0.1.1 @@ -19120,10 +19782,6 @@ snapshots: dependencies: is-unicode-supported: 2.1.0 - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.2.0 - file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -19171,6 +19829,17 @@ snapshots: transitivePeerDependencies: - supports-color + finalhandler@2.1.0: + dependencies: + debug: 4.4.0(supports-color@8.1.1) + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + find-babel-config@1.2.2: dependencies: json5: 1.0.2 @@ -19283,12 +19952,6 @@ snapshots: matcher-collection: 2.0.1 walk-sync: 2.2.0 - flat-cache@3.2.0: - dependencies: - flatted: 3.3.3 - keyv: 4.5.4 - rimraf: 3.0.2 - flat-cache@4.0.1: dependencies: flatted: 3.3.3 @@ -19604,10 +20267,6 @@ snapshots: globals@11.12.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - globals@14.0.0: {} globals@15.15.0: {} @@ -20248,8 +20907,6 @@ snapshots: is-obj@3.0.0: {} - is-path-inside@3.0.3: {} - is-plain-obj@2.1.0: {} is-plain-obj@4.1.0: {} @@ -20262,6 +20919,8 @@ snapshots: is-potential-custom-element-name@1.0.1: {} + is-promise@4.0.0: {} + is-reference@1.2.1: dependencies: '@types/estree': 1.0.7 @@ -20603,10 +21262,11 @@ snapshots: loader.js@4.7.0: {} - local-pkg@0.5.1: + local-pkg@1.1.1: dependencies: mlly: 1.7.4 - pkg-types: 1.3.1 + pkg-types: 2.1.0 + quansync: 0.2.10 locate-path@2.0.0: dependencies: @@ -20968,6 +21628,8 @@ snapshots: media-typer@0.3.0: {} + media-typer@1.1.0: {} + mem@5.1.1: dependencies: map-age-cleaner: 0.1.3 @@ -20987,6 +21649,8 @@ snapshots: merge-descriptors@1.0.3: {} + merge-descriptors@2.0.0: {} + merge-stream@2.0.0: {} merge-trees@2.0.0: @@ -21464,6 +22128,8 @@ snapshots: negotiator@0.6.4: {} + negotiator@1.0.0: {} + neo-async@2.6.2: {} nice-try@1.0.5: {} @@ -21862,6 +22528,8 @@ snapshots: registry-url: 6.0.1 semver: 7.7.1 + package-manager-detector@1.3.0: {} + package-up@5.0.0: dependencies: find-up-simple: 1.0.1 @@ -21969,6 +22637,8 @@ snapshots: path-to-regexp@0.1.12: {} + path-to-regexp@8.2.0: {} + path-type@4.0.0: {} path-type@6.0.0: {} @@ -22003,6 +22673,8 @@ snapshots: pirates@4.0.7: {} + pkce-challenge@5.0.0: {} + pkg-dir@3.0.0: dependencies: find-up: 3.0.0 @@ -22023,6 +22695,12 @@ snapshots: mlly: 1.7.4 pathe: 2.0.3 + pkg-types@2.1.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.5 + pathe: 2.0.3 + pkg-up@2.0.0: dependencies: find-up: 2.1.0 @@ -22244,6 +22922,13 @@ snapshots: picocolors: 1.1.1 sade: 1.8.1 + publint@0.3.12: + dependencies: + '@publint/pack': 0.1.2 + package-manager-detector: 1.3.0 + picocolors: 1.1.1 + sade: 1.8.1 + pump@3.0.2: dependencies: end-of-stream: 1.4.4 @@ -22263,6 +22948,8 @@ snapshots: dependencies: side-channel: '@nolyfill/side-channel@1.0.44' + quansync@0.2.10: {} + querystring-es3@0.2.1: {} queue-microtask@1.2.3: {} @@ -22310,6 +22997,13 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + raw-body@3.0.0: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + unpipe: 1.0.0 + rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -22733,6 +23427,16 @@ snapshots: route-recognizer@0.3.4: {} + router@2.2.0: + dependencies: + debug: 4.4.0(supports-color@8.1.1) + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.2.0 + transitivePeerDependencies: + - supports-color + router_js@8.0.6(route-recognizer@0.3.4)(rsvp@4.8.5): dependencies: '@glimmer/env': 0.1.7 @@ -22925,6 +23629,15 @@ snapshots: transitivePeerDependencies: - supports-color + serve-static@2.2.0: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.0 + transitivePeerDependencies: + - supports-color + set-blocking@2.0.0: {} set-function-length@1.2.2: @@ -23595,8 +24308,6 @@ snapshots: - walrus - whiskers - text-table@0.2.0: {} - textextensions@2.6.0: {} thenify-all@1.6.0: @@ -23767,6 +24478,10 @@ snapshots: dependencies: typescript: 5.7.3 + ts-api-utils@2.1.0(typescript@5.8.2): + dependencies: + typescript: 5.8.2 + ts-clone-node@3.0.0(typescript@5.7.3): dependencies: compatfactory: 3.0.0(typescript@5.7.3) @@ -23828,8 +24543,6 @@ snapshots: type-fest@0.11.0: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} type-fest@4.40.1: {} @@ -23839,6 +24552,12 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.1 + typedarray-to-buffer@3.1.5: dependencies: is-typedarray: 1.0.0 @@ -23868,22 +24587,32 @@ snapshots: transitivePeerDependencies: - supports-color - typescript-eslint@8.31.1(eslint@8.57.1)(typescript@5.7.3): + typescript-eslint@8.31.1(f9310751980ea81c09f7d2c9b8aa30c2): dependencies: - '@typescript-eslint/eslint-plugin': 8.31.1(e5438269e90a2b76e391758ddf2fe932) - '@typescript-eslint/parser': 8.31.1(eslint@8.57.1)(typescript@5.7.3) - '@typescript-eslint/utils': 8.31.1(eslint@8.57.1)(typescript@5.7.3) - eslint: 8.57.1 + '@typescript-eslint/eslint-plugin': 8.31.1(d02e92a6c52362194dd8e884eadda2ad) + '@typescript-eslint/parser': 8.31.1(f9310751980ea81c09f7d2c9b8aa30c2) + '@typescript-eslint/utils': 8.31.1(f9310751980ea81c09f7d2c9b8aa30c2) + eslint: 9.26.0(jiti@1.21.7) typescript: 5.7.3 transitivePeerDependencies: - supports-color - typescript-memoize@1.1.1: {} + typescript-eslint@8.31.1(fc0c2388923949f4574f6f5e00635e50): + dependencies: + '@typescript-eslint/eslint-plugin': 8.31.1(b8ee63e76d534cdb15be9dd6af5dd6c7) + '@typescript-eslint/parser': 8.31.1(fc0c2388923949f4574f6f5e00635e50) + '@typescript-eslint/utils': 8.31.1(fc0c2388923949f4574f6f5e00635e50) + eslint: 9.25.1(jiti@1.21.7) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color - typescript@5.4.2: {} + typescript-memoize@1.1.1: {} typescript@5.7.3: {} + typescript@5.8.2: {} + ua-parser-js@1.0.40: {} uc.micro@1.0.6: {} @@ -24164,7 +24893,7 @@ snapshots: debug: 4.4.0(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.4(f29614dea4066c5dfbbb8cdc00ed66a1) + vite: 6.3.5(f29614dea4066c5dfbbb8cdc00ed66a1) transitivePeerDependencies: - '@types/node' - jiti @@ -24179,21 +24908,20 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.0.0-beta.1(05ddd15e807b28496c406b941ebaa662): + vite-plugin-dts@4.5.3(7b87ff620be75c66e361b8dfb39bab9c): dependencies: - '@microsoft/api-extractor': 7.47.2(@types/node@22.15.3) + '@microsoft/api-extractor': 7.52.7(@types/node@22.15.3) '@rollup/pluginutils': 5.1.4(rollup@4.40.1) - '@volar/typescript': 2.4.11 - '@vue/language-core': 2.0.19(typescript@5.7.3) + '@volar/typescript': 2.4.13 + '@vue/language-core': 2.2.0(typescript@5.7.3) compare-versions: 6.1.1 debug: 4.4.0(supports-color@8.1.1) kolorist: 1.8.0 - local-pkg: 0.5.1 + local-pkg: 1.1.1 magic-string: 0.30.17 typescript: 5.7.3 - vue-tsc: 2.0.19(typescript@5.7.3) optionalDependencies: - vite: 5.4.19(@types/node@22.15.3)(terser@5.39.0) + vite: 6.3.5(f29614dea4066c5dfbbb8cdc00ed66a1) transitivePeerDependencies: - '@types/node' - rollup @@ -24232,10 +24960,25 @@ snapshots: terser: 5.39.0 yaml: 2.7.1 + vite@6.3.5(f29614dea4066c5dfbbb8cdc00ed66a1): + dependencies: + esbuild: 0.25.4 + fdir: 6.4.4(picomatch@4.0.2) + picomatch: 4.0.2 + postcss: 8.5.3 + rollup: 4.40.1 + tinyglobby: 0.2.13 + optionalDependencies: + '@types/node': 22.15.3 + fsevents: 2.3.3 + jiti: 1.21.7 + terser: 5.39.0 + yaml: 2.7.1 + vitest@3.1.2(212b84efdd1fb3a1616191536ec10813): dependencies: '@vitest/expect': 3.1.2 - '@vitest/mocker': 3.1.2(31d608db47cd080961b235354555fefa) + '@vitest/mocker': 3.1.2(ee26121d02ad443a812b8686b0cf60f8) '@vitest/pretty-format': 3.1.2 '@vitest/runner': 3.1.2 '@vitest/snapshot': 3.1.2 @@ -24252,7 +24995,7 @@ snapshots: tinyglobby: 0.2.13 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.3.4(f29614dea4066c5dfbbb8cdc00ed66a1) + vite: 6.3.5(f29614dea4066c5dfbbb8cdc00ed66a1) vite-node: 3.1.2(f29614dea4066c5dfbbb8cdc00ed66a1) why-is-node-running: 2.3.0 optionalDependencies: @@ -24313,18 +25056,6 @@ snapshots: vscode-uri@3.1.0: {} - vue-template-compiler@2.7.16: - dependencies: - de-indent: 1.0.2 - he: 1.2.0 - - vue-tsc@2.0.19(typescript@5.7.3): - dependencies: - '@volar/typescript': 2.2.5 - '@vue/language-core': 2.0.19(typescript@5.7.3) - semver: 7.7.1 - typescript: 5.7.3 - w3c-keyname@2.2.8: {} w3c-xmlserializer@5.0.0: @@ -24678,4 +25409,10 @@ snapshots: yoctocolors@2.1.1: {} + zod-to-json-schema@3.24.5(zod@3.24.4): + dependencies: + zod: 3.24.4 + + zod@3.24.4: {} + zwitch@2.0.4: {} From 782dd8776e9f4bfdd217a9f836bb84d7fbbd0b32 Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Mon, 5 May 2025 23:51:10 -0400 Subject: [PATCH 004/222] Add ember-hbs --- packages/ember-repl/addon/package.json | 1 + .../addon/src/compile/formats/gjs/index.ts | 131 ++++-------------- packages/repl-sdk/src/compilers.js | 9 ++ packages/repl-sdk/src/compilers/ember-hbs.js | 35 +++++ packages/repl-sdk/src/compilers/glimmer-js.js | 7 + 5 files changed, 76 insertions(+), 107 deletions(-) create mode 100644 packages/repl-sdk/src/compilers/ember-hbs.js diff --git a/packages/ember-repl/addon/package.json b/packages/ember-repl/addon/package.json index 8e3c4955e..d5937d1d5 100644 --- a/packages/ember-repl/addon/package.json +++ b/packages/ember-repl/addon/package.json @@ -72,6 +72,7 @@ "lint:prettier": "pnpm -w exec lint prettier" }, "dependencies": { + "repl-sdk": "workspace:*", "@babel/helper-plugin-utils": "^7.26.5", "@babel/standalone": "^7.26.9", "@embroider/addon-shim": "1.10.0", diff --git a/packages/ember-repl/addon/src/compile/formats/gjs/index.ts b/packages/ember-repl/addon/src/compile/formats/gjs/index.ts index ff5285eeb..60b7a6e11 100644 --- a/packages/ember-repl/addon/src/compile/formats/gjs/index.ts +++ b/packages/ember-repl/addon/src/compile/formats/gjs/index.ts @@ -1,9 +1,11 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore -import * as compiler from 'ember-source/dist/ember-template-compiler.js'; +import { template } from '@ember/template-compiler/runtime'; + +import { Compiler } from 'repl-sdk'; import { nameFor } from '../../utils.ts'; -import { evalSnippet } from './eval.ts'; +import { modules } from './known-modules.ts'; import type { CompileResult } from '../../types.ts'; import type { ComponentLike } from '@glint/template'; @@ -37,117 +39,32 @@ export async function compileJS( const name = nameFor(code); let component: undefined | ComponentLike; let error: undefined | Error; + /** + * TODO: move this Compiler to a service + */ + const compiler = new Compiler({ + resolve: { + ...modules, + ...extraModules, + 'ember-source/dist/ember-template-compiler': import( + 'ember-source/dist/ember-template-compiler.js' + ), + '@babel/standalone': import('@babel/standalone'), + 'content-tag': import('content-tag'), + 'decorator-transforms': import('decorator-transforms'), + 'decorator-transforms/runtime': import('decorator-transforms/runtime'), + 'babel-plugin-ember-template-compilation': import('babel-plugin-ember-template-compilation'), + }, + }); try { - const compiled = await transpile({ code: code, name }); + // Does this work? + const element = await compiler.compile('gjs', code); - if (!compiled) { - throw new Error(`Compiled output is missing`); - } - - component = evalSnippet(compiled, extraModules).default as unknown as ComponentLike; + component = template(`{{element}}`, { scope: () => ({ element }) }) as unknown as ComponentLike; } catch (e) { error = e as Error | undefined; } return { name, component, error }; } - -async function transpile({ code: input, name }: Info) { - const preprocessed = await preprocess(input, name); - const result = await transform(preprocessed, name); - - if (!result) { - return; - } - - const { code } = result; - - return code; -} - -import type { Babel } from './babel.ts'; - -let processor: any; -let fetchingPromise: Promise; - -async function preprocess(input: string, name: string): Promise { - if (!fetchingPromise) { - fetchingPromise = import('content-tag'); - } - - if (!processor) { - const { Preprocessor } = await fetchingPromise; - - processor = new Preprocessor(); - } - - const { code /* map */ } = processor.process(input, { - filename: `${name}.js`, - inline_source_map: true, - }); - - return code; -} - -async function transform( - intermediate: string, - name: string -): Promise> { - const [ - // _parser, _traverse, _generator, - _decoratorTransforms, - _emberTemplateCompilation, - ] = await Promise.all([ - // @babel/* doesn't have the greatest ESM compat yet - // https://github.com/babel/babel/issues/14314#issuecomment-1054505190 - // - // babel-standalone is so easy... - // import('@babel/parser'), - // import('@babel/traverse'), - // import('@babel/generator'), - import('decorator-transforms'), - import('babel-plugin-ember-template-compilation'), - ]); - - // These libraries are compiled incorrectly for cjs<->ESM compat - const decoratorTransforms = - 'default' in _decoratorTransforms ? _decoratorTransforms.default : _decoratorTransforms; - - const emberTemplateCompilation = - 'default' in _emberTemplateCompilation - ? _emberTemplateCompilation.default - : _emberTemplateCompilation; - - // so we have to use the default export (which is all the exports) - const maybeBabel = (await import('@babel/standalone')) as any; - // Handle difference between vite and webpack in consuming projects... - const babel: Babel = 'availablePlugins' in maybeBabel ? maybeBabel : maybeBabel.default; - - return babel.transform(intermediate, { - filename: `${name}.js`, - plugins: [ - [ - emberTemplateCompilation, - { - compiler, - }, - ], - [ - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - we don't care about types here.. - decoratorTransforms, - { - runtime: { - import: 'decorator-transforms/runtime', - }, - }, - ], - // Womp. - // See this exploration into true ESM: - // https://github.com/NullVoxPopuli/limber/pull/1805 - [babel.availablePlugins['transform-modules-commonjs']], - ], - presets: [], - }); -} diff --git a/packages/repl-sdk/src/compilers.js b/packages/repl-sdk/src/compilers.js index 15d2e17a9..54587c747 100644 --- a/packages/repl-sdk/src/compilers.js +++ b/packages/repl-sdk/src/compilers.js @@ -58,6 +58,15 @@ export const compilers = { }, }, }, + hbs: { + ember: { + compiler: async (...args) => { + const hbs = await import('./compilers/embebr-hbs.js'); + + return hbs.compiler(...args); + }, + }, + }, /** * https://mermaid.js.org/ */ diff --git a/packages/repl-sdk/src/compilers/ember-hbs.js b/packages/repl-sdk/src/compilers/ember-hbs.js new file mode 100644 index 000000000..27027d0ca --- /dev/null +++ b/packages/repl-sdk/src/compilers/ember-hbs.js @@ -0,0 +1,35 @@ +/** + * @param {import('../types.ts').ResolvedCompilerOptions} config + * @param {import('../types.ts').PublicMethods} api + */ +export function compiler(config = {}, api) { + return { + resolve: (id) => { + if (id === '@ember/template-compiler/runtime') { + return `https://esm.sh/*ember-source/dist/packages/@ember/template-compiler/runtime.js`; + } + }, + compile: async (text) => { + let component = template(text, { + scope: () => ({ ...config.defaultScope }), + }); + + /** + * Is this allowed here? or do I just return text, + * and do the above in 'render' + */ + return component; + }, + render: async (element, compiled /*, extra, compiler */) => { + console.log('[render:compiled]', compiled); + + /** + * + * TODO: These will make things easier: + * https://github.com/emberjs/rfcs/pull/1099 + * https://github.com/ember-cli/ember-addon-blueprint/blob/main/files/tests/test-helper.js + */ + element.innerHTML = compiled.toString(); + }, + }; +} diff --git a/packages/repl-sdk/src/compilers/glimmer-js.js b/packages/repl-sdk/src/compilers/glimmer-js.js index 137f5d3ff..a961de4d4 100644 --- a/packages/repl-sdk/src/compilers/glimmer-js.js +++ b/packages/repl-sdk/src/compilers/glimmer-js.js @@ -160,6 +160,13 @@ export async function compiler(config = {}, api) { }, render: async (element, compiled /*, extra, compiler */) => { console.log('[render:compiled]', compiled); + + /** + * + * TODO: These will make things easier: + * https://github.com/emberjs/rfcs/pull/1099 + * https://github.com/ember-cli/ember-addon-blueprint/blob/main/files/tests/test-helper.js + */ element.innerHTML = compiled.toString(); }, }; From 9aef25943388648e8152e622e5d77e41e928596c Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Tue, 6 May 2025 08:36:59 -0400 Subject: [PATCH 005/222] Progress --- .../ember-repl/addon/src/compile/formats.ts | 2 +- .../compile/formats/{gjs/index.ts => gjs.ts} | 1 + .../addon/src/compile/formats/gjs/babel.ts | 7 ---- .../addon/src/compile/formats/gjs/eval.ts | 29 --------------- .../formats/{gjs => }/known-modules.ts | 0 .../test-app/app/templates/application.gjs | 37 +++++++++++++++++++ packages/repl-sdk/.eslintignore | 1 - packages/repl-sdk/.eslintrc.cjs | 32 ---------------- packages/repl-sdk/eslint.config.mjs | 4 ++ packages/repl-sdk/src/compilers.js | 2 +- packages/repl-sdk/src/compilers/glimmer-js.js | 1 + packages/repl-sdk/src/index.d.ts | 2 +- packages/repl-sdk/src/index.js | 4 +- pnpm-lock.yaml | 5 ++- 14 files changed, 53 insertions(+), 74 deletions(-) rename packages/ember-repl/addon/src/compile/formats/{gjs/index.ts => gjs.ts} (99%) delete mode 100644 packages/ember-repl/addon/src/compile/formats/gjs/babel.ts delete mode 100644 packages/ember-repl/addon/src/compile/formats/gjs/eval.ts rename packages/ember-repl/addon/src/compile/formats/{gjs => }/known-modules.ts (100%) create mode 100644 packages/ember-repl/test-app/app/templates/application.gjs delete mode 120000 packages/repl-sdk/.eslintignore delete mode 100644 packages/repl-sdk/.eslintrc.cjs create mode 100644 packages/repl-sdk/eslint.config.mjs diff --git a/packages/ember-repl/addon/src/compile/formats.ts b/packages/ember-repl/addon/src/compile/formats.ts index 14bb89a61..128f7e576 100644 --- a/packages/ember-repl/addon/src/compile/formats.ts +++ b/packages/ember-repl/addon/src/compile/formats.ts @@ -18,7 +18,7 @@ export async function compileGJS( importMap?: EvalImportMap ): Promise { try { - const { compileJS } = await import('./formats/gjs/index.ts'); + const { compileJS } = await import('./formats/gjs.ts'); return await compileJS(gjsInput, importMap); } catch (error) { diff --git a/packages/ember-repl/addon/src/compile/formats/gjs/index.ts b/packages/ember-repl/addon/src/compile/formats/gjs.ts similarity index 99% rename from packages/ember-repl/addon/src/compile/formats/gjs/index.ts rename to packages/ember-repl/addon/src/compile/formats/gjs.ts index 60b7a6e11..198126581 100644 --- a/packages/ember-repl/addon/src/compile/formats/gjs/index.ts +++ b/packages/ember-repl/addon/src/compile/formats/gjs.ts @@ -43,6 +43,7 @@ export async function compileJS( * TODO: move this Compiler to a service */ const compiler = new Compiler({ + logging: true, resolve: { ...modules, ...extraModules, diff --git a/packages/ember-repl/addon/src/compile/formats/gjs/babel.ts b/packages/ember-repl/addon/src/compile/formats/gjs/babel.ts deleted file mode 100644 index f0106e645..000000000 --- a/packages/ember-repl/addon/src/compile/formats/gjs/babel.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { availablePlugins, availablePresets, transform } from '@babel/standalone'; - -export interface Babel { - availablePlugins: typeof availablePlugins; - availablePresets: typeof availablePresets; - transform: typeof transform; -} diff --git a/packages/ember-repl/addon/src/compile/formats/gjs/eval.ts b/packages/ember-repl/addon/src/compile/formats/gjs/eval.ts deleted file mode 100644 index 1ab36d6b0..000000000 --- a/packages/ember-repl/addon/src/compile/formats/gjs/eval.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { modules } from './known-modules.ts'; - -import type Component from '@glimmer/component'; - -export function evalSnippet( - compiled: string, - extraModules: Record = {} -): { - default: Component; - services?: { [key: string]: unknown }; -} { - const exports = {}; - - function require(moduleName: keyof typeof modules): unknown { - const preConfigured = modules[moduleName] || extraModules[moduleName]; - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - return preConfigured || window.require(moduleName); - } - - eval(compiled); - - return Object.assign(exports, { require }) as { - default: Component; - services?: { [key: string]: unknown }; - require: unknown; - }; -} diff --git a/packages/ember-repl/addon/src/compile/formats/gjs/known-modules.ts b/packages/ember-repl/addon/src/compile/formats/known-modules.ts similarity index 100% rename from packages/ember-repl/addon/src/compile/formats/gjs/known-modules.ts rename to packages/ember-repl/addon/src/compile/formats/known-modules.ts diff --git a/packages/ember-repl/test-app/app/templates/application.gjs b/packages/ember-repl/test-app/app/templates/application.gjs new file mode 100644 index 000000000..9843979fe --- /dev/null +++ b/packages/ember-repl/test-app/app/templates/application.gjs @@ -0,0 +1,37 @@ +import { Compiled } from 'ember-repl'; + +const options = { + gjs: { + format: 'gjs' + } +} + +const gjs = ` + +`; + +const md = ` +# Title + +**emphasis** text +`; + + diff --git a/packages/repl-sdk/.eslintignore b/packages/repl-sdk/.eslintignore deleted file mode 120000 index 86039baf5..000000000 --- a/packages/repl-sdk/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -../../.eslintignore \ No newline at end of file diff --git a/packages/repl-sdk/.eslintrc.cjs b/packages/repl-sdk/.eslintrc.cjs deleted file mode 100644 index 600e4883f..000000000 --- a/packages/repl-sdk/.eslintrc.cjs +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -const { configs } = require('@nullvoxpopuli/eslint-configs'); - -// accommodates: JS, TS, App, and Addon -const config = configs.ember(); - -module.exports = { - ...config, - overrides: [ - ...config.overrides, - { - files: ['example/**'], - parserOptions: { - sourceType: 'module', - ecmaVersion: 2023, - }, - }, - { - files: ['src/index.js'], - globals: { - importShim: true, - }, - }, - { - files: ['src/types.ts'], - rules: { - '@typescript-eslint/no-explicit-any': 'off', - }, - }, - ], -}; diff --git a/packages/repl-sdk/eslint.config.mjs b/packages/repl-sdk/eslint.config.mjs new file mode 100644 index 000000000..dc70e39a9 --- /dev/null +++ b/packages/repl-sdk/eslint.config.mjs @@ -0,0 +1,4 @@ +import { configs } from "@nullvoxpopuli/eslint-configs"; + +// eslint-disable-next-line n/no-unsupported-features/node-builtins +export default configs.node(import.meta.dirname); diff --git a/packages/repl-sdk/src/compilers.js b/packages/repl-sdk/src/compilers.js index 54587c747..f24c45650 100644 --- a/packages/repl-sdk/src/compilers.js +++ b/packages/repl-sdk/src/compilers.js @@ -61,7 +61,7 @@ export const compilers = { hbs: { ember: { compiler: async (...args) => { - const hbs = await import('./compilers/embebr-hbs.js'); + const hbs = await import('./compilers/ember-hbs.js'); return hbs.compiler(...args); }, diff --git a/packages/repl-sdk/src/compilers/glimmer-js.js b/packages/repl-sdk/src/compilers/glimmer-js.js index a961de4d4..130bba3b0 100644 --- a/packages/repl-sdk/src/compilers/glimmer-js.js +++ b/packages/repl-sdk/src/compilers/glimmer-js.js @@ -156,6 +156,7 @@ export async function compiler(config = {}, api) { let code = transformed.code; console.log('[compile:code]', code); + return code; }, render: async (element, compiled /*, extra, compiler */) => { diff --git a/packages/repl-sdk/src/index.d.ts b/packages/repl-sdk/src/index.d.ts index e2d398646..2a10803dd 100644 --- a/packages/repl-sdk/src/index.d.ts +++ b/packages/repl-sdk/src/index.d.ts @@ -4,7 +4,7 @@ export const defaultFormats: keyof Options['formats']; export const defaults: Options; export class Compiler { - constructor(options?: Options); + constructor(options?: Partial); compile( format: string, diff --git a/packages/repl-sdk/src/index.js b/packages/repl-sdk/src/index.js index c5e5c5329..65a958656 100644 --- a/packages/repl-sdk/src/index.js +++ b/packages/repl-sdk/src/index.js @@ -28,7 +28,7 @@ export class Compiler { * Options may be passed to the compiler to add to its behavior. */ constructor(options = defaults) { - this.#options = options; + this.#options = Object.assign({}, defaults, options); let explicitResolve = this.#options.resolve ?? {}; @@ -65,6 +65,8 @@ export class Compiler { }, // Hook source fetch function fetch: async (url, options) => { + console.debug(`[fetch] attempting to fetch: ${url}`); + if (this.#options.resolve) { if (url.startsWith('manual:')) { let name = url.replace(/^manual:/, ''); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d9899cbf2..abe21cb0c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1174,6 +1174,9 @@ importers: remark-rehype: specifier: ^10.1.0 version: 10.1.0 + repl-sdk: + specifier: workspace:* + version: link:../../repl-sdk unified: specifier: ^10.1.2 version: 10.1.2 @@ -19067,7 +19070,7 @@ snapshots: tinyglobby: 0.2.13 unrs-resolver: 1.7.2 optionalDependencies: - eslint-plugin-import: 2.31.0(e539445447c6ca98656cf52fda269ddc) + eslint-plugin-import: 2.31.0(e88e4ed15243864f8818c186c313aaf2) transitivePeerDependencies: - supports-color From 6cd907305d37b0eb1999955b677b4036e8f75a51 Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Tue, 6 May 2025 09:18:29 -0400 Subject: [PATCH 006/222] ope --- packages/repl-sdk/eslint.config.mjs | 2 +- packages/repl-sdk/src/index.js | 50 +++++++++++++++++------------ 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/packages/repl-sdk/eslint.config.mjs b/packages/repl-sdk/eslint.config.mjs index dc70e39a9..552e99892 100644 --- a/packages/repl-sdk/eslint.config.mjs +++ b/packages/repl-sdk/eslint.config.mjs @@ -1,4 +1,4 @@ import { configs } from "@nullvoxpopuli/eslint-configs"; // eslint-disable-next-line n/no-unsupported-features/node-builtins -export default configs.node(import.meta.dirname); +export default configs.ember(import.meta.dirname); diff --git a/packages/repl-sdk/src/index.js b/packages/repl-sdk/src/index.js index 65a958656..e2bfea55b 100644 --- a/packages/repl-sdk/src/index.js +++ b/packages/repl-sdk/src/index.js @@ -65,25 +65,23 @@ export class Compiler { }, // Hook source fetch function fetch: async (url, options) => { - console.debug(`[fetch] attempting to fetch: ${url}`); + this.#log(`[fetch] attempting to fetch: ${url}`); if (this.#options.resolve) { if (url.startsWith('manual:')) { let name = url.replace(/^manual:/, ''); - if (this.#options.logging) { - console.debug('[fetch] resolved url in manually specified resolver', url); - } + this.#log('[fetch] resolved url in manually specified resolver', url); let result = this.#options.resolve[name]; - if (this.#options.logging && !result) { - console.error(`[fetch] Could not resolve ${url}`); + if (!result) { + this.#error(`[fetch] Could not resolve ${url}`); } if (typeof result === 'function') { - if (this.#options.logging && !result) { - console.error(`[fetch] Value for ${url} is a function. Invoking.`); + if (!result) { + this.#error(`[fetch] Value for ${url} is a function. Invoking.`); } result = await result(); @@ -107,21 +105,17 @@ export class Compiler { let blob = new Blob(Array.from(blobContent), { type: 'application/javascript' }); - if (this.#options.logging) { - console.debug( - `[fetch] returning blob mapping to manually resolved import for ${name}` - // blobContent - ); - // console.debug(await blob.text()); - } + this.#log( + `[fetch] returning blob mapping to manually resolved import for ${name}` + // blobContent + ); + // console.debug(await blob.text()); return new Response(blob); } } - if (this.#options.logging) { - console.debug('[fetch] fetching url', url, options); - } + this.#log('[fetch] fetching url', url, options); // return `https://esm.sh/*${id}`; if (url.startsWith('esm.sh:')) { @@ -280,9 +274,7 @@ export class Compiler { let name = names[i]; if (!result) { - if (this.#options.logging) { - console.warn(`Could not load ${name}. Trying fallback.`); - } + this.#warn(`Could not load ${name}. Trying fallback.`); morePromises[i] = fallback(name); } @@ -313,6 +305,22 @@ export class Compiler { return div; } + + #log(msg) { + if (this.#options.logging) { + console.debug(msg); + } + } + #warn(msg) { + if (this.#options.logging) { + console.warn(msg); + } + } + #error(msg) { + if (this.#options.logging) { + console.error(msg); + } + } } /** From 00002f887c4bc3c4fae71e5c27b29c15d7d2505b Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Wed, 14 May 2025 08:59:10 -0400 Subject: [PATCH 007/222] ope --- package.json | 4 ++-- packages/ember-repl/addon/package.json | 4 ++++ packages/ember-repl/addon/rollup.config.mjs | 2 +- packages/ember-repl/addon/src/compile/formats/gjs.ts | 5 +++-- .../ember-repl/test-app/tests/rendering/compile-js-test.gts | 2 +- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 0361a970c..c52900a7d 100644 --- a/package.json +++ b/package.json @@ -31,13 +31,13 @@ "release-plan": "^0.16.0", "turbo": "^2.4.2" }, - "packageManager": "pnpm@10.5.2", + "packageManager": "pnpm@10.11.0", "engines": { "node": ">= 22.11" }, "volta": { "node": "22.14.0", - "pnpm": "10.5.2" + "pnpm": "10.11.0" }, "pnpm": { "overrides": { diff --git a/packages/ember-repl/addon/package.json b/packages/ember-repl/addon/package.json index d5937d1d5..e603f43be 100644 --- a/packages/ember-repl/addon/package.json +++ b/packages/ember-repl/addon/package.json @@ -43,6 +43,10 @@ "types": "./declarations/compile/formats/gjs/index.d.ts", "default": "./dist/compile/formats/gjs/index.js" }, + "./*": { + "default": "./dist/*.js" + } + , "./test-support": { "types": "./declarations/test-support/index.d.ts", "default": "./dist/test-support/index.js" diff --git a/packages/ember-repl/addon/rollup.config.mjs b/packages/ember-repl/addon/rollup.config.mjs index d5485af32..732d8e87c 100644 --- a/packages/ember-repl/addon/rollup.config.mjs +++ b/packages/ember-repl/addon/rollup.config.mjs @@ -12,7 +12,7 @@ const addon = new Addon({ export default defineConfig({ output: addon.output(), - external: ["@glimmer/compiler", "@glimmer/syntax"], + external: ["@glimmer/compiler", "@glimmer/syntax", "embebr-source"], plugins: [ addon.publicEntrypoints(["**/*.js"]), addon.appReexports([]), diff --git a/packages/ember-repl/addon/src/compile/formats/gjs.ts b/packages/ember-repl/addon/src/compile/formats/gjs.ts index 198126581..2d0cb808d 100644 --- a/packages/ember-repl/addon/src/compile/formats/gjs.ts +++ b/packages/ember-repl/addon/src/compile/formats/gjs.ts @@ -4,10 +4,10 @@ import { template } from '@ember/template-compiler/runtime'; import { Compiler } from 'repl-sdk'; -import { nameFor } from '../../utils.ts'; +import { nameFor } from '../utils.ts'; import { modules } from './known-modules.ts'; -import type { CompileResult } from '../../types.ts'; +import type { CompileResult } from '../types.ts'; import type { ComponentLike } from '@glint/template'; export interface Info { @@ -48,6 +48,7 @@ export async function compileJS( ...modules, ...extraModules, 'ember-source/dist/ember-template-compiler': import( + // @ts-ignore 'ember-source/dist/ember-template-compiler.js' ), '@babel/standalone': import('@babel/standalone'), diff --git a/packages/ember-repl/test-app/tests/rendering/compile-js-test.gts b/packages/ember-repl/test-app/tests/rendering/compile-js-test.gts index 656687b85..4580becf7 100644 --- a/packages/ember-repl/test-app/tests/rendering/compile-js-test.gts +++ b/packages/ember-repl/test-app/tests/rendering/compile-js-test.gts @@ -2,7 +2,7 @@ import { click, render } from '@ember/test-helpers'; import { module, skip, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; -import { compileJS } from 'ember-repl/formats/gjs'; +import { compileJS } from 'ember-repl/compile/formats/gjs'; // import this so we don't tree-shake it away import ExampleComponent from 'ember-repl-test-app/components/example-component'; From 6e73a33dcc66812ad758d6dd101c8ebcd81d2b4c Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Sun, 18 May 2025 15:44:41 -0400 Subject: [PATCH 008/222] ope --- packages/ember-repl/addon/package.json | 48 +- packages/ember-repl/addon/rollup.config.mjs | 13 + .../addon/src/compile/formats/gjs.ts | 14 +- packages/repl-sdk/src/compilers/glimmer-js.js | 6 +- packages/repl-sdk/src/index.js | 10 +- pnpm-lock.yaml | 810 ++++++------------ 6 files changed, 304 insertions(+), 597 deletions(-) diff --git a/packages/ember-repl/addon/package.json b/packages/ember-repl/addon/package.json index e603f43be..24c16597d 100644 --- a/packages/ember-repl/addon/package.json +++ b/packages/ember-repl/addon/package.json @@ -45,8 +45,7 @@ }, "./*": { "default": "./dist/*.js" - } - , + }, "./test-support": { "types": "./declarations/test-support/index.d.ts", "default": "./dist/test-support/index.js" @@ -76,37 +75,20 @@ "lint:prettier": "pnpm -w exec lint prettier" }, "dependencies": { - "repl-sdk": "workspace:*", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/standalone": "^7.26.9", + "content-tag": "^4.0.0", "@embroider/addon-shim": "1.10.0", "@embroider/macros": "1.17.2", - "babel-import-util": "^3.0.0", "babel-plugin-ember-template-compilation": "^2.4.0", "broccoli-file-creator": "^2.1.1", - "change-case": "^5.4.4", - "common-tags": "^1.8.2", - "content-tag": "^3.1.3", "decorator-transforms": "^2.3.0", - "ember-resources": "^7.0.3", - "line-column": "^1.0.2", - "magic-string": "^0.30.17", - "mdast": "^3.0.0", - "parse-static-imports": "^1.1.0", - "rehype-raw": "^6.1.1", - "rehype-stringify": "^9.0.4", - "remark-gfm": "^3.0.1", - "remark-parse": "^10.0.2", - "remark-rehype": "^10.1.0", - "unified": "^10.1.2", - "unist-util-visit": "^5.0.0", - "uuid": "^10.0.0", - "vfile": "^6.0.3" + "ember-resources": "^7.0.3" }, "devDependencies": { "@babel/core": "^7.26.9", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/plugin-transform-typescript": "^7.26.8", "@babel/preset-typescript": "^7.27.1", + "@babel/standalone": "^7.26.9", "@babel/types": "^7.26.9", "@ember/test-helpers": "^5.1.0", "@ember/test-waiters": "^4.1.0", @@ -125,6 +107,7 @@ "@nullvoxpopuli/eslint-configs": "^5.0.0", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "^28.0.2", + "@rollup/plugin-node-resolve": "^15.3.1", "@tsconfig/ember": "^3.0.9", "@types/babel__core": "^7.20.5", "@types/babel__standalone": "^7.1.9", @@ -133,6 +116,10 @@ "@types/mdast": "^4.0.4", "@types/unist": "^3.0.3", "@types/uuid": "^10.0.0", + "babel-import-util": "^3.0.0", + "babel-plugin-debug-macros": "^1.0.2", + "change-case": "^5.4.4", + "common-tags": "^1.8.2", "concurrently": "^9.1.2", "ember-resources": "^7.0.0", "ember-source": ">= 6.4.0-alpha.3", @@ -140,12 +127,27 @@ "ember-template-lint": "^7.2.0", "eslint": "^9.25.1", "execa": "^9.5.2", + "line-column": "^1.0.2", + "magic-string": "^0.30.17", + "mdast": "^3.0.0", + "parse-static-imports": "^1.1.0", "prettier": "^3.5.2", "prettier-plugin-ember-template-tag": "2.0.4", "publint": "^0.2.12", + "rehype-raw": "^6.1.1", + "rehype-stringify": "^9.0.4", + "remark-gfm": "^3.0.1", + "remark-parse": "^10.0.2", + "remark-rehype": "^10.1.0", + "repl-sdk": "workspace:*", "rollup": "~4.40.1", "rollup-plugin-copy": "^3.5.0", + "rollup-plugin-node-polyfills": "^0.2.1", "typescript": "5.7.3", + "unified": "^10.1.2", + "unist-util-visit": "^5.0.0", + "uuid": "^10.0.0", + "vfile": "^6.0.3", "webpack": "^5.98.0" }, "volta": { diff --git a/packages/ember-repl/addon/rollup.config.mjs b/packages/ember-repl/addon/rollup.config.mjs index 732d8e87c..98c9cc06f 100644 --- a/packages/ember-repl/addon/rollup.config.mjs +++ b/packages/ember-repl/addon/rollup.config.mjs @@ -2,8 +2,10 @@ import { Addon } from "@embroider/addon-dev/rollup"; import { babel } from "@rollup/plugin-babel"; import cjs from "@rollup/plugin-commonjs"; +import { nodeResolve } from "@rollup/plugin-node-resolve"; import { execaCommand } from "execa"; import { defineConfig } from "rollup"; +import nodePolyfills from "rollup-plugin-node-polyfills"; const addon = new Addon({ srcDir: "src", @@ -21,8 +23,19 @@ export default defineConfig({ babelHelpers: "bundled", }), addon.dependencies(), + + // Any dep not marked as external (by addon.dependencies()) gets bundled + nodeResolve({ + browser: true, + preferBuiltins: false, + // Defaults for this plugin are for node... + exportConditions: ["browser", "module", "default"], + }), + // This is needed because babel doesn't ship a proper browser bundle... + nodePolyfills(), // line-column... cjs(), + addon.keepAssets(["build/**/*"]), addon.clean(), diff --git a/packages/ember-repl/addon/src/compile/formats/gjs.ts b/packages/ember-repl/addon/src/compile/formats/gjs.ts index 2d0cb808d..017dfcabf 100644 --- a/packages/ember-repl/addon/src/compile/formats/gjs.ts +++ b/packages/ember-repl/addon/src/compile/formats/gjs.ts @@ -48,14 +48,26 @@ export async function compileJS( ...modules, ...extraModules, 'ember-source/dist/ember-template-compiler': import( + // eslint-disable-next-line // @ts-ignore 'ember-source/dist/ember-template-compiler.js' ), - '@babel/standalone': import('@babel/standalone'), + 'ember-source/dist/ember-template-compiler.js': import( + // eslint-disable-next-line + // @ts-ignore + 'ember-source/dist/ember-template-compiler.js' + ), + // Direct Dependencies + // '@babel/standalone': import('@babel/standalone'), 'content-tag': import('content-tag'), 'decorator-transforms': import('decorator-transforms'), 'decorator-transforms/runtime': import('decorator-transforms/runtime'), 'babel-plugin-ember-template-compilation': import('babel-plugin-ember-template-compilation'), + // Dependencies of the above + 'babel-import-util': import('babel-import-util'), + // eslint-disable-next-line + // @ts-ignore + 'babel-plugin-debug-macros': import('babel-plugin-debug-macros'), }, }); diff --git a/packages/repl-sdk/src/compilers/glimmer-js.js b/packages/repl-sdk/src/compilers/glimmer-js.js index 130bba3b0..791750249 100644 --- a/packages/repl-sdk/src/compilers/glimmer-js.js +++ b/packages/repl-sdk/src/compilers/glimmer-js.js @@ -50,7 +50,7 @@ export async function compiler(config = {}, api) { _decoratorTransforms, _emberTemplateCompilation, compiler, - { Preprocessor }, + contentTag, { default: DebugMacros }, ] = await api.tryResolveAll(buildDependencies, (moduleName) => esmsh.import(versions, moduleName) @@ -131,7 +131,9 @@ export async function compiler(config = {}, api) { }); } - const preprocessor = new Preprocessor(); + console.log(contentTag, contentTag.default); + + const preprocessor = new contentTag.Preprocessor(); return { resolve: (id) => { diff --git a/packages/repl-sdk/src/index.js b/packages/repl-sdk/src/index.js index e2bfea55b..5659df798 100644 --- a/packages/repl-sdk/src/index.js +++ b/packages/repl-sdk/src/index.js @@ -29,8 +29,7 @@ export class Compiler { */ constructor(options = defaults) { this.#options = Object.assign({}, defaults, options); - - let explicitResolve = this.#options.resolve ?? {}; + console.log(options); globalThis[secret] = this; globalThis.window.esmsInitOptions = { @@ -88,10 +87,15 @@ export class Compiler { } window[secret].resolves ||= {}; - window[secret].resolves[name] ||= result; + console.debug('Cache', window[secret]); + window[secret].resolves[name] ||= await result; let blobContent = `const mod = window[Symbol.for('${secretKey}')].resolves?.['${name}'];\n` + + /** + * This is semi-trying to polyfill modules + * that aren't proper ESM. very annoying. + */ `${Object.keys(result) .map((exportName) => { if (exportName === 'default') { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index abe21cb0c..019eee5f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,7 +50,7 @@ importers: version: 1.4.1-unstable.0e0d936(typescript@5.8.2) '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(c4c5d7d3241ad347dd4eb720e9857ce6) + version: 5.1.2(cdc8a6987c45b39bdc32103ad7ebaa2e) concurrently: specifier: ^9.1.2 version: 9.1.2 @@ -62,7 +62,7 @@ importers: version: 7.2.0(@babel/core@7.27.1) eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -246,7 +246,7 @@ importers: version: 1.14.0-alpha.2(9aa72d8bbadc40778c7370136c2e3207) '@embroider/vite': specifier: ^1.1.0 - version: 1.1.0(a168c95d7c3395be8cb05b206bc64649) + version: 1.1.0(8a4df227b88f8a019925d8aa38db8c15) '@fortawesome/ember-fontawesome': specifier: ^3.0.0 version: 3.0.0(0aa3478cb0458e1c40c07b2353c2ea8b) @@ -276,7 +276,7 @@ importers: version: 1.4.1-unstable.0e0d936 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) '@rollup/plugin-babel': specifier: ^6.0.4 version: 6.0.4(c02d2d5a8fda7d4368cd0ec913e412b4) @@ -387,7 +387,7 @@ importers: version: 4.3.0(webpack@5.99.7) eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) execa: specifier: ^9.5.2 version: 9.5.2 @@ -447,7 +447,7 @@ importers: version: 6.0.3 vite: specifier: ^6.2.0 - version: 6.3.4(f29614dea4066c5dfbbb8cdc00ed66a1) + version: 6.3.5(f29614dea4066c5dfbbb8cdc00ed66a1) webpack: specifier: ^5.98.0 version: 5.99.7 @@ -544,7 +544,7 @@ importers: version: 1.17.2(@glint/template@1.4.1-unstable.0e0d936) '@embroider/vite': specifier: ^1.1.0 - version: 1.1.0(a168c95d7c3395be8cb05b206bc64649) + version: 1.1.0(8a4df227b88f8a019925d8aa38db8c15) '@fortawesome/ember-fontawesome': specifier: ^3.0.0 version: 3.0.0(0aa3478cb0458e1c40c07b2353c2ea8b) @@ -574,7 +574,7 @@ importers: version: 1.4.1-unstable.0e0d936 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) '@nullvoxpopuli/limber-styles': specifier: workspace:^ version: link:../../packages/app-support/styles @@ -634,7 +634,7 @@ importers: version: 7.2.0(@babel/core@7.27.1) eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) fs-extra: specifier: ^11.3.0 version: 11.3.0 @@ -676,7 +676,7 @@ importers: version: 1.16.1 vite: specifier: ^6.2.0 - version: 6.3.4(f29614dea4066c5dfbbb8cdc00ed66a1) + version: 6.3.5(f29614dea4066c5dfbbb8cdc00ed66a1) dev: dependencies: @@ -701,7 +701,7 @@ importers: version: 7.27.1 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) '@types/node': specifier: ^22.15.3 version: 22.15.3 @@ -710,7 +710,7 @@ importers: version: 17.0.33 eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -801,7 +801,7 @@ importers: version: 7.27.1 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) concurrently: specifier: ^9.1.2 version: 9.1.2 @@ -813,7 +813,7 @@ importers: version: 0.2.1 eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -910,7 +910,7 @@ importers: version: 1.4.1-unstable.0e0d936 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) '@rollup/plugin-babel': specifier: ^6.0.4 version: 6.0.4(c02d2d5a8fda7d4368cd0ec913e412b4) @@ -949,7 +949,7 @@ importers: version: 7.2.0(@babel/core@7.27.1) eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) execa: specifier: ^9.5.2 version: 9.5.2 @@ -986,7 +986,7 @@ importers: version: 7.27.1 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(c4c5d7d3241ad347dd4eb720e9857ce6) + version: 5.1.2(cdc8a6987c45b39bdc32103ad7ebaa2e) autoprefixer: specifier: ^10.4.20 version: 10.4.21(postcss@8.5.3) @@ -995,7 +995,7 @@ importers: version: 9.1.2 eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) postcss: specifier: ^8.5.3 version: 8.5.3 @@ -1044,7 +1044,7 @@ importers: version: 2.0.0 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 @@ -1065,7 +1065,7 @@ importers: version: 0.25.3 eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -1092,13 +1092,13 @@ importers: version: 7.27.1 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) concurrently: specifier: ^9.1.2 version: 9.1.2 eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -1111,94 +1111,40 @@ importers: packages/ember-repl/addon: dependencies: - '@babel/helper-plugin-utils': - specifier: ^7.26.5 - version: 7.27.1 - '@babel/standalone': - specifier: ^7.26.9 - version: 7.27.1 '@embroider/addon-shim': specifier: 1.10.0 version: 1.10.0 '@embroider/macros': specifier: 1.17.2 version: 1.17.2(@glint/template@1.4.1-unstable.0e0d936) - babel-import-util: - specifier: ^3.0.0 - version: 3.0.1 - babel-plugin-ember-template-compilation: - specifier: ^2.4.0 - version: 2.4.1 broccoli-file-creator: specifier: ^2.1.1 version: 2.1.1 - change-case: - specifier: ^5.4.4 - version: 5.4.4 - common-tags: - specifier: ^1.8.2 - version: 1.8.2 content-tag: - specifier: ^3.1.3 - version: 3.1.3 + specifier: ^4.0.0 + version: 4.0.0 decorator-transforms: specifier: ^2.3.0 version: 2.3.0(@babel/core@7.27.1) ember-resources: specifier: ^7.0.3 version: 7.0.3(366a6eab8f9b46b64877d79074d1f6e3) - line-column: - specifier: ^1.0.2 - version: 1.0.2 - magic-string: - specifier: ^0.30.17 - version: 0.30.17 - mdast: - specifier: ^3.0.0 - version: 3.0.0 - parse-static-imports: - specifier: ^1.1.0 - version: 1.1.0 - rehype-raw: - specifier: ^6.1.1 - version: 6.1.1 - rehype-stringify: - specifier: ^9.0.4 - version: 9.0.4 - remark-gfm: - specifier: ^3.0.1 - version: 3.0.1 - remark-parse: - specifier: ^10.0.2 - version: 10.0.2 - remark-rehype: - specifier: ^10.1.0 - version: 10.1.0 - repl-sdk: - specifier: workspace:* - version: link:../../repl-sdk - unified: - specifier: ^10.1.2 - version: 10.1.2 - unist-util-visit: - specifier: ^5.0.0 - version: 5.0.0 - uuid: - specifier: ^10.0.0 - version: 10.0.0 - vfile: - specifier: ^6.0.3 - version: 6.0.3 devDependencies: '@babel/core': specifier: ^7.26.9 version: 7.27.1 + '@babel/helper-plugin-utils': + specifier: ^7.26.5 + version: 7.27.1 '@babel/plugin-transform-typescript': specifier: ^7.26.8 version: 7.27.1(@babel/core@7.27.1) '@babel/preset-typescript': specifier: ^7.27.1 version: 7.27.1(@babel/core@7.27.1) + '@babel/standalone': + specifier: ^7.26.9 + version: 7.27.1 '@babel/types': specifier: ^7.26.9 version: 7.27.1 @@ -1246,13 +1192,16 @@ importers: version: 1.4.1-unstable.0e0d936 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) '@rollup/plugin-babel': specifier: ^6.0.4 version: 6.0.4(c02d2d5a8fda7d4368cd0ec913e412b4) '@rollup/plugin-commonjs': specifier: ^28.0.2 version: 28.0.3(rollup@4.40.1) + '@rollup/plugin-node-resolve': + specifier: ^15.3.1 + version: 15.3.1(rollup@4.40.1) '@tsconfig/ember': specifier: ^3.0.9 version: 3.0.10 @@ -1277,6 +1226,21 @@ importers: '@types/uuid': specifier: ^10.0.0 version: 10.0.0 + babel-import-util: + specifier: ^3.0.0 + version: 3.0.1 + babel-plugin-debug-macros: + specifier: ^1.0.2 + version: 1.0.2(@babel/core@7.27.1) + babel-plugin-ember-template-compilation: + specifier: ^2.4.0 + version: 2.4.1 + change-case: + specifier: ^5.4.4 + version: 5.4.4 + common-tags: + specifier: ^1.8.2 + version: 1.8.2 concurrently: specifier: ^9.1.2 version: 9.1.2 @@ -1291,10 +1255,22 @@ importers: version: 7.2.0(@babel/core@7.27.1) eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) execa: specifier: ^9.5.2 version: 9.5.2 + line-column: + specifier: ^1.0.2 + version: 1.0.2 + magic-string: + specifier: ^0.30.17 + version: 0.30.17 + mdast: + specifier: ^3.0.0 + version: 3.0.0 + parse-static-imports: + specifier: ^1.1.0 + version: 1.1.0 prettier: specifier: ^3.5.2 version: 3.5.3 @@ -1304,15 +1280,48 @@ importers: publint: specifier: ^0.2.12 version: 0.2.12 + rehype-raw: + specifier: ^6.1.1 + version: 6.1.1 + rehype-stringify: + specifier: ^9.0.4 + version: 9.0.4 + remark-gfm: + specifier: ^3.0.1 + version: 3.0.1 + remark-parse: + specifier: ^10.0.2 + version: 10.0.2 + remark-rehype: + specifier: ^10.1.0 + version: 10.1.0 + repl-sdk: + specifier: workspace:* + version: link:../../repl-sdk rollup: specifier: ~4.40.1 version: 4.40.1 rollup-plugin-copy: specifier: ^3.5.0 version: 3.5.0 + rollup-plugin-node-polyfills: + specifier: ^0.2.1 + version: 0.2.1 typescript: specifier: 5.7.3 version: 5.7.3 + unified: + specifier: ^10.1.2 + version: 10.1.2 + unist-util-visit: + specifier: ^5.0.0 + version: 5.0.0 + uuid: + specifier: ^10.0.0 + version: 10.0.0 + vfile: + specifier: ^6.0.3 + version: 6.0.3 webpack: specifier: ^5.98.0 version: 5.99.7 @@ -1376,7 +1385,7 @@ importers: version: 4.0.0(f2c9d6d40664e9e0201334b48b463c6d) '@embroider/vite': specifier: ^1.1.0 - version: 1.1.0(a168c95d7c3395be8cb05b206bc64649) + version: 1.1.0(8a4df227b88f8a019925d8aa38db8c15) '@glimmer/component': specifier: ^2.0.0 version: 2.0.0 @@ -1397,7 +1406,7 @@ importers: version: 1.4.1-unstable.0e0d936 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) '@rollup/plugin-babel': specifier: ^6.0.4 version: 6.0.4(c02d2d5a8fda7d4368cd0ec913e412b4) @@ -1460,7 +1469,7 @@ importers: version: 4.0.0(encoding@0.1.13) eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) path-browserify: specifier: ^1.0.1 version: 1.0.1 @@ -1484,10 +1493,10 @@ importers: version: 10.1.2 vite: specifier: ^6.0.0 - version: 6.3.4(f29614dea4066c5dfbbb8cdc00ed66a1) + version: 6.3.5(f29614dea4066c5dfbbb8cdc00ed66a1) vite-plugin-node-polyfills: specifier: ^0.23.0 - version: 0.23.0(31546948ebf91a14ce3f9df2a33bf7d7) + version: 0.23.0(be0b5b35fea014f1706c2d8911db5880) packages/horizon-theme: devDependencies: @@ -1496,13 +1505,13 @@ importers: version: 7.27.1 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) concurrently: specifier: ^9.1.2 version: 9.1.2 eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -1573,13 +1582,13 @@ importers: version: 7.27.1 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) '@types/mocha': specifier: ^10.0.10 version: 10.0.10 eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) mocha: specifier: ^10.8.2 version: 10.8.2 @@ -1604,10 +1613,10 @@ importers: version: 7.27.1 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -1671,7 +1680,7 @@ importers: version: 1.7.3 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) '@tsconfig/ember': specifier: ^3.0.9 version: 3.0.10 @@ -1683,7 +1692,7 @@ importers: version: 9.1.2 eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -1719,10 +1728,10 @@ importers: version: link:../../../dev-preview '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -1740,10 +1749,10 @@ importers: version: 7.27.1 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -1771,13 +1780,13 @@ importers: version: 1.7.3 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) '@rollup/plugin-node-resolve': specifier: ^15.3.1 version: 15.3.1(rollup@4.40.1) eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) mocha: specifier: ^10.8.2 version: 10.8.2 @@ -1838,7 +1847,7 @@ importers: version: 1.7.3 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) '@tsconfig/ember': specifier: ^3.0.9 version: 3.0.10 @@ -1850,7 +1859,7 @@ importers: version: 9.1.2 eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -1886,10 +1895,10 @@ importers: version: link:../../../dev-preview '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -1920,13 +1929,13 @@ importers: version: 1.7.3 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) '@rollup/plugin-node-resolve': specifier: ^15.3.1 version: 15.3.1(rollup@4.40.1) eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -1984,7 +1993,7 @@ importers: version: 1.7.3 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) '@tsconfig/ember': specifier: ^3.0.9 version: 3.0.10 @@ -1996,7 +2005,7 @@ importers: version: 9.1.2 eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -2032,10 +2041,10 @@ importers: version: link:../../../dev-preview '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -2090,7 +2099,7 @@ importers: version: 7.27.1 '@babel/eslint-parser': specifier: ^7.27.1 - version: 7.27.1(4a43aebe8aa03544380dbd584f92ba52) + version: 7.27.1(b0a61dc2de373fef4b5bcd5cf244ffe7) '@codemirror/buildhelper': specifier: ^1.0.2 version: 1.0.2 @@ -2105,7 +2114,7 @@ importers: version: 1.7.3 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) '@tsconfig/ember': specifier: ^3.0.9 version: 3.0.10 @@ -2117,7 +2126,7 @@ importers: version: 9.1.2 eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -2153,10 +2162,10 @@ importers: version: link:../../../dev-preview '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -2202,7 +2211,7 @@ importers: version: 1.7.3 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) '@tsconfig/ember': specifier: ^3.0.9 version: 3.0.10 @@ -2214,7 +2223,7 @@ importers: version: 9.1.2 eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -2235,10 +2244,10 @@ importers: version: 7.27.1 '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -2278,10 +2287,10 @@ importers: devDependencies: '@nullvoxpopuli/eslint-configs': specifier: ^5.0.0 - version: 5.1.2(3bc82b1c84735d71a1834d84f703b2bb) + version: 5.1.2(4a869001d4e2b154ef7f61763dbf75a4) eslint: specifier: ^9.25.1 - version: 9.25.1(jiti@1.21.7) + version: 9.26.0(jiti@1.21.7) prettier: specifier: ^3.5.2 version: 3.5.3 @@ -6408,6 +6417,9 @@ packages: content-tag@3.1.3: resolution: {integrity: sha512-4Kiv9mEroxuMXfWUNUHcljVJgxThCNk7eEswdHMXdzJnkBBaYDqDwzHkoh3F74JJhfU3taJOsgpR6oEGIDg17g==} + content-tag@4.0.0: + resolution: {integrity: sha512-qqJiY9nueYAI396MOmfOk+w/0KL6ERKxANQcSKcR0CrNTc38yT//b73l+WHr9brZx57bFHNaW7a/6Yll0bn95w==} + content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -7362,16 +7374,6 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.25.1: - resolution: {integrity: sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - eslint@9.26.0: resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -7420,6 +7422,9 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@0.6.1: + resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} + estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -10691,6 +10696,13 @@ packages: rollup: ^3.29.4 || ^4 typescript: ^4.5 || ^5.0 + rollup-plugin-inject@3.0.2: + resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. + + rollup-plugin-node-polyfills@0.2.1: + resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} + rollup-plugin-ts@3.4.5: resolution: {integrity: sha512-9iCstRJpEZXSRQuXitlSZAzcGlrqTbJg1pE4CMbEi6xYldxVncdPyzA2I+j6vnh73wBymZckerS+Q/iEE/M3Ow==} engines: {node: '>=16.15.1', npm: '>=7.0.0', pnpm: '>=3.2.0', yarn: '>=1.13'} @@ -10721,6 +10733,9 @@ packages: '@swc/helpers': optional: true + rollup-pluginutils@2.8.2: + resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} + rollup@4.40.1: resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -11896,46 +11911,6 @@ packages: terser: optional: true - vite@6.3.4: - resolution: {integrity: sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vite@6.3.5: resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -12414,14 +12389,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.27.1(4a43aebe8aa03544380dbd584f92ba52)': - dependencies: - '@babel/core': 7.27.1 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.25.1(jiti@1.21.7) - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - '@babel/eslint-parser@7.27.1(b0a61dc2de373fef4b5bcd5cf244ffe7)': dependencies: '@babel/core': 7.27.1 @@ -13854,7 +13821,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@embroider/vite@1.1.0(a168c95d7c3395be8cb05b206bc64649)': + '@embroider/vite@1.1.0(8a4df227b88f8a019925d8aa38db8c15)': dependencies: '@babel/core': 7.27.1 '@embroider/core': 4.0.2(@glint/template@1.4.1-unstable.0e0d936) @@ -13872,7 +13839,7 @@ snapshots: send: 0.18.0 source-map-url: 0.4.1 terser: 5.39.0 - vite: 6.3.4(f29614dea4066c5dfbbb8cdc00ed66a1) + vite: 6.3.5(f29614dea4066c5dfbbb8cdc00ed66a1) transitivePeerDependencies: - '@glint/template' - bufferutil @@ -14116,14 +14083,9 @@ snapshots: '@esbuild/win32-x64@0.25.4': optional: true - '@eslint-community/eslint-utils@4.6.1(eslint@9.25.1(jiti@1.21.7))': - dependencies: - eslint: 9.25.1(jiti@1.21.7) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/eslint-utils@4.7.0(eslint@9.25.1(jiti@1.21.7))': + '@eslint-community/eslint-utils@4.6.1(eslint@9.26.0(jiti@1.21.7))': dependencies: - eslint: 9.25.1(jiti@1.21.7) + eslint: 9.26.0(jiti@1.21.7) eslint-visitor-keys: 3.4.3 '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0(jiti@1.21.7))': @@ -14905,24 +14867,24 @@ snapshots: - bluebird - supports-color - '@nullvoxpopuli/eslint-configs@5.1.2(3bc82b1c84735d71a1834d84f703b2bb)': + '@nullvoxpopuli/eslint-configs@5.1.2(4a869001d4e2b154ef7f61763dbf75a4)': dependencies: '@babel/core': 7.27.1 '@eslint/js': 9.25.1 - '@typescript-eslint/parser': 8.31.1(54d0da154413141e84f5f122231c9cc2) + '@typescript-eslint/parser': 8.31.1(f9310751980ea81c09f7d2c9b8aa30c2) cosmiconfig: 9.0.0(typescript@5.7.3) - ember-eslint: 0.2.1(c1bcb6d22fccf46caa4c33fa572a5552) - eslint: 9.25.1(jiti@1.21.7) - eslint-import-resolver-typescript: 3.10.1(ef28e62e366c2199181025423683258b) - eslint-plugin-decorator-position: 6.0.0(50deeae86dce8f13aa370e771bd788cf) - eslint-plugin-import: 2.31.0(e88e4ed15243864f8818c186c313aaf2) + ember-eslint: 0.2.1(ed2b763c1a2f38204b6794fa7ecc43e3) + eslint: 9.26.0(jiti@1.21.7) + eslint-import-resolver-typescript: 3.10.1(5bc64c1dfe48047f460551ec2eda23c6) + eslint-plugin-decorator-position: 6.0.0(a6af8e7bb55f687d72ccf2cfb17e3dbc) + eslint-plugin-import: 2.31.0(5e62e55ce7e676b8171fc5001e0614a6) eslint-plugin-json: 4.0.1 - eslint-plugin-n: 17.17.0(eslint@9.25.1(jiti@1.21.7)) - eslint-plugin-simple-import-sort: 12.1.1(eslint@9.25.1(jiti@1.21.7)) + eslint-plugin-n: 17.17.0(eslint@9.26.0(jiti@1.21.7)) + eslint-plugin-simple-import-sort: 12.1.1(eslint@9.26.0(jiti@1.21.7)) globals: 16.0.0 prettier-plugin-ember-template-tag: 2.0.4(prettier@3.5.3) optionalDependencies: - '@babel/eslint-parser': 7.27.1(4a43aebe8aa03544380dbd584f92ba52) + '@babel/eslint-parser': 7.27.1(b0a61dc2de373fef4b5bcd5cf244ffe7) '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.1) prettier: 3.5.3 transitivePeerDependencies: @@ -14931,17 +14893,17 @@ snapshots: - supports-color - typescript - '@nullvoxpopuli/eslint-configs@5.1.2(4a869001d4e2b154ef7f61763dbf75a4)': + '@nullvoxpopuli/eslint-configs@5.1.2(cdc8a6987c45b39bdc32103ad7ebaa2e)': dependencies: '@babel/core': 7.27.1 '@eslint/js': 9.25.1 - '@typescript-eslint/parser': 8.31.1(f9310751980ea81c09f7d2c9b8aa30c2) - cosmiconfig: 9.0.0(typescript@5.7.3) - ember-eslint: 0.2.1(ed2b763c1a2f38204b6794fa7ecc43e3) + '@typescript-eslint/parser': 8.31.1(ed143c62b382e7215ad94e178e4cd6bf) + cosmiconfig: 9.0.0(typescript@5.8.2) + ember-eslint: 0.2.1(9db284e047e3aea84122c36dc595227e) eslint: 9.26.0(jiti@1.21.7) eslint-import-resolver-typescript: 3.10.1(5bc64c1dfe48047f460551ec2eda23c6) eslint-plugin-decorator-position: 6.0.0(a6af8e7bb55f687d72ccf2cfb17e3dbc) - eslint-plugin-import: 2.31.0(5e62e55ce7e676b8171fc5001e0614a6) + eslint-plugin-import: 2.31.0(bf7b235b1067ce8f4deb8860cd984d89) eslint-plugin-json: 4.0.1 eslint-plugin-n: 17.17.0(eslint@9.26.0(jiti@1.21.7)) eslint-plugin-simple-import-sort: 12.1.1(eslint@9.26.0(jiti@1.21.7)) @@ -14949,32 +14911,6 @@ snapshots: prettier-plugin-ember-template-tag: 2.0.4(prettier@3.5.3) optionalDependencies: '@babel/eslint-parser': 7.27.1(b0a61dc2de373fef4b5bcd5cf244ffe7) - '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.1) - prettier: 3.5.3 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - eslint-plugin-import-x - - supports-color - - typescript - - '@nullvoxpopuli/eslint-configs@5.1.2(c4c5d7d3241ad347dd4eb720e9857ce6)': - dependencies: - '@babel/core': 7.27.1 - '@eslint/js': 9.25.1 - '@typescript-eslint/parser': 8.31.1(fc0c2388923949f4574f6f5e00635e50) - cosmiconfig: 9.0.0(typescript@5.8.2) - ember-eslint: 0.2.1(ed84be95ea4c47eac8a9e48402b46d98) - eslint: 9.25.1(jiti@1.21.7) - eslint-import-resolver-typescript: 3.10.1(ef28e62e366c2199181025423683258b) - eslint-plugin-decorator-position: 6.0.0(50deeae86dce8f13aa370e771bd788cf) - eslint-plugin-import: 2.31.0(e539445447c6ca98656cf52fda269ddc) - eslint-plugin-json: 4.0.1 - eslint-plugin-n: 17.17.0(eslint@9.25.1(jiti@1.21.7)) - eslint-plugin-simple-import-sort: 12.1.1(eslint@9.25.1(jiti@1.21.7)) - globals: 16.0.0 - prettier-plugin-ember-template-tag: 2.0.4(prettier@3.5.3) - optionalDependencies: - '@babel/eslint-parser': 7.27.1(4a43aebe8aa03544380dbd584f92ba52) prettier: 3.5.3 transitivePeerDependencies: - eslint-import-resolver-webpack @@ -15629,15 +15565,15 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.31.1(b8ee63e76d534cdb15be9dd6af5dd6c7)': + '@typescript-eslint/eslint-plugin@8.31.1(2cdd8362e14717d124bbc2de00118815)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.31.1(fc0c2388923949f4574f6f5e00635e50) + '@typescript-eslint/parser': 8.31.1(ed143c62b382e7215ad94e178e4cd6bf) '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/type-utils': 8.31.1(fc0c2388923949f4574f6f5e00635e50) - '@typescript-eslint/utils': 8.31.1(fc0c2388923949f4574f6f5e00635e50) + '@typescript-eslint/type-utils': 8.31.1(ed143c62b382e7215ad94e178e4cd6bf) + '@typescript-eslint/utils': 8.31.1(ed143c62b382e7215ad94e178e4cd6bf) '@typescript-eslint/visitor-keys': 8.31.1 - eslint: 9.25.1(jiti@1.21.7) + eslint: 9.26.0(jiti@1.21.7) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -15663,32 +15599,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.31.1(d59bc2466e37e4c727f298aa0ba509e7)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.31.1(54d0da154413141e84f5f122231c9cc2) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/type-utils': 8.31.1(54d0da154413141e84f5f122231c9cc2) - '@typescript-eslint/utils': 8.31.1(54d0da154413141e84f5f122231c9cc2) - '@typescript-eslint/visitor-keys': 8.31.1 - eslint: 9.25.1(jiti@1.21.7) - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.31.1(54d0da154413141e84f5f122231c9cc2)': + '@typescript-eslint/parser@8.31.1(ed143c62b382e7215ad94e178e4cd6bf)': dependencies: '@typescript-eslint/scope-manager': 8.31.1 '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.2) '@typescript-eslint/visitor-keys': 8.31.1 debug: 4.4.0(supports-color@8.1.1) - eslint: 9.25.1(jiti@1.21.7) - typescript: 5.7.3 + eslint: 9.26.0(jiti@1.21.7) + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -15704,31 +15623,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.31.1(fc0c2388923949f4574f6f5e00635e50)': - dependencies: - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 8.31.1 - debug: 4.4.0(supports-color@8.1.1) - eslint: 9.25.1(jiti@1.21.7) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/scope-manager@8.31.1': dependencies: '@typescript-eslint/types': 8.31.1 '@typescript-eslint/visitor-keys': 8.31.1 - '@typescript-eslint/type-utils@8.31.1(54d0da154413141e84f5f122231c9cc2)': + '@typescript-eslint/type-utils@8.31.1(ed143c62b382e7215ad94e178e4cd6bf)': dependencies: - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.31.1(54d0da154413141e84f5f122231c9cc2) + '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.2) + '@typescript-eslint/utils': 8.31.1(ed143c62b382e7215ad94e178e4cd6bf) debug: 4.4.0(supports-color@8.1.1) - eslint: 9.25.1(jiti@1.21.7) - ts-api-utils: 2.1.0(typescript@5.7.3) - typescript: 5.7.3 + eslint: 9.26.0(jiti@1.21.7) + ts-api-utils: 2.1.0(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -15743,17 +15650,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.31.1(fc0c2388923949f4574f6f5e00635e50)': - dependencies: - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.2) - '@typescript-eslint/utils': 8.31.1(fc0c2388923949f4574f6f5e00635e50) - debug: 4.4.0(supports-color@8.1.1) - eslint: 9.25.1(jiti@1.21.7) - ts-api-utils: 2.1.0(typescript@5.8.2) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/types@8.31.1': {} '@typescript-eslint/typescript-estree@8.31.1(typescript@5.7.3)': @@ -15784,14 +15680,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.31.1(54d0da154413141e84f5f122231c9cc2)': + '@typescript-eslint/utils@8.31.1(ed143c62b382e7215ad94e178e4cd6bf)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.25.1(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@1.21.7)) '@typescript-eslint/scope-manager': 8.31.1 '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.7.3) - eslint: 9.25.1(jiti@1.21.7) - typescript: 5.7.3 + '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.2) + eslint: 9.26.0(jiti@1.21.7) + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -15806,17 +15702,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.31.1(fc0c2388923949f4574f6f5e00635e50)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.25.1(jiti@1.21.7)) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.2) - eslint: 9.25.1(jiti@1.21.7) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/visitor-keys@8.31.1': dependencies: '@typescript-eslint/types': 8.31.1 @@ -17562,6 +17447,8 @@ snapshots: content-tag@3.1.3: {} + content-tag@4.0.0: {} + content-type@1.0.5: {} continuable-cache@0.3.1: {} @@ -18398,25 +18285,10 @@ snapshots: transitivePeerDependencies: - eslint - ember-eslint-parser@0.5.9(a535be2b3684a674ff41516a3018459b): + ember-eslint-parser@0.5.9(e2e31f6a121bc816afcb81f6cb1703ea): dependencies: '@babel/core': 7.27.1 - '@babel/eslint-parser': 7.27.1(4a43aebe8aa03544380dbd584f92ba52) - '@glimmer/syntax': 0.92.3 - content-tag: 2.0.3 - eslint-scope: 7.2.2 - html-tags: 3.3.1 - mathml-tag-names: 2.1.3 - svg-tags: 1.0.0 - optionalDependencies: - '@typescript-eslint/parser': 8.31.1(54d0da154413141e84f5f122231c9cc2) - transitivePeerDependencies: - - eslint - - ember-eslint-parser@0.5.9(d0fff7a1dde1f47a4672960c7ac27b59): - dependencies: - '@babel/core': 7.27.1 - '@babel/eslint-parser': 7.27.1(4a43aebe8aa03544380dbd584f92ba52) + '@babel/eslint-parser': 7.27.1(b0a61dc2de373fef4b5bcd5cf244ffe7) '@glimmer/syntax': 0.92.3 content-tag: 2.0.3 eslint-scope: 7.2.2 @@ -18424,20 +18296,20 @@ snapshots: mathml-tag-names: 2.1.3 svg-tags: 1.0.0 optionalDependencies: - '@typescript-eslint/parser': 8.31.1(fc0c2388923949f4574f6f5e00635e50) + '@typescript-eslint/parser': 8.31.1(ed143c62b382e7215ad94e178e4cd6bf) transitivePeerDependencies: - eslint - ember-eslint@0.2.1(c1bcb6d22fccf46caa4c33fa572a5552): + ember-eslint@0.2.1(9db284e047e3aea84122c36dc595227e): dependencies: - '@babel/eslint-parser': 7.27.1(4a43aebe8aa03544380dbd584f92ba52) + '@babel/eslint-parser': 7.27.1(b0a61dc2de373fef4b5bcd5cf244ffe7) '@eslint/js': 9.25.1 - eslint-config-prettier: 10.1.2(eslint@9.25.1(jiti@1.21.7)) - eslint-plugin-ember: 12.5.0(a535be2b3684a674ff41516a3018459b) - eslint-plugin-n: 17.17.0(eslint@9.25.1(jiti@1.21.7)) - eslint-plugin-qunit: 8.1.2(eslint@9.25.1(jiti@1.21.7)) + eslint-config-prettier: 10.1.2(eslint@9.26.0(jiti@1.21.7)) + eslint-plugin-ember: 12.5.0(e2e31f6a121bc816afcb81f6cb1703ea) + eslint-plugin-n: 17.17.0(eslint@9.26.0(jiti@1.21.7)) + eslint-plugin-qunit: 8.1.2(eslint@9.26.0(jiti@1.21.7)) globals: 15.15.0 - typescript-eslint: 8.31.1(54d0da154413141e84f5f122231c9cc2) + typescript-eslint: 8.31.1(ed143c62b382e7215ad94e178e4cd6bf) transitivePeerDependencies: - '@babel/core' - '@typescript-eslint/parser' @@ -18462,23 +18334,6 @@ snapshots: - supports-color - typescript - ember-eslint@0.2.1(ed84be95ea4c47eac8a9e48402b46d98): - dependencies: - '@babel/eslint-parser': 7.27.1(4a43aebe8aa03544380dbd584f92ba52) - '@eslint/js': 9.25.1 - eslint-config-prettier: 10.1.2(eslint@9.25.1(jiti@1.21.7)) - eslint-plugin-ember: 12.5.0(d0fff7a1dde1f47a4672960c7ac27b59) - eslint-plugin-n: 17.17.0(eslint@9.25.1(jiti@1.21.7)) - eslint-plugin-qunit: 8.1.2(eslint@9.25.1(jiti@1.21.7)) - globals: 15.15.0 - typescript-eslint: 8.31.1(fc0c2388923949f4574f6f5e00635e50) - transitivePeerDependencies: - - '@babel/core' - - '@typescript-eslint/parser' - - eslint - - supports-color - - typescript - ember-focus-trap@1.1.1(c74a9e52ce1ef5cbfa31d9959d9dadca): dependencies: '@embroider/addon-shim': 1.10.0 @@ -19016,20 +18871,11 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.25.1(jiti@1.21.7)): - dependencies: - eslint: 9.25.1(jiti@1.21.7) - semver: 7.7.1 - eslint-compat-utils@0.5.1(eslint@9.26.0(jiti@1.21.7)): dependencies: eslint: 9.26.0(jiti@1.21.7) semver: 7.7.1 - eslint-config-prettier@10.1.2(eslint@9.25.1(jiti@1.21.7)): - dependencies: - eslint: 9.25.1(jiti@1.21.7) - eslint-config-prettier@10.1.2(eslint@9.26.0(jiti@1.21.7)): dependencies: eslint: 9.26.0(jiti@1.21.7) @@ -19059,64 +18905,25 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(ef28e62e366c2199181025423683258b): - dependencies: - '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.0(supports-color@8.1.1) - eslint: 9.25.1(jiti@1.21.7) - get-tsconfig: 4.10.0 - is-bun-module: 2.0.0 - stable-hash: 0.0.5 - tinyglobby: 0.2.13 - unrs-resolver: 1.7.2 - optionalDependencies: - eslint-plugin-import: 2.31.0(e88e4ed15243864f8818c186c313aaf2) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.0(ae218d62a979fb4ecb9e1116a1034623): + eslint-module-utils@2.12.0(850c2ff3402474c7534efc9f18bc2413): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.31.1(f9310751980ea81c09f7d2c9b8aa30c2) + '@typescript-eslint/parser': 8.31.1(ed143c62b382e7215ad94e178e4cd6bf) eslint: 9.26.0(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(5bc64c1dfe48047f460551ec2eda23c6) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(da514721e6fb4403e3d82df457b092ff): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.31.1(fc0c2388923949f4574f6f5e00635e50) - eslint: 9.25.1(jiti@1.21.7) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(ef28e62e366c2199181025423683258b) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.0(fc6dd6a4b8161574b4fa726f7fb74ca6): + eslint-module-utils@2.12.0(ae218d62a979fb4ecb9e1116a1034623): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.31.1(54d0da154413141e84f5f122231c9cc2) - eslint: 9.25.1(jiti@1.21.7) + '@typescript-eslint/parser': 8.31.1(f9310751980ea81c09f7d2c9b8aa30c2) + eslint: 9.26.0(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(ef28e62e366c2199181025423683258b) - transitivePeerDependencies: - - supports-color - - eslint-plugin-decorator-position@6.0.0(50deeae86dce8f13aa370e771bd788cf): - dependencies: - '@babel/core': 7.27.1 - '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.1) - '@ember-data/rfc395-data': 0.0.4 - ember-rfc176-data: 0.3.18 - eslint: 9.25.1(jiti@1.21.7) - snake-case: 3.0.4 - optionalDependencies: - '@babel/eslint-parser': 7.27.1(4a43aebe8aa03544380dbd584f92ba52) + eslint-import-resolver-typescript: 3.10.1(5bc64c1dfe48047f460551ec2eda23c6) transitivePeerDependencies: - supports-color @@ -19151,49 +18958,24 @@ snapshots: transitivePeerDependencies: - '@babel/core' - eslint-plugin-ember@12.5.0(a535be2b3684a674ff41516a3018459b): + eslint-plugin-ember@12.5.0(e2e31f6a121bc816afcb81f6cb1703ea): dependencies: '@ember-data/rfc395-data': 0.0.4 css-tree: 3.1.0 - ember-eslint-parser: 0.5.9(a535be2b3684a674ff41516a3018459b) + ember-eslint-parser: 0.5.9(e2e31f6a121bc816afcb81f6cb1703ea) ember-rfc176-data: 0.3.18 - eslint: 9.25.1(jiti@1.21.7) - eslint-utils: 3.0.0(eslint@9.25.1(jiti@1.21.7)) - estraverse: 5.3.0 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - requireindex: 1.2.0 - snake-case: 3.0.4 - optionalDependencies: - '@typescript-eslint/parser': 8.31.1(54d0da154413141e84f5f122231c9cc2) - transitivePeerDependencies: - - '@babel/core' - - eslint-plugin-ember@12.5.0(d0fff7a1dde1f47a4672960c7ac27b59): - dependencies: - '@ember-data/rfc395-data': 0.0.4 - css-tree: 3.1.0 - ember-eslint-parser: 0.5.9(d0fff7a1dde1f47a4672960c7ac27b59) - ember-rfc176-data: 0.3.18 - eslint: 9.25.1(jiti@1.21.7) - eslint-utils: 3.0.0(eslint@9.25.1(jiti@1.21.7)) + eslint: 9.26.0(jiti@1.21.7) + eslint-utils: 3.0.0(eslint@9.26.0(jiti@1.21.7)) estraverse: 5.3.0 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 requireindex: 1.2.0 snake-case: 3.0.4 optionalDependencies: - '@typescript-eslint/parser': 8.31.1(fc0c2388923949f4574f6f5e00635e50) + '@typescript-eslint/parser': 8.31.1(ed143c62b382e7215ad94e178e4cd6bf) transitivePeerDependencies: - '@babel/core' - eslint-plugin-es-x@7.8.0(eslint@9.25.1(jiti@1.21.7)): - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.25.1(jiti@1.21.7)) - '@eslint-community/regexpp': 4.12.1 - eslint: 9.25.1(jiti@1.21.7) - eslint-compat-utils: 0.5.1(eslint@9.25.1(jiti@1.21.7)) - eslint-plugin-es-x@7.8.0(eslint@9.26.0(jiti@1.21.7)): dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@1.21.7)) @@ -19230,36 +19012,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.31.0(e539445447c6ca98656cf52fda269ddc): - dependencies: - '@rtsao/scc': 1.1.0 - array-includes: '@nolyfill/array-includes@1.0.44' - array.prototype.findlastindex: '@nolyfill/array.prototype.findlastindex@1.0.44' - array.prototype.flat: '@nolyfill/array.prototype.flat@1.0.44' - array.prototype.flatmap: '@nolyfill/array.prototype.flatmap@1.0.44' - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 9.25.1(jiti@1.21.7) - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(da514721e6fb4403e3d82df457b092ff) - hasown: '@nolyfill/hasown@1.0.44' - is-core-module: '@nolyfill/is-core-module@1.0.39' - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: '@nolyfill/object.fromentries@1.0.44' - object.groupby: '@nolyfill/object.groupby@1.0.44' - object.values: '@nolyfill/object.values@1.0.44' - semver: 6.3.1 - string.prototype.trimend: '@nolyfill/string.prototype.trimend@1.0.44' - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.31.1(fc0c2388923949f4574f6f5e00635e50) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-import@2.31.0(e88e4ed15243864f8818c186c313aaf2): + eslint-plugin-import@2.31.0(bf7b235b1067ce8f4deb8860cd984d89): dependencies: '@rtsao/scc': 1.1.0 array-includes: '@nolyfill/array-includes@1.0.44' @@ -19268,9 +19021,9 @@ snapshots: array.prototype.flatmap: '@nolyfill/array.prototype.flatmap@1.0.44' debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.25.1(jiti@1.21.7) + eslint: 9.26.0(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(fc6dd6a4b8161574b4fa726f7fb74ca6) + eslint-module-utils: 2.12.0(850c2ff3402474c7534efc9f18bc2413) hasown: '@nolyfill/hasown@1.0.44' is-core-module: '@nolyfill/is-core-module@1.0.39' is-glob: 4.0.3 @@ -19282,7 +19035,7 @@ snapshots: string.prototype.trimend: '@nolyfill/string.prototype.trimend@1.0.44' tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.31.1(54d0da154413141e84f5f122231c9cc2) + '@typescript-eslint/parser': 8.31.1(ed143c62b382e7215ad94e178e4cd6bf) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -19293,18 +19046,6 @@ snapshots: lodash: 4.17.21 vscode-json-languageservice: 4.2.1 - eslint-plugin-n@17.17.0(eslint@9.25.1(jiti@1.21.7)): - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.25.1(jiti@1.21.7)) - enhanced-resolve: 5.18.1 - eslint: 9.25.1(jiti@1.21.7) - eslint-plugin-es-x: 7.8.0(eslint@9.25.1(jiti@1.21.7)) - get-tsconfig: 4.10.0 - globals: 15.15.0 - ignore: 5.3.2 - minimatch: 9.0.5 - semver: 7.7.1 - eslint-plugin-n@17.17.0(eslint@9.26.0(jiti@1.21.7)): dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@1.21.7)) @@ -19317,13 +19058,6 @@ snapshots: minimatch: 9.0.5 semver: 7.7.1 - eslint-plugin-qunit@8.1.2(eslint@9.25.1(jiti@1.21.7)): - dependencies: - eslint-utils: 3.0.0(eslint@9.25.1(jiti@1.21.7)) - requireindex: 1.2.0 - transitivePeerDependencies: - - eslint - eslint-plugin-qunit@8.1.2(eslint@9.26.0(jiti@1.21.7)): dependencies: eslint-utils: 3.0.0(eslint@9.26.0(jiti@1.21.7)) @@ -19331,10 +19065,6 @@ snapshots: transitivePeerDependencies: - eslint - eslint-plugin-simple-import-sort@12.1.1(eslint@9.25.1(jiti@1.21.7)): - dependencies: - eslint: 9.25.1(jiti@1.21.7) - eslint-plugin-simple-import-sort@12.1.1(eslint@9.26.0(jiti@1.21.7)): dependencies: eslint: 9.26.0(jiti@1.21.7) @@ -19354,11 +19084,6 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@9.25.1(jiti@1.21.7)): - dependencies: - eslint: 9.25.1(jiti@1.21.7) - eslint-visitor-keys: 2.1.0 - eslint-utils@3.0.0(eslint@9.26.0(jiti@1.21.7)): dependencies: eslint: 9.26.0(jiti@1.21.7) @@ -19370,51 +19095,9 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.25.1(jiti@1.21.7): - dependencies: - '@eslint-community/eslint-utils': 4.6.1(eslint@9.25.1(jiti@1.21.7)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.0 - '@eslint/config-helpers': 0.2.2 - '@eslint/core': 0.13.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.25.1 - '@eslint/plugin-kit': 0.2.8 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.2 - '@types/estree': 1.0.7 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.0(supports-color@8.1.1) - escape-string-regexp: 4.0.0 - eslint-scope: 8.3.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 1.21.7 - transitivePeerDependencies: - - supports-color - eslint@9.26.0(jiti@1.21.7): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.6.1(eslint@9.26.0(jiti@1.21.7)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.20.0 '@eslint/config-helpers': 0.2.2 @@ -19489,6 +19172,8 @@ snapshots: estraverse@5.3.0: {} + estree-walker@0.6.1: {} + estree-walker@2.0.2: {} estree-walker@3.0.3: @@ -23381,6 +23066,16 @@ snapshots: optionalDependencies: '@babel/code-frame': 7.27.1 + rollup-plugin-inject@3.0.2: + dependencies: + estree-walker: 0.6.1 + magic-string: 0.25.9 + rollup-pluginutils: 2.8.2 + + rollup-plugin-node-polyfills@0.2.1: + dependencies: + rollup-plugin-inject: 3.0.2 + rollup-plugin-ts@3.4.5(b06035194ce3a7bebf1c6065b473a8cf): dependencies: '@rollup/pluginutils': 5.1.4(rollup@4.40.1) @@ -23402,6 +23097,10 @@ snapshots: '@babel/preset-typescript': 7.27.1(@babel/core@7.27.1) '@babel/runtime': 7.27.1 + rollup-pluginutils@2.8.2: + dependencies: + estree-walker: 0.6.1 + rollup@4.40.1: dependencies: '@types/estree': 1.0.7 @@ -24580,13 +24279,13 @@ snapshots: dependencies: semver: 7.7.1 - typescript-eslint@8.31.1(54d0da154413141e84f5f122231c9cc2): + typescript-eslint@8.31.1(ed143c62b382e7215ad94e178e4cd6bf): dependencies: - '@typescript-eslint/eslint-plugin': 8.31.1(d59bc2466e37e4c727f298aa0ba509e7) - '@typescript-eslint/parser': 8.31.1(54d0da154413141e84f5f122231c9cc2) - '@typescript-eslint/utils': 8.31.1(54d0da154413141e84f5f122231c9cc2) - eslint: 9.25.1(jiti@1.21.7) - typescript: 5.7.3 + '@typescript-eslint/eslint-plugin': 8.31.1(2cdd8362e14717d124bbc2de00118815) + '@typescript-eslint/parser': 8.31.1(ed143c62b382e7215ad94e178e4cd6bf) + '@typescript-eslint/utils': 8.31.1(ed143c62b382e7215ad94e178e4cd6bf) + eslint: 9.26.0(jiti@1.21.7) + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -24600,16 +24299,6 @@ snapshots: transitivePeerDependencies: - supports-color - typescript-eslint@8.31.1(fc0c2388923949f4574f6f5e00635e50): - dependencies: - '@typescript-eslint/eslint-plugin': 8.31.1(b8ee63e76d534cdb15be9dd6af5dd6c7) - '@typescript-eslint/parser': 8.31.1(fc0c2388923949f4574f6f5e00635e50) - '@typescript-eslint/utils': 8.31.1(fc0c2388923949f4574f6f5e00635e50) - eslint: 9.25.1(jiti@1.21.7) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - typescript-memoize@1.1.1: {} typescript@5.7.3: {} @@ -24930,11 +24619,11 @@ snapshots: - rollup - supports-color - vite-plugin-node-polyfills@0.23.0(31546948ebf91a14ce3f9df2a33bf7d7): + vite-plugin-node-polyfills@0.23.0(be0b5b35fea014f1706c2d8911db5880): dependencies: '@rollup/plugin-inject': 5.0.5(rollup@4.40.1) node-stdlib-browser: 1.3.1 - vite: 6.3.4(f29614dea4066c5dfbbb8cdc00ed66a1) + vite: 6.3.5(f29614dea4066c5dfbbb8cdc00ed66a1) transitivePeerDependencies: - rollup @@ -24948,21 +24637,6 @@ snapshots: fsevents: 2.3.3 terser: 5.39.0 - vite@6.3.4(f29614dea4066c5dfbbb8cdc00ed66a1): - dependencies: - esbuild: 0.25.3 - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 - postcss: 8.5.3 - rollup: 4.40.1 - tinyglobby: 0.2.13 - optionalDependencies: - '@types/node': 22.15.3 - fsevents: 2.3.3 - jiti: 1.21.7 - terser: 5.39.0 - yaml: 2.7.1 - vite@6.3.5(f29614dea4066c5dfbbb8cdc00ed66a1): dependencies: esbuild: 0.25.4 From 1a8a0e54550dab15f92cc626a4088bdd596431fd Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Sun, 18 May 2025 16:18:10 -0400 Subject: [PATCH 009/222] ope --- .../addon/src/compile/formats/gjs.ts | 35 ++++++++++--------- packages/repl-sdk/src/index.js | 16 +++++++-- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/packages/ember-repl/addon/src/compile/formats/gjs.ts b/packages/ember-repl/addon/src/compile/formats/gjs.ts index 017dfcabf..8f39d0279 100644 --- a/packages/ember-repl/addon/src/compile/formats/gjs.ts +++ b/packages/ember-repl/addon/src/compile/formats/gjs.ts @@ -47,27 +47,30 @@ export async function compileJS( resolve: { ...modules, ...extraModules, - 'ember-source/dist/ember-template-compiler': import( - // eslint-disable-next-line - // @ts-ignore - 'ember-source/dist/ember-template-compiler.js' - ), - 'ember-source/dist/ember-template-compiler.js': import( - // eslint-disable-next-line - // @ts-ignore - 'ember-source/dist/ember-template-compiler.js' - ), + 'ember-source/dist/ember-template-compiler': () => + import( + // eslint-disable-next-line + // @ts-ignore + 'ember-source/dist/ember-template-compiler.js' + ), + 'ember-source/dist/ember-template-compiler.js': () => + import( + // eslint-disable-next-line + // @ts-ignore + 'ember-source/dist/ember-template-compiler.js' + ), // Direct Dependencies // '@babel/standalone': import('@babel/standalone'), - 'content-tag': import('content-tag'), - 'decorator-transforms': import('decorator-transforms'), - 'decorator-transforms/runtime': import('decorator-transforms/runtime'), - 'babel-plugin-ember-template-compilation': import('babel-plugin-ember-template-compilation'), + 'content-tag': () => import('content-tag'), + 'decorator-transforms': () => import('decorator-transforms'), + 'decorator-transforms/runtime': () => import('decorator-transforms/runtime'), + 'babel-plugin-ember-template-compilation': () => + import('babel-plugin-ember-template-compilation'), // Dependencies of the above - 'babel-import-util': import('babel-import-util'), + 'babel-import-util': () => import('babel-import-util'), // eslint-disable-next-line // @ts-ignore - 'babel-plugin-debug-macros': import('babel-plugin-debug-macros'), + 'babel-plugin-debug-macros': () => import('babel-plugin-debug-macros'), }, }); diff --git a/packages/repl-sdk/src/index.js b/packages/repl-sdk/src/index.js index 5659df798..d79784a86 100644 --- a/packages/repl-sdk/src/index.js +++ b/packages/repl-sdk/src/index.js @@ -99,7 +99,7 @@ export class Compiler { `${Object.keys(result) .map((exportName) => { if (exportName === 'default') { - return `export default mod.default;`; + return `export default mod.default ?? mod;`; } return `export const ${exportName} = mod.${exportName};`; @@ -266,7 +266,19 @@ export class Compiler { }; #nestedPublicAPI = { - tryResolve: (name) => importShim(/* vite-ignore */ name), + tryResolve: async (name) => { + const existing = await window[Symbol.for(secretKey)].resolves?.[name]; + + if (existing) { + console.debug(name, 'already resolved'); + + return existing; + } + + // Global + // eslint-disable-next-line + return importShim(/* vite-ignore */ name); + }, tryResolveAll: async (names, fallback) => { let results = await Promise.all(names.map(this.#nestedPublicAPI.tryResolve)); From f82260b50a27d5a7cf0a0fdf439c2ee759007f1b Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Sun, 18 May 2025 16:22:11 -0400 Subject: [PATCH 010/222] ope --- .../addon/src/compile/formats/gjs.ts | 30 +++++++++++- .../src/compile/formats/known-modules.ts | 49 ------------------- 2 files changed, 28 insertions(+), 51 deletions(-) delete mode 100644 packages/ember-repl/addon/src/compile/formats/known-modules.ts diff --git a/packages/ember-repl/addon/src/compile/formats/gjs.ts b/packages/ember-repl/addon/src/compile/formats/gjs.ts index 8f39d0279..c9b9426fc 100644 --- a/packages/ember-repl/addon/src/compile/formats/gjs.ts +++ b/packages/ember-repl/addon/src/compile/formats/gjs.ts @@ -5,7 +5,6 @@ import { template } from '@ember/template-compiler/runtime'; import { Compiler } from 'repl-sdk'; import { nameFor } from '../utils.ts'; -import { modules } from './known-modules.ts'; import type { CompileResult } from '../types.ts'; import type { ComponentLike } from '@glint/template'; @@ -45,8 +44,35 @@ export async function compileJS( const compiler = new Compiler({ logging: true, resolve: { - ...modules, + ///////////////////////////// + // Provided by the framework + ///////////////////////////// + '@ember/application': () => import('@ember/application'), + '@ember/application/instance': () => import('@ember/application/instance'), + '@ember/array': () => import('@ember/array'), + '@ember/component': () => import('@ember/component'), + '@ember/component/helper': () => import('@ember/component/helper'), + '@ember/component/template-only': () => import('@ember/component/template-only'), + '@ember/debug': () => import('@ember/debug'), + '@ember/destroyable': () => import('@ember/destroyable'), + '@ember/helper': () => import('@ember/helper'), + '@ember/modifier': () => import('@ember/modifier'), + '@ember/object': () => import('@ember/object'), + '@ember/runloop': () => import('@ember/runloop'), + '@ember/service': () => import('@ember/service'), + '@ember/template-factory': () => import('@ember/template-factory'), + '@ember/utils': () => import('@ember/utils'), + '@ember/template': () => import('@ember/template'), + '@ember/owner': () => import('@ember/owner'), + '@glimmer/component': () => import('@glimmer/component'), + '@glimmer/tracking': () => import('@glimmer/tracking'), + ///////////////////////////// + // Provided by the user (optional) + ///////////////////////////// ...extraModules, + ///////////////////////////// + // Required for compilation (in addition to (some of) the framework deps + ///////////////////////////// 'ember-source/dist/ember-template-compiler': () => import( // eslint-disable-next-line diff --git a/packages/ember-repl/addon/src/compile/formats/known-modules.ts b/packages/ember-repl/addon/src/compile/formats/known-modules.ts deleted file mode 100644 index 952742c04..000000000 --- a/packages/ember-repl/addon/src/compile/formats/known-modules.ts +++ /dev/null @@ -1,49 +0,0 @@ -/** - * We need to import and hang on to these references so that they - * don't get optimized away during deploy - */ -import _GlimmerComponent from '@glimmer/component'; -import * as _tracking from '@glimmer/tracking'; -import * as _application from '@ember/application'; -import * as _array from '@ember/array'; -import * as _EmberComponent from '@ember/component'; -import * as _EmberComponentHelper from '@ember/component/helper'; -import _TO from '@ember/component/template-only'; -import * as _debug from '@ember/debug'; -import * as _destroyable from '@ember/destroyable'; -import * as _helpers from '@ember/helper'; -import * as _modifier from '@ember/modifier'; -import * as _object from '@ember/object'; -import * as _owner from '@ember/owner'; -import * as _runloop from '@ember/runloop'; -import * as _service from '@ember/service'; -import * as _template from '@ember/template'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { createTemplateFactory } from '@ember/template-factory'; -import * as _utils from '@ember/utils'; - -import * as _decoratorsRuntime from 'decorator-transforms/runtime'; - -export const modules = { - '@ember/application': _application, - '@ember/array': _array, - '@ember/component': _EmberComponent, - '@ember/component/helper': _EmberComponentHelper, - '@ember/component/template-only': Object.assign(_TO, { default: _TO }), - '@ember/debug': _debug, - '@ember/destroyable': _destroyable, - '@ember/helper': _helpers, - '@ember/modifier': _modifier, - '@ember/object': _object, - '@ember/runloop': _runloop, - '@ember/service': _service, - '@ember/template-factory': { createTemplateFactory }, - '@ember/utils': _utils, - '@ember/template': _template, - '@ember/owner': _owner, - - '@glimmer/component': _GlimmerComponent, - '@glimmer/tracking': _tracking, - 'decorator-transforms/runtime': _decoratorsRuntime, -}; From 78eb6530cc2f22122d50ff3e2b0f19ea63a1f776 Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Sun, 18 May 2025 16:31:26 -0400 Subject: [PATCH 011/222] ope --- .../test-app/app/templates/application.gjs | 17 +++++++++++--- packages/repl-sdk/src/compilers/glimmer-js.js | 23 +++++++++++++++---- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/packages/ember-repl/test-app/app/templates/application.gjs b/packages/ember-repl/test-app/app/templates/application.gjs index 9843979fe..403e373b9 100644 --- a/packages/ember-repl/test-app/app/templates/application.gjs +++ b/packages/ember-repl/test-app/app/templates/application.gjs @@ -18,20 +18,31 @@ const md = ` **emphasis** text `; - `; - let jsxReact = ` + const jsxReact = ` import React from 'react'; export default <> @@ -47,7 +47,7 @@ describe('markdown', () => { ; `; - let svelte = ` + const svelte = ` @@ -67,11 +67,11 @@ graph TD; `; test('vue live', async () => { - let compiler = new Compiler(); - let element = await compiler.compile('md', `# Hello\n\n` + fenced(vue, 'vue live')); + const compiler = new Compiler(); + const element = await compiler.compile('md', `# Hello\n\n` + fenced(vue, 'vue live')); - let h1 = element.querySelector('h1'); - let h2 = element.querySelector('h2'); + const h1 = element.querySelector('h1'); + const h2 = element.querySelector('h2'); // getComputedStyle doesn't work without the element existing in the document document.body.appendChild(element); @@ -80,11 +80,11 @@ graph TD; expect(h2).toBeTruthy(); expect(h1?.textContent).toContain('Hello'); expect(h2?.textContent).toContain('GENERAL KENOBI!'); - expect(window.getComputedStyle(h2!).color).toBe('rgb(255, 0, 0)'); + expect(window.getComputedStyle(h2).color).toBe('rgb(255, 0, 0)'); }); test('jsx requires a flavor to be specified', async () => { - let compiler = new Compiler(); + const compiler = new Compiler(); expect( compiler.compile( @@ -98,24 +98,24 @@ graph TD; }); test('svelte live', async () => { - let compiler = new Compiler(); - let element = await compiler.compile('md', fenced(svelte, 'svelte live')); + const compiler = new Compiler(); + const element = await compiler.compile('md', fenced(svelte, 'svelte live')); - let h1 = element.querySelector('h1'); + const h1 = element.querySelector('h1'); // getComputedStyle doesn't work without the element existing in the document document.body.appendChild(element); expect(h1).toBeTruthy(); expect(h1?.textContent).toContain('Hello'); - expect(window.getComputedStyle(h1!).color).toBe('rgb(255, 0, 0)'); + expect(window.getComputedStyle(h1).color).toBe('rgb(255, 0, 0)'); }); test('mermaid (no live)', async () => { - let compiler = new Compiler(); - let element = await compiler.compile('md', fenced(mermaid, 'mermaid')); + const compiler = new Compiler(); + const element = await compiler.compile('md', fenced(mermaid, 'mermaid')); - let rootSVG = element.querySelector('svg'); + const rootSVG = element.querySelector('svg'); expect(rootSVG, 'Mermaid draws in SVG inside the
 tag').toBeTruthy();
     });
diff --git a/packages/repl-sdk/tests-self/tests/mermaid.test.ts b/packages/repl-sdk/tests-self/tests/mermaid.test.ts
index 2ec26a58f..8286f6f9d 100644
--- a/packages/repl-sdk/tests-self/tests/mermaid.test.ts
+++ b/packages/repl-sdk/tests-self/tests/mermaid.test.ts
@@ -3,9 +3,9 @@ import { describe, expect, test } from 'vitest';
 
 describe('Custom compiler', () => {
   test('it works', async () => {
-    let compiler = new Compiler();
+    const compiler = new Compiler();
     // Vue comes from esm.sh
-    let element = await compiler.compile(
+    const element = await compiler.compile(
       'mermaid',
       `
   graph TD
@@ -19,7 +19,7 @@ describe('Custom compiler', () => {
     // getComputedStyle doesn't work without the element existing in the document
     document.body.appendChild(element);
 
-    let rootSVG = element.querySelector('svg');
+    const rootSVG = element.querySelector('svg');
 
     expect(rootSVG, 'Mermaid draws in SVG inside the 
 tag').toBeTruthy();
   });
diff --git a/packages/repl-sdk/tests-self/tests/svelte.test.ts b/packages/repl-sdk/tests-self/tests/svelte.test.ts
index 7e62e21a5..159b8e4ef 100644
--- a/packages/repl-sdk/tests-self/tests/svelte.test.ts
+++ b/packages/repl-sdk/tests-self/tests/svelte.test.ts
@@ -3,8 +3,8 @@ import { describe, expect, test } from 'vitest';
 
 describe('svelte', () => {
   test('it works', async () => {
-    let compiler = new Compiler();
-    let element = await compiler.compile(
+    const compiler = new Compiler();
+    const element = await compiler.compile(
       'svelte',
       `
       
-    
-
-    {{content-for "body-footer"}}
-  
-
diff --git a/packages/repl-sdk/tests-ember/package.json b/packages/repl-sdk/tests-ember/package.json
deleted file mode 100644
index aa55fbb89..000000000
--- a/packages/repl-sdk/tests-ember/package.json
+++ /dev/null
@@ -1,114 +0,0 @@
-{
-  "name": "tests-ember",
-  "version": "0.0.0",
-  "private": true,
-  "description": "Small description for tests-ember goes here",
-  "repository": "",
-  "license": "MIT",
-  "author": "",
-  "directories": {
-    "doc": "doc",
-    "test": "tests"
-  },
-  "scripts": {
-    "build": "vite build",
-    "lint": "concurrently \"pnpm:lint:*(!fix)\" --names \"lint:\"",
-    "lint:css": "stylelint \"**/*.css\"",
-    "lint:css:fix": "concurrently \"pnpm:lint:css -- --fix\"",
-    "lint:fix": "concurrently \"pnpm:lint:*:fix\" --names \"fix:\"",
-    "lint:hbs": "ember-template-lint .",
-    "lint:hbs:fix": "ember-template-lint . --fix",
-    "lint:js": "eslint . --cache",
-    "lint:js:fix": "eslint . --fix",
-    "lint:types": "glint",
-    "start": "vite",
-    "test": "concurrently \"pnpm:lint\" \"pnpm:test:*\" --names \"lint,test:\"",
-    "test:ember": "vite build --mode test && ember test --path dist"
-  },
-  "devDependencies": {
-    "@babel/core": "^7.26.0",
-    "@babel/eslint-parser": "^7.25.9",
-    "@babel/plugin-transform-runtime": "^7.25.7",
-    "@babel/plugin-transform-typescript": "^7.25.9",
-    "@babel/runtime": "^7.26.0",
-    "@babel/standalone": "^7.26.2",
-    "@ember/optional-features": "^2.2.0",
-    "@ember/string": "^4.0.0",
-    "@ember/test-helpers": "^4.0.4",
-    "@embroider/compat": "3.7.1-unstable.0aa8fc6",
-    "@embroider/config-meta-loader": "0.0.1-unstable.0aa8fc6",
-    "@embroider/core": "3.4.20-unstable.0aa8fc6",
-    "@embroider/macros": "1.16.9",
-    "@embroider/test-setup": "4.0.1-unstable.0aa8fc6",
-    "@embroider/vite": "0.2.2-unstable.0aa8fc6",
-    "@glimmer/component": "^1.1.2",
-    "@glimmer/tracking": "^1.1.2",
-    "@glint/core": "1.4.1-unstable.34c4510",
-    "@glint/environment-ember-loose": "1.4.1-unstable.34c4510",
-    "@glint/environment-ember-template-imports": "1.4.1-unstable.34c4510",
-    "@glint/template": "1.4.1-unstable.34c4510",
-    "@rollup/plugin-babel": "^6.0.4",
-    "@tsconfig/ember": "^3.0.8",
-    "@types/eslint__js": "^8.42.3",
-    "@types/qunit": "^2.19.12",
-    "@types/rsvp": "^4.0.9",
-    "@typescript-eslint/eslint-plugin": "^8.15.0",
-    "@typescript-eslint/parser": "^8.15.0",
-    "babel-plugin-ember-template-compilation": "^2.3.0",
-    "concurrently": "^9.1.0",
-    "content-tag": "^3.0.0",
-    "decorator-transforms": "^2.3.0",
-    "ember-auto-import": "^2.10.0",
-    "ember-cli": "~6.0.1",
-    "ember-cli-babel": "^8.2.0",
-    "ember-cli-htmlbars": "^6.3.0",
-    "ember-load-initializers": "^3.0.1",
-    "ember-modifier": "^4.2.0",
-    "ember-page-title": "^8.2.3",
-    "ember-qunit": "^8.1.1",
-    "ember-resolver": "^13.0.2",
-    "ember-route-template": "^1.0.3",
-    "ember-source": "~6.0.0",
-    "ember-template-lint": "^6.0.0",
-    "eslint": "^9.15.0",
-    "eslint-config-prettier": "^9.1.0",
-    "eslint-plugin-ember": "^12.3.1",
-    "eslint-plugin-n": "^17.14.0",
-    "eslint-plugin-prettier": "^5.2.1",
-    "eslint-plugin-qunit": "^8.1.2",
-    "globals": "^15.12.0",
-    "loader.js": "^4.7.0",
-    "prettier": "^3.3.3",
-    "prettier-plugin-ember-template-tag": "^2.0.2",
-    "qunit": "^2.22.0",
-    "qunit-dom": "^3.3.0",
-    "repl-sdk": "workspace:*",
-    "stylelint": "^15.11.0",
-    "stylelint-config-standard": "^34.0.0",
-    "stylelint-prettier": "^4.1.0",
-    "tracked-built-ins": "^3.3.0",
-    "typescript": "^5.5.4",
-    "typescript-eslint": "^8.15.0",
-    "vite": "^5.4.11",
-    "vite-plugin-wasm": "^3.3.0",
-    "webpack": "^5.96.1"
-  },
-  "engines": {
-    "node": ">= 18"
-  },
-  "ember": {
-    "edition": "octane"
-  },
-  "ember-addon": {
-    "type": "app",
-    "version": 2
-  },
-  "exports": {
-    "./tests/*": "./tests/*",
-    "./*": "./app/*"
-  },
-  "dependencies": {
-    "babel-plugin-debug-macros": "^1.0.2",
-    "path-browserify": "^1.0.1"
-  }
-}
diff --git a/packages/repl-sdk/tests-ember/public/robots.txt b/packages/repl-sdk/tests-ember/public/robots.txt
deleted file mode 100644
index f5916452e..000000000
--- a/packages/repl-sdk/tests-ember/public/robots.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# http://www.robotstxt.org
-User-agent: *
-Disallow:
diff --git a/packages/repl-sdk/tests-ember/testem.js b/packages/repl-sdk/tests-ember/testem.js
deleted file mode 100644
index b4b6691fd..000000000
--- a/packages/repl-sdk/tests-ember/testem.js
+++ /dev/null
@@ -1,25 +0,0 @@
-'use strict';
-
-if (typeof module !== 'undefined') {
-  module.exports = {
-    test_page: 'tests/index.html?hidepassed',
-    disable_watching: true,
-    launch_in_ci: ['Chrome'],
-    launch_in_dev: ['Chrome'],
-    browser_start_timeout: 120,
-    browser_args: {
-      Chrome: {
-        ci: [
-          // --no-sandbox is needed when running Chrome inside a container
-          process.env.CI ? '--no-sandbox' : null,
-          '--headless',
-          '--disable-dev-shm-usage',
-          '--disable-software-rasterizer',
-          '--mute-audio',
-          '--remote-debugging-port=0',
-          '--window-size=1440,900',
-        ].filter(Boolean),
-      },
-    },
-  };
-}
diff --git a/packages/repl-sdk/tests-ember/tests/helpers/index.ts b/packages/repl-sdk/tests-ember/tests/helpers/index.ts
deleted file mode 100644
index e190f567e..000000000
--- a/packages/repl-sdk/tests-ember/tests/helpers/index.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import {
-  setupApplicationTest as upstreamSetupApplicationTest,
-  setupRenderingTest as upstreamSetupRenderingTest,
-  setupTest as upstreamSetupTest,
-  type SetupTestOptions,
-} from 'ember-qunit';
-
-// This file exists to provide wrappers around ember-qunit's
-// test setup functions. This way, you can easily extend the setup that is
-// needed per test type.
-
-function setupApplicationTest(hooks: NestedHooks, options?: SetupTestOptions) {
-  upstreamSetupApplicationTest(hooks, options);
-
-  // Additional setup for application tests can be done here.
-  //
-  // For example, if you need an authenticated session for each
-  // application test, you could do:
-  //
-  // hooks.beforeEach(async function () {
-  //   await authenticateSession(); // ember-simple-auth
-  // });
-  //
-  // This is also a good place to call test setup functions coming
-  // from other addons:
-  //
-  // setupIntl(hooks, 'en-us'); // ember-intl
-  // setupMirage(hooks); // ember-cli-mirage
-}
-
-function setupRenderingTest(hooks: NestedHooks, options?: SetupTestOptions) {
-  upstreamSetupRenderingTest(hooks, options);
-
-  // Additional setup for rendering tests can be done here.
-}
-
-function setupTest(hooks: NestedHooks, options?: SetupTestOptions) {
-  upstreamSetupTest(hooks, options);
-
-  // Additional setup for unit tests can be done here.
-}
-
-export { setupApplicationTest, setupRenderingTest, setupTest };
diff --git a/packages/repl-sdk/tests-ember/tests/index.html b/packages/repl-sdk/tests-ember/tests/index.html
deleted file mode 100644
index 5c6bc5ca8..000000000
--- a/packages/repl-sdk/tests-ember/tests/index.html
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-  
-    
-    AppTemplate Tests
-    
-    
-
-    {{content-for "head"}} {{content-for "test-head"}}
-
-    
-    
-    
-
-    {{content-for "head-footer"}} {{content-for "test-head-footer"}}
-  
-  
-    {{content-for "body"}} {{content-for "test-body"}}
-
-    
-
-
-
-
-
- - - - - - - - - {{content-for "body-footer"}} - - diff --git a/packages/repl-sdk/tests-ember/tests/integration/.gitkeep b/packages/repl-sdk/tests-ember/tests/integration/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/repl-sdk/tests-ember/tests/test-helper.ts b/packages/repl-sdk/tests-ember/tests/test-helper.ts deleted file mode 100644 index 8c63660dc..000000000 --- a/packages/repl-sdk/tests-ember/tests/test-helper.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { setApplication } from '@ember/test-helpers'; -import * as QUnit from 'qunit'; -import { setup } from 'qunit-dom'; -import { start as qunitStart } from 'ember-qunit'; - -import Application from 'tests-ember/app'; -import config from 'tests-ember/config/environment'; - -export function start() { - setApplication(Application.create(config.APP)); - - setup(QUnit.assert); - - qunitStart({ loadTests: false }); -} diff --git a/packages/repl-sdk/tests-ember/tests/unit/.gitkeep b/packages/repl-sdk/tests-ember/tests/unit/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/repl-sdk/tests-ember/tsconfig.json b/packages/repl-sdk/tests-ember/tsconfig.json deleted file mode 100644 index b698aad7a..000000000 --- a/packages/repl-sdk/tests-ember/tsconfig.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "extends": "@tsconfig/ember/tsconfig.json", - "include": [ - "app", "tests", "types" - ], - "glint": { - "environment": [ - "ember-loose", - "ember-template-imports" - ] - }, - "compilerOptions": { - "allowJs": true, - /** - https://www.typescriptlang.org/tsconfig#noEmitOnError - Do not block emit on TS errors. - */ - "noEmitOnError": false, - - "declaration": false, - "declarationMap": false, - - /** - https://www.typescriptlang.org/tsconfig#allowImportingTsExtensions - - We want our tooling to know how to resolve our custom files so the appropriate plugins - can do the proper transformations on those files. - */ - "allowImportingTsExtensions": true, - "paths": { - "tests-ember/tests/*": [ - "./tests/*" - ], - "tests-ember/*": [ - "./app/*" - ], - "*": [ - "./types/*" - ] - }, - "types": [ - "ember-source/types" - ] - }, -} diff --git a/packages/repl-sdk/tests-ember/types/index.d.ts b/packages/repl-sdk/tests-ember/types/index.d.ts deleted file mode 100644 index 217abbb25..000000000 --- a/packages/repl-sdk/tests-ember/types/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/packages/repl-sdk/tests-ember/vite.config.mjs b/packages/repl-sdk/tests-ember/vite.config.mjs deleted file mode 100644 index f17ba49fc..000000000 --- a/packages/repl-sdk/tests-ember/vite.config.mjs +++ /dev/null @@ -1,110 +0,0 @@ -import { - assets, - compatPrebuild, - contentFor, - hbs, - optimizeDeps, - resolver, - scripts, - templateTag, -} from '@embroider/vite'; -import { createRequire } from 'node:module'; - -import { babel } from '@rollup/plugin-babel'; -import { defineConfig } from 'vite'; -import wasm from 'vite-plugin-wasm'; - -const require = createRequire(import.meta.url); - -const extensions = [ - '.mjs', - '.gjs', - '.js', - '.mts', - '.gts', - '.ts', - '.hbs', - '.json', -]; - -const optimization = optimizeDeps(); - -export default defineConfig(({ mode }) => { - return { - resolve: { - extensions, - alias: { - 'ember-template-compiler': 'ember-source/dist/ember-template-compiler', - // 'content-tag': import.meta.resolve('content-tag'), - // The fact that this is required - // reveals a problem with babel-plugin-debug-macros. - // *Nothing* should be touching path. - path: 'path-browserify', - }, - }, - plugins: [ - // wasm(), - hbs(), - templateTag(), - scripts(), - resolver(), - compatPrebuild(), - assets(), - contentFor(), - - babel({ - babelHelpers: 'runtime', - extensions, - }), - ], - - optimizeDeps: { - ...optimization, - exclude: ['content-tag', ...optimization.exclude], - esbuildOptions: { - ...optimization.esbuildOptions, - target: 'esnext', - plugins: [ - { - name: 'deal-with-weird-pre-official-runtime-compiler', - setup(build) { - build.onResolve({ filter: /content-tag/ }, (path) => ({ - path: 'content-tag', - external: true, - })); - }, - }, - ...optimization.esbuildOptions.plugins, - ], - }, - }, - server: { - port: 4200, - mimeTypes: { - 'application/wasm': ['wasm'], - }, - }, - esbuild: { - target: 'esnext', - supported: { - 'top-level-await': true, - }, - }, - build: { - outDir: 'dist', - target: 'esnext', - rollupOptions: { - input: { - main: 'index.html', - ...(shouldBuildTests(mode) - ? { tests: 'tests/index.html' } - : undefined), - }, - }, - }, - }; -}); - -function shouldBuildTests(mode) { - return mode !== 'production' || process.env.FORCE_BUILD_TESTS; -} From f65b777f5febddf2d4e5cce873b06c5860c513b7 Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Mon, 2 Jun 2025 22:27:38 -0400 Subject: [PATCH 055/222] Cleanup --- .../src/resolve.fromInternalImport.test.ts | 32 +++++++++++++++++++ packages/repl-sdk/src/resolve.js | 15 ++++----- 2 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 packages/repl-sdk/src/resolve.fromInternalImport.test.ts diff --git a/packages/repl-sdk/src/resolve.fromInternalImport.test.ts b/packages/repl-sdk/src/resolve.fromInternalImport.test.ts new file mode 100644 index 000000000..bd56d5a4f --- /dev/null +++ b/packages/repl-sdk/src/resolve.fromInternalImport.test.ts @@ -0,0 +1,32 @@ +import { expect as errorExpect, it } from 'vitest'; + +import { fromInternalImport, Request } from './resolve.js'; + +const expect = errorExpect.soft; + +it('resolves a private file (content-tag)', () => { + const untarred = { + contents: { + 'pkg/standalone.js': 'entry file', + 'pkg/standalone/content_tag.js': 'target file', + }, + manifest: { + exports: { + '.': { + browser: { default: './pkg/standalone.js' }, + default: { default: './pkg/node.cjs' }, + }, + './standalone': { + import: { default: './pkg/standalone.js' }, + require: { default: './pkg/stubs/require.cjs' }, + }, + }, + }, + }; + const specifier = + 'content-tag/standalone/content_tag.js?from=tgz%3A%2F%2Frepl.sdk%2Fcontent-tag&to=.%2Fstandalone%2Fcontent_tag.js'; + const request = Request.fromSpecifier(specifier); + const answer = fromInternalImport(untarred, request, undefined); + + expect(answer?.inTarFile).toBe('pkg/standalone/content_tag.js'); +}); diff --git a/packages/repl-sdk/src/resolve.js b/packages/repl-sdk/src/resolve.js index 04b59130a..a37049657 100644 --- a/packages/repl-sdk/src/resolve.js +++ b/packages/repl-sdk/src/resolve.js @@ -25,13 +25,16 @@ export function resolvePath(start, target) { */ let base = start.replace(/^@([^/]+)\/([^/]+)/, `${AT}$1___$2`); - let url = new URL(target, fakeProtocol + base); + let url = new URL(target, fakeProtocol + fakeDomain + base); /** * href omits the protocol * (which is what we want) */ - return url.href.replace(fakeProtocol, '').replace(AT, '@').replace('___', '/'); + return url.href + .replace(fakeProtocol + fakeDomain, '') + .replace(AT, '@') + .replace('___', '/'); } /** @@ -70,7 +73,7 @@ export function resolve(untarred, request) { * @param {undefined | import('./types.ts').RequestAnswer} answer * @returns {undefined | import('./types.ts').RequestAnswer} the in-tar path */ -function fromInternalImport(untarred, request, answer) { +export function fromInternalImport(untarred, request, answer) { if (answer) return answer; let isInternal = request.from && request.to; @@ -82,11 +85,7 @@ function fromInternalImport(untarred, request, answer) { if (!answerFrom) printError(untarred, fromSpecifier, answer); - let url = answerFrom.inTarFile.includes('/') - ? new URL(request.to, 'file://' + answerFrom.inTarFile) - : { href: request.to }; - - let inTarFile = url.href.replace('file://', ''); + let inTarFile = resolvePath(answerFrom.inTarFile, request.to); let result = checkFile(untarred, inTarFile); if (result) { From fdbc8ecdfe5a7b2a87f42ca3e3f475190100a067 Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Mon, 2 Jun 2025 23:07:18 -0400 Subject: [PATCH 056/222] Some work on the quick example/demo page --- packages/repl-sdk/example/index.html | 60 +++++++++++++++++++++------- packages/repl-sdk/src/index.js | 25 ++++++++++++ 2 files changed, 70 insertions(+), 15 deletions(-) diff --git a/packages/repl-sdk/example/index.html b/packages/repl-sdk/example/index.html index 60a499410..a73212cbd 100644 --- a/packages/repl-sdk/example/index.html +++ b/packages/repl-sdk/example/index.html @@ -64,7 +64,17 @@ import { Compiler, defaultFormats, defaults } from "../src/index.js"; import * as samples from "./samples.js"; - let compiler = new Compiler(); + let config = new URLSearchParams(window.location.href.split("?")[1]); + + function setQP(k, v) { + let search = new URLSearchParams(config); + search.set(k, v); + history.pushState(null, null, search.toString()); + } + + let compiler = new Compiler({ + logging: config.get("debug"), + }); let e = { form: document.querySelector("form"), @@ -88,7 +98,7 @@ function select(fileType) { let option = [...e.select.querySelectorAll("option")].find((option) => - option.textContent.includes("gjs"), + option.textContent.includes(fileType), ); if (option) { @@ -98,23 +108,34 @@ e.code.innerHTML = samples[fileType]; } - select("gjs"); + function setupFlavors(format) { + e.flavor.innerHTML = ""; + Object.keys(defaults.formats[format]).map((flv) => { + let option = document.createElement("option"); + option.setAttribute("value", flv); + option.innerText = flv; + if (flv === config.get("flavor")) { + option.selected = true; + } + e.flavor.appendChild(option); + }); + e.flavorL.style.visibility = "visible"; + let firstFlavor = e.flavor.firstChild.value; + e.code.innerHTML = samples[format][firstFlavor]; + return; + } + + function hasFlavors(format) { + return !("compiler" in defaults.formats[format]); + } e.select.addEventListener("change", (event) => { let format = event.target.value; - let hasFlavors = !("compiler" in defaults.formats[format]); - if (hasFlavors) { - e.flavor.innerHTML = ""; - Object.keys(defaults.formats[format]).map((flv) => { - let option = document.createElement("option"); - option.setAttribute("value", flv); - option.innerText = flv; - e.flavor.appendChild(option); - }); - e.flavorL.style.visibility = "visible"; - let firstFlavor = e.flavor.firstChild.value; - e.code.innerHTML = samples[format][firstFlavor]; + setQP("format", format); + + if (hasFlavors(format)) { + setupFlavors(format); return; } @@ -127,6 +148,8 @@ let flavor = event.target.value; let format = e.select.value; e.code.innerHTML = samples[format][flavor]; + + setQP("flavor", flavor); }); e.form.addEventListener("submit", async (event) => { @@ -149,6 +172,13 @@ throw error; } }); + + let format = config.get("format") || "gjs"; + select(format); + + if (hasFlavors(format)) { + setupFlavors(format); + } diff --git a/packages/repl-sdk/src/index.js b/packages/repl-sdk/src/index.js index 6faf8be5c..5865be173 100644 --- a/packages/repl-sdk/src/index.js +++ b/packages/repl-sdk/src/index.js @@ -38,6 +38,13 @@ export class Compiler { // Permit overrides to import maps mapOverrides: true, // default false // Hook all module resolutions + /** + * Order of preference + * 1. manually resolved (from the caller) + * 2. specified in the compiler config (to use CDN) + * 3. download tarball from npm + * or resolve from already downloaded tarball + */ resolve: (id, parentUrl, resolve) => { /** * We have to strip the query params because our manual resolving @@ -53,6 +60,18 @@ export class Compiler { return `manual:${vanilla}`; } + for (let compiler of this.#eachLoadedCompiler()) { + if (compiler.resolve) { + let result = compiler.resolve(vanilla); + + if (result) { + this.#log(`[resolve] ${vanilla} found in compiler config at ${result}.`); + + return result; + } + } + } + if (parentUrl.startsWith(tgzPrefix) && id.startsWith('.')) { let newId = resolvePath(parentUrl.replace(tgzPrefix, ''), id); // there has to be a better way to do this, yea? @@ -175,6 +194,12 @@ export class Compiler { return code; } + *#eachLoadedCompiler() { + for (let compiler of this.#compilers) { + yield compiler; + } + } + /** * @param {string} format * @param {string} text From 4be137a2329fb76ebeea846323eedf3145a6da00 Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Mon, 2 Jun 2025 23:35:33 -0400 Subject: [PATCH 057/222] Maybe progress? need to fix the Svelte and ember compilers --- packages/repl-sdk/example/index.html | 1 + packages/repl-sdk/src/compilers.js | 17 ++++++++++++++- packages/repl-sdk/src/index.js | 31 ++++++++++++++-------------- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/packages/repl-sdk/example/index.html b/packages/repl-sdk/example/index.html index a73212cbd..8f754ae18 100644 --- a/packages/repl-sdk/example/index.html +++ b/packages/repl-sdk/example/index.html @@ -109,6 +109,7 @@ } function setupFlavors(format) { + if (!hasFlavors(format)) return; e.flavor.innerHTML = ""; Object.keys(defaults.formats[format]).map((flv) => { let option = document.createElement("option"); diff --git a/packages/repl-sdk/src/compilers.js b/packages/repl-sdk/src/compilers.js index 573c4565a..add0a33bd 100644 --- a/packages/repl-sdk/src/compilers.js +++ b/packages/repl-sdk/src/compilers.js @@ -29,8 +29,23 @@ export const compilers = { * https://react.dev/ */ react: { + resolve: (id) => { + switch (id) { + case 'react': + return `https://esm.sh/react`; + case 'react-dom/client': + return `https://esm.sh/react-dom/client`; + case '@babel/standalone': + return `https://esm.sh/@babel/standalone`; + } + }, compiler: async (config = {}, api) => { - const [{ createRoot }, babel] = await api.tryResolveAll(['react-dom', '@babel/standalone']); + const [reactDom, babel] = await api.tryResolveAll([ + 'react-dom/client', + '@babel/standalone', + ]); + + const { createRoot } = reactDom; return { compile: async (text) => { diff --git a/packages/repl-sdk/src/index.js b/packages/repl-sdk/src/index.js index 5865be173..a95cbe330 100644 --- a/packages/repl-sdk/src/index.js +++ b/packages/repl-sdk/src/index.js @@ -60,15 +60,13 @@ export class Compiler { return `manual:${vanilla}`; } - for (let compiler of this.#eachLoadedCompiler()) { - if (compiler.resolve) { - let result = compiler.resolve(vanilla); + for (let compilerResolve of this.#compilerResolvers) { + let result = compilerResolve(vanilla); - if (result) { - this.#log(`[resolve] ${vanilla} found in compiler config at ${result}.`); + if (result) { + this.#log(`[resolve] ${vanilla} found in compiler config at ${result}.`); - return result; - } + return result; } } @@ -83,9 +81,10 @@ export class Compiler { return url.href; } - if (id.startsWith('blob:')) return id; - if (id.startsWith('https://')) return id; + if (id.startsWith('https://')) return resolve(id, parentUrl); + if (id.startsWith('blob:')) return resolve(id, parentUrl); if (id.startsWith('.')) return resolve(id, parentUrl); + if (parentUrl.startsWith('https://')) return resolve(id, parentUrl); if (id.startsWith('node:')) { this.#log(`Is known node module: ${id}. Grabbing polyfill`); @@ -194,12 +193,6 @@ export class Compiler { return code; } - *#eachLoadedCompiler() { - for (let compiler of this.#compilers) { - yield compiler; - } - } - /** * @param {string} format * @param {string} text @@ -207,12 +200,15 @@ export class Compiler { * @returns {} */ async compile(format, text, options = {}) { + this.#log('[compile] idempotently installing es-module-shim'); await import('es-module-shims'); let opts = { ...options }; opts.fileName ||= `dynamic.${format}`; + this.#log('[compile] compiling'); + const compiler = await this.#getCompiler(format, opts.flavor); const compiled = await compiler.compile(text, opts.fileName); @@ -238,6 +234,7 @@ export class Compiler { #compilerCache = new WeakMap(); #compilers = new Set(); + #compilerResolvers = new Set(); /** * @param {string} format @@ -250,6 +247,10 @@ export class Compiler { return this.#compilerCache.get(config); } + if (config.resolve) { + this.#compilerResolvers.add(config.resolve); + } + const compiler = await config.compiler(this.optionsFor(format, flavor), this.#nestedPublicAPI); this.#compilerCache.set(config, compiler); From b1665494457cca26bdd53a4d047bcb60543648ed Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Mon, 2 Jun 2025 23:45:09 -0400 Subject: [PATCH 058/222] ope --- packages/repl-sdk/src/compilers.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/repl-sdk/src/compilers.js b/packages/repl-sdk/src/compilers.js index add0a33bd..077ddbc23 100644 --- a/packages/repl-sdk/src/compilers.js +++ b/packages/repl-sdk/src/compilers.js @@ -136,6 +136,14 @@ export const compilers = { * https://vuejs.org/ */ vue: { + resolve: (id) => { + switch (id) { + case 'vue': + return `https://esm.sh/vue`; + case '@vue/repl': + return `https://esm.sh/@vue/repl`; + } + }, compiler: async (config = {}, api) => { const versions = config.versions || {}; From 8ef7aa7381ea5764a84983f60eff055461689e35 Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:35:11 -0400 Subject: [PATCH 059/222] ope --- packages/repl-sdk/example/index.html | 16 +++++++++++++++- packages/repl-sdk/src/compilers.js | 4 ++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/repl-sdk/example/index.html b/packages/repl-sdk/example/index.html index 8f754ae18..c33cf8a5a 100644 --- a/packages/repl-sdk/example/index.html +++ b/packages/repl-sdk/example/index.html @@ -18,6 +18,10 @@ Format +