diff options
26 files changed, 101 insertions, 0 deletions
diff --git a/.changeset/happy-peas-attend.md b/.changeset/happy-peas-attend.md new file mode 100644 index 000000000..af3af1bfc --- /dev/null +++ b/.changeset/happy-peas-attend.md @@ -0,0 +1,18 @@ +--- +'astro': patch +--- + +Adds `Astro.generator` which can be used to add a [`<meta name="generator">`](https://html.spec.whatwg.org/multipage/semantics.html#meta-generator) tag. + +```astro +<html> + <head> + <meta name="generator" content={Astro.generator} /> + </head> + <body> + <footer> + <p>Built with <a href="https://astro.build">{Astro.generator}</a></p> + </footer> + </body> +</html> +``` diff --git a/examples/basics/src/layouts/Layout.astro b/examples/basics/src/layouts/Layout.astro index 9a46f2d8e..c75726968 100644 --- a/examples/basics/src/layouts/Layout.astro +++ b/examples/basics/src/layouts/Layout.astro @@ -12,6 +12,7 @@ const { title } = Astro.props as Props; <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width" /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> + <meta name="generator" content={Astro.generator} /> <title>{title}</title> </head> <body> diff --git a/examples/blog/src/components/BaseHead.astro b/examples/blog/src/components/BaseHead.astro index 80de975b1..af6fd380b 100644 --- a/examples/blog/src/components/BaseHead.astro +++ b/examples/blog/src/components/BaseHead.astro @@ -14,6 +14,7 @@ const { title, description } = Astro.props; <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> +<meta name="generator" content={Astro.generator} /> <!-- Primary Meta Tags --> <title>{title}</title> diff --git a/examples/component/demo/src/pages/index.astro b/examples/component/demo/src/pages/index.astro index bfdf495a8..f0704e56b 100644 --- a/examples/component/demo/src/pages/index.astro +++ b/examples/component/demo/src/pages/index.astro @@ -6,6 +6,7 @@ import * as Component from '@example/my-component'; <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> + <meta name="generator" content={Astro.generator} /> <title>Welcome to Astro</title> <style is:global> h { diff --git a/examples/docs/src/components/HeadCommon.astro b/examples/docs/src/components/HeadCommon.astro index 275aa315a..143345c68 100644 --- a/examples/docs/src/components/HeadCommon.astro +++ b/examples/docs/src/components/HeadCommon.astro @@ -6,6 +6,7 @@ import '../styles/index.css'; <!-- Global Metadata --> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> +<meta name="generator" content={Astro.generator} /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <link rel="alternate icon" type="image/x-icon" href="/favicon.ico" /> diff --git a/examples/env-vars/src/pages/index.astro b/examples/env-vars/src/pages/index.astro index 35a441c63..db0369979 100644 --- a/examples/env-vars/src/pages/index.astro +++ b/examples/env-vars/src/pages/index.astro @@ -12,6 +12,7 @@ console.log({ SSR, PUBLIC_SOME_KEY }); <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> + <meta name="generator" content={Astro.generator} /> <title>Astro</title> </head> <body> diff --git a/examples/framework-alpine/src/pages/index.astro b/examples/framework-alpine/src/pages/index.astro index 7e0fc33ee..575606e24 100644 --- a/examples/framework-alpine/src/pages/index.astro +++ b/examples/framework-alpine/src/pages/index.astro @@ -10,6 +10,7 @@ import Counter from '../components/Counter.astro'; <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> + <meta name="generator" content={Astro.generator} /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> <style> html, diff --git a/examples/framework-multiple/src/pages/index.astro b/examples/framework-multiple/src/pages/index.astro index 48c4e15d0..87f85d2dd 100644 --- a/examples/framework-multiple/src/pages/index.astro +++ b/examples/framework-multiple/src/pages/index.astro @@ -19,6 +19,7 @@ import SvelteCounter from '../components/SvelteCounter.svelte'; <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> + <meta name="generator" content={Astro.generator} /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> </head> <body> diff --git a/examples/framework-preact/src/pages/index.astro b/examples/framework-preact/src/pages/index.astro index d9daa1acd..2810ca658 100644 --- a/examples/framework-preact/src/pages/index.astro +++ b/examples/framework-preact/src/pages/index.astro @@ -10,6 +10,7 @@ import Counter from '../components/Counter'; <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> + <meta name="generator" content={Astro.generator} /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> <style> html, diff --git a/examples/framework-react/src/pages/index.astro b/examples/framework-react/src/pages/index.astro index 8593264c9..4810006a6 100644 --- a/examples/framework-react/src/pages/index.astro +++ b/examples/framework-react/src/pages/index.astro @@ -13,6 +13,7 @@ const someProps = { <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> + <meta name="generator" content={Astro.generator} /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> <style> html, diff --git a/examples/framework-solid/src/pages/index.astro b/examples/framework-solid/src/pages/index.astro index ce5961a5f..160c74227 100644 --- a/examples/framework-solid/src/pages/index.astro +++ b/examples/framework-solid/src/pages/index.astro @@ -10,6 +10,7 @@ import Counter from '../components/Counter'; <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> + <meta name="generator" content={Astro.generator} /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> <style> html, diff --git a/examples/framework-svelte/src/pages/index.astro b/examples/framework-svelte/src/pages/index.astro index 2cc0fed69..08379ff89 100644 --- a/examples/framework-svelte/src/pages/index.astro +++ b/examples/framework-svelte/src/pages/index.astro @@ -10,6 +10,7 @@ import Counter from '../components/Counter.svelte'; <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> + <meta name="generator" content={Astro.generator} /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> <style> html, diff --git a/examples/framework-vue/src/pages/index.astro b/examples/framework-vue/src/pages/index.astro index 98a667f77..8d0b88665 100644 --- a/examples/framework-vue/src/pages/index.astro +++ b/examples/framework-vue/src/pages/index.astro @@ -10,6 +10,7 @@ import Counter from '../components/Counter.vue'; <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> + <meta name="generator" content={Astro.generator} /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> <style> html, diff --git a/examples/minimal/src/pages/index.astro b/examples/minimal/src/pages/index.astro index 4389d5d25..554de1a39 100644 --- a/examples/minimal/src/pages/index.astro +++ b/examples/minimal/src/pages/index.astro @@ -5,6 +5,7 @@ <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> + <meta name="generator" content={Astro.generator} /> <title>Astro</title> </head> <body> diff --git a/examples/non-html-pages/src/pages/index.astro b/examples/non-html-pages/src/pages/index.astro index 6d3873c44..18fe9b9da 100644 --- a/examples/non-html-pages/src/pages/index.astro +++ b/examples/non-html-pages/src/pages/index.astro @@ -2,6 +2,7 @@ <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> + <meta name="generator" content={Astro.generator} /> <title>Astro</title> </head> <body> diff --git a/examples/portfolio/src/components/MainHead.astro b/examples/portfolio/src/components/MainHead.astro index 956f167ed..ea21f76d2 100644 --- a/examples/portfolio/src/components/MainHead.astro +++ b/examples/portfolio/src/components/MainHead.astro @@ -9,6 +9,7 @@ const { <meta charset="UTF-8" /> <meta name="description" property="og:description" content={description} /> <meta name="viewport" content="width=device-width" /> +<meta name="generator" content={Astro.generator} /> <title>{title}</title> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> diff --git a/examples/subpath/src/pages/index.astro b/examples/subpath/src/pages/index.astro index d0fca73f5..d69690eca 100644 --- a/examples/subpath/src/pages/index.astro +++ b/examples/subpath/src/pages/index.astro @@ -11,6 +11,7 @@ import Time from '../components/Time.jsx'; <meta charset="utf-8" /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> <meta name="viewport" content="width=device-width" /> + <meta name="generator" content={Astro.generator} /> <title>Welcome to Astro</title> </head> diff --git a/examples/with-nanostores/src/layouts/Layout.astro b/examples/with-nanostores/src/layouts/Layout.astro index 0eb4ecb76..5282ddf90 100644 --- a/examples/with-nanostores/src/layouts/Layout.astro +++ b/examples/with-nanostores/src/layouts/Layout.astro @@ -14,6 +14,7 @@ const { title } = Astro.props as Props; <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width"> + <meta name="generator" content={Astro.generator} /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> <title>{title}</title> </head> diff --git a/examples/with-tailwindcss/src/pages/index.astro b/examples/with-tailwindcss/src/pages/index.astro index 72b24edb9..a36b41eda 100644 --- a/examples/with-tailwindcss/src/pages/index.astro +++ b/examples/with-tailwindcss/src/pages/index.astro @@ -11,6 +11,7 @@ import Button from '../components/Button.astro'; <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> + <meta name="generator" content={Astro.generator} /> <title>Astro + TailwindCSS</title> </head> diff --git a/examples/with-vite-plugin-pwa/src/pages/index.astro b/examples/with-vite-plugin-pwa/src/pages/index.astro index 94596d8df..4a9bca7e2 100644 --- a/examples/with-vite-plugin-pwa/src/pages/index.astro +++ b/examples/with-vite-plugin-pwa/src/pages/index.astro @@ -6,6 +6,7 @@ <meta charset="utf-8" /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> <meta name="viewport" content="width=device-width" /> + <meta name="generator" content={Astro.generator} /> <title>Welcome to Astro</title> </head> diff --git a/packages/astro/src/@types/astro.ts b/packages/astro/src/@types/astro.ts index 1a4b64b3b..28b46bdc8 100644 --- a/packages/astro/src/@types/astro.ts +++ b/packages/astro/src/@types/astro.ts @@ -249,6 +249,16 @@ export interface AstroGlobalPartial { * [Astro reference](https://docs.astro.build/en/reference/api-reference/#astrosite) */ site: URL | undefined; + /** + * Returns a string with the current version of Astro. + * + * Useful for using `<meta name="generator" content={Astro.generator} />` or crediting Astro in a site footer. + * + * [HTML Specification for `generator`](https://html.spec.whatwg.org/multipage/semantics.html#meta-generator) + * + * [Astro reference](https://docs.astro.build/en/reference/api-reference/#astrogenerator) + */ + generator: string; } type ServerConfig = { diff --git a/packages/astro/src/runtime/server/index.ts b/packages/astro/src/runtime/server/index.ts index 150937a9d..df3de955a 100644 --- a/packages/astro/src/runtime/server/index.ts +++ b/packages/astro/src/runtime/server/index.ts @@ -38,6 +38,8 @@ const htmlBooleanAttributes = const htmlEnumAttributes = /^(contenteditable|draggable|spellcheck|value)$/i; // Note: SVG is case-sensitive! const svgEnumAttributes = /^(autoReverse|externalResourcesRequired|focusable|preserveAlpha)$/i; +// process.env.PACKAGE_VERSION is injected when we build and publish the astro package. +const ASTRO_VERSION = process.env.PACKAGE_VERSION ?? 'development'; // INVESTIGATE: // 2. Less anys when possible and make it well known when they are needed. @@ -530,6 +532,7 @@ export function createAstro( const projectRoot = new URL(projectRootStr); return { site, + generator: `Astro v${ASTRO_VERSION}`, fetchContent: createDeprecatedFetchContentFn(), glob: createAstroGlobFn(), // INVESTIGATE is there a use-case for multi args? diff --git a/packages/astro/test/astro-generator.test.js b/packages/astro/test/astro-generator.test.js new file mode 100644 index 000000000..1ab7fd30c --- /dev/null +++ b/packages/astro/test/astro-generator.test.js @@ -0,0 +1,23 @@ +import { expect } from 'chai'; +import * as cheerio from 'cheerio'; +import { loadFixture } from './test-utils.js'; + +describe('Astro generator', () => { + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/astro-generator/', + }); + await fixture.build(); + }); + + describe('build', () => { + it('Defines Astro.generator', async () => { + const html = await fixture.readFile(`/index.html`); + const $ = cheerio.load(html); + + expect($('meta[name="generator"]').attr('content')).to.match(/^Astro v/); + }); + }); +}); diff --git a/packages/astro/test/fixtures/astro-generator/package.json b/packages/astro/test/fixtures/astro-generator/package.json new file mode 100644 index 000000000..5fe696624 --- /dev/null +++ b/packages/astro/test/fixtures/astro-generator/package.json @@ -0,0 +1,8 @@ +{ + "name": "@test/astro-generator", + "version": "0.0.0", + "private": true, + "dependencies": { + "astro": "workspace:*" + } +} diff --git a/packages/astro/test/fixtures/astro-generator/src/pages/index.astro b/packages/astro/test/fixtures/astro-generator/src/pages/index.astro new file mode 100644 index 000000000..4d86ac540 --- /dev/null +++ b/packages/astro/test/fixtures/astro-generator/src/pages/index.astro @@ -0,0 +1,14 @@ +--- +let title = 'My App' +--- + +<html> + <head> + <meta name="generator" content={Astro.generator}> + </head> + <body> + <footer> + Built with <a href="https://astro.build">{Astro.generator}</a> + </footer> + </body> +</html> diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 20d664cb9..cae292be0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1189,6 +1189,12 @@ importers: '@astrojs/preact': link:../../../../integrations/preact astro: link:../../.. + packages/astro/test/fixtures/astro-generator: + specifiers: + astro: workspace:* + dependencies: + astro: link:../../.. + packages/astro/test/fixtures/astro-get-static-paths: specifiers: astro: workspace:* |