From eb6d6361a8e21a2fdd9f15b6bc9bcbe2e2253ec9 Mon Sep 17 00:00:00 2001 From: Edward Faulkner Date: Mon, 23 Sep 2024 15:34:04 -0400 Subject: [PATCH 1/2] [wip] add bundle analyzers and start to cut untentional dependency links --- packages/host/ember-cli-build.js | 7 + packages/host/package.json | 4 +- .../components/ai-module-creation-test.gts | 3 +- .../prerendered-card-search-test.gts | 8 +- .../realm-indexing-and-querying-test.gts | 3 +- packages/host/tests/integration/realm-test.ts | 4 +- packages/realm-server/main.ts | 2 +- packages/realm-server/pg-queue.ts | 4 +- packages/realm-server/server.ts | 3 +- packages/realm-server/tests/helpers/index.ts | 5 +- packages/realm-server/tests/indexing-test.ts | 3 +- packages/realm-server/tests/loader-test.ts | 3 +- .../realm-server/tests/realm-server-test.ts | 3 +- packages/runtime-common/index.ts | 2 - .../runtime-common/realm-index-updater.ts | 2 +- packages/runtime-common/router.ts | 3 +- .../tests/index-query-engine-test.ts | 2 +- .../runtime-common/tests/index-writer-test.ts | 2 +- packages/runtime-common/worker.ts | 4 +- pnpm-lock.yaml | 302 ++++++++++++++++++ 20 files changed, 343 insertions(+), 26 deletions(-) diff --git a/packages/host/ember-cli-build.js b/packages/host/ember-cli-build.js index c1fb65fd44..478079936c 100644 --- a/packages/host/ember-cli-build.js +++ b/packages/host/ember-cli-build.js @@ -8,6 +8,9 @@ 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 StatoscopeWebpackPlugin = require('@statoscope/webpack-plugin').default; +const BundleAnalyzerPlugin = + require('webpack-bundle-analyzer').BundleAnalyzerPlugin; module.exports = function (defaults) { const app = new EmberApp(defaults, { @@ -72,6 +75,10 @@ module.exports = function (defaults) { ], }, plugins: [ + new StatoscopeWebpackPlugin({ + saveReportTo: '/tmp/report-[name]-[hash].html', + }), + new BundleAnalyzerPlugin(), new GlimmerScopedCSSWebpackPlugin(), new MonacoWebpackPlugin(), new webpack.ProvidePlugin({ diff --git a/packages/host/package.json b/packages/host/package.json index ad6c3beb0a..59d018a74f 100644 --- a/packages/host/package.json +++ b/packages/host/package.json @@ -60,6 +60,7 @@ "@simple-dom/serializer": "^1.4.0", "@simple-dom/void-map": "^1.4.0", "@sqlite.org/sqlite-wasm": "3.45.1-build1", + "@statoscope/webpack-plugin": "^5.28.2", "@types/flat": "^5.0.5", "@types/htmlbars-inline-precompile": "^3.0.3", "@types/indefinite": "^2.3.4", @@ -169,7 +170,8 @@ "typescript": "~5.1.6", "uuid": "^9.0.1", "wait-for-localhost-cli": "^3.2.0", - "webpack": "^5.89.0" + "webpack": "^5.89.0", + "webpack-bundle-analyzer": "^4.10.2" }, "engines": { "node": ">= 18" diff --git a/packages/host/tests/integration/components/ai-module-creation-test.gts b/packages/host/tests/integration/components/ai-module-creation-test.gts index 3c92756c6e..9d2df7fc6a 100644 --- a/packages/host/tests/integration/components/ai-module-creation-test.gts +++ b/packages/host/tests/integration/components/ai-module-creation-test.gts @@ -3,7 +3,8 @@ import GlimmerComponent from '@glimmer/component'; import { module, test } from 'qunit'; -import { baseRealm, Loader, type Realm } from '@cardstack/runtime-common'; +import { baseRealm, Loader } from '@cardstack/runtime-common'; +import type { Realm } from '@cardstack/runtime-common/realm'; import CardPrerender from '@cardstack/host/components/card-prerender'; import OperatorMode from '@cardstack/host/components/operator-mode/container'; diff --git a/packages/host/tests/integration/components/prerendered-card-search-test.gts b/packages/host/tests/integration/components/prerendered-card-search-test.gts index 5c8e097b6c..b0d033169a 100644 --- a/packages/host/tests/integration/components/prerendered-card-search-test.gts +++ b/packages/host/tests/integration/components/prerendered-card-search-test.gts @@ -10,12 +10,8 @@ import { waitUntil } from '@ember/test-helpers'; import { module, test } from 'qunit'; -import { - Loader, - Query, - type Realm, - baseRealm, -} from '@cardstack/runtime-common'; +import { Loader, Query, baseRealm } from '@cardstack/runtime-common'; +import type { Realm } from '@cardstack/runtime-common/realm'; import CardPrerender from '@cardstack/host/components/card-prerender'; import PrerenderedCardSearch from '@cardstack/host/components/prerendered-card-search'; diff --git a/packages/host/tests/integration/realm-indexing-and-querying-test.gts b/packages/host/tests/integration/realm-indexing-and-querying-test.gts index b2a320d7c9..849637c843 100644 --- a/packages/host/tests/integration/realm-indexing-and-querying-test.gts +++ b/packages/host/tests/integration/realm-indexing-and-querying-test.gts @@ -10,11 +10,12 @@ import { type CodeRef, type LooseSingleCardDocument, type IndexedInstance, - type Realm, } from '@cardstack/runtime-common'; + import stripScopedCSSAttributes from '@cardstack/runtime-common/helpers/strip-scoped-css-attributes'; import { Loader } from '@cardstack/runtime-common/loader'; import { RealmPaths } from '@cardstack/runtime-common/paths'; +import type { Realm } from '@cardstack/runtime-common/realm'; import { RealmIndexQueryEngine } from '@cardstack/runtime-common/realm-index-query-engine'; diff --git a/packages/host/tests/integration/realm-test.ts b/packages/host/tests/integration/realm-test.ts index 48d18b33f6..1b176aa1f4 100644 --- a/packages/host/tests/integration/realm-test.ts +++ b/packages/host/tests/integration/realm-test.ts @@ -5,7 +5,8 @@ import { module, test } from 'qunit'; import { validate as uuidValidate } from 'uuid'; -import { baseRealm, Realm } from '@cardstack/runtime-common'; +import { baseRealm } from '@cardstack/runtime-common'; + import { isSingleCardDocument } from '@cardstack/runtime-common/card-document'; import { cardSrc, @@ -14,6 +15,7 @@ import { import stripScopedCSSGlimmerAttributes from '@cardstack/runtime-common/helpers/strip-scoped-css-glimmer-attributes'; import { Loader } from '@cardstack/runtime-common/loader'; +import { Realm } from '@cardstack/runtime-common/realm'; import type * as CardAPI from 'https://cardstack.com/base/card-api'; import type * as StringFieldMod from 'https://cardstack.com/base/string'; diff --git a/packages/realm-server/main.ts b/packages/realm-server/main.ts index 2b3240c3ac..872b5bd2f9 100644 --- a/packages/realm-server/main.ts +++ b/packages/realm-server/main.ts @@ -1,12 +1,12 @@ import './setup-logger'; // This should be first import { - Realm, VirtualNetwork, logger, RunnerOptionsManager, permissionsExist, insertPermissions, } from '@cardstack/runtime-common'; +import { Realm } from '@cardstack/runtime-common/realm'; import { NodeAdapter } from './node-realm'; import yargs from 'yargs'; import { RealmServer } from './server'; diff --git a/packages/realm-server/pg-queue.ts b/packages/realm-server/pg-queue.ts index 39c5aa702b..f0c8a926cc 100644 --- a/packages/realm-server/pg-queue.ts +++ b/packages/realm-server/pg-queue.ts @@ -14,8 +14,10 @@ import { Deferred, upsert, Job, - setErrorReporter, } from '@cardstack/runtime-common'; + +import { setErrorReporter } from '@cardstack/runtime-common/realm'; + import PgAdapter from './pg-adapter'; import * as Sentry from '@sentry/node'; diff --git a/packages/realm-server/server.ts b/packages/realm-server/server.ts index bdd5ff60df..21a8924bfd 100644 --- a/packages/realm-server/server.ts +++ b/packages/realm-server/server.ts @@ -3,7 +3,6 @@ import cors from '@koa/cors'; import Router from '@koa/router'; import { Memoize } from 'typescript-memoize'; import { - Realm, logger, SupportedMimeType, insertPermissions, @@ -13,6 +12,8 @@ import { type Queue, type RealmPermissions, } from '@cardstack/runtime-common'; +import { Realm } from '@cardstack/runtime-common/realm'; + import { ensureDirSync, writeJSONSync, diff --git a/packages/realm-server/tests/helpers/index.ts b/packages/realm-server/tests/helpers/index.ts index 85ff5337f1..768d62f0da 100644 --- a/packages/realm-server/tests/helpers/index.ts +++ b/packages/realm-server/tests/helpers/index.ts @@ -2,7 +2,6 @@ import { writeFileSync, writeJSONSync } from 'fs-extra'; import { NodeAdapter } from '../../node-realm'; import { resolve, join } from 'path'; import { - Realm, LooseSingleCardDocument, baseRealm, RealmPermissions, @@ -14,10 +13,12 @@ import { maybeHandleScopedCSSRequest, insertPermissions, IndexWriter, - type MatrixConfig, type Queue, type IndexRunner, } from '@cardstack/runtime-common'; + +import { Realm, type MatrixConfig } from '@cardstack/runtime-common/realm'; + import { dirSync } from 'tmp'; import { getLocalConfig as getSynapseConfig } from '../../synapse'; import { makeFastBootIndexRunner } from '../../fastboot'; diff --git a/packages/realm-server/tests/indexing-test.ts b/packages/realm-server/tests/indexing-test.ts index 9423c47666..e82ee5bf58 100644 --- a/packages/realm-server/tests/indexing-test.ts +++ b/packages/realm-server/tests/indexing-test.ts @@ -3,9 +3,10 @@ import { dirSync, setGracefulCleanup } from 'tmp'; import { baseRealm, LooseSingleCardDocument, - Realm, RealmPermissions, } from '@cardstack/runtime-common'; +import { Realm } from '@cardstack/runtime-common/realm'; + import { createRealm, testRealm, diff --git a/packages/realm-server/tests/loader-test.ts b/packages/realm-server/tests/loader-test.ts index 8fa54c18bc..7a72479c37 100644 --- a/packages/realm-server/tests/loader-test.ts +++ b/packages/realm-server/tests/loader-test.ts @@ -2,10 +2,11 @@ import { module, test } from 'qunit'; import { Loader, VirtualNetwork, - type Realm, fetcher, maybeHandleScopedCSSRequest, } from '@cardstack/runtime-common'; +import type { Realm } from '@cardstack/runtime-common/realm'; + import { dirSync, setGracefulCleanup, DirResult } from 'tmp'; import { createRealm, diff --git a/packages/realm-server/tests/realm-server-test.ts b/packages/realm-server/tests/realm-server-test.ts index f0475032d6..264b7f3b4d 100644 --- a/packages/realm-server/tests/realm-server-test.ts +++ b/packages/realm-server/tests/realm-server-test.ts @@ -23,7 +23,6 @@ import { loadCard, Deferred, RealmPaths, - Realm, RealmPermissions, fetchUserPermissions, baseCardRef, @@ -31,6 +30,8 @@ import { type LooseSingleCardDocument, type SingleCardDocument, } from '@cardstack/runtime-common'; +import { Realm } from '@cardstack/runtime-common/realm'; + import { stringify } from 'qs'; import { v4 as uuidv4 } from 'uuid'; import { Query } from '@cardstack/runtime-common/query'; diff --git a/packages/runtime-common/index.ts b/packages/runtime-common/index.ts index 01dbc39795..a1a11c65e8 100644 --- a/packages/runtime-common/index.ts +++ b/packages/runtime-common/index.ts @@ -65,12 +65,10 @@ export * from './constants'; export * from './queue'; export * from './expression'; export * from './index-query-engine'; -export * from './index-writer'; export * from './index-structure'; export * from './db'; export * from './worker'; export * from './stream'; -export * from './realm'; export * from './fetcher'; export * from './scoped-css'; export * from './authorization-middleware'; diff --git a/packages/runtime-common/realm-index-updater.ts b/packages/runtime-common/realm-index-updater.ts index 1824c6fb2c..9e5f85c1d2 100644 --- a/packages/runtime-common/realm-index-updater.ts +++ b/packages/runtime-common/realm-index-updater.ts @@ -1,6 +1,5 @@ import { Memoize } from 'typescript-memoize'; import { - IndexWriter, Deferred, logger, type Stats, @@ -11,6 +10,7 @@ import { type IncrementalArgs, type IncrementalResult, } from '.'; +import { IndexWriter } from './index-writer'; import { Realm } from './realm'; import { RealmPaths } from './paths'; import { Loader } from './loader'; diff --git a/packages/runtime-common/router.ts b/packages/runtime-common/router.ts index cf7c5145ae..0a1dc4fe2d 100644 --- a/packages/runtime-common/router.ts +++ b/packages/runtime-common/router.ts @@ -1,5 +1,6 @@ import { notFound, CardError, responseWithError } from './error'; -import { RealmPaths, RequestContext, logger } from './index'; +import { RealmPaths, logger } from './index'; +import { RequestContext } from './realm'; export class AuthenticationError extends Error {} export class AuthorizationError extends Error {} diff --git a/packages/runtime-common/tests/index-query-engine-test.ts b/packages/runtime-common/tests/index-query-engine-test.ts index 7349cf5427..112946e298 100644 --- a/packages/runtime-common/tests/index-query-engine-test.ts +++ b/packages/runtime-common/tests/index-query-engine-test.ts @@ -8,8 +8,8 @@ import { type Loader, type ResolvedCodeRef, DBAdapter, - IndexWriter, } from '../index'; +import { IndexWriter } from '../index-writer'; import { serializeCard } from '../helpers/indexer'; import { testRealmURL } from '../helpers/const'; import { type SharedTests } from '../helpers'; diff --git a/packages/runtime-common/tests/index-writer-test.ts b/packages/runtime-common/tests/index-writer-test.ts index c0c59bcf32..addd9c9294 100644 --- a/packages/runtime-common/tests/index-writer-test.ts +++ b/packages/runtime-common/tests/index-writer-test.ts @@ -1,5 +1,4 @@ import { - IndexWriter, internalKeyFor, baseCardRef, type LooseCardResource, @@ -8,6 +7,7 @@ import { type BoxelIndexTable, type CardResource, } from '../index'; +import { IndexWriter } from '../index-writer'; import { cardSrc, compiledCard } from '../etc/test-fixtures'; import { type SharedTests } from '../helpers'; import { setupIndex } from '../helpers/indexer'; diff --git a/packages/runtime-common/worker.ts b/packages/runtime-common/worker.ts index 0731ca296f..b71cc3e442 100644 --- a/packages/runtime-common/worker.ts +++ b/packages/runtime-common/worker.ts @@ -1,9 +1,7 @@ import * as JSONTypes from 'json-typescript'; import { parse } from 'date-fns'; import { - IndexWriter, Deferred, - reportError, authorizationMiddleware, maybeHandleScopedCSSRequest, RealmAuthDataSource, @@ -18,6 +16,8 @@ import { type Relationship, type ResponseWithNodeStream, } from '.'; +import { IndexWriter } from './index-writer'; +import { reportError } from './realm'; import { MatrixClient } from './matrix-client'; export interface Stats extends JSONTypes.Object { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 52a3cd91a5..c29987df74 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1156,6 +1156,9 @@ importers: '@sqlite.org/sqlite-wasm': specifier: 3.45.1-build1 version: 3.45.1-build1 + '@statoscope/webpack-plugin': + specifier: ^5.28.2 + version: 5.28.2(webpack@5.89.0) '@types/flat': specifier: ^5.0.5 version: 5.0.5 @@ -1486,6 +1489,9 @@ importers: webpack: specifier: ^5.89.0 version: 5.89.0 + webpack-bundle-analyzer: + specifier: ^4.10.2 + version: 4.10.2 packages/matrix: devDependencies: @@ -3854,6 +3860,16 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.9 + /@discoveryjs/json-ext@0.5.7: + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} + engines: {node: '>=10.0.0'} + dev: true + + /@discoveryjs/natural-compare@1.1.0: + resolution: {integrity: sha512-yuctPJs5lRXoI8LkpVZGAV6n+DKOuEsfpfcIDQ8ZjWHwazqk1QjBc4jMlof0UlZHyUqv4dwsOTooMiAmtzvwXA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + dev: true + /@ember-data/rfc395-data@0.0.4: resolution: {integrity: sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ==} @@ -5357,6 +5373,10 @@ packages: find-up: 5.0.0 dev: true + /@polka/url@1.0.0-next.28: + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + dev: true + /@prettier/is-es5-identifier-name@0.2.0: resolution: {integrity: sha512-m+8UrOLJPSTOgzgIskZXA7nxxQE/2FtPeBDRlZhWgje+Ug9UTVdJZ56l/A2GlZM/6weuJ+Tb/EJshC8Ns3Ji8w==} @@ -5687,6 +5707,162 @@ packages: hasBin: true dev: true + /@statoscope/extensions@5.28.1: + resolution: {integrity: sha512-jxkHSNfr7KJOfxlueCtahv1LqscTALLkcGSrYCU71C4tR9GVYoVCUMOrhAFJr6ia+GlPhSaxOSk/j+Ay+ZN9vg==} + dev: true + + /@statoscope/helpers@5.28.1: + resolution: {integrity: sha512-G+o+wCYsuc8+0OdY+kyrTOzm5A6X3yp8ArGTWjr9TCllqDk4LzBlHBmWo7z4SPigjNeY/i38sqi1PeWztW+rWA==} + dependencies: + '@types/archy': 0.0.32 + '@types/semver': 7.5.4 + archy: 1.0.0 + jora: 1.0.0-beta.8 + semver: 7.6.2 + dev: true + + /@statoscope/report-writer@5.28.1: + resolution: {integrity: sha512-BjZVdZa7XWkK+zUnFLFWp8yNgmis0DTaPiy/QyU56iWuW+DcF/un1wkvt8ha0jxlXRDbBOfezAztdLNx4U5mxw==} + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@types/node': 18.18.5 + '@types/pako': 2.0.3 + pako: 2.1.0 + dev: true + + /@statoscope/stats-extension-compressed@5.28.1: + resolution: {integrity: sha512-tmmKbQwibSaRpWv+p8Tb7BxhMNuSGS28NJeN1t2byzakz/FLCzvkT9tj/aBxfQqEIOGusmN+8znz6XSmJ0cbew==} + dependencies: + '@statoscope/extensions': 5.28.1 + '@statoscope/helpers': 5.28.1 + '@statoscope/stats': 5.28.1 + gzip-size: 6.0.0 + dev: true + + /@statoscope/stats-extension-custom-reports@5.28.1: + resolution: {integrity: sha512-f527f6bjl+6iJow+zQFw+hZxGR2hY/FIuFTxhrcbrDXqXu7ApK0e0azJJxAQs0eO1WPMSduXt2k/5kSFecC/kA==} + dependencies: + '@statoscope/extensions': 5.28.1 + '@statoscope/helpers': 5.28.1 + '@statoscope/stats': 5.28.1 + '@statoscope/types': 5.28.1 + dev: true + + /@statoscope/stats-extension-package-info@5.28.1: + resolution: {integrity: sha512-HvwlMfFVSx91KmwUmeIcJZS/0rVbNTRvMEBHzPsZ1Y5BIqZlH/bk/HK8nWYjptUaNkpmcxewp5xO9FtpMaSNVA==} + dependencies: + '@statoscope/extensions': 5.28.1 + '@statoscope/helpers': 5.28.1 + '@statoscope/stats': 5.28.1 + dev: true + + /@statoscope/stats-extension-stats-validation-result@5.28.1: + resolution: {integrity: sha512-vekMnWXVikWo2c4IzmjqKkHGxBTE9RNpTxnD5t5qGz2wx3IHuosV8kp4yaUlD/Atv8C+aLoF0Jg0Q4eB7IYWEA==} + dependencies: + '@statoscope/extensions': 5.28.1 + '@statoscope/helpers': 5.28.1 + '@statoscope/stats': 5.28.1 + '@statoscope/types': 5.28.1 + dev: true + + /@statoscope/stats@5.28.1: + resolution: {integrity: sha512-BB9IZQcBo9I0FFL5sHttF5ubhfE3HkbDMPw5MqEBCee7m6NrlrRe8dxLpPsCUkeFytTWjRLKrY1JOgQq/iE4Fg==} + dev: true + + /@statoscope/types@5.28.1: + resolution: {integrity: sha512-PLcSaRQvGkKhjVLU3YbjFDfZN6H2WF0vp0QqQOOh6qvxRhlOc14ckyou04bnvEqsSWXpvkMPJhOLue+YdIFI9A==} + dependencies: + '@statoscope/stats': 5.28.1 + dev: true + + /@statoscope/webpack-model@5.28.2: + resolution: {integrity: sha512-q+AVtXBNyRRDh4prEfVVsZKdrgn0GFb5P3xIwFFvf832I/Tk9rn/fMk9v0+PqwXRYl6vxfrKHqrA8lJiRLh/6Q==} + dependencies: + '@statoscope/extensions': 5.28.1 + '@statoscope/helpers': 5.28.1 + '@statoscope/stats': 5.28.1 + '@statoscope/stats-extension-compressed': 5.28.1 + '@statoscope/stats-extension-custom-reports': 5.28.1 + '@statoscope/stats-extension-package-info': 5.28.1 + '@statoscope/stats-extension-stats-validation-result': 5.28.1 + '@statoscope/types': 5.28.1 + '@types/md5': 2.3.5 + '@types/webpack': 5.28.5 + md5: 2.3.0 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + dev: true + + /@statoscope/webpack-plugin@5.28.2(webpack@5.89.0): + resolution: {integrity: sha512-vFzZw/THVtLeat7+LYbhJhbNYBmHODXiPa1fiqsNQtmNexOTxa9SujrvMkqiVYCKX1elUHVm/UE1JGDmQIcuAA==} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@statoscope/report-writer': 5.28.1 + '@statoscope/stats': 5.28.1 + '@statoscope/stats-extension-compressed': 5.28.1 + '@statoscope/stats-extension-custom-reports': 5.28.1 + '@statoscope/types': 5.28.1 + '@statoscope/webpack-model': 5.28.2 + '@statoscope/webpack-stats-extension-compressed': 5.28.2(webpack@5.89.0) + '@statoscope/webpack-stats-extension-package-info': 5.28.2(webpack@5.89.0) + '@statoscope/webpack-ui': 5.28.2 + '@types/node': 18.18.5 + '@types/webpack': 5.28.5 + open: 8.4.2 + webpack: 5.89.0 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + dev: true + + /@statoscope/webpack-stats-extension-compressed@5.28.2(webpack@5.89.0): + resolution: {integrity: sha512-8rdt6AHx3H28NIdhEXuQLAz5MAKibZA7+h3/YRJYKjvYAfFi6QlJB1hvoulAPmQlV3bIUKVrk5peHxpKQATQFw==} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + '@statoscope/stats': 5.28.1 + '@statoscope/stats-extension-compressed': 5.28.1 + '@statoscope/webpack-model': 5.28.2 + '@types/webpack': 5.28.5 + webpack: 5.89.0 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + dev: true + + /@statoscope/webpack-stats-extension-package-info@5.28.2(webpack@5.89.0): + resolution: {integrity: sha512-+pKCnkNp0vGqCTtILHTD5/hBM0wdx8uZBGjFREGNcIMGpeoJM3FbsLMOiS0gFfeJrmL6ZpdhdVzSa58gN6db8A==} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + '@statoscope/stats': 5.28.1 + '@statoscope/stats-extension-package-info': 5.28.1 + '@statoscope/webpack-model': 5.28.2 + '@types/webpack': 5.28.5 + webpack: 5.89.0 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + dev: true + + /@statoscope/webpack-ui@5.28.2: + resolution: {integrity: sha512-jQ9/CXsSD2FPFQHt7ZJgil8JsukFLTRfIclONyC9R2vomdb2FwHzak6/fEqKYjT2bsDWoWJPL0ieM4Kog6I0Nw==} + dependencies: + '@statoscope/types': 5.28.1 + '@types/md5': 2.3.5 + dev: true + /@szmarczak/http-timer@1.1.2: resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} engines: {node: '>=6'} @@ -5742,6 +5918,10 @@ packages: '@types/node': 18.18.5 dev: true + /@types/archy@0.0.32: + resolution: {integrity: sha512-5ZZ5+YGmUE01yejiXsKnTcvhakMZ2UllZlMsQni53Doc1JWhe21ia8VntRoRD6fAEWw08JBh/z9qQHJ+//MrIg==} + dev: true + /@types/babel__code-frame@7.0.5: resolution: {integrity: sha512-tE88HnYMl5iJAB1V9nJCrE1udmwGCoNvx2ayTa8nwkE3UMMRRljANO+sX8D321hIrqf1DlvhAPAo5G6DWaMQNg==} dev: true @@ -6019,6 +6199,10 @@ packages: resolution: {integrity: sha512-0cI+IlIf96mxsTgtS9x7Cw2tZKhhkqwAmodKXGW+rf7THmbiM7rvOsRmp3eDik16mRlWrluq2egVFtQ8NGjgPw==} dev: true + /@types/md5@2.3.5: + resolution: {integrity: sha512-/i42wjYNgE6wf0j2bcTX6kuowmdL/6PE4IVitMpm2eYKBUuYCprdcWVK+xEF0gcV6ufMCRhtxmReGfc6hIK7Jw==} + dev: true + /@types/mime-types@2.1.1: resolution: {integrity: sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==} dev: true @@ -6063,6 +6247,10 @@ packages: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} dev: true + /@types/pako@2.0.3: + resolution: {integrity: sha512-bq0hMV9opAcrmE0Byyo0fY3Ew4tgOevJmQ9grUhpXQhYfyLJ1Kqg3P33JT5fdbT2AjeAjR51zqqVjAL/HMkx7Q==} + dev: true + /@types/parse-json@4.0.1: resolution: {integrity: sha512-3YmXzzPAdOTVljVMkTMBdBEvlOLg2cDQaDhnnhT3nT9uDbnJzjWhKlzb+desT12Y7tGqaN6d+AbozcKzyL36Ng==} dev: true @@ -6197,6 +6385,19 @@ packages: /@types/uuid@9.0.8: resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + /@types/webpack@5.28.5: + resolution: {integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==} + dependencies: + '@types/node': 18.18.5 + tapable: 2.2.1 + webpack: 5.89.0 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + dev: true + /@types/yargs-parser@21.0.2: resolution: {integrity: sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==} dev: true @@ -7363,6 +7564,10 @@ packages: zip-stream: 1.2.0 dev: true + /archy@1.0.0: + resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} + dev: true + /are-we-there-yet@3.0.1: resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -9699,6 +9904,10 @@ packages: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true + /charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + dev: true + /charm@1.0.2: resolution: {integrity: sha512-wqW3VdPnlSWT4eRiYX+hcs+C6ViBPUWk1qTCd+37qw9kEm/a5n2qcyQDMBWvSYKN/ctqZzeXNQaeBjOetJJUkw==} dependencies: @@ -10566,6 +10775,10 @@ packages: shebang-command: 2.0.0 which: 2.0.2 + /crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + dev: true + /crypto-browserify@1.0.9: resolution: {integrity: sha512-fWmkaZPmccreTmANMdpvI0UrF34pzTAZDLKDcF0n5ThwpyeAs+DtSVxyhrZc6kHFiOFdyzjW5uZ8jAWE3kNY6A==} dev: true @@ -10761,6 +10974,10 @@ packages: resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} dev: false + /debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + dev: true + /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -10938,6 +11155,11 @@ packages: es-errors: 1.3.0 gopd: 1.0.1 + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: true + /define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} @@ -15846,6 +16068,13 @@ packages: resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} dev: true + /gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + dependencies: + duplexer: 0.1.2 + dev: true + /handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} @@ -16114,6 +16343,10 @@ packages: whatwg-encoding: 2.0.0 dev: true + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + /html-styles@1.0.0: resolution: {integrity: sha512-cDl5dcj73oI4Hy0DSUNh54CAwslNLJRCCoO+RNkVo+sBrjA/0+7E/xzvj3zH/GxbbBLGJhE0hBe1eg+0FINC6w==} @@ -17094,6 +17327,13 @@ packages: '@sideway/pinpoint': 2.0.0 dev: true + /jora@1.0.0-beta.8: + resolution: {integrity: sha512-f3WpYwfDTlhfSdyCkAlAXSKRpwZYBgCDnyWmA9D0yyItCTFnFefKtvFpaczrj/FItkgDkHiewgFuHsgh4TmokA==} + engines: {node: ^10.12.0 || ^12.20.0 || ^14.13.0 || >=15.0.0} + dependencies: + '@discoveryjs/natural-compare': 1.1.0 + dev: true + /jquery@3.7.1: resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==} dev: true @@ -18103,6 +18343,14 @@ packages: safe-buffer: 5.2.1 dev: true + /md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + dev: true + /mdn-data@2.0.14: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} dev: true @@ -18490,6 +18738,11 @@ packages: run-queue: 1.0.3 dev: true + /mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + dev: true + /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -18974,6 +19227,15 @@ packages: resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} dev: true + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: true + /open@9.1.0: resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} engines: {node: '>=14.16'} @@ -19286,6 +19548,10 @@ packages: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: true + /pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + dev: true + /parallel-transform@1.2.0: resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==} dependencies: @@ -21274,6 +21540,15 @@ packages: /simple-html-tokenizer@0.5.11: resolution: {integrity: sha512-C2WEK/Z3HoSFbYq8tI7ni3eOo/NneSPRoPpcM7WdLjFOArFuyXEjAoCdOC3DgMfRyziZQ1hCNR4mrNdWEvD0og==} + /sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} + engines: {node: '>= 10'} + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.0 + totalist: 3.0.1 + dev: true + /slash@1.0.0: resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==} engines: {node: '>=0.10.0'} @@ -22384,6 +22659,11 @@ packages: engines: {node: '>=0.6'} dev: true + /totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + dev: true + /tough-cookie@4.1.3: resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} @@ -23336,6 +23616,28 @@ packages: engines: {node: '>=12'} dev: true + /webpack-bundle-analyzer@4.10.2: + resolution: {integrity: sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==} + engines: {node: '>= 10.13.0'} + hasBin: true + dependencies: + '@discoveryjs/json-ext': 0.5.7 + acorn: 8.10.0 + acorn-walk: 8.2.0 + commander: 7.2.0 + debounce: 1.2.1 + escape-string-regexp: 4.0.0 + gzip-size: 6.0.0 + html-escaper: 2.0.2 + opener: 1.5.2 + picocolors: 1.0.0 + sirv: 2.0.4 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + /webpack-sources@1.4.3: resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} dependencies: From bf65814ecad61e1790c4420a48d00ebe7604b111 Mon Sep 17 00:00:00 2001 From: Luke Melia Date: Mon, 23 Sep 2024 16:56:02 -0400 Subject: [PATCH 2/2] Continue trying to tease transpile module out of initial chunk, unsuccessfully --- .../host/app/components/card-prerender.gts | 2 +- packages/host/app/lib/current-run.ts | 19 +++++++---- packages/host/app/routes/card.gts | 22 ++++++------- packages/host/app/services/local-indexer.ts | 3 +- packages/host/tests/helpers/index.gts | 2 +- packages/host/tests/unit/index-writer-test.ts | 3 +- packages/runtime-common/paths.ts | 32 +++++++++++++++++++ .../runtime-common/realm-index-updater.ts | 32 +------------------ 8 files changed, 62 insertions(+), 53 deletions(-) diff --git a/packages/host/app/components/card-prerender.gts b/packages/host/app/components/card-prerender.gts index f74edc224d..ef6f4529c9 100644 --- a/packages/host/app/components/card-prerender.gts +++ b/packages/host/app/components/card-prerender.gts @@ -5,7 +5,7 @@ import Component from '@glimmer/component'; import { didCancel, enqueueTask, restartableTask } from 'ember-concurrency'; -import { type IndexWriter } from '@cardstack/runtime-common'; +import { type IndexWriter } from '@cardstack/runtime-common/index-writer'; import { readFileAsText as _readFileAsText } from '@cardstack/runtime-common/stream'; import { getReader, diff --git a/packages/host/app/lib/current-run.ts b/packages/host/app/lib/current-run.ts index e0bb805b20..dd536b3555 100644 --- a/packages/host/app/lib/current-run.ts +++ b/packages/host/app/lib/current-run.ts @@ -19,12 +19,8 @@ import { identifyCard, moduleFrom, isCardDef, - IndexWriter, unixTime, - type Batch, type LooseCardResource, - type InstanceEntry, - type ErrorEntry, type CodeRef, type RealmInfo, type IndexResults, @@ -32,7 +28,6 @@ import { type CardResource, type Relationship, type TextFileRef, - type LastModifiedTimes, } from '@cardstack/runtime-common'; import { Deferred } from '@cardstack/runtime-common/deferred'; import { @@ -41,8 +36,18 @@ import { serializableError, type SerializedError, } from '@cardstack/runtime-common/error'; -import { RealmPaths, LocalPath } from '@cardstack/runtime-common/paths'; -import { isIgnored } from '@cardstack/runtime-common/realm-index-updater'; +import { + IndexWriter, + type Batch, + type InstanceEntry, + type ErrorEntry, + type LastModifiedTimes, +} from '@cardstack/runtime-common/index-writer'; +import { + isIgnored, + RealmPaths, + LocalPath, +} from '@cardstack/runtime-common/paths'; import { type Reader, type Stats } from '@cardstack/runtime-common/worker'; import { diff --git a/packages/host/app/routes/card.gts b/packages/host/app/routes/card.gts index 585cbd34ac..edc3765920 100644 --- a/packages/host/app/routes/card.gts +++ b/packages/host/app/routes/card.gts @@ -14,7 +14,7 @@ import MatrixService from '@cardstack/host/services/matrix-service'; import OperatorModeStateService, { SerializedState as OperatorModeSerializedState, } from '@cardstack/host/services/operator-mode-state-service'; -import Realm from '@cardstack/host/services/realm'; +import type RealmService from '@cardstack/host/services/realm'; import RealmInfoService from '@cardstack/host/services/realm-info-service'; import { CardDef } from 'https://cardstack.com/base/card-api'; @@ -44,12 +44,12 @@ export default class RenderCard extends Route { clientSecret: { refreshModel: true }, }; - @service declare cardService: CardService; - @service declare router: RouterService; - @service declare operatorModeStateService: OperatorModeStateService; - @service declare matrixService: MatrixService; - @service declare realm: Realm; - @service declare realmInfoService: RealmInfoService; + @service private declare cardService: CardService; + @service private declare router: RouterService; + @service private declare operatorModeStateService: OperatorModeStateService; + @service private declare matrixService: MatrixService; + @service private declare realmService: RealmService; + @service private declare realmInfoService: RealmInfoService; hasLoadMatrixBeenExecuted = false; @@ -86,7 +86,7 @@ export default class RenderCard extends Route { model = resource.card; } } else { - let indexCardURL = new URL(this.realm.defaultReadableRealm.path); + let indexCardURL = new URL(this.realmService.defaultReadableRealm.path); let indexCardResource = getCard(this, () => indexCardURL.href); await indexCardResource.loaded; model = indexCardResource.card; @@ -123,7 +123,7 @@ export default class RenderCard extends Route { // so users will be redirected to operator mode. // We can update the codes below after we have a clear idea on how to implement authentication in guest mode. let isPublicReadableRealm = await this.realmInfoService.isPublicReadable( - new URL(this.realm.defaultReadableRealm.path), + new URL(this.realmService.defaultReadableRealm.path), ); if ( !isPublicReadableRealm && @@ -131,8 +131,8 @@ export default class RenderCard extends Route { ) { let path = transition.to?.params?.path ?? ''; let url = path - ? new URL(`/${path}`, this.realm.defaultReadableRealm.path) - : new URL('./', this.realm.defaultReadableRealm.path); + ? new URL(`/${path}`, this.realmService.defaultReadableRealm.path) + : new URL('./', this.realmService.defaultReadableRealm.path); await this.router.replaceWith(`card`, { queryParams: { operatorModeEnabled: 'true', diff --git a/packages/host/app/services/local-indexer.ts b/packages/host/app/services/local-indexer.ts index 3c0215a3d0..2e485bae94 100644 --- a/packages/host/app/services/local-indexer.ts +++ b/packages/host/app/services/local-indexer.ts @@ -1,6 +1,7 @@ import Service from '@ember/service'; -import { type IndexResults, type IndexWriter } from '@cardstack/runtime-common'; +import type { IndexResults } from '@cardstack/runtime-common'; +import type { IndexWriter } from '@cardstack/runtime-common/index-writer'; import { type TestRealmAdapter } from '@cardstack/host/tests/helpers/adapter'; diff --git a/packages/host/tests/helpers/index.gts b/packages/host/tests/helpers/index.gts index a0b69802ee..379d5029b0 100644 --- a/packages/host/tests/helpers/index.gts +++ b/packages/host/tests/helpers/index.gts @@ -20,7 +20,6 @@ import { RunnerOptionsManager, type RealmInfo, type TokenClaims, - IndexWriter, type RunnerRegistration, type IndexRunner, type IndexResults, @@ -32,6 +31,7 @@ import { testRealmInfo, testRealmURL, } from '@cardstack/runtime-common/helpers/const'; +import { IndexWriter } from '@cardstack/runtime-common/index-writer'; import { Loader } from '@cardstack/runtime-common/loader'; import { Realm } from '@cardstack/runtime-common/realm'; diff --git a/packages/host/tests/unit/index-writer-test.ts b/packages/host/tests/unit/index-writer-test.ts index e5299bcee1..44099a1477 100644 --- a/packages/host/tests/unit/index-writer-test.ts +++ b/packages/host/tests/unit/index-writer-test.ts @@ -1,7 +1,8 @@ import { module, test } from 'qunit'; -import { IndexWriter, IndexQueryEngine } from '@cardstack/runtime-common'; +import { IndexQueryEngine } from '@cardstack/runtime-common'; import { runSharedTest } from '@cardstack/runtime-common/helpers'; +import { IndexWriter } from '@cardstack/runtime-common/index-writer'; // eslint-disable-next-line ember/no-test-import-export import indexWriterTests from '@cardstack/runtime-common/tests/index-writer-test'; diff --git a/packages/runtime-common/paths.ts b/packages/runtime-common/paths.ts index dd9e88a097..157985d327 100644 --- a/packages/runtime-common/paths.ts +++ b/packages/runtime-common/paths.ts @@ -1,3 +1,5 @@ +import type { Ignore } from 'ignore'; + interface LocalOptions { preserveQuerystring?: boolean; } @@ -70,3 +72,33 @@ function ensureTrailingSlash(realmUrlString: string) { // http://example.com/my-realm/hello/world/ maps to local path "hello/world" // export type LocalPath = string; + +export function isIgnored( + realmURL: URL, + ignoreMap: Map, + url: URL, +): boolean { + if (url.href === realmURL.href) { + return false; // you can't ignore the entire realm + } + if (url.href === realmURL.href + '.realm.json') { + return true; + } + if (ignoreMap.size === 0) { + return false; + } + // Test URL against closest ignore. (Should the ignores cascade? so that the + // child ignore extends the parent ignore?) + let ignoreURLs = [...ignoreMap.keys()]; + let matchingIgnores = ignoreURLs.filter((u) => url.href.includes(u)); + let ignoreURL = matchingIgnores.sort((a, b) => b.length - a.length)[0] as + | string + | undefined; + if (!ignoreURL) { + return false; + } + let ignore = ignoreMap.get(ignoreURL)!; + let realmPath = new RealmPaths(realmURL); + let pathname = realmPath.local(url); + return ignore.test(pathname).ignored; +} diff --git a/packages/runtime-common/realm-index-updater.ts b/packages/runtime-common/realm-index-updater.ts index 9e5f85c1d2..f2ffa60cfa 100644 --- a/packages/runtime-common/realm-index-updater.ts +++ b/packages/runtime-common/realm-index-updater.ts @@ -12,9 +12,9 @@ import { } from '.'; import { IndexWriter } from './index-writer'; import { Realm } from './realm'; -import { RealmPaths } from './paths'; import { Loader } from './loader'; import ignore, { type Ignore } from 'ignore'; +import { isIgnored } from './paths'; export class RealmIndexUpdater { #realm: Realm; @@ -192,33 +192,3 @@ export class RealmIndexUpdater { } } } - -export function isIgnored( - realmURL: URL, - ignoreMap: Map, - url: URL, -): boolean { - if (url.href === realmURL.href) { - return false; // you can't ignore the entire realm - } - if (url.href === realmURL.href + '.realm.json') { - return true; - } - if (ignoreMap.size === 0) { - return false; - } - // Test URL against closest ignore. (Should the ignores cascade? so that the - // child ignore extends the parent ignore?) - let ignoreURLs = [...ignoreMap.keys()]; - let matchingIgnores = ignoreURLs.filter((u) => url.href.includes(u)); - let ignoreURL = matchingIgnores.sort((a, b) => b.length - a.length)[0] as - | string - | undefined; - if (!ignoreURL) { - return false; - } - let ignore = ignoreMap.get(ignoreURL)!; - let realmPath = new RealmPaths(realmURL); - let pathname = realmPath.local(url); - return ignore.test(pathname).ignored; -}