summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar William Tetlow <9057181+williamtetlow@users.noreply.github.com> 2022-06-02 18:54:35 +0100
committerGravatar GitHub <noreply@github.com> 2022-06-02 12:54:35 -0500
commit207f58d1715ac024cc7c81b76e26aa49fca5173f (patch)
treef250d967bcbb849def95dbb78b9c8689895c2902
parent67ad33debfccc2c6cc873109cfb88e5043c5a98b (diff)
downloadastro-207f58d1715ac024cc7c81b76e26aa49fca5173f.tar.gz
astro-207f58d1715ac024cc7c81b76e26aa49fca5173f.tar.zst
astro-207f58d1715ac024cc7c81b76e26aa49fca5173f.zip
fix: alias astro to @types/astro (#3503)
* fix: alias astro to @types/astro * fix: handle resolve.alias being array * chore: add integrations patch to changeset * chore: remove empty file
-rw-r--r--.changeset/spicy-turkeys-clean.md8
-rw-r--r--packages/astro/src/core/create-vite.ts18
-rw-r--r--packages/astro/test/fixtures/type-imports/src/pages/index.astro19
-rw-r--r--packages/astro/test/type-imports.test.js16
-rw-r--r--packages/integrations/deno/src/index.ts13
-rw-r--r--packages/integrations/netlify/src/integration-edge-functions.ts13
6 files changed, 78 insertions, 9 deletions
diff --git a/.changeset/spicy-turkeys-clean.md b/.changeset/spicy-turkeys-clean.md
new file mode 100644
index 000000000..d417138b1
--- /dev/null
+++ b/.changeset/spicy-turkeys-clean.md
@@ -0,0 +1,8 @@
+---
+'astro': patch
+'@astrojs/deno': patch
+'@astrojs/netlify': patch
+---
+
+Alias `from 'astro'` imports to `'@astro/types'`
+Update Deno and Netlify integrations to handle vite.resolves.alias as an array
diff --git a/packages/astro/src/core/create-vite.ts b/packages/astro/src/core/create-vite.ts
index 8270028d4..a3feff5aa 100644
--- a/packages/astro/src/core/create-vite.ts
+++ b/packages/astro/src/core/create-vite.ts
@@ -96,11 +96,19 @@ export async function createVite(
postcss: astroConfig.style.postcss || {},
},
resolve: {
- alias: {
- // This is needed for Deno compatibility, as the non-browser version
- // of this module depends on Node `crypto`
- randombytes: 'randombytes/browser',
- },
+ alias: [
+ {
+ // This is needed for Deno compatibility, as the non-browser version
+ // of this module depends on Node `crypto`
+ find: 'randombytes',
+ replacement: 'randombytes/browser',
+ },
+ {
+ // Typings are imported from 'astro' (e.g. import { Type } from 'astro')
+ find: /^astro$/,
+ replacement: fileURLToPath(new URL('../@types/astro', import.meta.url)),
+ },
+ ],
},
// Note: SSR API is in beta (https://vitejs.dev/guide/ssr.html)
ssr: {
diff --git a/packages/astro/test/fixtures/type-imports/src/pages/index.astro b/packages/astro/test/fixtures/type-imports/src/pages/index.astro
new file mode 100644
index 000000000..3577834fb
--- /dev/null
+++ b/packages/astro/test/fixtures/type-imports/src/pages/index.astro
@@ -0,0 +1,19 @@
+---
+import type { MarkdownInstance } from 'astro'
+---
+<html lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width" />
+ <title>Astro</title>
+ <style is:global>
+ h1 {
+ color: red;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>Astro</h1>
+ <img src="/puppy.png"/>
+ </body>
+</html>
diff --git a/packages/astro/test/type-imports.test.js b/packages/astro/test/type-imports.test.js
new file mode 100644
index 000000000..d420f4eac
--- /dev/null
+++ b/packages/astro/test/type-imports.test.js
@@ -0,0 +1,16 @@
+import { expect } from 'chai';
+import { loadFixture } from './test-utils.js';
+
+describe('Type Imports', async () => {
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({ root: './fixtures/type-imports' });
+ await fixture.build();
+ });
+
+ it('Allows importing types from "astro"', async () => {
+ // if the build passes then the test succeeds
+ expect(true).to.be.true;
+ });
+});
diff --git a/packages/integrations/deno/src/index.ts b/packages/integrations/deno/src/index.ts
index 3959e63a8..aef1f8383 100644
--- a/packages/integrations/deno/src/index.ts
+++ b/packages/integrations/deno/src/index.ts
@@ -25,8 +25,17 @@ export default function createIntegration(args?: Options): AstroIntegration {
if (target === 'server') {
vite.resolve = vite.resolve || {};
vite.resolve.alias = vite.resolve.alias || {};
- const alias = vite.resolve.alias as Record<string, string>;
- alias['react-dom/server'] = 'react-dom/server.browser';
+
+ const aliases = [{ find: 'react-dom/server', replacement: 'react-dom/server.browser' }];
+
+ if (Array.isArray(vite.resolve.alias)) {
+ vite.resolve.alias = [...vite.resolve.alias, ...aliases];
+ } else {
+ for (const alias of aliases) {
+ (vite.resolve.alias as Record<string, string>)[alias.find] = alias.replacement;
+ }
+ }
+
vite.ssr = {
noExternal: true,
};
diff --git a/packages/integrations/netlify/src/integration-edge-functions.ts b/packages/integrations/netlify/src/integration-edge-functions.ts
index 843caedc1..9b4503e2b 100644
--- a/packages/integrations/netlify/src/integration-edge-functions.ts
+++ b/packages/integrations/netlify/src/integration-edge-functions.ts
@@ -89,8 +89,17 @@ export function netlifyEdgeFunctions({ dist }: NetlifyEdgeFunctionsOptions = {})
if (target === 'server') {
vite.resolve = vite.resolve || {};
vite.resolve.alias = vite.resolve.alias || {};
- const alias = vite.resolve.alias as Record<string, string>;
- alias['react-dom/server'] = 'react-dom/server.browser';
+
+ const aliases = [{ find: 'react-dom/server', replacement: 'react-dom/server.browser' }];
+
+ if (Array.isArray(vite.resolve.alias)) {
+ vite.resolve.alias = [...vite.resolve.alias, ...aliases];
+ } else {
+ for (const alias of aliases) {
+ (vite.resolve.alias as Record<string, string>)[alias.find] = alias.replacement;
+ }
+ }
+
vite.ssr = {
noExternal: true,
};