From 4a1cabfe6b9ef8a6fbbcc0727a0dc6fa300cedaa Mon Sep 17 00:00:00 2001 From: Bjorn Lu Date: Tue, 10 Jan 2023 15:58:55 +0800 Subject: [PATCH] Cleanup dependencies (#5773) --- .changeset/six-carpets-talk.md | 5 +++ packages/astro/package.json | 11 +------ packages/astro/src/core/config/schema.ts | 33 ------------------- packages/astro/src/core/create-vite.ts | 24 ++------------ packages/astro/src/core/render/ssr-element.ts | 9 ++--- packages/astro/src/core/util.ts | 11 +------ packages/astro/src/template/4xx.ts | 4 +-- packages/astro/src/vite-plugin-jsx/tag.ts | 7 +--- pnpm-lock.yaml | 26 ++------------- 9 files changed, 20 insertions(+), 110 deletions(-) create mode 100644 .changeset/six-carpets-talk.md diff --git a/.changeset/six-carpets-talk.md b/.changeset/six-carpets-talk.md new file mode 100644 index 000000000..8d0ab6373 --- /dev/null +++ b/.changeset/six-carpets-talk.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Cleanup dependencies diff --git a/packages/astro/package.json b/packages/astro/package.json index e572c07f5..b73779f8c 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -121,7 +121,6 @@ "@babel/traverse": "^7.18.2", "@babel/types": "^7.18.4", "@types/babel__core": "^7.1.19", - "@types/html-escaper": "^3.0.0", "@types/yargs-parser": "^21.0.0", "acorn": "^8.8.1", "boxen": "^6.2.1", @@ -138,22 +137,15 @@ "fast-glob": "^3.2.11", "github-slugger": "^2.0.0", "gray-matter": "^4.0.3", - "html-entities": "^2.3.3", "html-escaper": "^3.0.3", - "import-meta-resolve": "^2.1.0", "kleur": "^4.1.4", "magic-string": "^0.27.0", "mime": "^3.0.0", "ora": "^6.1.0", - "path-browserify": "^1.0.1", "path-to-regexp": "^6.2.1", - "postcss": "^8.4.14", - "postcss-load-config": "^3.1.4", "preferred-pm": "^3.0.3", "prompts": "^2.4.2", - "recast": "^0.20.5", "rehype": "^12.0.1", - "resolve": "^1.22.0", "semver": "^7.3.7", "server-destroy": "^1.0.1", "shiki": "^0.11.1", @@ -182,10 +174,9 @@ "@types/diff": "^5.0.2", "@types/estree": "^0.0.51", "@types/hast": "^2.3.4", + "@types/html-escaper": "^3.0.0", "@types/mime": "^2.0.3", "@types/mocha": "^9.1.1", - "@types/parse5": "^6.0.3", - "@types/path-browserify": "^1.0.0", "@types/prettier": "^2.6.3", "@types/prompts": "^2.0.14", "@types/resolve": "^1.20.2", diff --git a/packages/astro/src/core/config/schema.ts b/packages/astro/src/core/config/schema.ts index a31dfef9e..bdf7d4e5d 100644 --- a/packages/astro/src/core/config/schema.ts +++ b/packages/astro/src/core/config/schema.ts @@ -1,16 +1,12 @@ import type { RehypePlugin, RemarkPlugin, RemarkRehype } from '@astrojs/markdown-remark'; import { markdownConfigDefaults } from '@astrojs/markdown-remark'; -import type * as Postcss from 'postcss'; import type { ILanguageRegistration, IThemeRegistration, Theme } from 'shiki'; import type { AstroUserConfig, ViteUserConfig } from '../../@types/astro'; import { OutgoingHttpHeaders } from 'http'; -import postcssrc from 'postcss-load-config'; import { BUNDLED_THEMES } from 'shiki'; -import { fileURLToPath } from 'url'; import { z } from 'zod'; import { appendForwardSlash, prependForwardSlash, trimSlashes } from '../path.js'; -import { isObject } from '../util.js'; const ASTRO_CONFIG_DEFAULTS: AstroUserConfig & any = { root: '.', @@ -183,35 +179,6 @@ export const AstroConfigSchema = z.object({ legacy: z.object({}).optional().default({}), }); -interface PostCSSConfigResult { - options: Postcss.ProcessOptions; - plugins: Postcss.Plugin[]; -} - -async function resolvePostcssConfig(inlineOptions: any, root: URL): Promise { - if (isObject(inlineOptions)) { - const options = { ...inlineOptions }; - delete options.plugins; - return { - options, - plugins: inlineOptions.plugins || [], - }; - } - const searchPath = typeof inlineOptions === 'string' ? inlineOptions : fileURLToPath(root); - try { - // @ts-ignore - return await postcssrc({}, searchPath); - } catch (err: any) { - if (!/No PostCSS Config found/.test(err.message)) { - throw err; - } - return { - options: {}, - plugins: [], - }; - } -} - export function createRelativeSchema(cmd: string, fileProtocolRoot: URL) { // We need to extend the global schema to add transforms that are relative to root. // This is type checked against the global schema to make sure we still match. diff --git a/packages/astro/src/core/create-vite.ts b/packages/astro/src/core/create-vite.ts index 351ea6318..cccda8545 100644 --- a/packages/astro/src/core/create-vite.ts +++ b/packages/astro/src/core/create-vite.ts @@ -24,7 +24,6 @@ import markdownVitePlugin from '../vite-plugin-markdown/index.js'; import astroScannerPlugin from '../vite-plugin-scanner/index.js'; import astroScriptsPlugin from '../vite-plugin-scripts/index.js'; import astroScriptsPageSSRPlugin from '../vite-plugin-scripts/page-ssr.js'; -import { resolveDependency } from './util.js'; interface CreateViteOptions { settings: AstroSettings; @@ -33,7 +32,7 @@ interface CreateViteOptions { fs?: typeof nodeFs; } -const ALWAYS_NOEXTERNAL = new Set([ +const ALWAYS_NOEXTERNAL = [ // This is only because Vite's native ESM doesn't resolve "exports" correctly. 'astro', // Vite fails on nested `.astro` imports without bundling @@ -43,21 +42,7 @@ const ALWAYS_NOEXTERNAL = new Set([ '@nanostores/preact', // fontsource packages are CSS that need to be processed '@fontsource/*', -]); - -function getSsrNoExternalDeps(projectRoot: URL): string[] { - let noExternalDeps = []; - for (const dep of ALWAYS_NOEXTERNAL) { - try { - resolveDependency(dep, projectRoot); - noExternalDeps.push(dep); - } catch { - // ignore dependency if *not* installed / present in your project - // prevents hard error from Vite! - } - } - return noExternalDeps; -} +]; /** Return a common starting point for all Vite actions */ export async function createVite( @@ -166,10 +151,7 @@ export async function createVite( dedupe: ['astro'], }, ssr: { - noExternal: [ - ...getSsrNoExternalDeps(settings.config.root), - ...astroPkgsConfig.ssr.noExternal, - ], + noExternal: [...ALWAYS_NOEXTERNAL, ...astroPkgsConfig.ssr.noExternal], // shiki is imported by Code.astro, which is no-externalized (processed by Vite). // However, shiki's deps are in CJS and trips up Vite's dev SSR transform, externalize // shiki to load it with node instead. diff --git a/packages/astro/src/core/render/ssr-element.ts b/packages/astro/src/core/render/ssr-element.ts index 63c02ff3e..36fbca9e8 100644 --- a/packages/astro/src/core/render/ssr-element.ts +++ b/packages/astro/src/core/render/ssr-element.ts @@ -1,14 +1,15 @@ +import slashify from 'slash'; import type { SSRElement } from '../../@types/astro'; - -import npath from 'path-browserify'; -import { appendForwardSlash } from '../../core/path.js'; +import { appendForwardSlash, removeLeadingForwardSlash } from '../../core/path.js'; function getRootPath(base?: string): string { return appendForwardSlash(new URL(base || '/', 'http://localhost/').pathname); } function joinToRoot(href: string, base?: string): string { - return npath.posix.join(getRootPath(base), href); + const rootPath = getRootPath(base); + const normalizedHref = slashify(href); + return appendForwardSlash(rootPath) + removeLeadingForwardSlash(normalizedHref); } export function createLinkStylesheetElement(href: string, base?: string): SSRElement { diff --git a/packages/astro/src/core/util.ts b/packages/astro/src/core/util.ts index 79148797b..f80eb5fe7 100644 --- a/packages/astro/src/core/util.ts +++ b/packages/astro/src/core/util.ts @@ -1,8 +1,7 @@ import fs from 'fs'; import path from 'path'; -import resolve from 'resolve'; import slash from 'slash'; -import { fileURLToPath, pathToFileURL } from 'url'; +import { fileURLToPath } from 'url'; import { normalizePath } from 'vite'; import type { AstroConfig, AstroSettings, RouteType } from '../@types/astro'; import { SUPPORTED_MARKDOWN_FILE_EXTENSIONS } from './constants.js'; @@ -83,14 +82,6 @@ export function parseNpmName( }; } -export function resolveDependency(dep: string, projectRoot: URL) { - const resolved = resolve.sync(dep, { - basedir: fileURLToPath(projectRoot), - }); - // For Windows compat, we need a fully resolved `file://` URL string - return pathToFileURL(resolved).toString(); -} - /** * Convert file URL to ID for viteServer.moduleGraph.idToModuleMap.get(:viteID) * Format: diff --git a/packages/astro/src/template/4xx.ts b/packages/astro/src/template/4xx.ts index e498d7e30..7c57c058f 100644 --- a/packages/astro/src/template/4xx.ts +++ b/packages/astro/src/template/4xx.ts @@ -1,4 +1,4 @@ -import { encode } from 'html-entities'; +import { escape } from 'html-escaper'; import { baseCSS } from './css.js'; interface ErrorTemplateOptions { @@ -58,7 +58,7 @@ export default function template({ ${ body || ` -
Path: ${encode(pathname)}
+
Path: ${escape(pathname)}
` } diff --git a/packages/astro/src/vite-plugin-jsx/tag.ts b/packages/astro/src/vite-plugin-jsx/tag.ts index adf733419..eab920f63 100644 --- a/packages/astro/src/vite-plugin-jsx/tag.ts +++ b/packages/astro/src/vite-plugin-jsx/tag.ts @@ -1,7 +1,5 @@ import type { PluginObj } from '@babel/core'; import * as t from '@babel/types'; -import { resolve as importMetaResolve } from 'import-meta-resolve'; -import { fileURLToPath } from 'url'; /** * This plugin handles every file that runs through our JSX plugin. @@ -18,9 +16,6 @@ export default async function tagExportsWithRenderer({ rendererName: string; root: URL; }): Promise { - const astroServerPath = fileURLToPath( - await importMetaResolve('astro/server/index.js', root.toString()) - ); return { visitor: { Program: { @@ -36,7 +31,7 @@ export default async function tagExportsWithRenderer({ t.identifier('__astro_tag_component__') ), ], - t.stringLiteral(astroServerPath) + t.stringLiteral('astro/server/index.js') ) ); }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6de33571e..339f46529 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -411,8 +411,6 @@ importers: '@types/html-escaper': ^3.0.0 '@types/mime': ^2.0.3 '@types/mocha': ^9.1.1 - '@types/parse5': ^6.0.3 - '@types/path-browserify': ^1.0.0 '@types/prettier': ^2.6.3 '@types/prompts': ^2.0.14 '@types/resolve': ^1.20.2 @@ -440,9 +438,7 @@ importers: fast-glob: ^3.2.11 github-slugger: ^2.0.0 gray-matter: ^4.0.3 - html-entities: ^2.3.3 html-escaper: ^3.0.3 - import-meta-resolve: ^2.1.0 kleur: ^4.1.4 magic-string: ^0.27.0 memfs: ^3.4.7 @@ -450,19 +446,14 @@ importers: mocha: ^9.2.2 node-mocks-http: ^1.11.0 ora: ^6.1.0 - path-browserify: ^1.0.1 path-to-regexp: ^6.2.1 - postcss: ^8.4.14 - postcss-load-config: ^3.1.4 preferred-pm: ^3.0.3 prompts: ^2.4.2 - recast: ^0.20.5 rehype: ^12.0.1 rehype-autolink-headings: ^6.1.1 rehype-slug: ^5.0.1 rehype-toc: ^3.0.2 remark-code-titles: ^0.1.2 - resolve: ^1.22.0 rollup: ^3.9.0 sass: ^1.52.2 semver: ^7.3.7 @@ -496,7 +487,6 @@ importers: '@babel/traverse': 7.20.12 '@babel/types': 7.20.7 '@types/babel__core': 7.1.20 - '@types/html-escaper': 3.0.0 '@types/yargs-parser': 21.0.0 acorn: 8.8.1 boxen: 6.2.1 @@ -513,22 +503,15 @@ importers: fast-glob: 3.2.12 github-slugger: 2.0.0 gray-matter: 4.0.3 - html-entities: 2.3.3 html-escaper: 3.0.3 - import-meta-resolve: 2.2.1 kleur: 4.1.5 magic-string: 0.27.0 mime: 3.0.0 ora: 6.1.2 - path-browserify: 1.0.1 path-to-regexp: 6.2.1 - postcss: 8.4.21 - postcss-load-config: 3.1.4_postcss@8.4.21 preferred-pm: 3.0.3 prompts: 2.4.2 - recast: 0.20.5 rehype: 12.0.1 - resolve: 1.22.1 semver: 7.3.8 server-destroy: 1.0.1 shiki: 0.11.1 @@ -556,10 +539,9 @@ importers: '@types/diff': 5.0.2 '@types/estree': 0.0.51 '@types/hast': 2.3.4 + '@types/html-escaper': 3.0.0 '@types/mime': 2.0.3 '@types/mocha': 9.1.1 - '@types/parse5': 6.0.3 - '@types/path-browserify': 1.0.0 '@types/prettier': 2.7.2 '@types/prompts': 2.4.2 '@types/resolve': 1.20.2 @@ -6985,7 +6967,6 @@ packages: /@types/html-escaper/3.0.0: resolution: {integrity: sha512-OcJcvP3Yk8mjYwf/IdXZtTE1tb/u0WF0qa29ER07ZHCYUBZXSN29Z1mBS+/96+kNMGTFUAbSz9X+pHmHpZrTCw==} - dev: false /@types/http-cache-semantics/4.0.1: resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} @@ -7067,10 +7048,7 @@ packages: /@types/parse5/6.0.3: resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} - - /@types/path-browserify/1.0.0: - resolution: {integrity: sha512-XMCcyhSvxcch8b7rZAtFAaierBYdeHXVvg2iYnxOV0MCQHmPuRRmGZPFDRzPayxcGiiSL1Te9UIO+f3cuj0tfw==} - dev: true + dev: false /@types/prettier/2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==}