diff --git a/package.json b/package.json index ffeae43256c..7ae9d2ff653 100644 --- a/package.json +++ b/package.json @@ -47,9 +47,11 @@ "@embroider/compat": "patches/@embroider__compat.patch", "ember-eslint-parser": "patches/ember-eslint-parser.patch", "openai": "patches/openai.patch", + "postcss@8.5.6": "patches/postcss@8.5.6.patch", "matrix-js-sdk@38.3.0": "patches/matrix-js-sdk@38.3.0.patch", "@embroider/webpack": "patches/@embroider__webpack.patch", - "ember-source": "patches/ember-source.patch" + "ember-source": "patches/ember-source.patch", + "object-inspect": "patches/object-inspect.patch" }, "onlyBuiltDependencies": [ "@percy/core", diff --git a/packages/boxel-ui/addon/src/components/date-range-picker/index.gts b/packages/boxel-ui/addon/src/components/date-range-picker/index.gts index 5a5698f94e7..10b859d2b1d 100644 --- a/packages/boxel-ui/addon/src/components/date-range-picker/index.gts +++ b/packages/boxel-ui/addon/src/components/date-range-picker/index.gts @@ -1,4 +1,5 @@ import 'ember-power-calendar/styles'; +import 'ember-power-calendar/styles'; import { fn } from '@ember/helper'; import { on } from '@ember/modifier'; diff --git a/packages/boxel-ui/addon/src/components/multi-select/index.gts b/packages/boxel-ui/addon/src/components/multi-select/index.gts index 799e5dc0b70..c89b2d79983 100644 --- a/packages/boxel-ui/addon/src/components/multi-select/index.gts +++ b/packages/boxel-ui/addon/src/components/multi-select/index.gts @@ -1,4 +1,5 @@ import 'ember-power-select/styles'; +import 'ember-power-select/styles'; import Component from '@glimmer/component'; import type { ComponentLike } from '@glint/template'; diff --git a/packages/boxel-ui/addon/src/components/select/index.gts b/packages/boxel-ui/addon/src/components/select/index.gts index f8f42b7e844..aa2c4c939e0 100644 --- a/packages/boxel-ui/addon/src/components/select/index.gts +++ b/packages/boxel-ui/addon/src/components/select/index.gts @@ -1,4 +1,5 @@ import 'ember-power-select/styles'; +import 'ember-power-select/styles'; import Check from '@cardstack/boxel-icons/check'; import { eq } from '@cardstack/boxel-ui/helpers'; diff --git a/packages/host/.eslintrc.js b/packages/host/.eslintrc.js index 89c68fa9e27..b0b7994c9f4 100644 --- a/packages/host/.eslintrc.js +++ b/packages/host/.eslintrc.js @@ -111,6 +111,7 @@ module.exports = { './config/**/*.js', './lib/**/*.js', './server/**/*.js', + './babel.config.cjs', './scripts/**/*.js', ], parserOptions: { diff --git a/packages/host/.gitignore b/packages/host/.gitignore index 71ad79d02ea..b17ee3146ff 100644 --- a/packages/host/.gitignore +++ b/packages/host/.gitignore @@ -1,3 +1,5 @@ +/tmp/ + # compiled output /dist/ /declarations/ diff --git a/packages/host/app/app.ts b/packages/host/app/app.ts index beca8236aca..93c0883eaf6 100644 --- a/packages/host/app/app.ts +++ b/packages/host/app/app.ts @@ -5,17 +5,18 @@ import './deprecation-workflow'; import Application from '@ember/application'; import Resolver from 'ember-resolver'; import loadInitializers from 'ember-load-initializers'; -import config from '@cardstack/host/config/environment'; -import './lib/glint-embroider-workaround'; +import config from './config/environment'; import '@cardstack/boxel-ui/styles/global.css'; import '@cardstack/boxel-ui/styles/fonts.css'; import '@cardstack/boxel-ui/styles/variables.css'; import 'katex/dist/katex.min.css'; +import compatModules from '@embroider/virtual/compat-modules'; + export default class App extends Application { modulePrefix = config.modulePrefix; podModulePrefix = config.podModulePrefix; - Resolver = Resolver; + Resolver = Resolver.withModules(compatModules); } -loadInitializers(App, config.modulePrefix); +loadInitializers(App, config.modulePrefix, compatModules); diff --git a/packages/host/app/config/environment.d.ts b/packages/host/app/config/environment.ts similarity index 57% rename from packages/host/app/config/environment.d.ts rename to packages/host/app/config/environment.ts index 858d85a5f14..e173f9ac82b 100644 --- a/packages/host/app/config/environment.d.ts +++ b/packages/host/app/config/environment.ts @@ -1,10 +1,30 @@ -export default config; +import { assert } from '@ember/debug'; +import loadConfigFromMeta from '@embroider/config-meta-loader'; -/** - * Type declarations for - * import config from 'my-app/config/environment' - */ -declare const config: { +const config = loadConfigFromMeta('@cardstack/host') as unknown; + +assert( + 'config is not an object', + typeof config === 'object' && config !== null, +); +assert( + 'modulePrefix was not detected on your config', + 'modulePrefix' in config && typeof config.modulePrefix === 'string', +); +assert( + 'locationType was not detected on your config', + 'locationType' in config && typeof config.locationType === 'string', +); +assert( + 'rootURL was not detected on your config', + 'rootURL' in config && typeof config.rootURL === 'string', +); +assert( + 'APP was not detected on your config', + 'APP' in config && typeof config.APP === 'object', +); + +export default config as { environment: string; modulePrefix: string; podModulePrefix: string; @@ -38,10 +58,12 @@ declare const config: { SHOW_ASK_AI?: boolean; AI_PATCHING_CORRECTNESS_CHECKS?: boolean; }; + publishedRealmDomainOverrides: string; publishedRealmBoxelSpaceDomain: string; publishedRealmBoxelSiteDomain: string; publishedRealmDomainOverrides: string; defaultSystemCardId?: string; cardSizeLimitBytes: number; fileSizeLimitBytes: number; -}; + defaultSystemCardId: string; +} & Record; diff --git a/packages/host/app/index.html b/packages/host/app/index.html deleted file mode 100644 index 52cc6153c16..00000000000 --- a/packages/host/app/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - {{content-for "head"}} - - - - - - - - - - - {{content-for "head-footer"}} - - - Boxel - - - - - - - - -
- {{content-for "body"}} - - - - - - - {{content-for "body-footer"}} - - - diff --git a/packages/host/app/lib/glint-embroider-workaround.js b/packages/host/app/lib/glint-embroider-workaround.js deleted file mode 100644 index c635cc12836..00000000000 --- a/packages/host/app/lib/glint-embroider-workaround.js +++ /dev/null @@ -1,12 +0,0 @@ -// Glint wraps these packages but tries to use window.require to access the -// originals, which won't work under embroider with staticAddonTrees enabled. - -import * as GlimmerComponent from '@glimmer/component'; -window.define('@glimmer/component', function () { - return GlimmerComponent; -}); - -import * as Modifier from 'ember-modifier'; -window.define('ember-modifier', function () { - return Modifier; -}); diff --git a/packages/host/app/lib/public-path.ts b/packages/host/app/lib/public-path.ts index 3dbf4c838d1..4f40a032cf0 100644 --- a/packages/host/app/lib/public-path.ts +++ b/packages/host/app/lib/public-path.ts @@ -1,7 +1 @@ -import config from '@cardstack/host/config/environment'; - (globalThis as any).__bootStart = performance.now(); -const { hostsOwnAssets, assetsURL } = config; - -// @ts-expect-error this is consumed by webpack to set the public asset path at runtime -__webpack_public_path__ = hostsOwnAssets ? '/' : assetsURL; diff --git a/packages/host/app/modifiers/monaco.ts b/packages/host/app/modifiers/monaco.ts index c8b431eddcf..9c609016a57 100644 --- a/packages/host/app/modifiers/monaco.ts +++ b/packages/host/app/modifiers/monaco.ts @@ -10,7 +10,6 @@ import * as MonacoSDK from 'monaco-editor'; import config from '@cardstack/host/config/environment'; import type MonacoService from '@cardstack/host/services/monaco-service'; import { createMonacoWaiterManager } from '@cardstack/host/utils/editor/monaco-test-waiter'; -import '@cardstack/requirejs-monaco-ember-polyfill'; interface Signature { Args: { diff --git a/packages/host/app/services/monaco-service.ts b/packages/host/app/services/monaco-service.ts index 47d3cdd374b..d228206669d 100644 --- a/packages/host/app/services/monaco-service.ts +++ b/packages/host/app/services/monaco-service.ts @@ -9,6 +9,14 @@ import { task } from 'ember-concurrency'; import merge from 'lodash/merge'; +// The worker suffix here is a vite feature that builds them into standalone +// worker scripts, which will be outside the main bundle in prod. +import EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker.js?worker'; +import CSSWorker from 'monaco-editor/esm/vs/language/css/css.worker.js?worker'; +import HTMLWorker from 'monaco-editor/esm/vs/language/html/html.worker.js?worker'; +import JSONWorker from 'monaco-editor/esm/vs/language/json/json.worker.js?worker'; +import TSWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker.js?worker'; + import type { SingleCardDocument } from '@cardstack/runtime-common'; import config from '@cardstack/host/config/environment'; @@ -28,6 +36,28 @@ export type MonacoSDK = typeof _MonacoSDK; export type IStandaloneCodeEditor = _MonacoSDK.editor.IStandaloneCodeEditor; const { serverEchoDebounceMs } = config; +( + globalThis as unknown as { MonacoEnvironment: _MonacoSDK.Environment } +).MonacoEnvironment = { + getWorker: function (_workerId, label) { + switch (label) { + case 'json': + return new JSONWorker(); + case 'css': + case 'scss': + case 'less': + return new CSSWorker(); + case 'typescript': + case 'javascript': + return new TSWorker(); + case 'html': + case 'handlebars': + return new HTMLWorker(); + default: + return new EditorWorker(); + } + }, +}; export default class MonacoService extends Service { #ready: Promise; @@ -60,9 +90,15 @@ export default class MonacoService extends Service { } private loadMonacoSDK = task(async () => { - // @ts-expect-error: dynamic import without types - await import('@cardstack/requirejs-monaco-ember-polyfill'); const monaco = await import('monaco-editor'); + + // There are tests that rely on this. In older Ember versions, Monaco + // installed itself as a global automatically because it does that when it + // detects the presence of an AMD in the environment. Newer Ember versions + // (with Vite) don't use AMD anymore, so Monaco stopped putting itself on + // this global. + (globalThis as any).monaco = monaco; + monaco.languages.typescript.javascriptDefaults.setCompilerOptions( this.defaultCompilerOptions(monaco), ); diff --git a/packages/host/babel.config.cjs b/packages/host/babel.config.cjs new file mode 100644 index 00000000000..62743b404b5 --- /dev/null +++ b/packages/host/babel.config.cjs @@ -0,0 +1,53 @@ +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(), + 'glimmer-scoped-css/ast-transform', + ], + }, + ], + [ + '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/host/config/targets.js b/packages/host/config/targets.js index e5e92faca20..1e48e0599f9 100644 --- a/packages/host/config/targets.js +++ b/packages/host/config/targets.js @@ -8,5 +8,4 @@ const browsers = [ module.exports = { browsers, - node: 'current', }; diff --git a/packages/host/ember-cli-build.js b/packages/host/ember-cli-build.js index bfb56c2e09c..69c4bcb6741 100644 --- a/packages/host/ember-cli-build.js +++ b/packages/host/ember-cli-build.js @@ -1,117 +1,23 @@ 'use strict'; - const EmberApp = require('ember-cli/lib/broccoli/ember-app'); const { compatBuild } = require('@embroider/compat'); -const { Webpack } = require('@embroider/webpack'); -const webpack = require('webpack'); -const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); -const MomentLocalesPlugin = require('moment-locales-webpack-plugin'); -const { GlimmerScopedCSSWebpackPlugin } = require('glimmer-scoped-css/webpack'); -const withSideWatch = require('./lib/with-side-watch'); -const Funnel = require('broccoli-funnel'); -const { BoxelUIChecksumPlugin } = require('./lib/build/package-dist-checksums'); -module.exports = function (defaults) { +module.exports = async function (defaults) { + const { buildOnce } = await import('@embroider/vite'); + const app = new EmberApp(defaults, { - trees: { - app: withSideWatch('app', { - watching: ['../runtime-common', '../boxel-ui/addon'], - }), - }, 'ember-cli-babel': { enableTypeScriptTransform: true, disableDecoratorTransforms: true, }, babel: { plugins: [ - [require.resolve('decorator-transforms')], require.resolve('ember-concurrency/async-arrow-task-transform'), ], }, }); - - return compatBuild(app, Webpack, { - staticAddonTrees: true, - staticAddonTestSupportTrees: true, - staticHelpers: true, - - staticComponents: true, - - staticModifiers: true, + return compatBuild(app, buildOnce, { + staticInvokables: true, staticAppPaths: ['lib'], - extraPublicTrees: [ - new Funnel('node_modules/content-tag/pkg', { - include: ['standalone.js', 'standalone/*'], - destDir: 'assets/content-tag', - }), - ], - packagerOptions: { - ...{ - webpackConfig: { - devtool: 'source-map', - module: { - rules: [ - { - test: /\.ttf$/, - type: 'asset/inline', - }, - { - test: /\.woff2?$/, - type: 'asset/resource', - generator: { - filename: 'assets/fonts/[name][ext]', - }, - }, - { - test: /\.png$/, - type: 'asset', - }, - { - test: /\.webp$/, - type: 'asset', - }, - { - test: /\.otf$/, - type: 'asset', - }, - ], - }, - plugins: [ - new GlimmerScopedCSSWebpackPlugin(), - new MonacoWebpackPlugin(), - new webpack.IgnorePlugin({ - resourceRegExp: /^https:\/\/cardstack\.com\/base/, - }), - new MomentLocalesPlugin({ - // 'en' is built into moment and cannot be removed. This strips the others. - localesToKeep: [], - }), - // boxel-ui packages dist checksum needed for the realm server to figure out if boxel-ui changed, and trigger a reindex of cards that use it (to update cards' prerendered HTML) - new BoxelUIChecksumPlugin(__dirname), - ], - externals: { - 'content-tag': 'ContentTagGlobal', - }, - resolve: { - fallback: { - fs: false, - os: false, - path: require.resolve('path-browserify'), - crypto: require.resolve('crypto-browserify'), - stream: require.resolve('stream-browserify'), - assert: require.resolve('assert/'), - }, - alias: { - // Exclude the rust-crypto module from the bundle because we don't use it - 'matrix-js-sdk$': 'matrix-js-sdk/src/browser-index.ts', - './rust-crypto/index.ts': false, - }, - }, - node: { - global: true, - }, - }, - }, - }, }); }; diff --git a/packages/host/index.html b/packages/host/index.html new file mode 100644 index 00000000000..27b9c39e3d0 --- /dev/null +++ b/packages/host/index.html @@ -0,0 +1,56 @@ + + + + + Boxel + + + + {{content-for "head"}} + + + + + + + + {{content-for "head-footer"}} + + + + + + + + + +
+ {{content-for "body"}} + + + + + + + {{content-for "body-footer"}} + + diff --git a/packages/host/lib/build/package-dist-checksums.js b/packages/host/lib/build/package-dist-checksums.js deleted file mode 100644 index dfe97ea9805..00000000000 --- a/packages/host/lib/build/package-dist-checksums.js +++ /dev/null @@ -1,94 +0,0 @@ -const crypto = require('crypto'); -const fs = require('fs'); -const path = require('path'); -const webpack = require('webpack'); - -function calculateBoxelUIChecksum(baseDir) { - const boxelUIDistPath = path.resolve(baseDir, '../boxel-ui/addon/dist'); - - if (!fs.existsSync(boxelUIDistPath)) { - console.warn( - '⚠️ Boxel-UI dist directory not found. Run "pnpm build" in packages/boxel-ui/addon first.', - ); - return null; - } - - const getAllFiles = (dirPath, arrayOfFiles = []) => { - const files = fs.readdirSync(dirPath); - - files.forEach((file) => { - const fullPath = path.join(dirPath, file); - if (fs.statSync(fullPath).isDirectory()) { - arrayOfFiles = getAllFiles(fullPath, arrayOfFiles); - } else { - // Skip source maps for cleaner checksum - if (!file.endsWith('.map')) { - arrayOfFiles.push(fullPath); - } - } - }); - - return arrayOfFiles; - }; - - const allFiles = getAllFiles(boxelUIDistPath); - allFiles.sort(); - - const hash = crypto.createHash('sha256'); - const includedFiles = []; - - allFiles.forEach((filePath) => { - const content = fs.readFileSync(filePath); - const relativePath = path.relative(boxelUIDistPath, filePath); - hash.update( - relativePath + - ':' + - crypto.createHash('sha256').update(content).digest('hex'), - ); - includedFiles.push(relativePath); - }); - - return hash.digest('hex'); -} - -// Webpack plugin to write boxel-ui checksum after build -class BoxelUIChecksumPlugin { - constructor(baseDir) { - this.baseDir = baseDir; - } - - apply(compiler) { - // Store the checksum data during compilation - let checksum = null; - - compiler.hooks.compile.tap('BoxelUIChecksumPlugin', () => { - checksum = calculateBoxelUIChecksum(this.baseDir); - }); - - // Write it as an asset so it gets included in the final output - compiler.hooks.thisCompilation.tap( - 'BoxelUIChecksumPlugin', - (compilation) => { - compilation.hooks.processAssets.tap( - { - name: 'BoxelUIChecksumPlugin', - stage: webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL, - }, - () => { - if (checksum) { - compilation.emitAsset( - 'boxel-ui-checksum.txt', - new webpack.sources.RawSource(checksum), - ); - } - }, - ); - }, - ); - } -} - -module.exports = { - calculateBoxelUIChecksum, - BoxelUIChecksumPlugin, -}; diff --git a/packages/host/package.json b/packages/host/package.json index 49225410dda..83880fe63bb 100644 --- a/packages/host/package.json +++ b/packages/host/package.json @@ -11,8 +11,8 @@ "test": "tests" }, "scripts": { - "build": "ember build", - "build:production": "NODE_OPTIONS='--max-old-space-size=8192' ember build --environment=production", + "build": "vite build --mode=development", + "build:production": "NODE_OPTIONS='--max-old-space-size=8192' vite build", "lint": "concurrently \"pnpm:lint:*(!fix)\" --names \"lint:\"", "lint:css:fix": "concurrently \"pnpm:lint:css -- --fix\"", "lint:fix": "concurrently \"pnpm:lint:*:fix\" --names \"fix:\"", @@ -22,7 +22,7 @@ "lint:js:fix": "eslint . --report-unused-disable-directives --fix", "lint:types": "ember-tsc --noEmit", "ensure-boxel-ui": "../boxel-ui/addon/bin/conditional-build.sh", - "start": "pnpm ensure-boxel-ui && node scripts/ember-serve.js", + "start": "vite", "serve:dist": "node scripts/serve-dist.js", "serve:dist:legacy": "serve --config ../tests/serve.json --single --cors --no-request-logging --no-etag --listen 4200 dist", "start:build": "NODE_OPTIONS='--max-old-space-size=8192' ember build --watch", @@ -31,7 +31,8 @@ "test:wait-for-servers": "./scripts/test-wait-for-servers.sh", "test:live": "./scripts/live-test-wait-for-servers.sh", "ember-test-pre-built": "sleep 15 && ember exam --path ./dist --split $HOST_TEST_PARTITION_COUNT --partition $HOST_TEST_PARTITION --preserve-test-name", - "wait": "sleep 10000000" + "wait": "sleep 10000000", + "test:ember": "vite build --mode development && ember test --path dist" }, "devDependencies": { "@babel/core": "catalog:", @@ -39,13 +40,14 @@ "@babel/plugin-syntax-class-properties": "catalog:", "@babel/plugin-syntax-decorators": "catalog:", "@babel/plugin-syntax-typescript": "catalog:", + "@babel/plugin-transform-runtime": "^7.26.9", + "@babel/plugin-transform-typescript": "^7.28.0", "@cardstack/base": "workspace:*", "@cardstack/boxel-icons": "workspace:*", "@cardstack/boxel-ui": "workspace:*", "@cardstack/eslint-plugin-boxel": "workspace:*", "@cardstack/eslint-plugin-host": "workspace:*", "@cardstack/local-types": "workspace:*", - "@cardstack/requirejs-monaco-ember-polyfill": "catalog:", "@cardstack/runtime-common": "workspace:*", "@cardstack/view-transitions": "catalog:", "@codemirror/autocomplete": "catalog:", @@ -58,10 +60,11 @@ "@ember/string": "^4.0.0", "@ember/test-helpers": "^5.4.1", "@ember/test-waiters": "catalog:", - "@embroider/compat": "^3.5.5", - "@embroider/core": "^3.4.15", + "@embroider/compat": "^4.0.3", + "@embroider/config-meta-loader": "^1.0.0", + "@embroider/core": "^4.0.3", "@embroider/macros": "^1.16.5", - "@embroider/webpack": "^4.0.4", + "@embroider/vite": "^1.1.1", "@floating-ui/dom": "catalog:", "@glimmer/component": "catalog:", "@glimmer/tracking": "^1.1.2", @@ -69,6 +72,7 @@ "@lezer/markdown": "catalog:", "@percy/cli": "catalog:", "@percy/ember": "catalog:", + "@rollup/plugin-babel": "^6.0.4", "@simple-dom/interface": "catalog:", "@simple-dom/parser": "catalog:", "@simple-dom/serializer": "catalog:", @@ -92,8 +96,7 @@ "ajv": "catalog:", "assert": "^2.1.0", "awesome-phonenumber": "catalog:", - "broccoli-asset-rev": "catalog:", - "broccoli-funnel": "catalog:", + "babel-plugin-ember-template-compilation": "^2.3.0", "broccoli-merge-trees": "catalog:", "broccoli-plugin": "catalog:", "broccoli-source": "catalog:", @@ -109,10 +112,7 @@ "ember-auto-import": "^2.7.2", "ember-basic-dropdown": "8.0.4", "ember-cli": "~6.10.0", - "ember-cli-app-version": "^6.0.1", "ember-cli-babel": "^8.2.0", - "ember-cli-clean-css": "^3.0.0", - "ember-cli-dependency-checker": "^3.3.2", "ember-cli-deploy": "^1.0.2", "ember-cli-deploy-build": "^2.0.0", "ember-cli-deploy-cloudfront": "^5.0.0", @@ -121,15 +121,12 @@ "ember-cli-deploy-smart-compress": "^2.0.0", "ember-cli-deprecation-workflow": "^3.0.2", "ember-cli-htmlbars": "^6.3.0", - "ember-cli-inject-live-reload": "^2.1.0", - "ember-cli-sri": "^2.1.1", - "ember-cli-terser": "^4.0.2", "ember-cli-typescript-blueprints": "^3.0.0", "ember-click-outside": "^6.0.1", "ember-concurrency": "catalog:", "ember-css-url": "^1.0.0", "ember-elsewhere": "^2.0.0", - "ember-exam": "^10.0.0", + "ember-exam": "^10.1.0", "ember-focus-trap": "^1.0.1", "ember-freestyle": "^0.20.0", "ember-keyboard": "^8.2.1", @@ -143,7 +140,6 @@ "ember-resources": "catalog:", "ember-route-template": "^1.0.3", "ember-source": "catalog:", - "ember-template-imports": "^4.1.1", "ember-template-lint": "catalog:", "ember-test-selectors": "^6.0.0", "ember-velcro": "^2.1.3", @@ -165,15 +161,12 @@ "ignore": "catalog:", "indefinite": "catalog:", "katex": "catalog:", - "loader.js": "catalog:", "lodash": "catalog:", "loglevel": "catalog:", "matrix-js-sdk": "catalog:", "mermaid": "catalog:", "moment": "catalog:", - "moment-locales-webpack-plugin": "catalog:", "monaco-editor": "catalog:", - "monaco-editor-webpack-plugin": "catalog:", "ms": "catalog:", "path-browserify": "catalog:", "pluralize": "catalog:", @@ -195,8 +188,8 @@ "tracked-built-ins": "catalog:", "typescript": "catalog:", "uuid": "catalog:", + "vite": "^8.0.8", "wait-for-localhost-cli": "catalog:", - "webpack": "catalog:", "@glint/ember-tsc": "catalog:" }, "dependencies": { @@ -211,9 +204,11 @@ "edition": "octane" }, "ember-addon": { - "paths": [ - "lib/development-cors-middleware", - "lib/setup-ast-transforms" - ] + "type": "app", + "version": 2 + }, + "exports": { + "./tests/*": "./tests/*", + "./*": "./app/*" } } diff --git a/packages/host/public/standalone.js b/packages/host/public/standalone.js deleted file mode 100644 index 943bc908f7c..00000000000 --- a/packages/host/public/standalone.js +++ /dev/null @@ -1,4 +0,0 @@ -import init from './standalone/content_tag.js'; -export { Preprocessor } from './standalone/content_tag.js'; - -await init(); diff --git a/packages/host/testem.js b/packages/host/testem.js index 9dc05c5541a..8eb3ea0ee56 100644 --- a/packages/host/testem.js +++ b/packages/host/testem.js @@ -1,70 +1,72 @@ 'use strict'; -const MultiReporter = require('testem-multi-reporter'); -const TapReporter = require('testem/lib/reporters/tap_reporter'); -const XunitReporter = require('testem/lib/reporters/xunit_reporter'); -const fs = require('fs'); -const path = require('path'); +if (typeof module !== 'undefined') { + const MultiReporter = require('testem-multi-reporter'); + const TapReporter = require('testem/lib/reporters/tap_reporter'); + const XunitReporter = require('testem/lib/reporters/xunit_reporter'); + const fs = require('fs'); + const path = require('path'); -const config = { - test_page: 'tests/index.html?hidepassed', - disable_watching: true, - browser_timeout: 120, - browser_no_activity_timeout: 120, - browser_disconnect_timeout: 60, - launch_in_ci: ['Chrome'], - launch_in_dev: ['Chrome'], - browser_start_timeout: 240, - browser_args: { - Chrome: { - ci: [ - // --no-sandbox is needed when running Chrome inside a container - process.env.CI ? '--no-sandbox' : null, - '--headless', - '--disable-dbus', - '--disable-dev-shm-usage', - '--disable-software-rasterizer', - '--js-flags=--max-old-space-size=4096 --expose-gc', - '--enable-precise-memory-info', - '--mute-audio', - '--remote-debugging-port=0', - '--window-size=1440,900', - ].filter(Boolean), + const config = { + test_page: 'tests/index.html?hidepassed', + disable_watching: true, + browser_timeout: 120, + browser_no_activity_timeout: 120, + browser_disconnect_timeout: 60, + launch_in_ci: ['Chrome'], + launch_in_dev: ['Chrome'], + browser_start_timeout: 240, + browser_args: { + Chrome: { + ci: [ + // --no-sandbox is needed when running Chrome inside a container + process.env.CI ? '--no-sandbox' : null, + '--headless', + '--disable-dbus', + '--disable-dev-shm-usage', + '--disable-software-rasterizer', + '--js-flags=--max-old-space-size=4096 --expose-gc', + '--enable-precise-memory-info', + '--mute-audio', + '--remote-debugging-port=0', + '--window-size=1440,900', + ].filter(Boolean), + }, }, - }, -}; + }; -if (process.env.CI) { - const junitDir = path.join(__dirname, '..', '..', 'junit'); - fs.mkdirSync(junitDir, { recursive: true }); - const testemLog = fs.createWriteStream( - path.join(junitDir, 'host-testem.log'), - ); + if (process.env.CI) { + const junitDir = path.join(__dirname, '..', '..', 'junit'); + fs.mkdirSync(junitDir, { recursive: true }); + const testemLog = fs.createWriteStream( + path.join(junitDir, 'host-testem.log'), + ); - const reporters = [ - { - ReporterClass: TapReporter, - args: [false, null, { get: () => false }], - }, - { - ReporterClass: TapReporter, - args: [false, testemLog, { get: () => false }], - }, - { - ReporterClass: XunitReporter, - args: [ - false, - fs.createWriteStream( - path.join(junitDir, `host-${process.env.HOST_TEST_PARTITION}.xml`), - ), - { get: () => false }, - ], - }, - ]; + const reporters = [ + { + ReporterClass: TapReporter, + args: [false, null, { get: () => false }], + }, + { + ReporterClass: TapReporter, + args: [false, testemLog, { get: () => false }], + }, + { + ReporterClass: XunitReporter, + args: [ + false, + fs.createWriteStream( + path.join(junitDir, `host-${process.env.HOST_TEST_PARTITION}.xml`), + ), + { get: () => false }, + ], + }, + ]; - const multiReporter = new MultiReporter({ reporters }); + const multiReporter = new MultiReporter({ reporters }); - config.reporter = multiReporter; -} + config.reporter = multiReporter; + } -module.exports = config; + module.exports = config; +} diff --git a/packages/host/tests/index.html b/packages/host/tests/index.html index b5698418a7f..630f55e36e8 100644 --- a/packages/host/tests/index.html +++ b/packages/host/tests/index.html @@ -8,9 +8,9 @@ {{content-for "head"}} {{content-for "test-head"}} - - - + + + {{content-for "head-footer"}} {{content-for "test-head-footer"}} @@ -35,16 +35,30 @@ }; - + - - - - + + + + + - {{content-for "body-footer"}} {{content-for "test-body-footer"}} + {{content-for "body-footer"}} diff --git a/packages/host/tests/serve.json b/packages/host/tests/serve.json deleted file mode 100644 index ef485294c6e..00000000000 --- a/packages/host/tests/serve.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "headers": [ - { - "source": "**/*", - "headers": [ - { "key": "Cache-Control", "value": "no-store" }, - { "key": "Access-Control-Allow-Origin", "value": "*" } - ] - } - ] -} diff --git a/packages/host/tests/test-helper.js b/packages/host/tests/test-helper.js index 84b415ad9db..ec5ba264c58 100644 --- a/packages/host/tests/test-helper.js +++ b/packages/host/tests/test-helper.js @@ -3,47 +3,49 @@ import config from '@cardstack/host/config/environment'; import * as QUnit from 'qunit'; import { setApplication } from '@ember/test-helpers'; import setupOperatorModeParametersMatchAssertion from '@cardstack/host/tests/helpers/operator-mode-parameters-match'; -import start from 'ember-exam/test-support/start'; +import { start as examStart } from 'ember-exam/test-support'; // eslint-disable-next-line ember/no-test-import-export import { loadRealmTests } from './live-test'; import { setupQUnit } from './helpers/setup-qunit'; -const application = Application.create({ - ...config.APP, - rootElement: '#ember-testing', -}); +export async function start(examOptions) { + const application = Application.create({ + ...config.APP, + rootElement: '#ember-testing', + }); -function setupHostTests() { - setApplication(application); - setupQUnit(); - setupOperatorModeParametersMatchAssertion(QUnit.assert); + async function setupHostTests() { + setApplication(application); + setupQUnit(); + setupOperatorModeParametersMatchAssertion(QUnit.assert); - const urlParams = new URLSearchParams(window.location.search); - const isParallelExamRun = - urlParams.has('browser') || urlParams.has('partition'); + const urlParams = new URLSearchParams(window.location.search); + const isParallelExamRun = + urlParams.has('browser') || urlParams.has('partition'); - if (isParallelExamRun) { - QUnit.config.failOnZeroTests = false; - } + if (isParallelExamRun) { + QUnit.config.failOnZeroTests = false; + } - start(); -} + await examStart(examOptions); + } -function setupLiveTests() { - setApplication(application); - setupQUnit(); + function setupLiveTests() { + setApplication(application); + setupQUnit(); - loadRealmTests(application).catch((error) => { - console.error('Failed to load realm tests', error); - QUnit.start(); //restarting test due to failure - }); -} + loadRealmTests(application).catch((error) => { + console.error('Failed to load realm tests', error); + QUnit.start(); //restarting test due to failure + }); + } -// Single check — prevents double QUnit initialization (one QUnit instance only). -const isLiveTest = new URL(window.location.href).searchParams.has('liveTest'); + // Single check — prevents double QUnit initialization (one QUnit instance only). + const isLiveTest = new URL(window.location.href).searchParams.has('liveTest'); -if (isLiveTest) { - setupLiveTests(); -} else { - setupHostTests(); + if (isLiveTest) { + setupLiveTests(); + } else { + await setupHostTests(); + } } diff --git a/packages/host/tsconfig.json b/packages/host/tsconfig.json index ba67b684208..fd0e773a3b5 100644 --- a/packages/host/tsconfig.json +++ b/packages/host/tsconfig.json @@ -33,7 +33,7 @@ "@cardstack/openrouter/*": ["../openrouter-realm/*"], "*": ["types/*"] }, - "types": ["@cardstack/local-types"] + "types": ["@cardstack/local-types", "@embroider/core/types/virtual"] }, "include": [ "../base/**/*", diff --git a/packages/host/types/index.d.ts b/packages/host/types/index.d.ts index 1a079a24d02..29ef825f48f 100644 --- a/packages/host/types/index.d.ts +++ b/packages/host/types/index.d.ts @@ -1,3 +1,5 @@ +/// +/// declare module '*.webp' { const value: string; export default value; diff --git a/packages/host/vite.config.mjs b/packages/host/vite.config.mjs new file mode 100644 index 00000000000..d59995ff576 --- /dev/null +++ b/packages/host/vite.config.mjs @@ -0,0 +1,39 @@ +import { defineConfig } from 'vite'; +import { + extensions as _extensions, + classicEmberSupport, + ember, +} from '@embroider/vite'; +import { babel } from '@rollup/plugin-babel'; +import { createRequire } from 'node:module'; +import { scopedCSS } from 'glimmer-scoped-css/rollup'; + +const require = createRequire(import.meta.url); + +// TODO: working around possible upstream problem. The app blueprint uses this +// for guiding babel, but it includes '.json' which doesn't work in babel. +const extensions = _extensions.filter((e) => e !== '.json'); + +export default defineConfig({ + resolve: { + alias: { + path: require.resolve('path-browserify'), + crypto: require.resolve('crypto-browserify'), + stream: require.resolve('stream-browserify'), + }, + }, + plugins: [ + scopedCSS(), + classicEmberSupport(), + ember(), + // extra plugins here + babel({ + babelHelpers: 'runtime', + extensions, + }), + ], + optimizeDeps: { + exclude: ['@sqlite.org/sqlite-wasm', 'content-tag'], + }, +}); +7; diff --git a/packages/local-types/index.d.ts b/packages/local-types/index.d.ts index 39252b3a237..4abc5abf8ce 100644 --- a/packages/local-types/index.d.ts +++ b/packages/local-types/index.d.ts @@ -1,20 +1,6 @@ import 'ember-source/types'; import * as ContentTag from 'content-tag'; -declare global { - // Make ContentTagGlobal a property of globalThis - interface Window { - ContentTagGlobal: typeof ContentTag; - } - - interface globalThis { - ContentTagGlobal: typeof ContentTag; - } - - // For Node.js environments - let ContentTagGlobal: typeof ContentTag; -} - import { TemplateFactory } from 'htmlbars-inline-precompile'; import '@glint/ember-tsc/types'; import { ComponentLike } from '@glint/template'; @@ -71,10 +57,13 @@ declare module '@ember/helper' { [InvokeDirect]: GlintFnHelper[typeof InvokeDirect]; } - interface ConcatHelper extends GlintConcatHelper, HelperLike<{ - Args: { Positional: unknown[] }; - Return: string; - }> {} + interface ConcatHelper + extends + GlintConcatHelper, + HelperLike<{ + Args: { Positional: unknown[] }; + Return: string; + }> {} interface GetHelper { [InvokeDirect]: GlintGetHelper[typeof InvokeDirect]; @@ -82,14 +71,16 @@ declare module '@ember/helper' { } declare module '@ember/modifier/on' { - interface OnModifier - extends ModifierLike<{ - Element: Element; - Args: { - Named: OnModifierArgs; - Positional: [name: string, callback: (event: EventForName) => void]; - }; - }> {} + interface OnModifier extends ModifierLike<{ + Element: Element; + Args: { + Named: OnModifierArgs; + Positional: [ + name: string, + callback: (event: EventForName) => void, + ]; + }; + }> {} } // `@ember/routing` re-exports `LinkTo` from `@ember/-internals/glimmer`, where diff --git a/packages/realm-server/main.ts b/packages/realm-server/main.ts index f065e41a2d9..4302a497fc1 100644 --- a/packages/realm-server/main.ts +++ b/packages/realm-server/main.ts @@ -19,8 +19,6 @@ import * as Sentry from '@sentry/node'; import { PgAdapter, PgQueuePublisher } from '@cardstack/postgres'; import { MatrixClient } from '@cardstack/runtime-common/matrix-client'; -import * as ContentTagGlobal from 'content-tag'; - import 'decorator-transforms/globals'; import { createRemotePrerenderer } from './prerender/remote-prerenderer'; import { buildCreatePrerenderAuth } from './prerender/auth'; @@ -33,8 +31,6 @@ import { } from './lib/dev-service-registry'; import { writeRuntimeMetadataFile } from './lib/runtime-metadata-file'; -(globalThis as any).ContentTagGlobal = ContentTagGlobal; - let log = logger('main'); const runtimeMetadataFile = process.env.SOFTWARE_FACTORY_REALM_SERVER_METADATA_FILE; diff --git a/packages/realm-server/server.ts b/packages/realm-server/server.ts index 1c80d24187e..ea0bb555703 100644 --- a/packages/realm-server/server.ts +++ b/packages/realm-server/server.ts @@ -788,13 +788,10 @@ export class RealmServer { }, ); - indexHTML = indexHTML - .replace(/(src|href)="\//g, `$1="${this.assetsURL.href}`) - // This is imported within a script tag vs being in an attribute - .replace( - '/assets/content-tag/standalone.js', - new URL('/assets/content-tag/standalone.js', this.assetsURL.href).href, - ); + indexHTML = indexHTML.replace( + /(src|href)="\//g, + `$1="${this.assetsURL.href}`, + ); // Strip any static favicon/apple-touch-icon links from the base HTML // since these are now dynamically injected between the head markers diff --git a/packages/realm-server/tests/index.ts b/packages/realm-server/tests/index.ts index 784e5a227a0..6945cd01211 100644 --- a/packages/realm-server/tests/index.ts +++ b/packages/realm-server/tests/index.ts @@ -24,9 +24,6 @@ }) as typeof setInterval; } -import * as ContentTagGlobal from 'content-tag'; -(globalThis as any).ContentTagGlobal = ContentTagGlobal; - import QUnit from 'qunit'; QUnit.config.testTimeout = 60000; diff --git a/packages/runtime-common/etc.ts b/packages/runtime-common/etc.ts deleted file mode 100644 index cbd8858ae63..00000000000 --- a/packages/runtime-common/etc.ts +++ /dev/null @@ -1,7 +0,0 @@ -//@ts-ignore no types are available -import * as etc from 'ember-source/dist/ember-template-compiler.js'; - -//@ts-ignore breaks esbuild for VS Code extension -import type { EmberTemplateCompiler } from 'babel-plugin-ember-template-compilation/src/ember-template-compiler'; - -export const compiler = etc as unknown as EmberTemplateCompiler; diff --git a/packages/runtime-common/fetch-browser.ts b/packages/runtime-common/fetch-browser.ts new file mode 100644 index 00000000000..ec45faf5b9b --- /dev/null +++ b/packages/runtime-common/fetch-browser.ts @@ -0,0 +1,4 @@ +export function createEnvironmentAwareFetch(): typeof globalThis.fetch { + // Browser environment - use native fetch + return globalThis.fetch.bind(globalThis); +} diff --git a/packages/runtime-common/fetch-node.ts b/packages/runtime-common/fetch-node.ts new file mode 100644 index 00000000000..9872b7114c7 --- /dev/null +++ b/packages/runtime-common/fetch-node.ts @@ -0,0 +1,62 @@ +/** + * Creates a fetch implementation that's appropriate for the current environment. + * In Node.js, it enhances localhost subdomain resolution using Undici agent. + * In browsers, it uses native fetch. + */ +export function createEnvironmentAwareFetch(): typeof globalThis.fetch { + // Node.js environment - create enhanced fetch with Undici dispatcher + try { + // Check if undici and dns are available at runtime + let undici: any; + let dns: any; + try { + undici = require('undici'); + dns = require('dns'); + } catch (e) { + // Undici not available - fallback to native fetch + return globalThis.fetch.bind(globalThis); + } + + const { Agent } = undici; + + // Create a custom agent with localhost subdomain resolution + const agent = new Agent({ + connect: { + // This replaces dns.lookup for sockets created by this Agent + lookup(hostname: string, options: any, cb: any) { + if (hostname?.endsWith('.localhost')) { + if (options.all) { + // Return array format if options.all is true + return cb(null, [{ address: '127.0.0.1', family: 4 }], null); + } else { + // Return standard format otherwise + return cb(null, '127.0.0.1', 4); + } + } + // Use default DNS lookup for all other hostnames + // Use a lazy-loaded function to avoid bundler issues + function performDNSLookup() { + try { + return dns.lookup(hostname, options, cb); + } catch (e) { + return cb(new Error('DNS lookup failed'), null, null); + } + } + return performDNSLookup(); + }, + }, + }); + + // Create a custom fetch function that uses our agent + return async (input: RequestInfo | URL, init?: RequestInit) => { + let fetch = globalThis.fetch.bind(globalThis); + return fetch(input, { + ...init, + dispatcher: agent, + } as any); + }; + } catch (e) { + // Fallback to native fetch if undici setup fails + return globalThis.fetch.bind(globalThis); + } +} diff --git a/packages/runtime-common/loader.ts b/packages/runtime-common/loader.ts index 99504a1d962..ffef6e2cc10 100644 --- a/packages/runtime-common/loader.ts +++ b/packages/runtime-common/loader.ts @@ -719,14 +719,21 @@ export class Loader { throw new Error(`bug: should never get here`); } - let dependencyList: UnregisteredDep[]; - let implementation: Function; - - // this local is here for the evals to see - // @ts-ignore - // eslint-disable-next-line @typescript-eslint/no-unused-vars - let define = (_mid: string, depList: string[], impl: Function) => { - dependencyList = depList.map((depId) => { + type DefineFunc = (( + mid: string, + depList: string[], + impl: Function, + ) => void) & { + dependencyList: UnregisteredDep[]; + implementation: Function; + }; + + // this local is here for the evals to see. We're sticking the + // dependencyList and implementation onto the function itself because that's + // a convenient way to ensure that build tools like Rollup don't optimize it + // away. Rollup violates the JS spec by removing a local that's visible to `eval`. + let define = ((_mid: string, depList: string[], impl: Function) => { + define.dependencyList = depList.map((depId) => { if (depId === 'exports') { return { type: 'exports' }; } else if (depId === '__import_meta__') { @@ -741,8 +748,8 @@ export class Loader { }; } }); - implementation = impl; - }; + define.implementation = impl; + }) as DefineFunc; try { eval(src); // + "\n//# sourceURL=" + moduleIdentifier); @@ -758,8 +765,8 @@ export class Loader { let registeredModule: RegisteredModule = { state: 'registered', - dependencyList: dependencyList!, - implementation: implementation!, + dependencyList: define.dependencyList, + implementation: define.implementation, }; this.setModule(moduleIdentifier, registeredModule); diff --git a/packages/runtime-common/module-syntax.ts b/packages/runtime-common/module-syntax.ts index 5e8a77b2f7e..af153da8f6b 100644 --- a/packages/runtime-common/module-syntax.ts +++ b/packages/runtime-common/module-syntax.ts @@ -18,6 +18,7 @@ import { removeFieldPlugin } from './remove-field-plugin'; import { ImportUtil } from 'babel-import-util'; import camelCase from 'camelcase'; import isEqual from 'lodash/isEqual'; +import * as ContentTag from 'content-tag'; import { baseRealm, @@ -347,7 +348,7 @@ export function gjsToPlaceholderJS( let placeholder = params?.placeholder ?? 'templatePlaceholder'; let output = []; let offset = 0; - let matches = new ContentTagGlobal.Preprocessor().parse(src); + let matches = new ContentTag.Preprocessor().parse(src); const srcArray = Array.from(src); // to be multi-byte character safe, we need to slice on a string converted to an array for (let match of matches) { output.push(srcArray.slice(offset, match.range.startChar).join('')); diff --git a/packages/runtime-common/package.json b/packages/runtime-common/package.json index 907396a96f0..e9595336782 100644 --- a/packages/runtime-common/package.json +++ b/packages/runtime-common/package.json @@ -2,6 +2,16 @@ "name": "@cardstack/runtime-common", "version": "1.0.0", "license": "MIT", + "imports": { + "#lint-task": { + "node": "./tasks/lint.ts", + "browser": "./tasks/lint-browser.ts" + }, + "#fetch": { + "node": "./fetch-node.ts", + "browser": "./fetch-browser.ts" + } + }, "dependencies": { "@aws-crypto/sha256-js": "catalog:", "@babel/generator": "catalog:", @@ -25,7 +35,6 @@ "@types/diff": "catalog:", "@types/eslint": "catalog:", "@types/flat": "catalog:", - "@types/jsonwebtoken": "catalog:", "@types/lodash": "catalog:", "@types/pluralize": "catalog:", "@types/qs": "catalog:", @@ -49,7 +58,6 @@ "ignore": "catalog:", "js-string-escape": "catalog:", "json-typescript": "catalog:", - "jsonwebtoken": "catalog:", "lodash": "catalog:", "loglevel": "catalog:", "marked": "catalog:", diff --git a/packages/runtime-common/realm.ts b/packages/runtime-common/realm.ts index a87cf8b5486..66112f1e65e 100644 --- a/packages/runtime-common/realm.ts +++ b/packages/runtime-common/realm.ts @@ -125,7 +125,6 @@ import { } from './matrix-client'; import { PACKAGES_FAKE_ORIGIN } from './package-shim-handler'; -import { JsonWebTokenError, TokenExpiredError } from 'jsonwebtoken'; import RealmPermissionChecker from './realm-permission-checker'; import type { ResponseWithNodeStream, VirtualNetwork } from './virtual-network'; @@ -260,6 +259,12 @@ type ModuleLoadResult = headers: Record; }; +// If we change anything in the transpilation toolchain in an incompatible way, +// we need to bump this number. Otherwise browsers will keep caching files that +// were transpiled the old way, so long as the source files have constant +// last-modified time. +const transpilerToolchainVersion = 'v2'; + function buildEtag( lastModified: number | undefined, variant?: string, @@ -267,7 +272,7 @@ function buildEtag( if (lastModified == null) { return undefined; } - let base = String(lastModified); + let base = transpilerToolchainVersion + ':' + String(lastModified); return variant ? `${base}:${variant}` : base; } @@ -2222,13 +2227,13 @@ export class Realm { ); } } catch (e: any) { - if (e instanceof TokenExpiredError) { + if (e?.constructor?.name === 'TokenExpiredError') { this.#log.warn( `JWT verification failed for ${request.method} ${request.url} (accept: ${request.headers.get('accept')}) with token string ${tokenString}. ${e.message}, expired at ${e.expiredAt}`, ); throw new AuthenticationError(AuthenticationErrorMessages.TokenExpired); } - if (e instanceof JsonWebTokenError) { + if (e?.constructor?.name === 'JsonWebTokenError') { this.#log.warn( `JWT verification failed for ${request.method} ${request.url} (accept: ${request.headers.get('accept')}) with token string ${tokenString}. ${e.message}`, ); diff --git a/packages/runtime-common/tasks/index.ts b/packages/runtime-common/tasks/index.ts index f491875dbc5..7abcf5a5bec 100644 --- a/packages/runtime-common/tasks/index.ts +++ b/packages/runtime-common/tasks/index.ts @@ -9,7 +9,8 @@ import type { DefinitionLookup, } from '../index'; import type { JobInfo, IndexingProgressEvent } from '../worker'; -export * from './lint'; +export type * from './lint'; +export * from '#lint-task'; export * from './full-reindex'; export * from './daily-credit-grant'; export * from './copy'; diff --git a/packages/runtime-common/tasks/lint-browser.ts b/packages/runtime-common/tasks/lint-browser.ts new file mode 100644 index 00000000000..64078e0ca14 --- /dev/null +++ b/packages/runtime-common/tasks/lint-browser.ts @@ -0,0 +1,5 @@ +export function lintSource() { + return () => { + throw new Error(`lintSource does not work in the browser`); + }; +} diff --git a/packages/runtime-common/transpile.ts b/packages/runtime-common/transpile.ts index 9631e5649de..add8a571c2e 100644 --- a/packages/runtime-common/transpile.ts +++ b/packages/runtime-common/transpile.ts @@ -14,7 +14,11 @@ import { generateScopedCSSPlugin } from 'glimmer-scoped-css/ast-transform'; //@ts-ignore no upstream types import decoratorTransforms from 'decorator-transforms'; -import { compiler } from './etc'; + +//@ts-ignore no upstream types +import * as compiler from 'ember-source/ember-template-compiler/index.js'; + +import * as ContentTag from 'content-tag'; const scopedCSSTransform = generateScopedCSSPlugin({ noGlobal: true, @@ -30,7 +34,7 @@ export async function transpileJS( return ''; } - const processor = new ContentTagGlobal.Preprocessor(); + const processor = new ContentTag.Preprocessor(); content = processor.process(content, { filename: debugFilename, inline_source_map: true, diff --git a/packages/runtime-common/virtual-network.ts b/packages/runtime-common/virtual-network.ts index 6254224cdbb..75ed537f2d9 100644 --- a/packages/runtime-common/virtual-network.ts +++ b/packages/runtime-common/virtual-network.ts @@ -1,5 +1,5 @@ import { RealmPaths } from './paths'; -import { baseRealm, isNode } from './index'; +import { baseRealm } from './index'; import type { ModuleDescriptor } from './package-shim-handler'; import { PackageShimHandler, @@ -8,6 +8,7 @@ import { } from './package-shim-handler'; import type { Readable } from 'stream'; import { fetcher, type FetcherMiddlewareHandler } from './fetcher'; +import { createEnvironmentAwareFetch } from '#fetch'; export interface ResponseWithNodeStream extends Response { nodeStream?: Readable; @@ -224,83 +225,6 @@ export function isUrlLike(moduleIdentifier: string): boolean { ); } -/** - * Creates a fetch implementation that's appropriate for the current environment. - * In Node.js, it enhances localhost subdomain resolution using Undici agent. - * In browsers, it uses native fetch. - */ -function createEnvironmentAwareFetch(): typeof globalThis.fetch { - if (!isNode) { - // Browser environment - use native fetch - return globalThis.fetch.bind(globalThis); - } - - // Node.js environment - create enhanced fetch with Undici dispatcher - try { - // Check if we're in a browser-like environment (even if isNode is true) - if ( - typeof window !== 'undefined' || - typeof globalThis.fetch === 'undefined' - ) { - // Browser environment or no fetch available - use native fetch - return globalThis.fetch.bind(globalThis); - } - - // Check if undici and dns are available at runtime - let undici: any; - let dns: any; - try { - undici = require('undici'); - dns = require('dns'); - } catch (e) { - // Undici not available - fallback to native fetch - return globalThis.fetch.bind(globalThis); - } - - const { Agent } = undici; - - // Create a custom agent with localhost subdomain resolution - const agent = new Agent({ - connect: { - // This replaces dns.lookup for sockets created by this Agent - lookup(hostname: string, options: any, cb: any) { - if (hostname?.endsWith('.localhost')) { - if (options.all) { - // Return array format if options.all is true - return cb(null, [{ address: '127.0.0.1', family: 4 }], null); - } else { - // Return standard format otherwise - return cb(null, '127.0.0.1', 4); - } - } - // Use default DNS lookup for all other hostnames - // Use a lazy-loaded function to avoid bundler issues - function performDNSLookup() { - try { - return dns.lookup(hostname, options, cb); - } catch (e) { - return cb(new Error('DNS lookup failed'), null, null); - } - } - return performDNSLookup(); - }, - }, - }); - - // Create a custom fetch function that uses our agent - return async (input: RequestInfo | URL, init?: RequestInit) => { - let fetch = globalThis.fetch.bind(globalThis); - return fetch(input, { - ...init, - dispatcher: agent, - } as any); - }; - } catch (e) { - // Fallback to native fetch if undici setup fails - return globalThis.fetch.bind(globalThis); - } -} - // This is to handle a very mysterious situation in our CI environment where // fetches for base realm artifacts seem to vanish and we see "TypeError: // Fetch failed" exceptions. diff --git a/patches/object-inspect.patch b/patches/object-inspect.patch new file mode 100644 index 00000000000..7c0d6a86fdf --- /dev/null +++ b/patches/object-inspect.patch @@ -0,0 +1,13 @@ +diff --git a/index.js b/index.js +index a4b2d4cd850adb5cda64eb9e5692457a73c0947e..66440138e369d878149c1f7dada8deb9e14c27c6 100644 +--- a/index.js ++++ b/index.js +@@ -65,7 +65,7 @@ function addNumericSeparator(num, str) { + return $replace.call(str, sepRegex, '$&_'); + } + +-var utilInspect = require('./util.inspect'); ++var utilInspect = require('./util.inspect.js'); + var inspectCustom = utilInspect.custom; + var inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null; + diff --git a/patches/postcss@8.5.6.patch b/patches/postcss@8.5.6.patch new file mode 100644 index 00000000000..2526535a3fa --- /dev/null +++ b/patches/postcss@8.5.6.patch @@ -0,0 +1,26 @@ +diff --git a/lib/css-syntax-error.js b/lib/css-syntax-error.js +index 275a4f64c2f8df215341a74d61e2aa2d05d61f78..6fa64a9ea9119fb194cfe28c9a02748d9d736672 100644 +--- a/lib/css-syntax-error.js ++++ b/lib/css-syntax-error.js +@@ -2,7 +2,7 @@ + + let pico = require('picocolors') + +-let terminalHighlight = require('./terminal-highlight') ++let terminalHighlight = require('./terminal-highlight.js') + + class CssSyntaxError extends Error { + constructor(message, line, column, source, file, plugin) { +diff --git a/lib/input.js b/lib/input.js +index bb0ccf53a788be49790836eb7061132249b04c0e..9c0e4a4747da9f8b94228c7578b186e244842098 100644 +--- a/lib/input.js ++++ b/lib/input.js +@@ -7,7 +7,7 @@ let { fileURLToPath, pathToFileURL } = require('url') + + let CssSyntaxError = require('./css-syntax-error') + let PreviousMap = require('./previous-map') +-let terminalHighlight = require('./terminal-highlight') ++let terminalHighlight = require('./terminal-highlight.js') + + let lineToIndexCache = Symbol('lineToIndexCache') + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f797e95157d..c24b6a1816e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -66,9 +66,6 @@ catalogs: '@babel/traverse': specifier: 7.27.0 version: 7.27.0 - '@cardstack/requirejs-monaco-ember-polyfill': - specifier: ^0.0.1 - version: 0.0.1 '@cardstack/view-transitions': specifier: ^0.2.0 version: 0.2.0 @@ -309,9 +306,6 @@ catalogs: broccoli-asset-rev: specifier: ^3.0.0 version: 3.0.0 - broccoli-funnel: - specifier: ^3.0.8 - version: 3.0.8 broccoli-merge-trees: specifier: ^4.2.0 version: 4.2.0 @@ -338,7 +332,7 @@ catalogs: version: 8.2.2 content-tag: specifier: ^4.0.0 - version: 4.1.0 + version: 4.1.1 countries-list: specifier: ^3.1.1 version: 3.2.2 @@ -546,15 +540,9 @@ catalogs: moment: specifier: ^2.29.4 version: 2.30.1 - moment-locales-webpack-plugin: - specifier: ^1.2.0 - version: 1.2.0 monaco-editor: specifier: ^0.52.2 version: 0.52.2 - monaco-editor-webpack-plugin: - specifier: ^7.1.1 - version: 7.1.1 ms: specifier: ^2.1.3 version: 2.1.3 @@ -730,9 +718,15 @@ patchedDependencies: monaco-editor@0.52.2: hash: bdefe071221b87c7c15e1add6739d24d486f543dbad0d714ae586085204626cd path: patches/monaco-editor@0.52.2.patch + object-inspect: + hash: bd295adbd162403eccfdace2cf14691901d878d9d5d6e993bf76eedf238ac5de + path: patches/object-inspect.patch openai: hash: 6833f1bcf56cde16edb25881777c31d2745994c6ea992d1e2051d1248d213449 path: patches/openai.patch + postcss@8.5.6: + hash: 6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6 + path: patches/postcss@8.5.6.patch style-loader@2.0.0: hash: 579dd92e6adabd45669f9a99a01c6c28c97488c7bf4ee0d6c1c622a14592e4c8 path: patches/style-loader@2.0.0.patch @@ -1103,10 +1097,10 @@ importers: version: 5.9.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.8)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.1(@types/node@24.10.8)(lightningcss@1.32.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: 'catalog:' - version: 2.1.9(@types/node@24.10.8)(jsdom@25.0.1)(terser@5.44.1) + version: 2.1.9(@types/node@24.10.8)(jsdom@26.1.0)(lightningcss@1.32.0)(terser@5.44.1) packages/boxel-homepage-realm: {} @@ -1802,10 +1796,10 @@ importers: version: 5.9.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@25.0.8)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.1(@types/node@25.0.8)(lightningcss@1.32.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: 'catalog:' - version: 2.1.9(@types/node@25.0.8)(jsdom@25.0.1)(terser@5.44.1) + version: 2.1.9(@types/node@25.0.8)(jsdom@26.1.0)(lightningcss@1.32.0)(terser@5.44.1) packages/eslint-plugin-cardstack-host: dependencies: @@ -1821,10 +1815,10 @@ importers: version: 1.7.1(eslint@8.57.1)(typescript@5.9.3) vite: specifier: 'catalog:' - version: 6.4.1(@types/node@25.0.8)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.1(@types/node@25.0.8)(lightningcss@1.32.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: 'catalog:' - version: 2.1.9(@types/node@25.0.8)(jsdom@25.0.1)(terser@5.44.1) + version: 2.1.9(@types/node@25.0.8)(jsdom@26.1.0)(lightningcss@1.32.0)(terser@5.44.1) packages/experiments-realm: dependencies: @@ -1908,6 +1902,12 @@ importers: '@babel/plugin-syntax-typescript': specifier: 'catalog:' version: 7.28.6(@babel/core@7.28.6) + '@babel/plugin-transform-runtime': + specifier: ^7.26.9 + version: 7.28.5(@babel/core@7.28.6) + '@babel/plugin-transform-typescript': + specifier: ^7.28.0 + version: 7.28.6(@babel/core@7.28.6) '@cardstack/base': specifier: workspace:* version: link:../base @@ -1926,9 +1926,6 @@ importers: '@cardstack/local-types': specifier: workspace:* version: link:../local-types - '@cardstack/requirejs-monaco-ember-polyfill': - specifier: 'catalog:' - version: 0.0.1 '@cardstack/runtime-common': specifier: workspace:* version: link:../runtime-common @@ -1966,17 +1963,20 @@ importers: specifier: 'catalog:' version: 4.1.1(@glint/template@1.7.7) '@embroider/compat': - specifier: ^3.5.5 - version: 3.9.3(patch_hash=db8df3cd3be93909d4ddbc1eace0a46dd23639f38332d9eb4c500c534687c7b2)(@embroider/core@3.5.9(@glint/template@1.7.7))(@glint/template@1.7.7) + specifier: ^4.0.3 + version: 4.1.13(patch_hash=db8df3cd3be93909d4ddbc1eace0a46dd23639f38332d9eb4c500c534687c7b2)(@embroider/core@4.4.2(@glint/template@1.7.7))(@glint/template@1.7.7) + '@embroider/config-meta-loader': + specifier: ^1.0.0 + version: 1.0.0 '@embroider/core': - specifier: ^3.4.15 - version: 3.5.9(@glint/template@1.7.7) + specifier: ^4.0.3 + version: 4.4.2(@glint/template@1.7.7) '@embroider/macros': specifier: ^1.16.5 version: 1.16.13(@glint/template@1.7.7) - '@embroider/webpack': - specifier: ^4.0.4 - version: 4.1.2(patch_hash=3575bbdd1074ff74a26adde4a25140c197c845679f6ad0941e00494f73c79eff)(@embroider/core@3.5.9(@glint/template@1.7.7))(webpack@5.104.1) + '@embroider/vite': + specifier: ^1.1.1 + version: 1.5.1(@embroider/core@4.4.2(@glint/template@1.7.7))(@glint/template@1.7.7)(rollup@4.55.1)(vite@8.0.8(@types/node@25.0.8)(esbuild@0.27.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)) '@floating-ui/dom': specifier: 'catalog:' version: 1.7.4 @@ -2000,7 +2000,10 @@ importers: version: 1.31.7(typescript@5.9.3) '@percy/ember': specifier: 'catalog:' - version: 5.0.0(@babel/core@7.28.6)(@glint/template@1.7.7)(webpack@5.104.1) + version: 5.0.0(@babel/core@7.28.6)(@glint/template@1.7.7)(webpack@5.104.1(esbuild@0.27.2)) + '@rollup/plugin-babel': + specifier: ^6.0.4 + version: 6.1.0(@babel/core@7.28.6)(@types/babel__core@7.20.5)(rollup@4.55.1) '@simple-dom/interface': specifier: 'catalog:' version: 1.4.0 @@ -2070,12 +2073,9 @@ importers: awesome-phonenumber: specifier: 'catalog:' version: 7.6.0 - broccoli-asset-rev: - specifier: 'catalog:' - version: 3.0.0 - broccoli-funnel: - specifier: 'catalog:' - version: 3.0.8 + babel-plugin-ember-template-compilation: + specifier: ^2.3.0 + version: 2.4.1 broccoli-merge-trees: specifier: 'catalog:' version: 4.2.0 @@ -2096,7 +2096,7 @@ importers: version: 8.2.2 content-tag: specifier: 'catalog:' - version: 4.1.0 + version: 4.1.1 crypto-browserify: specifier: 'catalog:' version: 3.12.1 @@ -2114,25 +2114,16 @@ importers: version: 1.0.3(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5)) ember-auto-import: specifier: ^2.7.2 - version: 2.12.0(@glint/template@1.7.7)(webpack@5.104.1) + version: 2.12.0(@glint/template@1.7.7)(webpack@5.104.1(esbuild@0.27.2)) ember-basic-dropdown: specifier: 8.0.4 version: 8.0.4(patch_hash=19b0fc5d4bd8b9aa296c4065fa5e33bdbb965db0b277810b596eacd0b9e2f428)(@ember/string@4.0.1)(@ember/test-helpers@5.4.1(@babel/core@7.28.6)(@glint/template@1.7.7))(@glimmer/component@2.0.0)(@glimmer/tracking@1.1.2)(@glint/environment-ember-loose@1.5.2(@glimmer/component@2.0.0)(@glint/template@1.7.7)(ember-cli-htmlbars@6.3.0)(ember-modifier@4.1.0(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5))))(@glint/template@1.7.7)(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5)) ember-cli: specifier: ~6.10.0 version: 6.10.2(@types/node@25.0.8)(ejs@3.1.10)(handlebars@4.7.8)(underscore@1.13.7) - ember-cli-app-version: - specifier: ^6.0.1 - version: 6.0.1(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5)) ember-cli-babel: specifier: ^8.2.0 version: 8.2.0(@babel/core@7.28.6) - ember-cli-clean-css: - specifier: ^3.0.0 - version: 3.0.0 - ember-cli-dependency-checker: - specifier: ^3.3.2 - version: 3.3.3(ember-cli@6.10.2(@types/node@25.0.8)(ejs@3.1.10)(handlebars@4.7.8)(underscore@1.13.7)) ember-cli-deploy: specifier: ^1.0.2 version: 1.0.2 @@ -2157,15 +2148,6 @@ importers: ember-cli-htmlbars: specifier: ^6.3.0 version: 6.3.0 - ember-cli-inject-live-reload: - specifier: ^2.1.0 - version: 2.1.0 - ember-cli-sri: - specifier: ^2.1.1 - version: 2.1.1 - ember-cli-terser: - specifier: ^4.0.2 - version: 4.0.2 ember-cli-typescript-blueprints: specifier: ^3.0.0 version: 3.0.0 @@ -2182,14 +2164,14 @@ importers: specifier: ^2.0.0 version: 2.0.0(@glint/environment-ember-loose@1.5.2(@glimmer/component@2.0.0)(@glint/template@1.7.7)(ember-cli-htmlbars@6.3.0)(ember-modifier@4.1.0(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5))))(@glint/template@1.7.7)(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5)) ember-exam: - specifier: ^10.0.0 - version: 10.0.1(@glint/template@1.7.7)(ember-qunit@9.0.4(@ember/test-helpers@5.4.1(@babel/core@7.28.6)(@glint/template@1.7.7))(@glint/template@1.7.7)(qunit@2.25.0))(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5))(qunit@2.25.0)(webpack@5.104.1) + specifier: ^10.1.0 + version: 10.1.0(@glint/template@1.7.7)(ember-qunit@9.0.4(@ember/test-helpers@5.4.1(@babel/core@7.28.6)(@glint/template@1.7.7))(@glint/template@1.7.7)(qunit@2.25.0))(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5))(qunit@2.25.0)(webpack@5.104.1(esbuild@0.27.2)) ember-focus-trap: specifier: ^1.0.1 version: 1.1.1(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5)) ember-freestyle: specifier: ^0.20.0 - version: 0.20.0(@babel/core@7.28.6)(@ember/string@4.0.1)(@glint/template@1.7.7)(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5))(webpack@5.104.1) + version: 0.20.0(@babel/core@7.28.6)(@ember/string@4.0.1)(@glint/template@1.7.7)(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5))(webpack@5.104.1(esbuild@0.27.2)) ember-keyboard: specifier: ^8.2.1 version: 8.2.1(@babel/core@7.28.6)(@ember/test-helpers@5.4.1(@babel/core@7.28.6)(@glint/template@1.7.7))(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5)) @@ -2223,9 +2205,6 @@ importers: ember-source: specifier: 'catalog:' version: 6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5) - ember-template-imports: - specifier: ^4.1.1 - version: 4.4.0 ember-template-lint: specifier: 'catalog:' version: 7.9.3 @@ -2289,9 +2268,6 @@ importers: katex: specifier: 'catalog:' version: 0.16.44 - loader.js: - specifier: 'catalog:' - version: 4.7.0 lodash: specifier: 'catalog:' version: 4.17.21 @@ -2307,15 +2283,9 @@ importers: moment: specifier: 'catalog:' version: 2.30.1 - moment-locales-webpack-plugin: - specifier: 'catalog:' - version: 1.2.0(moment@2.30.1)(webpack@5.104.1) monaco-editor: specifier: 'catalog:' version: 0.52.2(patch_hash=bdefe071221b87c7c15e1add6739d24d486f543dbad0d714ae586085204626cd) - monaco-editor-webpack-plugin: - specifier: 'catalog:' - version: 7.1.1(monaco-editor@0.52.2(patch_hash=bdefe071221b87c7c15e1add6739d24d486f543dbad0d714ae586085204626cd))(webpack@5.104.1) ms: specifier: 'catalog:' version: 2.1.3 @@ -2379,12 +2349,12 @@ importers: uuid: specifier: 'catalog:' version: 9.0.1 + vite: + specifier: ^8.0.8 + version: 8.0.8(@types/node@25.0.8)(esbuild@0.27.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) wait-for-localhost-cli: specifier: 'catalog:' version: 3.2.0 - webpack: - specifier: 'catalog:' - version: 5.104.1 packages/local-types: devDependencies: @@ -2393,7 +2363,7 @@ importers: version: 1.7.7 content-tag: specifier: 'catalog:' - version: 4.1.0 + version: 4.1.1 ember-provide-consume-context: specifier: ^0.7.0 version: 0.7.1(@ember/test-helpers@5.4.1(@babel/core@7.28.6)(@glint/template@1.7.7))(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5)) @@ -2647,7 +2617,7 @@ importers: version: 8.2.2 content-tag: specifier: 'catalog:' - version: 4.1.0 + version: 4.1.1 cron: specifier: 'catalog:' version: 3.5.0 @@ -2849,9 +2819,6 @@ importers: '@types/flat': specifier: 'catalog:' version: 5.0.5 - '@types/jsonwebtoken': - specifier: 'catalog:' - version: 9.0.10 '@types/lodash': specifier: 'catalog:' version: 4.17.23 @@ -2878,7 +2845,7 @@ importers: version: 6.3.0 content-tag: specifier: 'catalog:' - version: 4.1.0 + version: 4.1.1 date-fns: specifier: 'catalog:' version: 2.30.0 @@ -2921,9 +2888,6 @@ importers: json-typescript: specifier: 'catalog:' version: 1.1.2 - jsonwebtoken: - specifier: 'catalog:' - version: 9.0.3 lodash: specifier: 'catalog:' version: 4.17.21 @@ -3082,7 +3046,7 @@ importers: version: 8.2.2 content-tag: specifier: 'catalog:' - version: 4.1.0 + version: 4.1.1 decorator-transforms: specifier: 'catalog:' version: 2.3.1(@babel/core@7.28.6) @@ -3947,9 +3911,6 @@ packages: resolution: {integrity: sha512-xT8NWm9OYz15Qf7U/y9EQmCiGgZMTJaUbmyh/RxfMupmnBaM/KHMSI1iRuJa2mJ5crY5rcO3rzth+nVk34+jag==} engines: {node: '>= 8'} - '@cardstack/requirejs-monaco-ember-polyfill@0.0.1': - resolution: {integrity: sha512-B5bmLSLkweDtlzoDeem7IezF1zAHZDZU7vH5AQ3bklJjN/Vo80kLOyOomRcgAQfvyhbEN4663ZhUDk9PyAkgKA==} - '@cardstack/view-transitions@0.2.0': resolution: {integrity: sha512-9JuWZy685yO12Pmh9ICLupyhGLgaVBjPK6Z2S07+Ebz9PSJCQunOMNMb6zfyVdq0vAhjfLGMNYOZOPWoYKQBNQ==} peerDependencies: @@ -4126,6 +4087,16 @@ packages: peerDependencies: '@embroider/core': ^3.5.9 + '@embroider/compat@4.1.13': + resolution: {integrity: sha512-TUvc1bv95deXBdhbgnuNAISbgky5Muo+2x38H4qaw56B//9ppmwqnqw0LIVTXlezY40qgwrW8/ztLW6qIbsPeg==} + engines: {node: '>= 20.19.*'} + peerDependencies: + '@embroider/core': ^4.4.3 + + '@embroider/config-meta-loader@1.0.0': + resolution: {integrity: sha512-qznkdjgEGPe6NM94hZNXvOm/WhrJwBh8FtSQZ+nGjh9TOjY42tOiTEevFuM0onNXUn6bpdGzmjwKo2xY2jxQxQ==} + engines: {node: 12.* || 14.* || >= 16} + '@embroider/core@3.5.9': resolution: {integrity: sha512-e6ChqCI2I4/UMnnGRS6be2pY3ssJDXfjrF1dtLt2e6l4EM2IIlT1ndtPAYUGSYSO9JB5WxNpO8Wirj88mVh97Q==} engines: {node: 12.* || 14.* || >= 16} @@ -4159,6 +4130,15 @@ packages: '@glint/template': optional: true + '@embroider/macros@1.19.7': + resolution: {integrity: sha512-KOdoJ2QwNpWFwRP8q4CutMjs4QAgZ0rjNJAO+hYZkWFxM3DOQFyqvImNDx0m/Z/sXEnE1XwUN8NpMCNYyq801A==} + engines: {node: 12.* || 14.* || >= 16} + peerDependencies: + '@glint/template': ^1.0.0 + peerDependenciesMeta: + '@glint/template': + optional: true + '@embroider/reverse-exports@0.2.0': resolution: {integrity: sha512-WFsw8nQpHZiWGEDYpa/A79KEFfTisqteXbY+jg9eZiww1r1G+LZvsmdszDp86TkotUSCqrMbK/ewn0jR1CJmqg==} engines: {node: 12.* || 14.* || >= 16} @@ -4203,6 +4183,12 @@ packages: '@glint/template': optional: true + '@embroider/vite@1.5.1': + resolution: {integrity: sha512-zjQLXlnMU8VfJKbQWYRa8yUBFZB6/o2UCiTcpwVYZsLJnCDCXbawZyAFwRXyMUD7tKzHbj6eVnRQbdwObdOz1A==} + peerDependencies: + '@embroider/core': ^4.4.3 + vite: '>= 5.2.0' + '@embroider/webpack@4.1.2': resolution: {integrity: sha512-jMLRp3pw1OBYAcM1m+jEMbewowKWGX2s4TGfuDNVX81roCZWVbIxIvS4eQwoxL2j8MkuAnEjNbYMJonbl4VeMA==} engines: {node: 12.* || 14.* || >= 16} @@ -4210,6 +4196,15 @@ packages: '@embroider/core': ^3.5.9 webpack: ^5.0.0 + '@emnapi/core@1.9.2': + resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + + '@emnapi/runtime@1.9.2': + resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@esbuild/aix-ppc64@0.19.12': resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} engines: {node: '>=12'} @@ -5410,6 +5405,12 @@ packages: '@mermaid-js/parser@1.1.0': resolution: {integrity: sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw==} + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} @@ -5746,6 +5747,9 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 + '@oxc-project/types@0.124.0': + resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==} + '@paralleldrive/cuid2@2.3.1': resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==} @@ -5872,6 +5876,104 @@ packages: engines: {node: '>=18'} hasBin: true + '@rolldown/binding-android-arm64@1.0.0-rc.15': + resolution: {integrity: sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-rc.15': + resolution: {integrity: sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-rc.15': + resolution: {integrity: sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-rc.15': + resolution: {integrity: sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': + resolution: {integrity: sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': + resolution: {integrity: sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': + resolution: {integrity: sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': + resolution: {integrity: sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': + resolution: {integrity: sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': + resolution: {integrity: sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': + resolution: {integrity: sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-rc.15': + resolution: {integrity: sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==} + '@rollup/plugin-babel@6.1.0': resolution: {integrity: sha512-dFZNuFD2YRcoomP4oYf+DvQNSUA9ih+A3vUqopQx5EdtPGo3WBnQcI/S8pwpz91UsGfL0HsMSOlaMld8HrbubA==} engines: {node: '>=14.0.0'} @@ -6242,6 +6344,9 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/accepts@1.3.7': resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} @@ -7367,6 +7472,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + babel-plugin-debug-macros@2.0.0: + resolution: {integrity: sha512-7ZaLtXIY01PAPhLyjV3OACePnl+X5iQO7F4O/sOJHTfMf/36zyu14uVUxNiZmOUntYBsyT/VVplf1LrH6NcwvQ==} + engines: {node: '>=16'} + peerDependencies: + '@babel/core': ^7.0.0 + babel-plugin-dynamic-import-node@2.3.3: resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} @@ -7765,6 +7876,13 @@ packages: resolution: {integrity: sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==} engines: {node: '>= 0.10'} + browserslist-to-esbuild@2.1.1: + resolution: {integrity: sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + browserslist: '*' + browserslist@2.11.3: resolution: {integrity: sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==} deprecated: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools. @@ -9135,12 +9253,6 @@ packages: '@glimmer/tracking': ^1.1.2 ember-source: ^3.28.0 || ^4.0.0 || >=5.0.0 - ember-cli-app-version@6.0.1: - resolution: {integrity: sha512-XA1FwkWA5QytmWF0jcJqEr3jcZoiCl9Fb33TZgOVfClL7Voxe+/RwzISEprBRQgbf7j8z1xf8/RJCKfclUy3rQ==} - engines: {node: 14.* || 16.* || >= 18} - peerDependencies: - ember-source: ^3.28.0 || >= 4.0.0 - ember-cli-babel-plugin-helpers@1.1.1: resolution: {integrity: sha512-sKvOiPNHr5F/60NLd7SFzMpYPte/nnGkq/tMIfXejfKHIhaiIkYFqX8Z9UFTKWLLn+V7NOaby6niNPZUdvKCRw==} engines: {node: 6.* || 8.* || >= 10.*} @@ -9155,6 +9267,12 @@ packages: peerDependencies: '@babel/core': ^7.12.0 + ember-cli-babel@8.3.1: + resolution: {integrity: sha512-Pxm5JP0jQ6fCBlXuh1BFmhrg2/5YXjhf16JI/n8ReOR6Nl+fEbudMpdO69LlqZRsMmTgdjCRmfSxMh26Wsw/rw==} + engines: {node: 16.* || 18.* || >= 20} + peerDependencies: + '@babel/core': ^7.12.0 + ember-cli-clean-css@3.0.0: resolution: {integrity: sha512-BbveJCyRvzzkaTH1llLW+MpHe/yzA5zpHOpMIg2vp/3JD9mban9zUm7lphaB0TSpPuMuby9rAhTI8pgXq0ifIA==} engines: {node: 16.* || >= 18} @@ -9343,8 +9461,8 @@ packages: '@typescript-eslint/parser': optional: true - ember-exam@10.0.1: - resolution: {integrity: sha512-ieWoVWrqCnuAx+5+u6epnKPgEAraWFM/1xqlhN963cyTj9lyaNZKfRM4XaiVOXPd1RW3ULOLOCdnY/fw2KEk+A==} + ember-exam@10.1.0: + resolution: {integrity: sha512-6jUftmu2zpmLZ35PCsZDbdsAXTm2GjCGT3SjRX+BkUr2yKYpbD9B2R7hqCUnqOOTkdp2lzhBcGZ+KwwLLdH7eg==} engines: {node: '>= 18'} peerDependencies: ember-qunit: '*' @@ -10785,6 +10903,10 @@ packages: resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} engines: {node: '>= 0.6'} + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + http-errors@2.0.1: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} @@ -11377,6 +11499,15 @@ packages: canvas: optional: true + jsdom@26.1.0: + resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -11539,6 +11670,80 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + line-column@1.0.2: resolution: {integrity: sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww==} @@ -11623,9 +11828,6 @@ packages: lodash.defaultsdeep@4.6.1: resolution: {integrity: sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==} - lodash.difference@4.5.0: - resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} - lodash.flatten@3.0.2: resolution: {integrity: sha512-jCXLoNcqQRbnT/KWZq2fIREHWeczrzpTR0vsycm96l/pu5hGeAntVBG0t7GuM/2wFqmnZs3d1eGptnAH2E8+xQ==} @@ -11904,6 +12106,10 @@ packages: resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} @@ -12100,21 +12306,9 @@ packages: module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} - moment-locales-webpack-plugin@1.2.0: - resolution: {integrity: sha512-QAi5v0OlPUP7GXviKMtxnpBAo8WmTHrUNN7iciAhNOEAd9evCOvuN0g1N7ThIg3q11GLCkjY1zQ2saRcf/43nQ==} - peerDependencies: - moment: ^2.8.0 - webpack: ^1 || ^2 || ^3 || ^4 || ^5 - moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} - monaco-editor-webpack-plugin@7.1.1: - resolution: {integrity: sha512-WxdbFHS3Wtz4V9hzhe/Xog5hQRSMxmDLkEEYZwqMDHgJlkZo00HVFZR0j5d0nKypjTUkkygH3dDSXERLG4757A==} - peerDependencies: - monaco-editor: '>= 0.31.0' - webpack: ^4.5.0 || 5.x - monaco-editor@0.52.2: resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==} @@ -12767,6 +12961,10 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + pidtree@0.3.1: resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} engines: {node: '>=0.10'} @@ -12872,6 +13070,10 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.9: + resolution: {integrity: sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==} + engines: {node: ^10 || ^12 || >=14} + postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} @@ -13378,6 +13580,11 @@ packages: robust-predicates@3.0.3: resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} + rolldown@1.0.0-rc.15: + resolution: {integrity: sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup-plugin-copy-assets@2.0.3: resolution: {integrity: sha512-ETShhQGb9SoiwcNrvb3BhUNSGR89Jao0+XxxfzzLW1YsUzx8+rMO4z9oqWWmo6OHUmfNQRvqRj0cAyPkS9lN9w==} peerDependencies: @@ -13554,6 +13761,10 @@ packages: engines: {node: '>=10'} hasBin: true + send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + send@0.19.2: resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} engines: {node: '>= 0.8.0'} @@ -13851,6 +14062,10 @@ packages: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} @@ -14736,6 +14951,49 @@ packages: yaml: optional: true + vite@8.0.8: + resolution: {integrity: sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + 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@2.1.9: resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} engines: {node: ^18.0.0 || >=20.0.0} @@ -16121,8 +16379,6 @@ snapshots: '@types/node': 11.15.54 ms: 2.0.0 - '@cardstack/requirejs-monaco-ember-polyfill@0.0.1': {} - '@cardstack/view-transitions@0.2.0(@babel/core@7.28.6)(ember-modifier@4.1.0(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5)))': dependencies: '@embroider/addon-shim': 1.10.2 @@ -16476,10 +16732,65 @@ snapshots: - supports-color - utf-8-validate - '@embroider/core@3.5.9(@glint/template@1.7.7)': + '@embroider/compat@4.1.13(patch_hash=db8df3cd3be93909d4ddbc1eace0a46dd23639f38332d9eb4c500c534687c7b2)(@embroider/core@4.4.2(@glint/template@1.7.7))(@glint/template@1.7.7)': dependencies: + '@babel/code-frame': 7.28.6 '@babel/core': 7.28.6(supports-color@8.1.1) - '@babel/parser': 7.28.6 + '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.28.6) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.28.6) + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.28.6) + '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.28.6) + '@babel/preset-env': 7.28.6(@babel/core@7.28.6)(supports-color@8.1.1) + '@babel/runtime': 7.28.6 + '@babel/traverse': 7.28.6(supports-color@8.1.1) + '@embroider/core': 4.4.2(@glint/template@1.7.7) + '@embroider/macros': 1.19.7(@babel/core@7.28.6)(@glint/template@1.7.7) + '@types/babel__code-frame': 7.27.0 + assert-never: 1.4.0 + babel-import-util: 3.0.1 + babel-plugin-debug-macros: 2.0.0(@babel/core@7.28.6) + babel-plugin-ember-template-compilation: 3.1.0 + babel-plugin-ember-template-compilation-2: babel-plugin-ember-template-compilation@2.4.1 + babel-plugin-syntax-dynamic-import: 6.18.0 + babylon: 6.18.0 + bind-decorator: 1.0.11 + broccoli: 4.0.0 + broccoli-concat: 4.2.5 + broccoli-file-creator: 2.1.1 + broccoli-funnel: 3.0.8 + broccoli-merge-trees: 4.2.0 + broccoli-persistent-filter: 3.1.3 + broccoli-plugin: 4.0.7 + broccoli-source: 3.0.1 + chalk: 4.1.2 + debug: 4.4.3(supports-color@8.1.1) + fast-sourcemap-concat: 2.1.1 + fs-extra: 9.1.0 + fs-tree-diff: 2.0.1 + jsdom: 26.1.0 + lodash: 4.17.21 + pkg-up: 3.1.0 + resolve: 1.22.11 + resolve-package-path: 4.0.3 + resolve.exports: 2.0.3 + semver: 7.7.3 + symlink-or-copy: 1.3.1 + tree-sync: 2.1.0 + typescript-memoize: 1.1.1 + walk-sync: 3.0.0 + transitivePeerDependencies: + - '@glint/template' + - bufferutil + - canvas + - supports-color + - utf-8-validate + + '@embroider/config-meta-loader@1.0.0': {} + + '@embroider/core@3.5.9(@glint/template@1.7.7)': + dependencies: + '@babel/core': 7.28.6(supports-color@8.1.1) + '@babel/parser': 7.28.6 '@babel/traverse': 7.28.6(supports-color@8.1.1) '@embroider/macros': 1.19.6(@glint/template@1.7.7) '@embroider/shared-internals': 2.9.2(supports-color@8.1.1) @@ -16581,6 +16892,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@embroider/macros@1.19.7(@babel/core@7.28.6)(@glint/template@1.7.7)': + dependencies: + '@embroider/shared-internals': 3.0.2 + assert-never: 1.4.0 + babel-import-util: 3.0.1 + ember-cli-babel: 8.3.1(@babel/core@7.28.6) + find-up: 5.0.0 + lodash: 4.17.21 + resolve: 1.22.11 + semver: 7.7.3 + optionalDependencies: + '@glint/template': 1.7.7 + transitivePeerDependencies: + - '@babel/core' + - supports-color + '@embroider/reverse-exports@0.2.0': dependencies: mem: 8.1.1 @@ -16659,6 +16986,34 @@ snapshots: transitivePeerDependencies: - supports-color + '@embroider/vite@1.5.1(@embroider/core@4.4.2(@glint/template@1.7.7))(@glint/template@1.7.7)(rollup@4.55.1)(vite@8.0.8(@types/node@25.0.8)(esbuild@0.27.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@babel/core': 7.28.6(supports-color@8.1.1) + '@embroider/core': 4.4.2(@glint/template@1.7.7) + '@embroider/macros': 1.19.7(@babel/core@7.28.6)(@glint/template@1.7.7) + '@embroider/reverse-exports': 0.2.0 + '@rollup/pluginutils': 5.3.0(rollup@4.55.1) + assert-never: 1.4.0 + browserslist: 4.28.1 + browserslist-to-esbuild: 2.1.1(browserslist@4.28.1) + chalk: 5.6.2 + content-tag: 4.1.1 + debug: 4.4.3(supports-color@8.1.1) + fast-glob: 3.3.3 + fs-extra: 10.1.0 + jsdom: 25.0.1(supports-color@8.1.1) + send: 0.18.0 + source-map-url: 0.4.1 + terser: 5.44.1 + vite: 8.0.8(@types/node@25.0.8)(esbuild@0.27.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2) + transitivePeerDependencies: + - '@glint/template' + - bufferutil + - canvas + - rollup + - supports-color + - utf-8-validate + '@embroider/webpack@4.1.2(patch_hash=3575bbdd1074ff74a26adde4a25140c197c845679f6ad0941e00494f73c79eff)(@embroider/core@3.5.9(@glint/template@1.7.7))(webpack@5.104.1)': dependencies: '@babel/core': 7.28.6(supports-color@8.1.1) @@ -16690,6 +17045,22 @@ snapshots: - canvas - utf-8-validate + '@emnapi/core@1.9.2': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.9.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild/aix-ppc64@0.19.12': optional: true @@ -17612,6 +17983,13 @@ snapshots: dependencies: langium: 4.2.1 + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@tybys/wasm-util': 0.10.1 + optional: true + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': dependencies: eslint-scope: 5.1.1 @@ -18055,6 +18433,8 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@oxc-project/types@0.124.0': {} + '@paralleldrive/cuid2@2.3.1': dependencies: '@noble/hashes': 1.8.0 @@ -18195,11 +18575,11 @@ snapshots: '@percy/dom@1.31.7': {} - '@percy/ember@5.0.0(@babel/core@7.28.6)(@glint/template@1.7.7)(webpack@5.104.1)': + '@percy/ember@5.0.0(@babel/core@7.28.6)(@glint/template@1.7.7)(webpack@5.104.1(esbuild@0.27.2))': dependencies: '@percy/sdk-utils': 1.31.7 - ember-auto-import: 2.12.0(@glint/template@1.7.7)(webpack@5.104.1) - ember-cli-babel: 8.2.0(@babel/core@7.28.6) + ember-auto-import: 2.12.0(@glint/template@1.7.7)(webpack@5.104.1(esbuild@0.27.2)) + ember-cli-babel: 8.3.1(@babel/core@7.28.6) transitivePeerDependencies: - '@babel/core' - '@glint/template' @@ -18294,6 +18674,57 @@ snapshots: - react-native-b4a - supports-color + '@rolldown/binding-android-arm64@1.0.0-rc.15': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-rc.15': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-rc.15': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-rc.15': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': + optional: true + + '@rolldown/pluginutils@1.0.0-rc.15': {} + '@rollup/plugin-babel@6.1.0(@babel/core@7.28.6)(@types/babel__core@7.20.5)(rollup@4.55.1)': dependencies: '@babel/core': 7.28.6(supports-color@8.1.1) @@ -18651,6 +19082,11 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + '@types/accepts@1.3.7': dependencies: '@types/node': 25.0.8 @@ -18908,7 +19344,7 @@ snapshots: '@types/glob@9.0.0': dependencies: - glob: 13.0.0 + glob: 13.0.6 '@types/htmlbars-inline-precompile@3.0.4': {} @@ -19322,21 +19758,21 @@ snapshots: chai: 5.3.3 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@24.10.8)(terser@5.44.1))': + '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@24.10.8)(lightningcss@1.32.0)(terser@5.44.1))': dependencies: '@vitest/spy': 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 5.4.21(@types/node@24.10.8)(terser@5.44.1) + vite: 5.4.21(@types/node@24.10.8)(lightningcss@1.32.0)(terser@5.44.1) - '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@25.0.8)(terser@5.44.1))': + '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@25.0.8)(lightningcss@1.32.0)(terser@5.44.1))': dependencies: '@vitest/spy': 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 5.4.21(@types/node@25.0.8)(terser@5.44.1) + vite: 5.4.21(@types/node@25.0.8)(lightningcss@1.32.0)(terser@5.44.1) '@vitest/pretty-format@2.1.9': dependencies: @@ -19591,20 +20027,20 @@ snapshots: acorn-globals@7.0.1: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 acorn-walk: 8.3.4 - acorn-import-attributes@1.9.5(acorn@8.15.0): + acorn-import-attributes@1.9.5(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 - acorn-import-phases@1.0.4(acorn@8.15.0): + acorn-import-phases@1.0.4(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 - acorn-jsx@5.3.2(acorn@8.15.0): + acorn-jsx@5.3.2(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 acorn-walk@8.3.4: dependencies: @@ -19977,6 +20413,15 @@ snapshots: babel-import-util@3.0.1: {} + babel-loader@8.4.1(@babel/core@7.28.6)(webpack@5.104.1(esbuild@0.27.2)): + dependencies: + '@babel/core': 7.28.6(supports-color@8.1.1) + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 5.104.1(esbuild@0.27.2) + babel-loader@8.4.1(@babel/core@7.28.6)(webpack@5.104.1): dependencies: '@babel/core': 7.28.6(supports-color@8.1.1) @@ -20003,6 +20448,12 @@ snapshots: '@babel/core': 7.28.6(supports-color@8.1.1) semver: 5.7.2 + babel-plugin-debug-macros@2.0.0(@babel/core@7.28.6): + dependencies: + '@babel/core': 7.28.6(supports-color@8.1.1) + babel-import-util: 2.1.1 + semver: 7.7.3 + babel-plugin-dynamic-import-node@2.3.3: dependencies: object.assign: 4.1.7 @@ -20757,6 +21208,11 @@ snapshots: readable-stream: 2.3.8 safe-buffer: 5.2.1 + browserslist-to-esbuild@2.1.1(browserslist@4.28.1): + dependencies: + browserslist: 4.28.1 + meow: 13.2.0 + browserslist@2.11.3: dependencies: caniuse-lite: 1.0.30001764 @@ -21404,15 +21860,29 @@ snapshots: crypto-random-string@2.0.0: {} + css-loader@5.2.7(webpack@5.104.1(esbuild@0.27.2)): + dependencies: + icss-utils: 5.1.0(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)) + loader-utils: 2.0.4 + postcss: 8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6) + postcss-modules-extract-imports: 3.1.0(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)) + postcss-modules-scope: 3.2.1(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)) + postcss-modules-values: 4.0.0(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)) + postcss-value-parser: 4.2.0 + schema-utils: 3.3.0 + semver: 7.7.3 + webpack: 5.104.1(esbuild@0.27.2) + css-loader@5.2.7(webpack@5.104.1): dependencies: - icss-utils: 5.1.0(postcss@8.5.6) + icss-utils: 5.1.0(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)) loader-utils: 2.0.4 - postcss: 8.5.6 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) - postcss-modules-scope: 3.2.1(postcss@8.5.6) - postcss-modules-values: 4.0.0(postcss@8.5.6) + postcss: 8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6) + postcss-modules-extract-imports: 3.1.0(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)) + postcss-modules-scope: 3.2.1(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)) + postcss-modules-values: 4.0.0(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)) postcss-value-parser: 4.2.0 schema-utils: 3.3.0 semver: 7.7.3 @@ -21849,8 +22319,7 @@ snapshots: detect-indent@7.0.2: {} - detect-libc@2.1.2: - optional: true + detect-libc@2.1.2: {} detect-newline@3.1.0: {} @@ -22026,6 +22495,50 @@ snapshots: transitivePeerDependencies: - supports-color + ember-auto-import@2.12.0(@glint/template@1.7.7)(webpack@5.104.1(esbuild@0.27.2)): + dependencies: + '@babel/core': 7.28.6(supports-color@8.1.1) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.28.6) + '@babel/plugin-proposal-decorators': 7.28.6(@babel/core@7.28.6) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.28.6) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.28.6)(supports-color@8.1.1) + '@babel/preset-env': 7.28.6(@babel/core@7.28.6)(supports-color@8.1.1) + '@embroider/macros': 1.16.13(@glint/template@1.7.7) + '@embroider/reverse-exports': 0.2.0 + '@embroider/shared-internals': 2.9.2(supports-color@8.1.1) + babel-loader: 8.4.1(@babel/core@7.28.6)(webpack@5.104.1(esbuild@0.27.2)) + babel-plugin-ember-modules-api-polyfill: 3.5.0 + babel-plugin-ember-template-compilation: 2.4.1 + babel-plugin-htmlbars-inline-precompile: 5.3.1 + babel-plugin-syntax-dynamic-import: 6.18.0 + broccoli-debug: 0.6.5 + broccoli-funnel: 3.0.8 + broccoli-merge-trees: 4.2.0 + broccoli-plugin: 4.0.7 + broccoli-source: 3.0.1 + css-loader: 5.2.7(webpack@5.104.1(esbuild@0.27.2)) + debug: 4.4.3(supports-color@8.1.1) + fs-extra: 10.1.0 + fs-tree-diff: 2.0.1 + handlebars: 4.7.8 + is-subdir: 1.2.0 + js-string-escape: 1.0.1 + lodash: 4.17.21 + mini-css-extract-plugin: 2.9.4(webpack@5.104.1(esbuild@0.27.2)) + minimatch: 3.1.2 + parse5: 6.0.1 + pkg-entry-points: 1.1.1 + resolve: 1.22.11 + resolve-package-path: 4.0.3 + semver: 7.7.3 + style-loader: 2.0.0(patch_hash=579dd92e6adabd45669f9a99a01c6c28c97488c7bf4ee0d6c1c622a14592e4c8)(webpack@5.104.1(esbuild@0.27.2)) + typescript-memoize: 1.1.1 + walk-sync: 3.0.0 + transitivePeerDependencies: + - '@glint/template' + - supports-color + - webpack + ember-auto-import@2.12.0(@glint/template@1.7.7)(webpack@5.104.1): dependencies: '@babel/core': 7.28.6(supports-color@8.1.1) @@ -22091,14 +22604,6 @@ snapshots: - '@glint/template' - supports-color - ember-cli-app-version@6.0.1(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5)): - dependencies: - ember-cli-babel: 7.26.11 - ember-source: 6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5) - git-repo-info: 2.1.1 - transitivePeerDependencies: - - supports-color - ember-cli-babel-plugin-helpers@1.1.1: {} ember-cli-babel@7.26.11: @@ -22169,6 +22674,39 @@ snapshots: transitivePeerDependencies: - supports-color + ember-cli-babel@8.3.1(@babel/core@7.28.6): + dependencies: + '@babel/core': 7.28.6(supports-color@8.1.1) + '@babel/helper-compilation-targets': 7.28.6 + '@babel/plugin-proposal-decorators': 7.28.6(@babel/core@7.28.6) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.28.6)(supports-color@8.1.1) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.28.6)(supports-color@8.1.1) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.6)(supports-color@8.1.1) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.28.6)(supports-color@8.1.1) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.28.6)(supports-color@8.1.1) + '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.28.6) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.28.6) + '@babel/preset-env': 7.28.6(@babel/core@7.28.6)(supports-color@8.1.1) + '@babel/runtime': 7.12.18 + amd-name-resolver: 1.3.1 + babel-plugin-debug-macros: 0.3.4(@babel/core@7.28.6) + babel-plugin-ember-data-packages-polyfill: 0.1.2 + babel-plugin-ember-modules-api-polyfill: 3.5.0 + babel-plugin-module-resolver: 5.0.2 + broccoli-babel-transpiler: 8.0.2(@babel/core@7.28.6) + broccoli-debug: 0.6.5 + broccoli-funnel: 3.0.8 + broccoli-source: 3.0.1 + calculate-cache-key-for-tree: 2.0.0 + clone: 2.1.2 + ember-cli-babel-plugin-helpers: 1.1.1 + ember-cli-version-checker: 5.1.2 + ensure-posix-path: 1.1.1 + resolve-package-path: 4.0.3 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + ember-cli-clean-css@3.0.0: dependencies: broccoli-persistent-filter: 3.1.3 @@ -22186,15 +22724,6 @@ snapshots: resolve: 1.22.11 semver: 5.7.2 - ember-cli-dependency-checker@3.3.3(ember-cli@6.10.2(@types/node@25.0.8)(ejs@3.1.10)(handlebars@4.7.8)(underscore@1.13.7)): - dependencies: - chalk: 2.4.2 - ember-cli: 6.10.2(@types/node@25.0.8)(ejs@3.1.10)(handlebars@4.7.8)(underscore@1.13.7) - find-yarn-workspace-root: 2.0.0 - is-git-url: 1.0.0 - resolve: 1.22.11 - semver: 5.7.2 - ember-cli-deploy-build@2.0.0: dependencies: chalk: 1.1.3 @@ -22620,7 +23149,7 @@ snapshots: compression: 1.8.1 configstore: 7.1.0 console-ui: 3.1.2 - content-tag: 4.1.0 + content-tag: 4.1.1 core-object: 3.1.5 dag-map: 2.0.2 diff: 8.0.4 @@ -22835,14 +23364,14 @@ snapshots: transitivePeerDependencies: - eslint - ember-exam@10.0.1(@glint/template@1.7.7)(ember-qunit@9.0.4(@ember/test-helpers@5.4.1(@babel/core@7.28.6)(@glint/template@1.7.7))(@glint/template@1.7.7)(qunit@2.25.0))(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5))(qunit@2.25.0)(webpack@5.104.1): + ember-exam@10.1.0(@glint/template@1.7.7)(ember-qunit@9.0.4(@ember/test-helpers@5.4.1(@babel/core@7.28.6)(@glint/template@1.7.7))(@glint/template@1.7.7)(qunit@2.25.0))(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5))(qunit@2.25.0)(webpack@5.104.1(esbuild@0.27.2)): dependencies: '@babel/core': 7.28.6(supports-color@8.1.1) chalk: 5.6.2 cli-table3: 0.6.5 debug: 4.4.3(supports-color@8.1.1) - ember-auto-import: 2.12.0(@glint/template@1.7.7)(webpack@5.104.1) - ember-cli-babel: 8.2.0(@babel/core@7.28.6) + ember-auto-import: 2.12.0(@glint/template@1.7.7)(webpack@5.104.1(esbuild@0.27.2)) + ember-cli-babel: 8.3.1(@babel/core@7.28.6) ember-qunit: 9.0.4(@ember/test-helpers@5.4.1(@babel/core@7.28.6)(@glint/template@1.7.7))(@glint/template@1.7.7)(qunit@2.25.0) ember-source: 6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5) execa: 8.0.1 @@ -22866,6 +23395,31 @@ snapshots: transitivePeerDependencies: - supports-color + ember-freestyle@0.20.0(@babel/core@7.28.6)(@ember/string@4.0.1)(@glint/template@1.7.7)(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5))(webpack@5.104.1(esbuild@0.27.2)): + dependencies: + '@ember/render-modifiers': 2.1.0(@babel/core@7.28.6)(@glint/template@1.7.7)(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5)) + '@ember/string': 4.0.1 + '@glimmer/component': 2.0.0 + '@glimmer/tracking': 1.1.2 + ember-auto-import: 2.12.0(@glint/template@1.7.7)(webpack@5.104.1(esbuild@0.27.2)) + ember-cli-babel: 7.26.11 + ember-cli-htmlbars: 6.3.0 + ember-cli-typescript: 5.3.0 + ember-focus-trap: 1.1.1(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5)) + ember-modifier: 4.1.0(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5)) + ember-named-blocks-polyfill: 0.2.5 + ember-truth-helpers: 4.0.3(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5)) + json-formatter-js: 2.5.23 + macro-decorators: 0.1.2 + strip-indent: 3.0.0 + tracked-built-ins: 4.1.2(@babel/core@7.28.6) + transitivePeerDependencies: + - '@babel/core' + - '@glint/template' + - ember-source + - supports-color + - webpack + ember-freestyle@0.20.0(@babel/core@7.28.6)(@ember/string@4.0.1)(@glint/template@1.7.7)(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5))(webpack@5.104.1): dependencies: '@ember/render-modifiers': 2.1.0(@babel/core@7.28.6)(@glint/template@1.7.7)(ember-source@6.10.1(patch_hash=ea945024993105fb6cc4ae5cb5e9ea8e0eff6cd5fe0b0033c43dd0cf9453eb0d)(@glimmer/component@2.0.0)(rsvp@4.8.5)) @@ -23182,7 +23736,7 @@ snapshots: broccoli-funnel: 3.0.8 broccoli-merge-trees: 4.2.0 chalk: 4.1.2 - ember-cli-babel: 8.2.0(@babel/core@7.28.6) + ember-cli-babel: 8.3.1(@babel/core@7.28.6) ember-cli-get-component-path-option: 1.0.0 ember-cli-is-package-missing: 1.0.0 ember-cli-normalize-entity-name: 1.0.0 @@ -23418,7 +23972,7 @@ snapshots: is-typed-array: 1.1.15 is-weakref: 1.1.1 math-intrinsics: 1.1.0 - object-inspect: 1.13.4 + object-inspect: 1.13.4(patch_hash=bd295adbd162403eccfdace2cf14691901d878d9d5d6e993bf76eedf238ac5de) object-keys: 1.1.1 object.assign: 4.1.7 own-keys: 1.0.1 @@ -23900,8 +24454,8 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 3.4.3 esprima@3.0.0: {} @@ -24718,7 +25272,7 @@ snapshots: dependencies: '@embroider/addon-shim': 1.10.2 js-string-escape: 1.0.1 - postcss: 8.5.6 + postcss: 8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6) postcss-selector-parser: 6.1.2 super-fast-md5: 1.0.3 transitivePeerDependencies: @@ -24739,7 +25293,7 @@ snapshots: foreground-child: 3.3.1 jackspeak: 3.4.3 minimatch: 9.0.5 - minipass: 7.1.2 + minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 @@ -24747,14 +25301,14 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 4.1.1 - minimatch: 10.1.1 - minipass: 7.1.2 + minimatch: 10.2.4 + minipass: 7.1.3 package-json-from-dist: 1.0.1 - path-scurry: 2.0.1 + path-scurry: 2.0.2 glob@13.0.0: dependencies: - minimatch: 10.1.1 + minimatch: 10.2.4 minipass: 7.1.2 path-scurry: 2.0.1 @@ -25082,6 +25636,14 @@ snapshots: statuses: 1.5.0 toidentifier: 1.0.1 + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + http-errors@2.0.1: dependencies: depd: 2.0.0 @@ -25180,9 +25742,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.5.6): + icss-utils@5.1.0(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)): dependencies: - postcss: 8.5.6 + postcss: 8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6) ieee754@1.1.13: {} @@ -25203,8 +25765,8 @@ snapshots: import-in-the-middle@1.15.0: dependencies: - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) cjs-module-lexer: 1.4.3 module-details-from-path: 1.0.4 @@ -25666,7 +26228,7 @@ snapshots: jsdom@21.1.2: dependencies: abab: 2.0.6 - acorn: 8.15.0 + acorn: 8.16.0 acorn-globals: 7.0.1 cssstyle: 3.0.0 data-urls: 4.0.0 @@ -25724,6 +26286,33 @@ snapshots: - supports-color - utf-8-validate + jsdom@26.1.0: + dependencies: + cssstyle: 4.6.0 + data-urls: 5.0.0 + decimal.js: 10.6.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2(supports-color@8.1.1) + https-proxy-agent: 7.0.6(supports-color@8.1.1) + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.23 + parse5: 7.3.0 + rrweb-cssom: 0.8.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.1.2 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + ws: 8.19.0 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + jsesc@3.1.0: {} json-buffer@3.0.0: {} @@ -25918,6 +26507,55 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + line-column@1.0.2: dependencies: isarray: 1.0.0 @@ -26003,8 +26641,6 @@ snapshots: lodash.defaultsdeep@4.6.1: {} - lodash.difference@4.5.0: {} - lodash.flatten@3.0.2: dependencies: lodash._baseflatten: 3.1.4 @@ -26282,6 +26918,8 @@ snapshots: type-fest: 1.4.0 yargs-parser: 20.2.9 + meow@13.2.0: {} + merge-descriptors@1.0.3: {} merge-descriptors@2.0.0: {} @@ -26395,6 +27033,12 @@ snapshots: min-indent@1.0.1: {} + mini-css-extract-plugin@2.9.4(webpack@5.104.1(esbuild@0.27.2)): + dependencies: + schema-utils: 4.3.3 + tapable: 2.3.0 + webpack: 5.104.1(esbuild@0.27.2) + mini-css-extract-plugin@2.9.4(webpack@5.104.1): dependencies: schema-utils: 4.3.3 @@ -26481,20 +27125,8 @@ snapshots: module-details-from-path@1.0.4: {} - moment-locales-webpack-plugin@1.2.0(moment@2.30.1)(webpack@5.104.1): - dependencies: - lodash.difference: 4.5.0 - moment: 2.30.1 - webpack: 5.104.1 - moment@2.30.1: {} - monaco-editor-webpack-plugin@7.1.1(monaco-editor@0.52.2(patch_hash=bdefe071221b87c7c15e1add6739d24d486f543dbad0d714ae586085204626cd))(webpack@5.104.1): - dependencies: - loader-utils: 2.0.4 - monaco-editor: 0.52.2(patch_hash=bdefe071221b87c7c15e1add6739d24d486f543dbad0d714ae586085204626cd) - webpack: 5.104.1 - monaco-editor@0.52.2(patch_hash=bdefe071221b87c7c15e1add6739d24d486f543dbad0d714ae586085204626cd): {} morgan@1.10.1: @@ -26718,7 +27350,7 @@ snapshots: object-hash@1.3.1: {} - object-inspect@1.13.4: {} + object-inspect@1.13.4(patch_hash=bd295adbd162403eccfdace2cf14691901d878d9d5d6e993bf76eedf238ac5de): {} object-is@1.1.6: dependencies: @@ -27087,12 +27719,12 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 7.1.3 path-scurry@2.0.1: dependencies: lru-cache: 11.2.4 - minipass: 7.1.2 + minipass: 7.1.3 path-scurry@2.0.2: dependencies: @@ -27181,6 +27813,8 @@ snapshots: picomatch@4.0.3: {} + picomatch@4.0.4: {} + pidtree@0.3.1: {} pify@3.0.0: {} @@ -27239,26 +27873,26 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-modules-extract-imports@3.1.0(postcss@8.5.6): + postcss-modules-extract-imports@3.1.0(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)): dependencies: - postcss: 8.5.6 + postcss: 8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6) - postcss-modules-local-by-default@4.2.0(postcss@8.5.6): + postcss-modules-local-by-default@4.2.0(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)): dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 + icss-utils: 5.1.0(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)) + postcss: 8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6) postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.5.6): + postcss-modules-scope@3.2.1(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)): dependencies: - postcss: 8.5.6 + postcss: 8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6) postcss-selector-parser: 7.1.1 - postcss-modules-values@4.0.0(postcss@8.5.6): + postcss-modules-values@4.0.0(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)): dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 + icss-utils: 5.1.0(postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6)) + postcss: 8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6) postcss-selector-parser@6.1.2: dependencies: @@ -27272,7 +27906,13 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.6: + postcss@8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6): + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.9: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -27317,7 +27957,7 @@ snapshots: prettier-plugin-ember-template-tag@2.1.2(prettier@3.7.4): dependencies: '@babel/core': 7.28.6(supports-color@8.1.1) - content-tag: 4.1.0 + content-tag: 4.1.1 prettier: 3.7.4 transitivePeerDependencies: - supports-color @@ -27875,6 +28515,27 @@ snapshots: robust-predicates@3.0.3: {} + rolldown@1.0.0-rc.15: + dependencies: + '@oxc-project/types': 0.124.0 + '@rolldown/pluginutils': 1.0.0-rc.15 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.15 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.15 + '@rolldown/binding-darwin-x64': 1.0.0-rc.15 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.15 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.15 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.15 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.15 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.15 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.15 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.15 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.15 + rollup-plugin-copy-assets@2.0.3(rollup@4.55.1): dependencies: fs-extra: 7.0.1 @@ -28091,6 +28752,24 @@ snapshots: semver@7.7.3: {} + send@0.18.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + send@0.19.2: dependencies: debug: 2.6.9 @@ -28235,27 +28914,27 @@ snapshots: side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 - object-inspect: 1.13.4 + object-inspect: 1.13.4(patch_hash=bd295adbd162403eccfdace2cf14691901d878d9d5d6e993bf76eedf238ac5de) side-channel-map@1.0.1: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 get-intrinsic: 1.3.0 - object-inspect: 1.13.4 + object-inspect: 1.13.4(patch_hash=bd295adbd162403eccfdace2cf14691901d878d9d5d6e993bf76eedf238ac5de) side-channel-weakmap@1.0.2: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 get-intrinsic: 1.3.0 - object-inspect: 1.13.4 + object-inspect: 1.13.4(patch_hash=bd295adbd162403eccfdace2cf14691901d878d9d5d6e993bf76eedf238ac5de) side-channel-map: 1.0.1 side-channel@1.1.0: dependencies: es-errors: 1.3.0 - object-inspect: 1.13.4 + object-inspect: 1.13.4(patch_hash=bd295adbd162403eccfdace2cf14691901d878d9d5d6e993bf76eedf238ac5de) side-channel-list: 1.0.0 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 @@ -28519,6 +29198,8 @@ snapshots: statuses@1.5.0: {} + statuses@2.0.1: {} + statuses@2.0.2: {} std-env@3.10.0: {} @@ -28684,6 +29365,12 @@ snapshots: stubborn-utils@1.0.2: {} + style-loader@2.0.0(patch_hash=579dd92e6adabd45669f9a99a01c6c28c97488c7bf4ee0d6c1c622a14592e4c8)(webpack@5.104.1(esbuild@0.27.2)): + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.104.1(esbuild@0.27.2) + style-loader@2.0.0(patch_hash=579dd92e6adabd45669f9a99a01c6c28c97488c7bf4ee0d6c1c622a14592e4c8)(webpack@5.104.1): dependencies: loader-utils: 2.0.4 @@ -28853,6 +29540,17 @@ snapshots: ansi-escapes: 7.2.0 supports-hyperlinks: 3.2.0 + terser-webpack-plugin@5.3.16(esbuild@0.27.2)(webpack@5.104.1(esbuild@0.27.2)): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + serialize-javascript: 6.0.2 + terser: 5.44.1 + webpack: 5.104.1(esbuild@0.27.2) + optionalDependencies: + esbuild: 0.27.2 + terser-webpack-plugin@5.3.16(webpack@5.104.1): dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -29466,13 +30164,13 @@ snapshots: version-range@4.15.0: {} - vite-node@2.1.9(@types/node@24.10.8)(terser@5.44.1): + vite-node@2.1.9(@types/node@24.10.8)(lightningcss@1.32.0)(terser@5.44.1): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 1.1.2 - vite: 5.4.21(@types/node@24.10.8)(terser@5.44.1) + vite: 5.4.21(@types/node@24.10.8)(lightningcss@1.32.0)(terser@5.44.1) transitivePeerDependencies: - '@types/node' - less @@ -29484,13 +30182,13 @@ snapshots: - supports-color - terser - vite-node@2.1.9(@types/node@25.0.8)(terser@5.44.1): + vite-node@2.1.9(@types/node@25.0.8)(lightningcss@1.32.0)(terser@5.44.1): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 1.1.2 - vite: 5.4.21(@types/node@25.0.8)(terser@5.44.1) + vite: 5.4.21(@types/node@25.0.8)(lightningcss@1.32.0)(terser@5.44.1) transitivePeerDependencies: - '@types/node' - less @@ -29502,60 +30200,79 @@ snapshots: - supports-color - terser - vite@5.4.21(@types/node@24.10.8)(terser@5.44.1): + vite@5.4.21(@types/node@24.10.8)(lightningcss@1.32.0)(terser@5.44.1): dependencies: esbuild: 0.21.5 - postcss: 8.5.6 + postcss: 8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6) rollup: 4.55.1 optionalDependencies: '@types/node': 24.10.8 fsevents: 2.3.3 + lightningcss: 1.32.0 terser: 5.44.1 - vite@5.4.21(@types/node@25.0.8)(terser@5.44.1): + vite@5.4.21(@types/node@25.0.8)(lightningcss@1.32.0)(terser@5.44.1): dependencies: esbuild: 0.21.5 - postcss: 8.5.6 + postcss: 8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6) rollup: 4.55.1 optionalDependencies: '@types/node': 25.0.8 fsevents: 2.3.3 + lightningcss: 1.32.0 terser: 5.44.1 - vite@6.4.1(@types/node@24.10.8)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + vite@6.4.1(@types/node@24.10.8)(lightningcss@1.32.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - postcss: 8.5.6 + postcss: 8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6) rollup: 4.55.1 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 24.10.8 fsevents: 2.3.3 + lightningcss: 1.32.0 terser: 5.44.1 tsx: 4.21.0 yaml: 2.8.2 - vite@6.4.1(@types/node@25.0.8)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + vite@6.4.1(@types/node@25.0.8)(lightningcss@1.32.0)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - postcss: 8.5.6 + postcss: 8.5.6(patch_hash=6b81bd40b4b44a492c3a40fe669e475ee6fa0b971bcd1c31070c14b3de72ade6) rollup: 4.55.1 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 25.0.8 fsevents: 2.3.3 + lightningcss: 1.32.0 terser: 5.44.1 tsx: 4.21.0 yaml: 2.8.2 - vitest@2.1.9(@types/node@24.10.8)(jsdom@25.0.1)(terser@5.44.1): + vite@8.0.8(@types/node@25.0.8)(esbuild@0.27.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.9 + rolldown: 1.0.0-rc.15 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 25.0.8 + esbuild: 0.27.2 + fsevents: 2.3.3 + terser: 5.44.1 + tsx: 4.21.0 + yaml: 2.8.2 + + vitest@2.1.9(@types/node@24.10.8)(jsdom@26.1.0)(lightningcss@1.32.0)(terser@5.44.1): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@24.10.8)(terser@5.44.1)) + '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@24.10.8)(lightningcss@1.32.0)(terser@5.44.1)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -29571,12 +30288,12 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.1.1 tinyrainbow: 1.2.0 - vite: 5.4.21(@types/node@24.10.8)(terser@5.44.1) - vite-node: 2.1.9(@types/node@24.10.8)(terser@5.44.1) + vite: 5.4.21(@types/node@24.10.8)(lightningcss@1.32.0)(terser@5.44.1) + vite-node: 2.1.9(@types/node@24.10.8)(lightningcss@1.32.0)(terser@5.44.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 24.10.8 - jsdom: 25.0.1(supports-color@8.1.1) + jsdom: 26.1.0 transitivePeerDependencies: - less - lightningcss @@ -29588,10 +30305,10 @@ snapshots: - supports-color - terser - vitest@2.1.9(@types/node@25.0.8)(jsdom@25.0.1)(terser@5.44.1): + vitest@2.1.9(@types/node@25.0.8)(jsdom@26.1.0)(lightningcss@1.32.0)(terser@5.44.1): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@25.0.8)(terser@5.44.1)) + '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@25.0.8)(lightningcss@1.32.0)(terser@5.44.1)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -29607,12 +30324,12 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.1.1 tinyrainbow: 1.2.0 - vite: 5.4.21(@types/node@25.0.8)(terser@5.44.1) - vite-node: 2.1.9(@types/node@25.0.8)(terser@5.44.1) + vite: 5.4.21(@types/node@25.0.8)(lightningcss@1.32.0)(terser@5.44.1) + vite-node: 2.1.9(@types/node@25.0.8)(lightningcss@1.32.0)(terser@5.44.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.0.8 - jsdom: 25.0.1(supports-color@8.1.1) + jsdom: 26.1.0 transitivePeerDependencies: - less - lightningcss @@ -29626,7 +30343,7 @@ snapshots: vm2@3.10.1: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 acorn-walk: 8.3.4 volar-service-html@0.0.70(@volar/language-service@2.4.28): @@ -29746,7 +30463,7 @@ snapshots: '@types/minimatch': 5.1.2 ensure-posix-path: 1.1.1 matcher-collection: 2.0.1 - minimatch: 10.1.1 + minimatch: 10.2.4 walker@1.0.8: dependencies: @@ -29785,8 +30502,8 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.15.0 - acorn-import-phases: 1.0.4(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.4 @@ -29809,6 +30526,38 @@ snapshots: - esbuild - uglify-js + webpack@5.104.1(esbuild@0.27.2): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.16.0 + acorn-import-phases: 1.0.4(acorn@8.16.0) + browserslist: 4.28.1 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.4 + es-module-lexer: 2.0.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.1 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.0 + terser-webpack-plugin: 5.3.16(esbuild@0.27.2)(webpack@5.104.1(esbuild@0.27.2)) + watchpack: 2.5.0 + webpack-sources: 3.3.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + websocket-driver@0.7.4: dependencies: http-parser-js: 0.5.10 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 6b20834b76e..df3807598de 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -24,7 +24,6 @@ catalog: "@babel/preset-typescript": ^7.24.7 "@babel/runtime": ^7.22.11 "@babel/traverse": 7.27.0 - "@cardstack/requirejs-monaco-ember-polyfill": ^0.0.1 "@cardstack/view-transitions": ^0.2.0 "@codemirror/autocomplete": ^6.20.1 "@codemirror/commands": ^6.10.3 @@ -113,7 +112,6 @@ catalog: babel-plugin-dynamic-import-node: ^2.3.3 babel-plugin-ember-template-compilation: ^2.4.1 broccoli-asset-rev: ^3.0.0 - broccoli-funnel: ^3.0.8 broccoli-merge-trees: ^4.2.0 broccoli-plugin: ^4.0.7 broccoli-source: ^3.0.1 @@ -198,9 +196,7 @@ catalog: matrix-js-sdk: ^38.3.0 mime-types: ^2.1.35 moment: ^2.29.4 - moment-locales-webpack-plugin: ^1.2.0 monaco-editor: ^0.52.2 - monaco-editor-webpack-plugin: ^7.1.1 ms: ^2.1.3 node-pg-migrate: ^6.2.2 normalize.css: 8.0.1