0
Fork 0
mirror of https://github.com/withastro/astro.git synced 2024-12-16 21:46:22 -05:00

update formatter config (#11640)

* update formatter config

* format

---------

Co-authored-by: Erika <3019731+Princesseuh@users.noreply.github.com>
This commit is contained in:
Darius 2024-08-08 05:12:50 -05:00 committed by GitHub
parent 85de47cd98
commit 72c7ae9901
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
492 changed files with 1863 additions and 1848 deletions

View file

@ -29,7 +29,7 @@
"linter": { "enabled": false },
"javascript": {
"formatter": {
"trailingCommas": "es5",
"trailingCommas": "all",
"quoteStyle": "single",
"semicolons": "always"
}

View file

@ -7,7 +7,7 @@ import { getCollection } from 'astro:content';
import FormattedDate from '../../components/FormattedDate.astro';
const posts = (await getCollection('blog')).sort(
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf()
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(),
);
---

View file

@ -9,7 +9,7 @@ import Hero from '../components/Hero.astro';
import Grid from '../components/Grid.astro';
const projects = (await getCollection('work')).sort(
(a, b) => b.data.publishDate.valueOf() - a.data.publishDate.valueOf()
(a, b) => b.data.publishDate.valueOf() - a.data.publishDate.valueOf(),
);
---

View file

@ -29,6 +29,6 @@ runHighlighterWithAstro(
<div>{helloAstro}</div>
`,
'astro'
'astro',
);
```

View file

@ -10,7 +10,7 @@ export function addAstro(Prism: typeof import('prismjs')) {
scriptLang = 'javascript';
// eslint-disable-next-line no-console
console.warn(
'Prism TypeScript language not loaded, Astro scripts will be treated as JavaScript.'
'Prism TypeScript language not loaded, Astro scripts will be treated as JavaScript.',
);
}
@ -41,7 +41,7 @@ export function addAstro(Prism: typeof import('prismjs')) {
(Prism.languages.astro as any).tag.pattern = re(
/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/
.source
.source,
);
(Prism.languages.astro as any).tag.inside['tag'].pattern = /^<\/?[^\s>/]*/;
@ -60,7 +60,7 @@ export function addAstro(Prism: typeof import('prismjs')) {
inside: Prism.languages.astro,
},
},
(Prism.languages.astro as any).tag
(Prism.languages.astro as any).tag,
);
Prism.languages.insertBefore(
@ -80,7 +80,7 @@ export function addAstro(Prism: typeof import('prismjs')) {
alias: `language-${scriptLang}`,
},
},
(Prism.languages.astro as any).tag
(Prism.languages.astro as any).tag,
);
// The following will handle plain text inside tags

View file

@ -73,8 +73,8 @@ const rssOptionsValidator = z.object({
// eslint-disable-next-line
console.warn(
yellow(
'[RSS] Passing a glob result directly has been deprecated. Please migrate to the `pagesGlobToRssItems()` helper: https://docs.astro.build/en/guides/rss/'
)
'[RSS] Passing a glob result directly has been deprecated. Please migrate to the `pagesGlobToRssItems()` helper: https://docs.astro.build/en/guides/rss/',
),
);
return pagesGlobToRssItems(items);
}
@ -123,7 +123,7 @@ async function validateRssOptions(rssOptions: RSSOptions) {
return message;
}),
].join('\n')
].join('\n'),
);
throw formattedError;
}
@ -134,7 +134,7 @@ export function pagesGlobToRssItems(items: GlobResult): Promise<ValidatedRSSFeed
const { url, frontmatter } = await getInfo();
if (url === undefined || url === null) {
throw new Error(
`[RSS] You can only glob entries within 'src/pages/' when passing import.meta.glob() directly. Consider mapping the result to an array of RSSFeedItems. See the RSS docs for usage examples: https://docs.astro.build/en/guides/rss/#2-list-of-rss-feed-objects`
`[RSS] You can only glob entries within 'src/pages/' when passing import.meta.glob() directly. Consider mapping the result to an array of RSSFeedItems. See the RSS docs for usage examples: https://docs.astro.build/en/guides/rss/#2-list-of-rss-feed-objects`,
);
}
const parsedResult = rssSchema
@ -151,11 +151,11 @@ export function pagesGlobToRssItems(items: GlobResult): Promise<ValidatedRSSFeed
[
`[RSS] ${filePath} has invalid or missing frontmatter.\nFix the following properties:`,
...parsedResult.error.errors.map((zodError) => zodError.message),
].join('\n')
].join('\n'),
);
(formattedError as any).file = filePath;
throw formattedError;
})
}),
);
}
@ -207,7 +207,7 @@ async function generateRSS(rssOptions: ValidatedRSSOptions): Promise<string> {
if (typeof rssOptions.customData === 'string')
Object.assign(
root.rss.channel,
parser.parse(`<channel>${rssOptions.customData}</channel>`).channel
parser.parse(`<channel>${rssOptions.customData}</channel>`).channel,
);
// items
root.rss.channel.item = items.map((result) => {
@ -250,7 +250,7 @@ async function generateRSS(rssOptions: ValidatedRSSOptions): Promise<string> {
}
if (result.source) {
item.source = parser.parse(
`<source url="${result.source.url}">${result.source.title}</source>`
`<source url="${result.source.url}">${result.source.title}</source>`,
).source;
}
if (result.enclosure) {
@ -258,7 +258,7 @@ async function generateRSS(rssOptions: ValidatedRSSOptions): Promise<string> {
? result.enclosure.url
: createCanonicalURL(result.enclosure.url, rssOptions.trailingSlash, site);
item.enclosure = parser.parse(
`<enclosure url="${enclosureURL}" length="${result.enclosure.length}" type="${result.enclosure.type}"/>`
`<enclosure url="${enclosureURL}" length="${result.enclosure.length}" type="${result.enclosure.type}"/>`,
).enclosure;
}
return item;

View file

@ -5,7 +5,7 @@ import type { RSSOptions } from './index.js';
export function createCanonicalURL(
url: string,
trailingSlash?: RSSOptions['trailingSlash'],
base?: string
base?: string,
): string {
let pathname = url.replace(/\/index.html$/, ''); // index.html is not canonical
if (!getUrlExtension(url)) {

View file

@ -16,7 +16,7 @@ describe('pagesGlobToRssItems', () => {
pubDate: phpFeedItem.pubDate,
description: phpFeedItem.description,
},
})
}),
),
'./posts/nested/web1.md': () =>
new Promise((resolve) =>
@ -27,7 +27,7 @@ describe('pagesGlobToRssItems', () => {
pubDate: web1FeedItem.pubDate,
description: web1FeedItem.description,
},
})
}),
),
};
@ -49,7 +49,7 @@ describe('pagesGlobToRssItems', () => {
assert.deepEqual(
items.sort((a, b) => a.pubDate - b.pubDate),
expected
expected,
);
});
@ -63,7 +63,7 @@ describe('pagesGlobToRssItems', () => {
pubDate: phpFeedItem.pubDate,
description: phpFeedItem.description,
},
})
}),
),
};
return assert.rejects(pagesGlobToRssItems(globResult));
@ -80,7 +80,7 @@ describe('pagesGlobToRssItems', () => {
pubDate: phpFeedItem.pubDate,
description: undefined,
},
})
}),
),
};
return assert.rejects(pagesGlobToRssItems(globResult));
@ -97,7 +97,7 @@ describe('pagesGlobToRssItems', () => {
pubDate: phpFeedItem.pubDate,
description: phpFeedItem.description,
},
})
}),
),
};
return assert.doesNotReject(pagesGlobToRssItems(globResult));
@ -114,7 +114,7 @@ describe('pagesGlobToRssItems', () => {
pubDate: phpFeedItem.pubDate,
description: undefined,
},
})
}),
),
};
return assert.doesNotReject(pagesGlobToRssItems(globResult));

View file

@ -191,7 +191,7 @@ describe('getRssString', () => {
pubDate: phpFeedItem.pubDate,
description: phpFeedItem.description,
},
})
}),
),
'./posts/nested/web1.md': () =>
new Promise((resolve) =>
@ -202,7 +202,7 @@ describe('getRssString', () => {
pubDate: web1FeedItem.pubDate,
description: web1FeedItem.description,
},
})
}),
),
};

View file

@ -1127,7 +1127,7 @@
export function Like({ postId }: { postId: string }) {
const [state, action, pending] = useActionState(
experimental_withState(actions.like),
0 // initial likes
0, // initial likes
);
return (
@ -1341,7 +1341,7 @@
{
site: 'https://example.com',
trailingSlash: 'never',
}
},
);
```
@ -1714,7 +1714,7 @@
middleware({
redirectToDefaultLocale: false,
prefixDefaultLocale: true,
})
}),
);
```
@ -1985,7 +1985,7 @@
detail: {
level: 'warning',
},
})
}),
);
```
@ -6675,7 +6675,7 @@
const hydrate = await load();
await hydrate();
},
{ once: true }
{ once: true },
);
};
@ -8970,7 +8970,7 @@
{ darkMode: true },
{
expires: '1 month',
}
},
);
const prefs = Astro.cookies.get<Prefs>('prefs').json();

View file

@ -66,7 +66,7 @@ Please upgrade Node.js to a supported version: "${engines}"\n`);
}
}
console.log(
`${ci.name} CI Environment Detected!\nAdditional steps may be needed to set your Node.js version:`
`${ci.name} CI Environment Detected!\nAdditional steps may be needed to set your Node.js version:`,
);
console.log(`Documentation: https://docs.astro.build/en/guides/deploy/`);
if (CI_INSTRUCTIONS[platform]) {

View file

@ -50,7 +50,7 @@ declare module 'astro:assets' {
* This is functionally equivalent to using the `<Image />` component, as the component calls this function internally.
*/
getImage: (
options: import('./dist/assets/types.js').UnresolvedImageTransform
options: import('./dist/assets/types.js').UnresolvedImageTransform,
) => Promise<import('./dist/assets/types.js').GetImageResult>;
imageConfig: import('./dist/@types/astro.js').AstroConfig['image'];
getConfiguredImageService: typeof import('./dist/assets/index.js').getConfiguredImageService;

View file

@ -53,8 +53,8 @@ const optimizedImages: GetImageResult[] = await Promise.all(
format: format,
widths: props.widths,
densities: props.densities,
})
)
}),
),
);
let resultFallbackFormat = fallbackFormat ?? defaultFallbackFormat;

View file

@ -53,7 +53,7 @@ const { fallback = 'animate' } = Astro.props;
if (supportsViewTransitions || getFallback() !== 'none') {
if (import.meta.env.DEV && window.matchMedia('(prefers-reduced-motion)').matches) {
console.warn(
`[transitions]: all view transition animations, including fallback animation, are disabled as this device has the prefer-reduced-motion setting enabled.`
`[transitions]: all view transition animations, including fallback animation, are disabled as this device has the prefer-reduced-motion setting enabled.`,
);
}
document.addEventListener('click', (ev) => {

View file

@ -17,7 +17,7 @@ export function defineConfig(config: AstroUserConfig): AstroUserConfig;
*/
export function getViteConfig(
config: ViteUserConfig,
inlineAstroConfig?: AstroInlineConfig
inlineAstroConfig?: AstroInlineConfig,
): ViteUserConfigFn;
/**

View file

@ -20,25 +20,25 @@ test.describe('Astro component HMR', () => {
const hero = page.locator('section');
await expect(hero, 'hero has background: white').toHaveCSS(
'background-color',
'rgb(255, 255, 255)'
'rgb(255, 255, 255)',
);
await expect(hero, 'hero has color: black').toHaveCSS('color', 'rgb(0, 0, 0)');
// Edit the Hero component with a new background color
await astro.editFile('./src/components/Hero.astro', (content) =>
content.replace('background: white', 'background: rgb(230, 230, 230)')
content.replace('background: white', 'background: rgb(230, 230, 230)'),
);
await expect(hero, 'background color updated').toHaveCSS(
'background-color',
'rgb(230, 230, 230)'
'rgb(230, 230, 230)',
);
});
test('hoisted scripts', async ({ page, astro }) => {
const initialLog = page.waitForEvent(
'console',
(message) => message.text() === 'Hello, Astro!'
(message) => message.text() === 'Hello, Astro!',
);
await page.goto(astro.resolveUrl('/'));
@ -49,12 +49,12 @@ test.describe('Astro component HMR', () => {
const updatedLog = page.waitForEvent(
'console',
(message) => message.text() === 'Hello, updated Astro!'
(message) => message.text() === 'Hello, updated Astro!',
);
// Edit the hoisted script on the page
await astro.editFile('./src/pages/index.astro', (content) =>
content.replace('Hello, Astro!', 'Hello, updated Astro!')
content.replace('Hello, Astro!', 'Hello, updated Astro!'),
);
await updatedLog;
@ -63,7 +63,7 @@ test.describe('Astro component HMR', () => {
test('inline scripts', async ({ page, astro }) => {
const initialLog = page.waitForEvent(
'console',
(message) => message.text() === 'Hello, inline Astro!'
(message) => message.text() === 'Hello, inline Astro!',
);
await page.goto(astro.resolveUrl('/'));
@ -71,12 +71,12 @@ test.describe('Astro component HMR', () => {
const updatedLog = page.waitForEvent(
'console',
(message) => message.text() === 'Hello, updated inline Astro!'
(message) => message.text() === 'Hello, updated inline Astro!',
);
// Edit the inline script on the page
await astro.editFile('./src/pages/index.astro', (content) =>
content.replace('Hello, inline Astro!', 'Hello, updated inline Astro!')
content.replace('Hello, inline Astro!', 'Hello, updated inline Astro!'),
);
await updatedLog;
@ -89,7 +89,7 @@ test.describe('Astro component HMR', () => {
await Promise.all([
page.waitForLoadState('networkidle'),
await astro.editFile('../_deps/astro-linked-lib/Component.astro', (content) =>
content.replace('>astro-linked-lib<', '>astro-linked-lib-update<')
content.replace('>astro-linked-lib<', '>astro-linked-lib-update<'),
),
]);
h1 = page.locator('#astro-linked-lib');
@ -103,7 +103,7 @@ test.describe('Astro component HMR', () => {
await Promise.all([
page.waitForLoadState('networkidle'),
await astro.editFile('../_deps/astro-linked-lib/Component.astro', (content) =>
content.replace('color: red', 'color: green')
content.replace('color: red', 'color: green'),
),
]);
h1 = page.locator('#astro-linked-lib');

View file

@ -35,7 +35,7 @@ test.describe('Astro Environment BASE_URL', () => {
const clientComponentBaseUrl = page.locator('id=client-component-base-url');
await expect(clientComponentBaseUrl, 'clientComponentBaseUrl equals to /blog').toHaveText(
'/blog'
'/blog',
);
});
});

View file

@ -19,7 +19,7 @@ test.describe('Content Collections', () => {
await page.goto(astro.resolveUrl('/'));
await astro.editFile('./src/components/MyComponent.astro', (original) =>
original.replace('red', 'green')
original.replace('red', 'green'),
);
const h1 = page.locator('#my-heading');

View file

@ -26,7 +26,7 @@ test.describe('CSS HMR', () => {
await expect(h).toHaveCSS('color', 'rgb(255, 0, 0)');
await astro.editFile('./src/styles/main.css', (original) =>
original.replace('--h1-color: red;', '--h1-color: green;')
original.replace('--h1-color: red;', '--h1-color: green;'),
);
await expect(h).toHaveCSS('color', 'rgb(0, 128, 0)');

View file

@ -98,7 +98,7 @@ function testClientDirectivesShared() {
const clientOptions = page.locator('#options');
await expect(clientOptions).toHaveText(
'Passed options are: {"message":"Hello! I was passed as an option"}'
'Passed options are: {"message":"Hello! I was passed as an option"}',
);
});
}

View file

@ -79,7 +79,7 @@ test.describe('Dev Toolbar - Audits', () => {
'astro:dev-toolbar:settings',
JSON.stringify({
verbose: true,
})
}),
);
});
@ -93,7 +93,7 @@ test.describe('Dev Toolbar - Audits', () => {
const badButton = page.locator('#bad-button');
let consolePromise = page.waitForEvent('console', (msg) =>
msg.text().includes('Rerunning audit lints')
msg.text().includes('Rerunning audit lints'),
);
await badButton.click({ clickCount: 5 });
await consolePromise;
@ -102,7 +102,7 @@ test.describe('Dev Toolbar - Audits', () => {
expect(
logs.filter((log) => log.includes('Rerunning audit lints because the DOM has been updated'))
.length === 1
.length === 1,
).toBe(true);
});
@ -114,7 +114,7 @@ test.describe('Dev Toolbar - Audits', () => {
'astro:dev-toolbar:settings',
JSON.stringify({
verbose: true,
})
}),
);
});
@ -153,7 +153,7 @@ test.describe('Dev Toolbar - Audits', () => {
// Make sure we only reran audits once
expect(
logs.filter((log) => log.includes('Rerunning audit lints because the DOM has been updated'))
.length === 1
.length === 1,
).toBe(true);
});

View file

@ -42,7 +42,7 @@ test.describe('Dev Toolbar', () => {
await appButton.click();
const astroAppCanvas = toolbar.locator(
'astro-dev-toolbar-app-canvas[data-app-id="astro:home"]'
'astro-dev-toolbar-app-canvas[data-app-id="astro:home"]',
);
const astroWindow = astroAppCanvas.locator('astro-dev-toolbar-window');
await expect(astroWindow).toHaveCount(1);
@ -152,7 +152,7 @@ test.describe('Dev Toolbar', () => {
const code = xrayHighlightTooltip.locator('pre > code');
await expect(code).toHaveText(
JSON.stringify({ name: `<img src='' onerror='alert(1)'>` }, undefined, 2)
JSON.stringify({ name: `<img src='' onerror='alert(1)'>` }, undefined, 2),
);
expect(isAlertCalled).toBe(false);
});
@ -264,7 +264,7 @@ test.describe('Dev Toolbar', () => {
await appButton.click();
const settingsAppCanvas = toolbar.locator(
'astro-dev-toolbar-app-canvas[data-app-id="astro:settings"]'
'astro-dev-toolbar-app-canvas[data-app-id="astro:settings"]',
);
const settingsWindow = settingsAppCanvas.locator('astro-dev-toolbar-window');
await expect(settingsWindow).toHaveCount(1);
@ -283,7 +283,7 @@ test.describe('Dev Toolbar', () => {
await appButton.click();
const settingsAppCanvas = toolbar.locator(
'astro-dev-toolbar-app-canvas[data-app-id="astro:settings"]'
'astro-dev-toolbar-app-canvas[data-app-id="astro:settings"]',
);
const settingsWindow = settingsAppCanvas.locator('astro-dev-toolbar-window');
await expect(settingsWindow).toHaveCount(1);
@ -294,7 +294,7 @@ test.describe('Dev Toolbar', () => {
await appButton.click();
const astroAppCanvas = toolbar.locator(
'astro-dev-toolbar-app-canvas[data-app-id="astro:home"]'
'astro-dev-toolbar-app-canvas[data-app-id="astro:home"]',
);
const astroWindow = astroAppCanvas.locator('astro-dev-toolbar-window');
await expect(astroWindow).toHaveCount(1);
@ -311,7 +311,7 @@ test.describe('Dev Toolbar', () => {
await appButton.click();
const settingsAppCanvas = toolbar.locator(
'astro-dev-toolbar-app-canvas[data-app-id="astro:settings"]'
'astro-dev-toolbar-app-canvas[data-app-id="astro:settings"]',
);
const settingsWindow = settingsAppCanvas.locator('astro-dev-toolbar-window');
await expect(settingsWindow).toHaveCount(1);
@ -389,7 +389,7 @@ test.describe('Dev Toolbar', () => {
await settingsAppButton.click();
const settingsAppCanvas = toolbar.locator(
'astro-dev-toolbar-app-canvas[data-app-id="astro:settings"]'
'astro-dev-toolbar-app-canvas[data-app-id="astro:settings"]',
);
const settingsWindow = settingsAppCanvas.locator('astro-dev-toolbar-window');
await expect(settingsWindow).toBeVisible();
@ -423,7 +423,7 @@ test.describe('Dev Toolbar', () => {
await settingsAppButton.click();
const settingsAppCanvas = toolbar.locator(
'astro-dev-toolbar-app-canvas[data-app-id="astro:settings"]'
'astro-dev-toolbar-app-canvas[data-app-id="astro:settings"]',
);
const settingsWindow = settingsAppCanvas.locator('astro-dev-toolbar-window');
await expect(settingsWindow).toBeVisible();

View file

@ -33,7 +33,7 @@ test.describe('Error display', () => {
// Edit the component file
await astro.editFile(
'./src/pages/astro-syntax-error.astro',
() => `<h1>No syntax error</h1>`
() => `<h1>No syntax error</h1>`,
),
]);
@ -107,7 +107,7 @@ test.describe('Error display', () => {
// Edit the component file
astro.editFile(
'./src/components/svelte/SvelteSyntaxError.svelte',
() => `<h1>No mismatch</h1>`
() => `<h1>No mismatch</h1>`,
),
]);

View file

@ -34,7 +34,7 @@ test.describe('Scripts with dependencies', () => {
await expect(h, 'original text set').toHaveText('before');
await astro.editFile('./src/scripts/heading.js', (original) =>
original.replace('before', 'after')
original.replace('before', 'after'),
);
await expect(h, 'text changed').toHaveText('after');
@ -64,7 +64,7 @@ test.describe('Styles', () => {
await expect(h).toHaveCSS('color', 'rgb(0, 0, 255)');
await astro.editFile('./src/styles/css-external.css', (original) =>
original.replace('blue', 'red')
original.replace('blue', 'red'),
);
await expect(h).toHaveCSS('color', 'rgb(255, 0, 0)');

View file

@ -118,13 +118,13 @@ test.describe('Lit components', () => {
// Light DOM reconstructed correctly (slots are rendered alphabetically) and shadow dom content rendered
await expect(label, 'slotted text is in DOM').toHaveText(
'Framework client:only component Should not be visible Shadow dom default content should not be visible'
'Framework client:only component Should not be visible Shadow dom default content should not be visible',
);
// Projected content should be visible
await expect(
page.locator('#client-only .default'),
'slotted element is visible'
'slotted element is visible',
).toBeVisible();
await expect(page.locator('#client-only .foo1'), 'slotted element is visible').toBeVisible();
await expect(page.locator('#client-only .foo2'), 'slotted element is visible').toBeVisible();
@ -132,13 +132,13 @@ test.describe('Lit components', () => {
// Non-projected content should not be visible
await expect(
page.locator('#client-only [slot="quux"]'),
'element without slot is not visible'
'element without slot is not visible',
).toBeHidden();
// Default slot content should not be visible
await expect(
page.locator('#client-only .defaultContent'),
'element without slot is not visible'
'element without slot is not visible',
).toBeHidden();
});
@ -149,7 +149,7 @@ test.describe('Lit components', () => {
const label = counter.locator('h1');
await astro.editFile('./src/pages/index.astro', (original) =>
original.replace('Hello, client:idle!', 'Hello, updated client:idle!')
original.replace('Hello, client:idle!', 'Hello, updated client:idle!'),
);
await expect(label, 'slot text updated').toHaveText('Hello, updated client:idle!');

View file

@ -109,7 +109,7 @@ test.skip('Multiple frameworks', () => {
await expect(slot, 'initial slot content').toHaveText('Hello Preact!');
await astro.editFile('./src/pages/index.astro', (content) =>
content.replace('Hello Preact!', 'Hello Preact, updated!')
content.replace('Hello Preact!', 'Hello Preact, updated!'),
);
await expect(slot, 'slot content updated').toHaveText('Hello Preact, updated!');
@ -122,7 +122,7 @@ test.skip('Multiple frameworks', () => {
await expect(count, 'initial count updated to 0').toHaveText('0');
await astro.editFile('./src/components/ReactCounter.jsx', (content) =>
content.replace('useState(0)', 'useState(5)')
content.replace('useState(0)', 'useState(5)'),
);
await expect(count, 'initial count updated to 5').toHaveText('5');
@ -135,7 +135,7 @@ test.skip('Multiple frameworks', () => {
await expect(count, 'initial count updated to 0').toHaveText('0');
await astro.editFile('./src/components/PreactCounter.tsx', (content) =>
content.replace('useState(0)', 'useState(5)')
content.replace('useState(0)', 'useState(5)'),
);
await expect(count, 'initial count updated to 5').toHaveText('5');
@ -148,7 +148,7 @@ test.skip('Multiple frameworks', () => {
await expect(count, 'initial count updated to 0').toHaveText('0');
await astro.editFile('./src/components/SolidCounter.tsx', (content) =>
content.replace('createSignal(0)', 'createSignal(5)')
content.replace('createSignal(0)', 'createSignal(5)'),
);
await expect(count, 'initial count updated to 5').toHaveText('5');
@ -161,7 +161,7 @@ test.skip('Multiple frameworks', () => {
await expect(count, 'initial count updated to 0').toHaveText('0');
await astro.editFile('./src/components/VueCounter.vue', (content) =>
content.replace('ref(0)', 'ref(5)')
content.replace('ref(0)', 'ref(5)'),
);
await expect(count, 'initial count updated to 5').toHaveText('5');
@ -174,7 +174,7 @@ test.skip('Multiple frameworks', () => {
await expect(count, 'initial count is 0').toHaveText('0');
await astro.editFile('./src/components/SvelteCounter.svelte', (content) =>
content.replace('let count = 0;', 'let count = 5;')
content.replace('let count = 0;', 'let count = 5;'),
);
await expect(count, 'initial count updated to 5').toHaveText('5');

View file

@ -34,7 +34,7 @@ test.describe('Loading styles that are nested', () => {
await expect(header, 'should have background color').toHaveCSS(
'background-color',
'rgb(0, 0, 139)' // darkblue
'rgb(0, 0, 139)', // darkblue
);
});
});

View file

@ -40,7 +40,7 @@ async function expectUrlPrefetched(url, page, count) {
const fetchCount = reqUrls.filter((u) => u.includes(url)).length;
expect(
fetchCount,
`${url} should be prefetched ${count} time(s), but is prefetch with link ${linkCount} time(s) and with fetch ${fetchCount} time(s)`
`${url} should be prefetched ${count} time(s), but is prefetch with link ${linkCount} time(s) and with fetch ${fetchCount} time(s)`,
).toEqual(count);
}
}
@ -344,7 +344,7 @@ test.describe('Prefetch (default), Experimental ({ clientPrerender: true })', ()
expect(await scriptIsInHead(page, '?search-param=true')).toBeFalsy();
await page.locator('#prefetch-search-param').hover();
await page.waitForFunction(
() => document.querySelectorAll('script[type=speculationrules]').length === 2
() => document.querySelectorAll('script[type=speculationrules]').length === 2,
);
expect(await scriptIsInHead(page, '?search-param=true')).toBeTruthy();
});
@ -361,7 +361,7 @@ test.describe('Prefetch (default), Experimental ({ clientPrerender: true })', ()
expect(await scriptIsInHead(page, '/prefetch-hover')).toBeFalsy();
await page.locator('#prefetch-hover').hover();
await page.waitForFunction(
() => document.querySelectorAll('script[type=speculationrules]').length === 2
() => document.querySelectorAll('script[type=speculationrules]').length === 2,
);
expect(await scriptIsInHead(page, '/prefetch-hover')).toBeTruthy();
});
@ -372,7 +372,7 @@ test.describe('Prefetch (default), Experimental ({ clientPrerender: true })', ()
// Scroll down to show the element
await page.locator('#prefetch-viewport').scrollIntoViewIfNeeded();
await page.waitForFunction(
() => document.querySelectorAll('script[type=speculationrules]').length === 2
() => document.querySelectorAll('script[type=speculationrules]').length === 2,
);
expect(await scriptIsInHead(page, '/prefetch-viewport')).toBeTruthy();
});

View file

@ -134,7 +134,7 @@ export function prepareTestFactory(opts, { canReplayClicks = false } = {}) {
// Edit the component's initial count prop
await astro.editFile(pageSourceFilePath, (original) =>
original.replace('id="client-idle" {...someProps}', 'id="client-idle" count={5}')
original.replace('id="client-idle" {...someProps}', 'id="client-idle" count={5}'),
);
await expect(count, 'count prop updated').toHaveText('5', { timeout: 10000 });
@ -144,19 +144,19 @@ export function prepareTestFactory(opts, { canReplayClicks = false } = {}) {
await astro.editFile(componentFilePath, (original) =>
original.replace(
'Framework client:only component',
'Updated framework client:only component'
)
'Updated framework client:only component',
),
);
const label = page.locator('#client-only');
await expect(label, 'client:only component is visible').toBeVisible();
await expect(label, 'client:only slot text is visible').toHaveText(
'Updated framework client:only component'
'Updated framework client:only component',
);
// Edit the imported CSS file
await astro.editFile(counterCssFilePath || './src/components/Counter.css', (original) =>
original.replace('font-size: 2em;', 'font-size: 24px;')
original.replace('font-size: 2em;', 'font-size: 24px;'),
);
await expect(count, 'imported CSS updated').toHaveCSS('font-size', '24px');

View file

@ -4,7 +4,7 @@ const { test, createTests } = prepareTestFactory(
{ root: './fixtures/solid-component/' },
{
canReplayClicks: true,
}
},
);
const config = {

View file

@ -23,7 +23,7 @@ test.describe('Tailwind CSS', () => {
await expect(body, 'should have classes').toHaveClass('bg-dawn text-midnight');
await expect(body, 'should have background color').toHaveCSS(
'background-color',
'rgb(243, 233, 250)'
'rgb(243, 233, 250)',
);
await expect(body, 'should have color').toHaveCSS('color', 'rgb(49, 39, 74)');
});
@ -37,13 +37,13 @@ test.describe('Tailwind CSS', () => {
await expect(button, 'should have appearance: none').toHaveCSS('appearance', 'none');
await expect(button, 'should have appearance-none with webkit prefix').toHaveCSS(
'-webkit-appearance',
'none'
'none',
);
await expect(button, 'should have bg-purple-600').toHaveClass(/bg-purple-600/);
await expect(button, 'should have background color').toHaveCSS(
'background-color',
'rgb(147, 51, 234)'
'rgb(147, 51, 234)',
);
await expect(button, 'should have lg:py-3').toHaveClass(/lg:py-3/);
@ -58,7 +58,7 @@ test.describe('Tailwind CSS', () => {
await page.goto(astro.resolveUrl('/'));
await astro.editFile('./src/components/Button.astro', (original) =>
original.replace('bg-purple-600', 'bg-purple-400')
original.replace('bg-purple-600', 'bg-purple-400'),
);
const button = page.locator('button');
@ -66,7 +66,7 @@ test.describe('Tailwind CSS', () => {
await expect(button, 'should have bg-purple-400').toHaveClass(/bg-purple-400/);
await expect(button, 'should have background color').toHaveCSS(
'background-color',
'rgb(192, 132, 252)'
'rgb(192, 132, 252)',
);
});
});

View file

@ -84,7 +84,7 @@ export async function waitForHydrate(page, el) {
const astroIslandId = await astroIsland.last().getAttribute('uid');
await page.waitForFunction(
(selector) => document.querySelector(selector)?.hasAttribute('ssr') === false,
`astro-island[uid="${astroIslandId}"]`
`astro-island[uid="${astroIslandId}"]`,
);
}

View file

@ -35,7 +35,7 @@ function collectPreloads(page) {
mutations.forEach((mutation) =>
mutation.addedNodes.forEach((node) => {
if (node.nodeName === 'LINK' && node.rel === 'preload') preloads.push(node.href);
})
}),
);
});
observer.observe(document.head, { childList: true });
@ -132,7 +132,7 @@ test.describe('View Transitions', () => {
expect(
loads.length,
'There should be 2 page loads. The original, then going from 3 to 2'
'There should be 2 page loads. The original, then going from 3 to 2',
).toEqual(2);
});
@ -163,7 +163,7 @@ test.describe('View Transitions', () => {
expect(
loads.length,
'There should be only 2 page loads (for page one & three), but no additional loads for the hash change'
'There should be only 2 page loads (for page one & three), but no additional loads for the hash change',
).toEqual(2);
});
@ -185,7 +185,7 @@ test.describe('View Transitions', () => {
await expect(p, 'should have content').toHaveText('Page 1');
expect(
loads.length,
'There should be 3 page loads (for page one & three), and an additional loads for the back navigation'
'There should be 3 page loads (for page one & three), and an additional loads for the back navigation',
).toEqual(3);
});
@ -628,7 +628,7 @@ test.describe('View Transitions', () => {
expect(
loads.length,
'There should be only 1 page load. No additional loads for going back on same page'
'There should be only 1 page load. No additional loads for going back on same page',
).toEqual(1);
});
@ -770,7 +770,7 @@ test.describe('View Transitions', () => {
expect(
loads.length,
'There should only be the initial page load and two normal transitions'
'There should only be the initial page load and two normal transitions',
).toEqual(1);
});
@ -1030,7 +1030,7 @@ test.describe('View Transitions', () => {
expect(
loads.length,
'There should be only 1 page load. No additional loads for the form submission'
'There should be only 1 page load. No additional loads for the form submission',
).toEqual(1);
});
@ -1056,7 +1056,7 @@ test.describe('View Transitions', () => {
expect(
loads.length,
'There should be only 1 page load. No additional loads for the form submission'
'There should be only 1 page load. No additional loads for the form submission',
).toEqual(1);
});
@ -1075,7 +1075,7 @@ test.describe('View Transitions', () => {
expect(
loads.length,
'There should be only 1 page load. No additional loads for the form submission'
'There should be only 1 page load. No additional loads for the form submission',
).toEqual(1);
});
@ -1104,12 +1104,12 @@ test.describe('View Transitions', () => {
expect(
loads.length,
'There should be only 1 page load. No additional loads for the form submission'
'There should be only 1 page load. No additional loads for the form submission',
).toEqual(1);
expect(
postedEncodings,
'There should be 1 POST, with encoding set to `multipart/form-data`'
'There should be 1 POST, with encoding set to `multipart/form-data`',
).toEqual(['multipart/form-data']);
});
@ -1130,8 +1130,8 @@ test.describe('View Transitions', () => {
await page.goto(
astro.resolveUrl(
`/form-one?${new URLSearchParams({ enctype: 'application/x-www-form-urlencoded' })}`
)
`/form-one?${new URLSearchParams({ enctype: 'application/x-www-form-urlencoded' })}`,
),
);
// Submit the form
@ -1139,12 +1139,12 @@ test.describe('View Transitions', () => {
expect(
loads.length,
'There should be only 1 page load. No additional loads for the form submission'
'There should be only 1 page load. No additional loads for the form submission',
).toEqual(1);
expect(
postedEncodings,
'There should be 1 POST, with encoding set to `multipart/form-data`'
'There should be 1 POST, with encoding set to `multipart/form-data`',
).toEqual(['application/x-www-form-urlencoded']);
});
@ -1216,7 +1216,7 @@ test.describe('View Transitions', () => {
expect(
loads.length,
'There should be only 1 page load. No additional loads for the form submission'
'There should be only 1 page load. No additional loads for the form submission',
).toEqual(1);
});
@ -1333,7 +1333,7 @@ test.describe('View Transitions', () => {
expectedAnimations.add(name);
expect(page.locator(selector), 'should be escaped correctly').toHaveCSS(
'view-transition-name',
name
name,
);
};
@ -1361,36 +1361,36 @@ test.describe('View Transitions', () => {
await checkName('#thirteen', '___01____02______');
await checkName(
'#batch0',
'__00_01_02_03_04_05_06_07_08_09_0a_0b_0c_0d_0e_0f_10_11_12_13_14_15_16_17_18_19_1a_1b_1c_1d_1e_1f'
'__00_01_02_03_04_05_06_07_08_09_0a_0b_0c_0d_0e_0f_10_11_12_13_14_15_16_17_18_19_1a_1b_1c_1d_1e_1f',
);
await checkName(
'#batch1',
'__20_21_22_23_24_25_26_27_28_29_2a_2b_2c-_2e_2f0123456789_3a_3b_3c_3d_3e_3f'
'__20_21_22_23_24_25_26_27_28_29_2a_2b_2c-_2e_2f0123456789_3a_3b_3c_3d_3e_3f',
);
await checkName('#batch2', '__40ABCDEFGHIJKLMNOPQRSTUVWXYZ_5b_5c_5d_5e__');
await checkName('#batch3', '__60abcdefghijklmnopqrstuvwxyz_7b_7c_7d_7e_7f');
await checkName(
'#batch4',
'\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f'
'\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f',
);
await checkName(
'#batch5',
'\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf'
'\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf',
);
await checkName(
'#batch6',
'\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf'
'\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf',
);
await checkName(
'#batch7',
'\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
'\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff',
);
await page.click('#navigate');
await page.waitForTimeout(400); // yes, I dislike this, too. Might fix later.
expect(
expectedAnimations.size,
'all animations for transition:names should have been found'
'all animations for transition:names should have been found',
).toEqual(0);
});
@ -1425,7 +1425,7 @@ test.describe('View Transitions', () => {
const attributeValue = await page.$eval(
':root',
(element, attributeName) => element.getAttribute(attributeName),
'data-theme'
'data-theme',
);
expect(attributeValue).toBe('purple');
});

View file

@ -47,7 +47,7 @@ test('hmr works', async ({ page, astro }) => {
await expect(span).toHaveText('Count is 1');
await astro.editFile('./src/components/State.vue', (content) =>
content.replace('ref(1)', 'ref(2)')
content.replace('ref(1)', 'ref(2)'),
);
await expect(span).toHaveText('Count is 2');

View file

@ -74,8 +74,8 @@ async function benchmark({ fixtures, templates, numPosts }) {
const fixtures = formats.filter((format) => format !== 'md');
console.log(
`\n${bold('With Astro components')} ${dim(
`${numPosts} posts (${formatsToString(fixtures)})`
)}`
`${numPosts} posts (${formatsToString(fixtures)})`,
)}`,
);
process.env.ASTRO_PERFORMANCE_TEST_NAME = 'with-astro-components';
await benchmark({
@ -92,8 +92,8 @@ async function benchmark({ fixtures, templates, numPosts }) {
const fixtures = formats.filter((format) => format !== 'md');
console.log(
`\n${bold('With React components')} ${dim(
`${numPosts} posts (${formatsToString(fixtures)})`
)}`
`${numPosts} posts (${formatsToString(fixtures)})`,
)}`,
);
process.env.ASTRO_PERFORMANCE_TEST_NAME = 'with-react-components';
await benchmark({

View file

@ -23,8 +23,8 @@ export async function generatePosts({
Array.from(Array(numPosts).keys()).map((idx) => {
return fs.promises.writeFile(
`${postsDir}/post-${idx}${ext.startsWith('.') ? ext : `.${ext}`}`,
fs.readFileSync(new URL(`./templates/${template}`, import.meta.url), 'utf8')
fs.readFileSync(new URL(`./templates/${template}`, import.meta.url), 'utf8'),
);
})
}),
);
}

View file

@ -378,7 +378,7 @@ export interface AstroGlobalPartial {
*/
glob(globStr: `${any}.astro`): Promise<AstroInstance[]>;
glob<T extends Record<string, any>>(
globStr: `${any}${MarkdowFileExtension}`
globStr: `${any}${MarkdowFileExtension}`,
): Promise<MarkdownInstance<T>[]>;
glob<T extends Record<string, any>>(globStr: `${any}.mdx`): Promise<MDXInstance<T>[]>;
glob<T extends Record<string, any>>(globStr: string): Promise<T[]>;
@ -2300,7 +2300,7 @@ export interface ContentEntryType {
contents: string;
fileUrl: URL;
viteId: string;
}
},
): rollup.LoadResult | Promise<rollup.LoadResult>;
contentModuleTypes?: string;
/**
@ -2385,7 +2385,7 @@ export type AsyncRendererComponentFn<U> = (
Component: any,
props: any,
slots: Record<string, string>,
metadata?: AstroComponentMetadata
metadata?: AstroComponentMetadata,
) => Promise<U>;
/** Generic interface for a component (Astro, Svelte, React, etc.) */
@ -2470,7 +2470,7 @@ export type GetStaticPathsResultKeyed = GetStaticPathsResult & {
* [Astro Reference](https://docs.astro.build/en/reference/api-reference/#getstaticpaths)
*/
export type GetStaticPaths = (
options: GetStaticPathsOptions
options: GetStaticPathsOptions,
) => Promise<GetStaticPathsResult> | GetStaticPathsResult;
/**
@ -2493,7 +2493,7 @@ export type GetStaticPaths = (
* ```
*/
export type InferGetStaticParamsType<T> = T extends (
opts?: GetStaticPathsOptions
opts?: GetStaticPathsOptions,
) => infer R | Promise<infer R>
? R extends Array<infer U>
? U extends { params: infer P }
@ -2526,7 +2526,7 @@ export type InferGetStaticParamsType<T> = T extends (
* ```
*/
export type InferGetStaticPropsType<T> = T extends (
opts: GetStaticPathsOptions
opts: GetStaticPathsOptions,
) => infer R | Promise<infer R>
? R extends Array<infer U>
? U extends { props: infer P }
@ -2639,7 +2639,7 @@ export type PaginateFunction = <
AdditionalPaginateParams extends Params,
>(
data: PaginateData[],
args?: PaginateOptions<AdditionalPaginateProps, AdditionalPaginateParams>
args?: PaginateOptions<AdditionalPaginateProps, AdditionalPaginateParams>,
) => {
params: Simplify<
{
@ -2755,7 +2755,7 @@ interface AstroSharedContext<
TInputSchema extends ActionInputSchema<TAccept>,
TAction extends ActionClient<unknown, TAccept, TInputSchema>,
>(
action: TAction
action: TAction,
) => ActionReturnType<TAction> | undefined;
/**
* Call action handler from the server.
@ -2769,7 +2769,7 @@ interface AstroSharedContext<
| ActionClient<TOutput, TAccept, TInputSchema>['orThrow'],
>(
action: TAction,
input: Parameters<TAction>[0]
input: Parameters<TAction>[0],
) => Promise<ActionReturnType<TAction>>;
/**
* Route parameters for this request if this is a dynamic route.
@ -3142,7 +3142,7 @@ export type RewritePayload = string | URL | Request;
export type MiddlewareNext = (rewritePayload?: RewritePayload) => Promise<Response>;
export type MiddlewareHandler = (
context: APIContext,
next: MiddlewareNext
next: MiddlewareNext,
) => Promise<Response> | Response | Promise<void> | void;
// NOTE: when updating this file with other functions,
@ -3258,7 +3258,7 @@ export interface SSRResult {
createAstro(
Astro: AstroGlobalPartial,
props: Record<string, any>,
slots: Record<string, any> | null
slots: Record<string, any> | null,
): AstroGlobal;
params: Params;
resolve: (s: string) => Promise<string>;
@ -3326,7 +3326,7 @@ export interface PreviewServerParams {
}
export type CreatePreviewServer = (
params: PreviewServerParams
params: PreviewServerParams,
) => PreviewServer | Promise<PreviewServer>;
export interface PreviewModule {
@ -3351,7 +3351,7 @@ type DirectiveOptions = {
export type ClientDirective = (
load: DirectiveLoad,
options: DirectiveOptions,
el: HTMLElement
el: HTMLElement,
) => void;
export interface ClientDirectiveConfig {
@ -3399,7 +3399,7 @@ export type DevToolbarApp = {
init?(
canvas: ShadowRoot,
app: ToolbarAppEventTarget,
server: ToolbarServerHelpers
server: ToolbarServerHelpers,
): void | Promise<void>;
beforeTogglingOff?(canvas: ShadowRoot): boolean | Promise<boolean>;
};
@ -3464,7 +3464,7 @@ declare global {
// Container types
export type ContainerImportRendererFn = (
containerRenderer: ContainerRenderer
containerRenderer: ContainerRenderer,
) => Promise<SSRLoadedRenderer>;
export type ContainerRenderer = {

View file

@ -31,7 +31,7 @@ export default function astroActions({
}
const stringifiedActionsImport = JSON.stringify(
viteID(new URL('./actions', params.config.srcDir))
viteID(new URL('./actions', params.config.srcDir)),
);
params.updateConfig({
vite: {
@ -75,7 +75,7 @@ export function vitePluginUserActions({ settings }: { settings: AstroSettings })
}
if (id === VIRTUAL_INTERNAL_MODULE_ID) {
const resolvedModule = await this.resolve(
`${decodeURI(new URL('actions', settings.config.srcDir).pathname)}`
`${decodeURI(new URL('actions', settings.config.srcDir).pathname)}`,
);
if (!resolvedModule) {
@ -109,7 +109,7 @@ const vitePluginActions = (fs: typeof fsMod): VitePlugin => ({
let code = await fs.promises.readFile(
new URL('../../templates/actions.mjs', import.meta.url),
'utf-8'
'utf-8',
);
if (opts?.ssr) {
code += `\nexport * from 'astro/actions/runtime/virtual/server.js';`;

View file

@ -35,7 +35,7 @@ export const onRequest = defineMiddleware(async (context, next) => {
// eslint-disable-next-line no-console
console.warn(
yellow('[astro:actions]'),
'POST requests should not be sent to prerendered pages. If you\'re using Actions, disable prerendering with `export const prerender = "false".'
'POST requests should not be sent to prerendered pages. If you\'re using Actions, disable prerendering with `export const prerender = "false".',
);
return next();
}

View file

@ -10,5 +10,5 @@ export const z = new Proxy(
get() {
throw new Error('[astro:action] `z` unexpectedly used on the client.');
},
}
},
);

View file

@ -7,7 +7,7 @@ import type { ActionAccept, ActionClient } from './server.js';
* the user's `src/actions/index.ts` file at build-time.
*/
export async function getAction(
path: string
path: string,
): Promise<ActionClient<unknown, ActionAccept, ZodType> | undefined> {
const pathKeys = path.replace('/_actions/', '').split('.');
// @ts-expect-error virtual module

View file

@ -25,7 +25,7 @@ export type ActionClient<
TInputSchema extends ActionInputSchema<TAccept> | undefined,
> = TInputSchema extends z.ZodType
? ((
input: TAccept extends 'form' ? FormData : z.input<TInputSchema>
input: TAccept extends 'form' ? FormData : z.input<TInputSchema>,
) => Promise<
SafeResult<
z.input<TInputSchema> extends ErrorInferenceObject
@ -36,7 +36,7 @@ export type ActionClient<
>) & {
queryString: string;
orThrow: (
input: TAccept extends 'form' ? FormData : z.input<TInputSchema>
input: TAccept extends 'form' ? FormData : z.input<TInputSchema>,
) => Promise<Awaited<TOutput>>;
}
: (input?: any) => Promise<SafeResult<never, Awaited<TOutput>>> & {
@ -85,7 +85,7 @@ export function defineAction<
function getFormServerHandler<TOutput, TInputSchema extends ActionInputSchema<'form'>>(
handler: ActionHandler<TInputSchema, TOutput>,
inputSchema?: TInputSchema
inputSchema?: TInputSchema,
) {
return async (unparsedInput: unknown, context: ActionAPIContext): Promise<Awaited<TOutput>> => {
if (!(unparsedInput instanceof FormData)) {
@ -107,7 +107,7 @@ function getFormServerHandler<TOutput, TInputSchema extends ActionInputSchema<'f
function getJsonServerHandler<TOutput, TInputSchema extends ActionInputSchema<'json'>>(
handler: ActionHandler<TInputSchema, TOutput>,
inputSchema?: TInputSchema
inputSchema?: TInputSchema,
) {
return async (unparsedInput: unknown, context: ActionAPIContext): Promise<Awaited<TOutput>> => {
if (unparsedInput instanceof FormData) {
@ -129,7 +129,7 @@ function getJsonServerHandler<TOutput, TInputSchema extends ActionInputSchema<'j
/** Transform form data to an object based on a Zod schema. */
export function formDataToObject<T extends z.AnyZodObject>(
formData: FormData,
schema: T
schema: T,
): Record<string, unknown> {
const obj: Record<string, unknown> = {};
for (const [key, baseValidator] of Object.entries(schema.shape)) {
@ -151,7 +151,7 @@ export function formDataToObject<T extends z.AnyZodObject>(
function handleFormDataGetAll(
key: string,
formData: FormData,
validator: z.ZodArray<z.ZodUnknown>
validator: z.ZodArray<z.ZodUnknown>,
) {
const entries = Array.from(formData.getAll(key));
const elementValidator = validator._def.type;
@ -167,7 +167,7 @@ function handleFormDataGet(
key: string,
formData: FormData,
validator: unknown,
baseValidator: unknown
baseValidator: unknown,
) {
const value = formData.get(key);
if (!value) {

View file

@ -41,7 +41,7 @@ const codeToStatusMap: Record<ActionErrorCode, number> = {
const statusToCodeMap: Record<number, ActionErrorCode> = Object.entries(codeToStatusMap).reduce(
// reverse the key-value pairs
(acc, [key, value]) => ({ ...acc, [value]: key }),
{}
{},
);
// T is used for error inference with SafeInput -> isInputError.
@ -92,11 +92,11 @@ export function isActionError(error?: unknown): error is ActionError {
}
export function isInputError<T extends ErrorInferenceObject>(
error?: ActionError<T>
error?: ActionError<T>,
): error is ActionInputError<T>;
export function isInputError(error?: unknown): error is ActionInputError<ErrorInferenceObject>;
export function isInputError<T extends ErrorInferenceObject>(
error?: unknown | ActionError<T>
error?: unknown | ActionError<T>,
): error is ActionInputError<T> {
return (
typeof error === 'object' &&
@ -146,7 +146,7 @@ export class ActionInputError<T extends ErrorInferenceObject> extends ActionErro
}
export async function callSafely<TOutput>(
handler: () => MaybePromise<TOutput>
handler: () => MaybePromise<TOutput>,
): Promise<SafeResult<z.ZodType, TOutput>> {
try {
const data = await handler();

View file

@ -48,7 +48,7 @@ type ImageData = { data: Uint8Array; expires: number };
export async function prepareAssetsGenerationEnv(
pipeline: BuildPipeline,
totalCount: number
totalCount: number,
): Promise<AssetEnv> {
const { config, logger } = pipeline;
let useCache = true;
@ -61,7 +61,7 @@ export async function prepareAssetsGenerationEnv(
} catch (err) {
logger.warn(
null,
`An error was encountered while creating the cache directory. Proceeding without caching. Error: ${err}`
`An error was encountered while creating the cache directory. Proceeding without caching. Error: ${err}`,
);
useCache = false;
}
@ -96,7 +96,7 @@ export async function generateImagesForPath(
originalFilePath: string,
transformsAndPath: MapValue<AssetsGlobalStaticImagesList>,
env: AssetEnv,
queue: PQueue
queue: PQueue,
) {
const originalImageData = await loadImage(originalFilePath, env);
@ -119,7 +119,7 @@ export async function generateImagesForPath(
if (transformsAndPath.originalSrcPath) {
env.logger.debug(
'assets',
`Deleting ${originalFilePath} as it's not referenced outside of image processing.`
`Deleting ${originalFilePath} as it's not referenced outside of image processing.`,
);
await fs.promises.unlink(getFullImagePath(originalFilePath, env));
}
@ -131,7 +131,7 @@ export async function generateImagesForPath(
async function generateImage(
originalImage: ImageData,
filepath: string,
options: ImageTransform
options: ImageTransform,
) {
const timeStart = performance.now();
const generationData = await generateImageInternal(originalImage, filepath, options);
@ -145,7 +145,7 @@ export async function generateImagesForPath(
const count = `(${env.count.current}/${env.count.total})`;
env.logger.info(
null,
` ${green('▶')} ${filepath} ${dim(statsText)} ${dim(timeIncrease)} ${dim(count)}`
` ${green('▶')} ${filepath} ${dim(statsText)} ${dim(timeIncrease)} ${dim(count)}`,
);
env.count.current++;
}
@ -153,7 +153,7 @@ export async function generateImagesForPath(
async function generateImageInternal(
originalImage: ImageData,
filepath: string,
options: ImageTransform
options: ImageTransform,
): Promise<GenerationData> {
const isLocalImage = isESMImportedImage(options.src);
const finalFileURL = new URL('.' + filepath, env.clientRoot);
@ -177,7 +177,7 @@ export async function generateImagesForPath(
await fs.promises.unlink(cachedFileURL);
throw new Error(
`Malformed cache entry for ${filepath}, cache will be regenerated for this file.`
`Malformed cache entry for ${filepath}, cache will be regenerated for this file.`,
);
}
@ -219,7 +219,7 @@ export async function generateImagesForPath(
await imageService.transform(
originalImage.data,
{ ...options, src: originalImagePath },
env.imageConfig
env.imageConfig,
)
).data;
} catch (e) {
@ -228,7 +228,7 @@ export async function generateImagesForPath(
...AstroErrorData.CouldNotTransformImage,
message: AstroErrorData.CouldNotTransformImage.message(originalFilePath),
},
{ cause: e }
{ cause: e },
);
throw error;
@ -245,14 +245,14 @@ export async function generateImagesForPath(
JSON.stringify({
data: Buffer.from(resultData.data).toString('base64'),
expires: resultData.expires,
})
}),
);
}
}
} catch (e) {
env.logger.warn(
null,
`An error was encountered while creating the cache directory. Proceeding without caching. Error: ${e}`
`An error was encountered while creating the cache directory. Proceeding without caching. Error: ${e}`,
);
} finally {
// Write the final file

View file

@ -8,7 +8,7 @@ export async function loadRemoteImage(src: string) {
if (!res.ok) {
throw new Error(
`Failed to load remote image ${src}. The request did not return a 200 OK response. (received ${res.status}))`
`Failed to load remote image ${src}. The request did not return a 200 OK response. (received ${res.status}))`,
);
}

View file

@ -60,7 +60,7 @@ export const GET: APIRoute = async ({ request }) => {
const { data, format } = await imageService.transform(
new Uint8Array(inputBuffer),
transform,
imageConfig
imageConfig,
);
return new Response(data, {

View file

@ -83,7 +83,7 @@ export const GET: APIRoute = async ({ request }) => {
if (!transform?.src) {
const err = new Error(
'Incorrect transform returned by `parseURL`. Expected a transform with a `src` property.'
'Incorrect transform returned by `parseURL`. Expected a transform with a `src` property.',
);
console.error('Could not parse image transform from URL:', err);
return new Response('Internal Server Error', { status: 500 });
@ -122,7 +122,7 @@ export const GET: APIRoute = async ({ request }) => {
import.meta.env.DEV ? `Could not process image request: ${err}` : `Internal Server Error`,
{
status: 500,
}
},
);
}
};

View file

@ -33,7 +33,7 @@ export async function getConfiguredImageService(): Promise<ImageService> {
export async function getImage(
options: UnresolvedImageTransform,
imageConfig: AstroConfig['image']
imageConfig: AstroConfig['image'],
): Promise<GetImageResult> {
if (!options || typeof options !== 'object') {
throw new AstroError({
@ -47,7 +47,7 @@ export async function getImage(
message: AstroErrorData.ExpectedImage.message(
options.src,
'undefined',
JSON.stringify(options)
JSON.stringify(options),
),
});
}
@ -101,7 +101,7 @@ export async function getImage(
url: await service.getURL(srcSet.transform, imageConfig),
descriptor: srcSet.descriptor,
attributes: srcSet.attributes,
}))
})),
);
if (
@ -113,7 +113,7 @@ export async function getImage(
imageURL = globalThis.astroAsset.addStaticImage(
validatedOptions,
propsToHash,
originalFilePath
originalFilePath,
);
srcSets = srcSetTransforms.map((srcSet) => ({
transform: srcSet.transform,

View file

@ -47,7 +47,7 @@ interface SharedServiceProps<T extends Record<string, any> = Record<string, any>
*/
getSrcSet?: (
options: ImageTransform,
imageConfig: ImageConfig<T>
imageConfig: ImageConfig<T>,
) => UnresolvedSrcSetValue[] | Promise<UnresolvedSrcSetValue[]>;
/**
* Return any additional HTML attributes separate from `src` that your service requires to show the image properly.
@ -57,7 +57,7 @@ interface SharedServiceProps<T extends Record<string, any> = Record<string, any>
*/
getHTMLAttributes?: (
options: ImageTransform,
imageConfig: ImageConfig<T>
imageConfig: ImageConfig<T>,
) => Record<string, any> | Promise<Record<string, any>>;
/**
* Validate and return the options passed by the user.
@ -69,7 +69,7 @@ interface SharedServiceProps<T extends Record<string, any> = Record<string, any>
*/
validateOptions?: (
options: ImageTransform,
imageConfig: ImageConfig<T>
imageConfig: ImageConfig<T>,
) => ImageTransform | Promise<ImageTransform>;
}
@ -90,7 +90,7 @@ export interface LocalImageService<T extends Record<string, any> = Record<string
*/
parseURL: (
url: URL,
imageConfig: ImageConfig<T>
imageConfig: ImageConfig<T>,
) => LocalImageTransform | undefined | Promise<LocalImageTransform> | Promise<undefined>;
/**
* Performs the image transformations on the input image and returns both the binary data and
@ -99,7 +99,7 @@ export interface LocalImageService<T extends Record<string, any> = Record<string
transform: (
inputBuffer: Uint8Array,
transform: LocalImageTransform,
imageConfig: ImageConfig<T>
imageConfig: ImageConfig<T>,
) => Promise<{ data: Uint8Array; format: ImageOutputFormat }>;
/**
@ -148,7 +148,7 @@ export const baseService: Omit<LocalImageService, 'transform'> = {
message: AstroErrorData.ExpectedImage.message(
JSON.stringify(options.src),
typeof options.src,
JSON.stringify(options, (_, v) => (v === undefined ? null : v))
JSON.stringify(options, (_, v) => (v === undefined ? null : v)),
),
});
}
@ -188,7 +188,7 @@ export const baseService: Omit<LocalImageService, 'transform'> = {
message: AstroErrorData.UnsupportedImageFormat.message(
options.src.format,
options.src.src,
VALID_SUPPORTED_FORMATS
VALID_SUPPORTED_FORMATS,
),
});
}
@ -281,14 +281,14 @@ export const baseService: Omit<LocalImageService, 'transform'> = {
...densityWidths.map((width, index) => ({
maxTargetWidth: Math.min(width, maxWidth),
descriptor: `${densityValues[index]}x` as const,
}))
})),
);
} else if (widths) {
allWidths.push(
...widths.map((width) => ({
maxTargetWidth: Math.min(width, maxWidth),
descriptor: `${width}w` as const,
}))
})),
);
}

View file

@ -31,7 +31,7 @@ const qualityTable: Record<
async function getRotationForEXIF(
inputBuffer: Uint8Array,
src?: string
src?: string,
): Promise<Operation | undefined> {
const meta = await imageMetadata(inputBuffer, src);
if (!meta) return undefined;

View file

@ -4,7 +4,7 @@ import { lookup as probe } from '../utils/vendor/image-size/lookup.js';
export async function imageMetadata(
data: Uint8Array,
src?: string
src?: string,
): Promise<Omit<ImageMetadata, 'src' | 'fsPath'>> {
try {
const result = probe(data);

View file

@ -14,7 +14,7 @@ export async function emitESMImage(
_watchMode: boolean,
// FIX: in Astro 5, this function should not be passed in dev mode at all.
// Or rethink the API so that a function that throws isn't passed through.
fileEmitter?: FileEmitter
fileEmitter?: FileEmitter,
): Promise<ImageMetadata | undefined> {
if (!id) {
return undefined;

View file

@ -1,7 +1,7 @@
import type { ImageInputFormat, ImageMetadata } from '../types.js';
export function getOrigQueryParams(
params: URLSearchParams
params: URLSearchParams,
): Pick<ImageMetadata, 'width' | 'height' | 'format'> | undefined {
const width = params.get('origWidth');
const height = params.get('origHeight');

View file

@ -70,7 +70,7 @@ export function isRemoteAllowed(
{
domains = [],
remotePatterns = [],
}: Partial<Pick<AstroConfig['image'], 'domains' | 'remotePatterns'>>
}: Partial<Pick<AstroConfig['image'], 'domains' | 'remotePatterns'>>,
): boolean {
if (!isRemotePath(src)) return false;

View file

@ -18,7 +18,7 @@ export function propsToFilename(filePath: string, transform: ImageTransform, has
export function hashTransform(
transform: ImageTransform,
imageService: string,
propertiesToHash: string[]
propertiesToHash: string[],
) {
// Extract the fields we want to hash
const hashFields = propertiesToHash.reduce(
@ -28,7 +28,7 @@ export function hashTransform(
acc[prop] = transform[prop];
return acc;
},
{ imageService } as Record<string, unknown>
{ imageService } as Record<string, unknown>,
);
return shorthash(deterministicString(hashFields));
}

View file

@ -25,7 +25,7 @@ const resolvedVirtualModuleId = '\0' + VIRTUAL_MODULE_ID;
const assetRegex = new RegExp(`\\.(${VALID_INPUT_FORMATS.join('|')})`, 'i');
const assetRegexEnds = new RegExp(`\\.(${VALID_INPUT_FORMATS.join('|')})$`, 'i');
const addStaticImageFactory = (
settings: AstroSettings
settings: AstroSettings,
): typeof globalThis.astroAsset.addStaticImage => {
return (options, hashProperties, originalFSPath) => {
if (!globalThis.astroAsset.staticImages) {
@ -46,7 +46,7 @@ const addStaticImageFactory = (
// This is the path to the original image, from the dist root, without the base or the asset prefix (e.g. /_astro/image.hash.png)
const finalOriginalPath = removeBase(
removeBase(ESMImportedImageSrc, settings.config.base),
assetPrefix
assetPrefix,
);
const hash = hashTransform(options, settings.config.image.service.entrypoint, hashProperties);
@ -62,8 +62,8 @@ const addStaticImageFactory = (
finalFilePath = prependForwardSlash(
joinPaths(
isESMImportedImage(options.src) ? '' : settings.config.build.assets,
prependForwardSlash(propsToFilename(finalOriginalPath, options, hash))
)
prependForwardSlash(propsToFilename(finalOriginalPath, options, hash)),
),
);
if (!transformsForPath) {
@ -146,11 +146,11 @@ export default function assets({
new URL(
isServerLikeOutput(settings.config)
? settings.config.build.client
: settings.config.outDir
)
: settings.config.outDir,
),
)});
export const assetsDir = /* #__PURE__ */ new URL(${JSON.stringify(
settings.config.build.assets
settings.config.build.assets,
)}, outDir);
export const getImage = async (options) => await getImageInternal(options, imageConfig);
`;
@ -235,7 +235,7 @@ export default function assets({
if (options?.ssr) {
return `export default ${getProxyCode(
imageMetadata,
isServerLikeOutput(settings.config)
isServerLikeOutput(settings.config),
)}`;
} else {
globalThis.astroAsset.referencedImages.add(imageMetadata.fsPath);

View file

@ -12,7 +12,7 @@ export function ensureImport(root: t.File, importDeclaration: t.ImportDeclaratio
if (specifier.local.name === specifierToFind.local.name) {
specifiersToFind.splice(i, 1);
}
})
}),
);
}
},

View file

@ -191,9 +191,9 @@ export async function add(names: string[], { flags }: AddOptions) {
'SKIP_FORMAT',
`\n ${magenta(
`Astro will scaffold ${green('./db/config.ts')}${magenta(' and ')}${green(
'./db/seed.ts'
)}${magenta(' files.')}`
)}\n`
'./db/seed.ts',
)}${magenta(' files.')}`,
)}\n`,
);
if (await askToContinue({ flags })) {
@ -205,7 +205,7 @@ export async function add(names: string[], { flags }: AddOptions) {
} else {
logger.info(
'SKIP_FORMAT',
`\n Astro DB requires additional configuration. Please refer to https://astro.build/db/config`
`\n Astro DB requires additional configuration. Please refer to https://astro.build/db/config`,
);
}
} else {
@ -235,8 +235,8 @@ export async function add(names: string[], { flags }: AddOptions) {
'SKIP_FORMAT',
msg.cancelled(
`Dependencies ${bold('NOT')} installed.`,
`Be sure to install them manually before continuing!`
)
`Be sure to install them manually before continuing!`,
),
);
break;
}
@ -273,8 +273,8 @@ export async function add(names: string[], { flags }: AddOptions) {
ast,
t.importDeclaration(
[t.importSpecifier(defineConfig, defineConfig)],
t.stringLiteral('astro/config')
)
t.stringLiteral('astro/config'),
),
);
wrapDefaultExport(ast, defineConfig);
@ -290,9 +290,9 @@ export async function add(names: string[], { flags }: AddOptions) {
'SKIP_FORMAT',
`\n ${magenta(
`Check our deployment docs for ${bold(
integration.packageName
)} to update your "adapter" config.`
)}`
integration.packageName,
)} to update your "adapter" config.`,
)}`,
);
}
} else {
@ -326,7 +326,7 @@ export async function add(names: string[], { flags }: AddOptions) {
case UpdateResult.cancelled: {
logger.info(
'SKIP_FORMAT',
msg.cancelled(`Your configuration has ${bold('NOT')} been updated.`)
msg.cancelled(`Your configuration has ${bold('NOT')} been updated.`),
);
break;
}
@ -338,7 +338,7 @@ export async function add(names: string[], { flags }: AddOptions) {
.then((res) => JSON.parse(res.toString()));
const deps = Object.keys(Object.assign(dependencies, devDependencies));
const missingDeps = integrations.filter(
(integration) => !deps.includes(integration.packageName)
(integration) => !deps.includes(integration.packageName),
);
if (missingDeps.length === 0) {
logger.info('SKIP_FORMAT', msg.success(`Configuration up-to-date.`));
@ -356,8 +356,8 @@ export async function add(names: string[], { flags }: AddOptions) {
msg.success(
`Added the following integration${
integrations.length === 1 ? '' : 's'
} to your project:\n${list}`
)
} to your project:\n${list}`,
),
);
}
}
@ -371,13 +371,13 @@ export async function add(names: string[], { flags }: AddOptions) {
case UpdateResult.cancelled: {
logger.info(
'SKIP_FORMAT',
msg.cancelled(`Your TypeScript configuration has ${bold('NOT')} been updated.`)
msg.cancelled(`Your TypeScript configuration has ${bold('NOT')} been updated.`),
);
break;
}
case UpdateResult.failure: {
throw new Error(
`Unknown error parsing tsconfig.json or jsconfig.json. Could not update TypeScript settings.`
`Unknown error parsing tsconfig.json or jsconfig.json. Could not update TypeScript settings.`,
);
}
default:
@ -386,7 +386,7 @@ export async function add(names: string[], { flags }: AddOptions) {
}
function isAdapter(
integration: IntegrationInfo
integration: IntegrationInfo,
): integration is IntegrationInfo & { type: 'adapter' } {
return integration.type === 'adapter';
}
@ -445,8 +445,8 @@ async function addIntegration(ast: t.File, integration: IntegrationInfo) {
ast,
t.importDeclaration(
[t.importDefaultSpecifier(integrationId)],
t.stringLiteral(integration.packageName)
)
t.stringLiteral(integration.packageName),
),
);
visit(ast, {
@ -472,7 +472,7 @@ async function addIntegration(ast: t.File, integration: IntegrationInfo) {
if (!integrationsProp) {
configObject.properties.push(
t.objectProperty(t.identifier('integrations'), t.arrayExpression([integrationCall]))
t.objectProperty(t.identifier('integrations'), t.arrayExpression([integrationCall])),
);
return;
}
@ -484,7 +484,7 @@ async function addIntegration(ast: t.File, integration: IntegrationInfo) {
(expr) =>
t.isCallExpression(expr) &&
t.isIdentifier(expr.callee) &&
expr.callee.name === integrationId.name
expr.callee.name === integrationId.name,
);
if (existingIntegrationCall) return;
@ -499,7 +499,7 @@ async function setAdapter(ast: t.File, adapter: IntegrationInfo, exportName: str
ensureImport(
ast,
t.importDeclaration([t.importDefaultSpecifier(adapterId)], t.stringLiteral(exportName))
t.importDeclaration([t.importDefaultSpecifier(adapterId)], t.stringLiteral(exportName)),
);
visit(ast, {
@ -523,7 +523,7 @@ async function setAdapter(ast: t.File, adapter: IntegrationInfo, exportName: str
if (!outputProp) {
configObject.properties.push(
t.objectProperty(t.identifier('output'), t.stringLiteral('server'))
t.objectProperty(t.identifier('output'), t.stringLiteral('server')),
);
}
@ -610,7 +610,7 @@ async function updateAstroConfig({
logger.info(
'SKIP_FORMAT',
`\n ${magenta('Astro will make the following changes to your config file:')}\n${message}`
`\n ${magenta('Astro will make the following changes to your config file:')}\n${message}`,
);
if (logAdapterInstructions) {
@ -618,9 +618,9 @@ async function updateAstroConfig({
'SKIP_FORMAT',
magenta(
` For complete deployment options, visit\n ${bold(
'https://docs.astro.build/en/guides/deploy/'
)}\n`
)
'https://docs.astro.build/en/guides/deploy/',
)}\n`,
),
);
}
@ -669,7 +669,7 @@ async function getInstallIntegrationsCommand({
}
async function convertIntegrationsToInstallSpecifiers(
integrations: IntegrationInfo[]
integrations: IntegrationInfo[],
): Promise<string[]> {
const ranges: Record<string, string> = {};
for (let { packageName, dependencies } of integrations) {
@ -679,7 +679,7 @@ async function convertIntegrationsToInstallSpecifiers(
}
}
return Promise.all(
Object.entries(ranges).map(([name, range]) => resolveRangeToInstallSpecifier(name, range))
Object.entries(ranges).map(([name, range]) => resolveRangeToInstallSpecifier(name, range)),
);
}
@ -749,8 +749,8 @@ async function tryToInstallIntegrations({
logger.info(
'SKIP_FORMAT',
`\n ${magenta('Astro will run the following command:')}\n ${dim(
'If you skip this step, you can always run it yourself later'
)}\n${message}`
'If you skip this step, you can always run it yourself later',
)}\n${message}`,
);
if (await askToContinue({ flags })) {
@ -768,7 +768,7 @@ async function tryToInstallIntegrations({
cwd,
// reset NODE_ENV to ensure install command run in dev mode
env: { NODE_ENV: undefined },
}
},
);
spinner.succeed();
return UpdateResult.updated;
@ -817,8 +817,8 @@ async function validateIntegrations(integrations: string[]): Promise<Integration
if (!response.askToContinue) {
throw new Error(
`No problem! Find our official integrations at ${cyan(
'https://astro.build/integrations'
)}`
'https://astro.build/integrations',
)}`,
);
}
spinner.start('Resolving with third party packages...');
@ -867,15 +867,15 @@ async function validateIntegrations(integrations: string[]): Promise<Integration
} else {
throw new Error(
`${bold(
packageName
packageName,
)} doesn't appear to be an integration or an adapter. Find our official integrations at ${cyan(
'https://astro.build/integrations'
)}`
'https://astro.build/integrations',
)}`,
);
}
return { id: integration, packageName, dependencies, type: integrationType };
})
}),
);
spinner.succeed();
return integrationEntries;
@ -893,13 +893,13 @@ async function updateTSConfig(
cwd = process.cwd(),
logger: Logger,
integrationsInfo: IntegrationInfo[],
flags: yargs.Arguments
flags: yargs.Arguments,
): Promise<UpdateResult> {
const integrations = integrationsInfo.map(
(integration) => integration.id as frameworkWithTSSettings
(integration) => integration.id as frameworkWithTSSettings,
);
const firstIntegrationWithTSSettings = integrations.find((integration) =>
presets.has(integration)
presets.has(integration),
);
if (!firstIntegrationWithTSSettings) {
@ -926,7 +926,7 @@ async function updateTSConfig(
const outputConfig = updateTSConfigForFramework(
inputConfig.rawConfig,
firstIntegrationWithTSSettings
firstIntegrationWithTSSettings,
);
const output = JSON.stringify(outputConfig, null, 2);
@ -945,7 +945,7 @@ async function updateTSConfig(
logger.info(
'SKIP_FORMAT',
`\n ${magenta(`Astro will make the following changes to your ${configFileName}:`)}\n${message}`
`\n ${magenta(`Astro will make the following changes to your ${configFileName}:`)}\n${message}`,
);
// Every major framework, apart from Vue and Svelte requires different `jsxImportSource`, as such it's impossible to config
@ -961,11 +961,11 @@ async function updateTSConfig(
'SKIP_FORMAT',
red(
` ${bold(
'Caution:'
'Caution:',
)} Selected UI frameworks require conflicting tsconfig.json settings, as such only settings for ${bold(
firstIntegrationWithTSSettings
)} were used.\n More information: https://docs.astro.build/en/guides/typescript/#errors-typing-multiple-jsx-frameworks-at-the-same-time\n`
)
firstIntegrationWithTSSettings,
)} were used.\n More information: https://docs.astro.build/en/guides/typescript/#errors-typing-multiple-jsx-frameworks-at-the-same-time\n`,
),
);
}
@ -1046,7 +1046,7 @@ async function setupIntegrationConfig(opts: {
}) {
const logger = opts.logger;
const possibleConfigFiles = opts.possibleConfigFiles.map((p) =>
fileURLToPath(new URL(p, opts.root))
fileURLToPath(new URL(p, opts.root)),
);
let alreadyConfigured = false;
for (const possibleConfigPath of possibleConfigFiles) {
@ -1058,7 +1058,7 @@ async function setupIntegrationConfig(opts: {
if (!alreadyConfigured) {
logger.info(
'SKIP_FORMAT',
`\n ${magenta(`Astro will generate a minimal ${bold(opts.defaultConfigFile)} file.`)}\n`
`\n ${magenta(`Astro will generate a minimal ${bold(opts.defaultConfigFile)} file.`)}\n`,
);
if (await askToContinue({ flags: opts.flags })) {
await fs.writeFile(
@ -1066,7 +1066,7 @@ async function setupIntegrationConfig(opts: {
opts.defaultConfigContent,
{
encoding: 'utf-8',
}
},
);
logger.debug('add', `Generated default ${opts.defaultConfigFile} file`);
}

View file

@ -12,14 +12,14 @@ export async function check(flags: Arguments) {
'@astrojs/check',
logger,
getPackageOpts,
['typescript']
['typescript'],
);
const typescript = await getPackage('typescript', logger, getPackageOpts);
if (!checkPackage || !typescript) {
logger.error(
'check',
'The `@astrojs/check` and `typescript` packages are required for this command to work. Please manually install them into your project and try again.'
'The `@astrojs/check` and `typescript` packages are required for this command to work. Please manually install them into your project and try again.',
);
return;
}

View file

@ -18,7 +18,7 @@ export async function db({ flags }: { flags: Arguments }) {
if (!dbPackage) {
logger.error(
'check',
'The `@astrojs/db` package is required for this command to work. Please manually install it in your project and try again.'
'The `@astrojs/db` package is required for this command to work. Please manually install it in your project and try again.',
);
return;
}

View file

@ -23,7 +23,7 @@ export async function dev({ flags }: DevOptions) {
],
},
description: `Check ${cyan(
'https://docs.astro.build/en/reference/cli-reference/#astro-dev'
'https://docs.astro.build/en/reference/cli-reference/#astro-dev',
)} for more information.`,
});
return;

View file

@ -21,7 +21,7 @@ const getPlatformSpecificCommand = (): [string] | [string, string[]] => {
return ['/ide/bin/remote-cli/gitpod-code', ['--openExternal']];
default:
throw new Error(
`It looks like your platform ("${platform}") isn't supported!\nTo view Astro's docs, please visit https://docs.astro.build`
`It looks like your platform ("${platform}") isn't supported!\nTo view Astro's docs, please visit https://docs.astro.build`,
);
}
};

View file

@ -93,7 +93,7 @@ async function copyToClipboard(text: string) {
});
} catch {
console.error(
colors.red(`\nSorry, something went wrong!`) + ` Please copy the text above manually.`
colors.red(`\nSorry, something went wrong!`) + ` Please copy the text above manually.`,
);
}
}

View file

@ -21,7 +21,7 @@ export async function getPackage<T>(
packageName: string,
logger: Logger,
options: GetPackageOptions,
otherDeps: string[] = []
otherDeps: string[] = [],
): Promise<T | undefined> {
try {
// Try to resolve with `createRequire` first to prevent ESM caching of the package
@ -32,7 +32,7 @@ export async function getPackage<T>(
} catch {
if (options.optional) return undefined;
let message = `To continue, Astro requires the following dependency to be installed: ${bold(
packageName
packageName,
)}.`;
if (ci.isCI) {
@ -98,7 +98,7 @@ export async function getExecCommand(packageManager?: string): Promise<string> {
async function installPackage(
packageNames: string[],
options: GetPackageOptions,
logger: Logger
logger: Logger,
): Promise<boolean> {
const cwd = options.cwd ?? process.cwd();
const packageManager = (await whichPm(cwd))?.name ?? 'npm';
@ -120,8 +120,8 @@ async function installPackage(
logger.info(
'SKIP_FORMAT',
`\n ${magenta('Astro will run the following command:')}\n ${dim(
'If you skip this step, you can always run it yourself later'
)}\n${message}`
'If you skip this step, you can always run it yourself later',
)}\n${message}`,
);
let response;
@ -144,7 +144,7 @@ async function installPackage(
await execa(
installCommand.pm,
[installCommand.command, ...installCommand.flags, ...installCommand.dependencies],
{ cwd: cwd }
{ cwd: cwd },
);
spinner.succeed();
@ -163,7 +163,7 @@ async function installPackage(
export async function fetchPackageJson(
scope: string | undefined,
name: string,
tag: string
tag: string,
): Promise<Record<string, any> | Error> {
const packageName = `${scope ? `${scope}/` : ''}${name}`;
const registry = await getRegistry();

View file

@ -43,7 +43,7 @@ export async function preferences(
subcommand: string,
key: string,
value: string | undefined,
{ flags }: PreferencesOptions
{ flags }: PreferencesOptions,
): Promise<number> {
applyPolyfill();
if (!isValidSubcommand(subcommand) || flags?.help || flags?.h) {
@ -98,8 +98,8 @@ export async function preferences(
console.error(
msg.formatErrorMessage(
collectErrorMetadata(new Error(`Please provide a ${type} value for "${key}"`)),
true
)
true,
),
);
return 1;
}
@ -128,7 +128,7 @@ interface SubcommandOptions {
async function getPreference(
settings: AstroSettings,
key: PreferenceKey,
{ location = 'project' }: SubcommandOptions
{ location = 'project' }: SubcommandOptions,
) {
try {
let value = await settings.preferences.get(key, { location });
@ -155,7 +155,7 @@ async function setPreference(
settings: AstroSettings,
key: PreferenceKey,
value: unknown,
{ location }: SubcommandOptions
{ location }: SubcommandOptions,
) {
try {
const defaultType = typeof dlv(DEFAULT_PREFERENCES, key);
@ -178,7 +178,7 @@ async function setPreference(
async function enablePreference(
settings: AstroSettings,
key: PreferenceKey,
{ location }: SubcommandOptions
{ location }: SubcommandOptions,
) {
try {
await settings.preferences.set(key, true, { location });
@ -191,7 +191,7 @@ async function enablePreference(
async function disablePreference(
settings: AstroSettings,
key: PreferenceKey,
{ location }: SubcommandOptions
{ location }: SubcommandOptions,
) {
try {
await settings.preferences.set(key, false, { location });
@ -204,7 +204,7 @@ async function disablePreference(
async function resetPreference(
settings: AstroSettings,
key: PreferenceKey,
{ location }: SubcommandOptions
{ location }: SubcommandOptions,
) {
try {
await settings.preferences.set(key, undefined as any, { location });
@ -216,13 +216,13 @@ async function resetPreference(
function annotate(flat: Record<string, any>, annotation: string) {
return Object.fromEntries(
Object.entries(flat).map(([key, value]) => [key, { annotation, value }])
Object.entries(flat).map(([key, value]) => [key, { annotation, value }]),
);
}
function userValues(
flatDefault: Record<string, string | number | boolean>,
flatProject: Record<string, string | number | boolean>,
flatGlobal: Record<string, string | number | boolean>
flatGlobal: Record<string, string | number | boolean>,
) {
const result: AnnotatedValues = {};
for (const key of Object.keys(flatDefault)) {
@ -289,8 +289,8 @@ async function listPreferences(settings: AstroSettings, { location, json }: Subc
) {
console.log(
yellow(
'The dev toolbar is currently disabled. To enable it, set devToolbar: {enabled: true} in your astroConfig file.'
)
'The dev toolbar is currently disabled. To enable it, set devToolbar: {enabled: true} in your astroConfig file.',
),
);
}
@ -327,7 +327,7 @@ function annotatedFormat(mv: AnnotatedValue) {
// this is the real formatting for annotated values
function formatAnnotated(
mv: AnnotatedValue,
style: (value: string | number | boolean) => string = (v) => v.toString()
style: (value: string | number | boolean) => string = (v) => v.toString(),
) {
return mv.annotation ? `${style(mv.value)} ${dim(mv.annotation)}` : style(mv.value);
}
@ -339,28 +339,28 @@ function formatTable(object: Record<string, AnnotatedValue>, columnLabels: [stri
i: number,
a: string,
b: AnnotatedValue,
style: (value: string | number | boolean) => string = (v) => v.toString()
style: (value: string | number | boolean) => string = (v) => v.toString(),
): string {
return `${dim(chars.v)} ${style(a)} ${space(colALength - a.length - 2)} ${dim(
chars.v
chars.v,
)} ${formatAnnotated(b, style)} ${space(colBLength - annotatedFormat(b).length - 3)} ${dim(
chars.v
chars.v,
)}`;
}
const top = dim(
`${chars.topLeft}${chars.h.repeat(colALength + 1)}${chars.hBottom}${chars.h.repeat(
colBLength
)}${chars.topRight}`
colBLength,
)}${chars.topRight}`,
);
const bottom = dim(
`${chars.bottomLeft}${chars.h.repeat(colALength + 1)}${chars.hTop}${chars.h.repeat(
colBLength
)}${chars.bottomRight}`
colBLength,
)}${chars.bottomRight}`,
);
const divider = dim(
`${chars.vRightThick}${chars.hThick.repeat(colALength + 1)}${
chars.hThickCross
}${chars.hThick.repeat(colBLength)}${chars.vLeftThick}`
}${chars.hThick.repeat(colBLength)}${chars.vLeftThick}`,
);
const rows: string[] = [top, formatRow(-1, colA, { value: colB, annotation: '' }, bold), divider];
let i = 0;

View file

@ -23,7 +23,7 @@ export async function preview({ flags }: PreviewOptions) {
],
},
description: `Starts a local server to serve your static dist/ directory. Check ${cyan(
'https://docs.astro.build/en/reference/cli-reference/#astro-preview'
'https://docs.astro.build/en/reference/cli-reference/#astro-preview',
)} for more information.`,
});
return;

View file

@ -8,7 +8,7 @@ export function defineConfig(config: AstroUserConfig) {
export function getViteConfig(
userViteConfig: ViteUserConfig,
inlineAstroConfig: AstroInlineConfig = {}
inlineAstroConfig: AstroInlineConfig = {},
) {
// Return an async Vite config getter which exposes a resolved `mode` and `command`
return async ({ mode, command }: { mode: string; command: 'serve' | 'build' }) => {
@ -48,7 +48,7 @@ export function getViteConfig(
astroContentListenPlugin({ settings, logger, fs }),
],
},
{ settings, logger, mode, sync: false }
{ settings, logger, mode, sync: false },
);
await runHookConfigDone({ settings, logger });
return mergeConfig(viteConfig, userViteConfig);

View file

@ -105,7 +105,7 @@ export type AddClientRenderer = {
function createManifest(
manifest?: AstroContainerManifest,
renderers?: SSRLoadedRenderer[],
middleware?: MiddlewareHandler
middleware?: MiddlewareHandler,
): SSRManifest {
const defaultMiddleware: MiddlewareHandler = (_, next) => {
return next();
@ -274,7 +274,7 @@ export class experimental_AstroContainer {
* @param {AstroContainerOptions=} containerOptions
*/
public static async create(
containerOptions: AstroContainerOptions = {}
containerOptions: AstroContainerOptions = {},
): Promise<experimental_AstroContainer> {
const { streaming = false, manifest, renderers = [], resolve } = containerOptions;
const astroConfig = await validateConfig(ASTRO_CONFIG_DEFAULTS, process.cwd(), 'container');
@ -315,7 +315,7 @@ export class experimental_AstroContainer {
if (!renderer.check || !renderer.renderToStaticMarkup) {
throw new Error(
"The renderer you passed isn't valid. A renderer is usually an object that exposes the `check` and `renderToStaticMarkup` functions.\n" +
"Usually, the renderer is exported by a /server.js entrypoint e.g. `import renderer from '@astrojs/react/server.js'`"
"Usually, the renderer is exported by a /server.js entrypoint e.g. `import renderer from '@astrojs/react/server.js'`",
);
}
if (isNamedRenderer(renderer)) {
@ -362,7 +362,7 @@ export class experimental_AstroContainer {
throw new Error(
'You tried to add the ' +
name +
" client renderer, but its server renderer wasn't added. You must add the server renderer first. Use the `addServerRenderer` function."
" client renderer, but its server renderer wasn't added. You must add the server renderer first. Use the `addServerRenderer` function.",
);
}
const renderer = this.#pipeline.manifest.renderers[rendererIndex];
@ -374,7 +374,7 @@ export class experimental_AstroContainer {
// NOTE: we keep this private via TS instead via `#` so it's still available on the surface, so we can play with it.
// @ematipico: I plan to use it for a possible integration that could help people
private static async createFromManifest(
manifest: SSRManifest
manifest: SSRManifest,
): Promise<experimental_AstroContainer> {
const astroConfig = await validateConfig(ASTRO_CONFIG_DEFAULTS, process.cwd(), 'container');
const container = new experimental_AstroContainer({
@ -431,7 +431,7 @@ export class experimental_AstroContainer {
*/
public async renderToString(
component: AstroComponentFactory,
options: ContainerRenderOptions = {}
options: ContainerRenderOptions = {},
): Promise<string> {
const response = await this.renderToResponse(component, options);
return await response.text();
@ -458,7 +458,7 @@ export class experimental_AstroContainer {
*/
public async renderToResponse(
component: AstroComponentFactory,
options: ContainerRenderOptions = {}
options: ContainerRenderOptions = {},
): Promise<Response> {
const { routeType = 'page', slots } = options;
const request = options?.request ?? new Request('https://example.com/');
@ -510,7 +510,7 @@ export class experimental_AstroContainer {
pattern: getPattern(
segments,
ASTRO_CONFIG_DEFAULTS.base,
ASTRO_CONFIG_DEFAULTS.trailingSlash
ASTRO_CONFIG_DEFAULTS.trailingSlash,
),
prerender: false,
segments,
@ -528,7 +528,7 @@ export class experimental_AstroContainer {
*/
#wrapComponent(
componentFactory: AstroComponentFactory,
params?: Record<string, string | undefined>
params?: Record<string, string | undefined>,
): ComponentInstance {
if (params) {
return {

View file

@ -41,7 +41,7 @@ export class ContainerPipeline extends Pipeline {
renderers,
resolve,
serverLike,
streaming
streaming,
);
}
@ -70,7 +70,7 @@ export class ContainerPipeline extends Pipeline {
async tryRewrite(
payload: RewritePayload,
request: Request
request: Request,
): Promise<[RouteData, ComponentInstance, URL]> {
const [foundRoute, finalUrl] = findRouteToRewrite({
payload,

View file

@ -6,7 +6,7 @@ import { emitESMImage } from '../assets/utils/node/emitAsset.js';
export function createImage(
pluginContext: PluginContext,
shouldEmitFile: boolean,
entryFilePath: string
entryFilePath: string,
) {
return () => {
return z.string().transform(async (imagePath, ctx) => {
@ -14,7 +14,7 @@ export function createImage(
const metadata = (await emitESMImage(
resolvedFilePath,
pluginContext.meta.watchMode,
shouldEmitFile ? pluginContext.emitFile : undefined
shouldEmitFile ? pluginContext.emitFile : undefined,
)) as OmitBrand<ImageMetadata>;
if (!metadata) {

View file

@ -65,15 +65,15 @@ export function createGetCollection({
// eslint-disable-next-line no-console
console.warn(
`The collection ${JSON.stringify(
collection
)} does not exist or is empty. Ensure a collection directory with this name exists.`
collection,
)} does not exist or is empty. Ensure a collection directory with this name exists.`,
);
return [];
}
const lazyImports = Object.values(
type === 'content'
? contentCollectionToEntryMap[collection]
: dataCollectionToEntryMap[collection]
: dataCollectionToEntryMap[collection],
);
let entries: any[] = [];
// Cache `getCollection()` calls in production only
@ -106,8 +106,8 @@ export function createGetCollection({
collection: entry.collection,
data: entry.data,
};
})
)
}),
),
);
cacheEntriesByCollection.set(collection, entries);
}
@ -196,7 +196,7 @@ export function createGetEntry({
// Or pass a single object with the collection and identifier as properties.
// This means the first positional arg can have different shapes.
collectionOrLookupObject: string | EntryLookupObject,
_lookupId?: string
_lookupId?: string,
): Promise<ContentEntryResult | DataEntryResult | undefined> {
let collection: string, lookupId: string;
if (typeof collectionOrLookupObject === 'string') {
@ -249,7 +249,7 @@ export function createGetEntry({
export function createGetEntries(getEntry: ReturnType<typeof createGetEntry>) {
return async function getEntries(
entries: { collection: string; id: string }[] | { collection: string; slug: string }[]
entries: { collection: string; id: string }[] | { collection: string; slug: string }[],
) {
return Promise.all(entries.map((e) => getEntry(e)));
};
@ -332,8 +332,8 @@ async function render({
'Content',
propagationMod.Content,
props,
slots
)}`
slots,
)}`,
);
},
propagation: 'self',
@ -374,7 +374,7 @@ export function createReference({ lookupMap }: { lookupMap: ContentLookupMap })
ctx.addIssue({
code: ZodIssueCode.custom,
message: `**${flattenedErrorPath}**: Reference to ${collection} invalid. Expected ${Object.keys(
entries
entries,
)
.map((c) => JSON.stringify(c))
.join(' | ')}. Received ${JSON.stringify(lookupId)}.`,

View file

@ -29,8 +29,8 @@ export async function attachContentServerListeners({
logger.debug(
'content',
`Watching ${cyan(
contentPaths.contentDir.href.replace(settings.config.root.href, '')
)} for changes`
contentPaths.contentDir.href.replace(settings.config.root.href, ''),
)} for changes`,
);
const maybeTsConfigStats = await getTSConfigStatsWhenAllowJsFalse({ contentPaths, settings });
if (maybeTsConfigStats) warnAllowJsIsFalse({ ...maybeTsConfigStats, logger });
@ -61,16 +61,16 @@ export async function attachContentServerListeners({
contentGenerator.queueEvent({ name: 'add', entry });
});
viteServer.watcher.on('addDir', (entry) =>
contentGenerator.queueEvent({ name: 'addDir', entry })
contentGenerator.queueEvent({ name: 'addDir', entry }),
);
viteServer.watcher.on('change', (entry) =>
contentGenerator.queueEvent({ name: 'change', entry })
contentGenerator.queueEvent({ name: 'change', entry }),
);
viteServer.watcher.on('unlink', (entry) => {
contentGenerator.queueEvent({ name: 'unlink', entry });
});
viteServer.watcher.on('unlinkDir', (entry) =>
contentGenerator.queueEvent({ name: 'unlinkDir', entry })
contentGenerator.queueEvent({ name: 'unlinkDir', entry }),
);
}
}
@ -87,12 +87,12 @@ function warnAllowJsIsFalse({
logger.warn(
'content',
`Make sure you have the ${bold('allowJs')} compiler option set to ${bold(
'true'
'true',
)} in your ${bold(tsConfigFileName)} file to have autocompletion in your ${bold(
contentConfigFileName
contentConfigFileName,
)} file. See ${underline(
cyan('https://www.typescriptlang.org/tsconfig#allowJs')
)} for more information.`
cyan('https://www.typescriptlang.org/tsconfig#allowJs'),
)} for more information.`,
);
}
@ -104,7 +104,7 @@ async function getTSConfigStatsWhenAllowJsFalse({
settings: AstroSettings;
}) {
const isContentConfigJsFile = ['.js', '.mjs'].some((ext) =>
contentPaths.config.url.pathname.endsWith(ext)
contentPaths.config.url.pathname.endsWith(ext),
);
if (!isContentConfigJsFile) return;

View file

@ -112,7 +112,7 @@ export async function createContentTypesGenerator({
async function handleEvent(event: ContentEvent): Promise<{ shouldGenerateTypes: boolean }> {
if (event.name === 'addDir' || event.name === 'unlinkDir') {
const collection = normalizePath(
path.relative(fileURLToPath(contentPaths.contentDir), fileURLToPath(event.entry))
path.relative(fileURLToPath(contentPaths.contentDir), fileURLToPath(event.entry)),
);
const collectionKey = JSON.stringify(collection);
// If directory is multiple levels deep, it is not a collection. Ignore event.
@ -137,7 +137,7 @@ export async function createContentTypesGenerator({
fileURLToPath(event.entry),
contentPaths,
contentEntryExts,
dataEntryExts
dataEntryExts,
);
if (fileType === 'ignored') {
return { shouldGenerateTypes: false };
@ -156,9 +156,9 @@ export async function createContentTypesGenerator({
'content',
`${bold(
normalizePath(
path.relative(fileURLToPath(contentPaths.contentDir), fileURLToPath(event.entry))
)
)} must live in a ${bold('content/...')} collection subdirectory.`
path.relative(fileURLToPath(contentPaths.contentDir), fileURLToPath(event.entry)),
),
)} must live in a ${bold('content/...')} collection subdirectory.`,
);
return { shouldGenerateTypes: false };
}
@ -406,7 +406,7 @@ async function writeContentFiles({
message: AstroErrorData.ContentCollectionTypeMismatchError.message(
collectionKey,
collection.type,
collectionConfig.type
collectionConfig.type,
),
hint:
collection.type === 'data'
@ -438,7 +438,7 @@ async function writeContentFiles({
for (const entryKey of collectionEntryKeys) {
const entryMetadata = collection.entries[entryKey];
const renderType = `{ render(): Render[${JSON.stringify(
path.extname(JSON.parse(entryKey))
path.extname(JSON.parse(entryKey)),
)}] }`;
const slugType = JSON.stringify(entryMetadata.slug);
@ -479,14 +479,14 @@ async function writeContentFiles({
dateStrategy: ['format:date-time', 'format:date', 'integer'],
}),
null,
2
)
2,
),
);
} catch (err) {
// This should error gracefully and not crash the dev server
logger.warn(
'content',
`An error was encountered while creating the JSON schema for the ${collectionKey} collection. Proceeding without it. Error: ${err}`
`An error was encountered while creating the JSON schema for the ${collectionKey} collection. Proceeding without it. Error: ${err}`,
);
}
}
@ -500,7 +500,7 @@ async function writeContentFiles({
const configPathRelativeToCacheDir = normalizeConfigPath(
settings.dotAstroDir.pathname,
contentPaths.config.url.pathname
contentPaths.config.url.pathname,
);
for (const contentEntryType of contentEntryTypes) {
@ -512,11 +512,11 @@ async function writeContentFiles({
typeTemplateContent = typeTemplateContent.replace('// @@DATA_ENTRY_MAP@@', dataTypesStr);
typeTemplateContent = typeTemplateContent.replace(
"'@@CONTENT_CONFIG_TYPE@@'",
contentConfig ? `typeof import(${configPathRelativeToCacheDir})` : 'never'
contentConfig ? `typeof import(${configPathRelativeToCacheDir})` : 'never',
);
await fs.promises.writeFile(
new URL(CONTENT_TYPES_FILE, settings.dotAstroDir),
typeTemplateContent
typeTemplateContent,
);
}

View file

@ -76,7 +76,7 @@ export async function getEntryData(
},
collectionConfig: CollectionConfig,
shouldEmitFile: boolean,
pluginContext: PluginContext
pluginContext: PluginContext,
) {
let data;
if (collectionConfig.type === 'data') {
@ -127,7 +127,7 @@ export async function getEntryData(
message: AstroErrorData.InvalidContentEntryFrontmatterError.message(
entry.collection,
entry.id,
parsed.error
parsed.error,
),
location: {
file: entry._internal.filePath,
@ -151,7 +151,7 @@ export function getDataEntryExts(settings: Pick<AstroSettings, 'dataEntryTypes'>
}
export function getEntryConfigByExtMap<TEntryType extends ContentEntryType | DataEntryType>(
entryTypes: TEntryType[]
entryTypes: TEntryType[],
): Map<string, TEntryType> {
const map = new Map<string, TEntryType>();
for (const entryType of entryTypes) {
@ -248,7 +248,7 @@ export function getDataEntryId({
const relativePath = getRelativeEntryPath(entry, collection, contentDir);
const withoutFileExt = normalizePath(relativePath).replace(
new RegExp(path.extname(relativePath) + '$'),
''
'',
);
return withoutFileExt;
@ -290,7 +290,7 @@ export function getEntryType(
entryPath: string,
paths: Pick<ContentPaths, 'config' | 'contentDir'>,
contentFileExts: string[],
dataFileExts: string[]
dataFileExts: string[],
): 'content' | 'data' | 'config' | 'ignored' {
const { ext } = path.parse(entryPath);
const fileUrl = pathToFileURL(entryPath);
@ -310,7 +310,7 @@ export function getEntryType(
function hasUnderscoreBelowContentDirectoryPath(
fileUrl: URL,
contentDir: ContentPaths['contentDir']
contentDir: ContentPaths['contentDir'],
): boolean {
const parts = fileUrl.pathname.replace(contentDir.pathname, '').split('/');
for (const part of parts) {
@ -324,7 +324,7 @@ function getYAMLErrorLine(rawData: string | undefined, objectKey: string) {
const indexOfObjectKey = rawData.search(
// Match key either at the top of the file or after a newline
// Ensures matching on top-level object keys only
new RegExp(`(\n|^)${objectKey}`)
new RegExp(`(\n|^)${objectKey}`),
);
if (indexOfObjectKey === -1) return 0;
@ -485,7 +485,7 @@ export type ContentPaths = {
export function getContentPaths(
{ srcDir }: Pick<AstroConfig, 'root' | 'srcDir'>,
fs: typeof fsMod = fsMod
fs: typeof fsMod = fsMod,
): ContentPaths {
const configStats = search(fs, srcDir);
const pkgBase = new URL('../../', import.meta.url);
@ -499,7 +499,7 @@ export function getContentPaths(
}
function search(fs: typeof fsMod, srcDir: URL) {
const paths = ['config.mjs', 'config.js', 'config.mts', 'config.ts'].map(
(p) => new URL(`./content/${p}`, srcDir)
(p) => new URL(`./content/${p}`, srcDir),
);
for (const file of paths) {
if (fs.existsSync(file)) {

View file

@ -77,7 +77,7 @@ export function astroContentAssetPropagationPlugin({
: await getScriptsForURL(
pathToFileURL(basePath),
settings.config.root,
devModuleLoader
devModuleLoader,
);
// Register files we crawled to be able to retrieve the rendered styles and scripts,
@ -127,7 +127,7 @@ export function astroContentAssetPropagationPlugin({
export function astroConfigBuildPlugin(
options: StaticBuildOptions,
internals: BuildInternals
internals: BuildInternals,
): AstroBuildPlugin {
return {
targets: ['server'],
@ -176,7 +176,7 @@ export function astroConfigBuildPlugin(
if (entryStyles.size) {
newCode = newCode.replace(
JSON.stringify(STYLES_PLACEHOLDER),
JSON.stringify(Array.from(entryStyles))
JSON.stringify(Array.from(entryStyles)),
);
} else {
newCode = newCode.replace(JSON.stringify(STYLES_PLACEHOLDER), '[]');
@ -184,7 +184,7 @@ export function astroConfigBuildPlugin(
if (entryLinks.size) {
newCode = newCode.replace(
JSON.stringify(LINKS_PLACEHOLDER),
JSON.stringify(Array.from(entryLinks).map(prependBase))
JSON.stringify(Array.from(entryLinks).map(prependBase)),
);
} else {
newCode = newCode.replace(JSON.stringify(LINKS_PLACEHOLDER), '[]');
@ -210,8 +210,8 @@ export function astroConfigBuildPlugin(
type: 'module',
},
children: '',
}))
)
})),
),
);
} else {
newCode = newCode.replace(JSON.stringify(SCRIPTS_PLACEHOLDER), '[]');

View file

@ -39,7 +39,7 @@ import {
function getContentRendererByViteId(
viteId: string,
settings: Pick<AstroSettings, 'contentEntryTypes'>
settings: Pick<AstroSettings, 'contentEntryTypes'>,
): ContentEntryType['getRenderModule'] | undefined {
let ext = viteId.split('.').pop();
if (!ext) return undefined;
@ -215,7 +215,7 @@ type GetEntryModuleParams<TEntryType extends ContentEntryType | DataEntryType> =
};
async function getContentEntryModule(
params: GetEntryModuleParams<ContentEntryType>
params: GetEntryModuleParams<ContentEntryType>,
): Promise<ContentEntryModule> {
const { fileId, contentDir, pluginContext } = params;
const { collectionConfig, entryConfig, entry, rawContents, collection } =
@ -245,7 +245,7 @@ async function getContentEntryModule(
{ id, collection, _internal, unvalidatedData },
collectionConfig,
params.shouldEmitFile,
pluginContext
pluginContext,
)
: unvalidatedData;
@ -262,7 +262,7 @@ async function getContentEntryModule(
}
async function getDataEntryModule(
params: GetEntryModuleParams<DataEntryType>
params: GetEntryModuleParams<DataEntryType>,
): Promise<DataEntryModule> {
const { fileId, contentDir, pluginContext } = params;
const { collectionConfig, entryConfig, entry, rawContents, collection } =
@ -280,7 +280,7 @@ async function getDataEntryModule(
{ id, collection, _internal, unvalidatedData },
collectionConfig,
params.shouldEmitFile,
pluginContext
pluginContext,
)
: unvalidatedData;
@ -320,7 +320,7 @@ async function getEntryModuleBaseInfo<TEntryType extends ContentEntryType | Data
throw new AstroError({
...AstroErrorData.UnknownContentCollectionError,
message: `No parser found for data entry ${JSON.stringify(
fileId
fileId,
)}. Did you apply an integration for this file type?`,
});
}

View file

@ -129,21 +129,21 @@ export async function generateContentEntryFile({
`import.meta.glob(${JSON.stringify(value)}, { query: { ${flag}: true } })`;
contentEntryGlobResult = createGlob(
globWithUnderscoresIgnored(relContentDir, contentEntryExts),
CONTENT_FLAG
CONTENT_FLAG,
);
dataEntryGlobResult = createGlob(
globWithUnderscoresIgnored(relContentDir, dataEntryExts),
DATA_FLAG
DATA_FLAG,
);
renderEntryGlobResult = createGlob(
globWithUnderscoresIgnored(relContentDir, contentEntryExts),
CONTENT_RENDER_FLAG
CONTENT_RENDER_FLAG,
);
} else {
contentEntryGlobResult = getStringifiedCollectionFromLookup(
'content',
relContentDir,
lookupMap
lookupMap,
);
dataEntryGlobResult = getStringifiedCollectionFromLookup('data', relContentDir, lookupMap);
renderEntryGlobResult = getStringifiedCollectionFromLookup('render', relContentDir, lookupMap);
@ -168,7 +168,7 @@ console.warn('astro:content is only supported running server-side. Using it in t
function getStringifiedCollectionFromLookup(
wantedType: 'content' | 'data' | 'render',
relContentDir: string,
lookupMap: ContentLookupMap
lookupMap: ContentLookupMap,
) {
let str = '{';
// In dev, we don't need to normalize the import specifier at all. Vite handles it.
@ -226,7 +226,7 @@ export async function generateLookupMap({
absolute: true,
cwd: fileURLToPath(root),
fs,
}
},
);
// Run 10 at a time to prevent `await getEntrySlug` from accessing the filesystem all at once.
@ -276,7 +276,7 @@ export async function generateLookupMap({
collection,
slug,
lookupMap[collection].entries[slug],
rootRelativePath(root, filePath)
rootRelativePath(root, filePath),
),
hint:
slug !== generatedSlug
@ -301,7 +301,7 @@ export async function generateLookupMap({
},
};
}
})
}),
);
}

View file

@ -8,7 +8,7 @@ import type { OutgoingHttpHeaders } from 'node:http';
* @returns {OutgoingHttpHeaders} NodeJS OutgoingHttpHeaders object with multiple set-cookie handled as an array of values
*/
export const createOutgoingHttpHeaders = (
headers: Headers | undefined | null
headers: Headers | undefined | null,
): OutgoingHttpHeaders | undefined => {
if (!headers) {
return undefined;

View file

@ -95,7 +95,7 @@ export class App {
this.#pipeline = this.#createPipeline(this.#manifestData, streaming);
this.#adapterLogger = new AstroIntegrationLogger(
this.#logger.options,
this.#manifest.adapterName
this.#manifest.adapterName,
);
}
@ -114,7 +114,7 @@ export class App {
if (this.#manifest.checkOrigin) {
this.#manifest.middleware = sequence(
createOriginCheckMiddleware(),
this.#manifest.middleware
this.#manifest.middleware,
);
}
@ -209,7 +209,7 @@ export class App {
let locale;
const hostAsUrl = new URL(`${protocol}//${host}`);
for (const [domainKey, localeValue] of Object.entries(
this.#manifest.i18n.domainLookupTable
this.#manifest.i18n.domainLookupTable,
)) {
// This operation should be safe because we force the protocol via zod inside the configuration
// If not, then it means that the manifest was tampered
@ -226,7 +226,7 @@ export class App {
if (locale) {
pathname = prependForwardSlash(
joinPaths(normalizeTheLocale(locale), this.removeBase(url.pathname))
joinPaths(normalizeTheLocale(locale), this.removeBase(url.pathname)),
);
if (url.pathname.endsWith('/')) {
pathname = appendForwardSlash(pathname);
@ -235,7 +235,7 @@ export class App {
} catch (e: any) {
this.#logger.error(
'router',
`Astro tried to parse ${protocol}//${host} as an URL, but it threw a parsing error. Check the X-Forwarded-Host and X-Forwarded-Proto headers.`
`Astro tried to parse ${protocol}//${host} as an URL, but it threw a parsing error. Check the X-Forwarded-Host and X-Forwarded-Proto headers.`,
);
this.#logger.error('router', `Error: ${e}`);
}
@ -253,7 +253,7 @@ export class App {
async render(
request: Request,
routeDataOrOptions?: RouteData | RenderOptions,
maybeLocals?: object
maybeLocals?: object,
): Promise<Response> {
let routeData: RouteData | undefined;
let locals: object | undefined;
@ -290,7 +290,7 @@ export class App {
this.#logger.debug(
'router',
'The adapter ' + this.#manifest.adapterName + ' provided a custom RouteData for ',
request.url
request.url,
);
this.#logger.debug('router', 'RouteData:\n' + routeData);
}
@ -370,7 +370,7 @@ export class App {
if (this.#renderOptionsDeprecationWarningShown) return;
this.#logger.warn(
'deprecated',
`The adapter ${this.#manifest.adapterName} is using a deprecated signature of the 'app.render()' method. From Astro 4.0, locals and routeData are provided as properties on an optional object to this method. Using the old signature will cause an error in Astro 5.0. See https://github.com/withastro/astro/pull/9199 for more information.`
`The adapter ${this.#manifest.adapterName} is using a deprecated signature of the 'app.render()' method. From Astro 4.0, locals and routeData are provided as properties on an optional object to this method. Using the old signature will cause an error in Astro 5.0. See https://github.com/withastro/astro/pull/9199 for more information.`,
);
this.#renderOptionsDeprecationWarningShown = true;
}
@ -404,7 +404,7 @@ export class App {
response: originalResponse,
skipMiddleware = false,
error,
}: RenderErrorOptions
}: RenderErrorOptions,
): Promise<Response> {
const errorRoutePath = `/${status}${this.#manifest.trailingSlash === 'always' ? '/' : ''}`;
const errorRouteData = matchRoute(errorRoutePath, this.#manifestData);
@ -414,7 +414,7 @@ export class App {
const maybeDotHtml = errorRouteData.route.endsWith(`/${status}`) ? '.html' : '';
const statusURL = new URL(
`${this.#baseWithoutTrailingSlash}/${status}${maybeDotHtml}`,
url
url,
);
const response = await fetch(statusURL.toString());
@ -459,7 +459,7 @@ export class App {
#mergeResponses(
newResponse: Response,
originalResponse?: Response,
override?: { status: 404 | 500 }
override?: { status: 404 | 500 },
) {
if (!originalResponse) {
if (override !== undefined) {

View file

@ -37,7 +37,7 @@ export class NodeApp extends App {
render(
req: NodeRequest | Request,
routeDataOrOptions?: RouteData | RenderOptions,
maybeLocals?: object
maybeLocals?: object,
) {
if (!(req instanceof Request)) {
req = NodeApp.createRequest(req);
@ -120,7 +120,7 @@ export class NodeApp extends App {
// eslint-disable-next-line no-console
console.error(
`There was an uncaught error in the middle of the stream while rendering ${destination.req.url}.`,
err
err,
);
});
});

View file

@ -36,7 +36,7 @@ export class AppPipeline extends Pipeline {
| 'serverLike'
| 'streaming'
| 'defaultRoutes'
>
>,
) {
const pipeline = new AppPipeline(
logger,
@ -55,7 +55,7 @@ export class AppPipeline extends Pipeline {
undefined,
undefined,
false,
defaultRoutes
defaultRoutes,
);
pipeline.#manifestData = manifestData;
return pipeline;
@ -93,7 +93,7 @@ export class AppPipeline extends Pipeline {
async tryRewrite(
payload: RewritePayload,
request: Request,
_sourceRoute: RouteData
_sourceRoute: RouteData,
): Promise<[RouteData, ComponentInstance, URL]> {
const [foundRoute, finalUrl] = findRouteToRewrite({
payload,
@ -125,7 +125,7 @@ export class AppPipeline extends Pipeline {
const importComponentInstance = this.manifest.pageMap.get(route.component);
if (!importComponentInstance) {
throw new Error(
`Unexpectedly unable to find a component instance for route ${route.route}`
`Unexpectedly unable to find a component instance for route ${route.route}`,
);
}
return await importComponentInstance();
@ -133,7 +133,7 @@ export class AppPipeline extends Pipeline {
return this.manifest.pageModule;
}
throw new Error(
"Astro couldn't find the correct page to render, probably because it wasn't correctly mapped for SSR usage. This is an internal error, please file an issue."
"Astro couldn't find the correct page to render, probably because it wasn't correctly mapped for SSR usage. This is an internal error, please file an issue.",
);
}
}

View file

@ -58,13 +58,13 @@ export abstract class Pipeline {
* Array of built-in, internal, routes.
* Used to find the route module
*/
readonly defaultRoutes = createDefaultRoutes(manifest)
readonly defaultRoutes = createDefaultRoutes(manifest),
) {
this.internalMiddleware = [];
// We do use our middleware only if the user isn't using the manual setup
if (i18n?.strategy !== 'manual') {
this.internalMiddleware.push(
createI18nMiddleware(i18n, manifest.base, manifest.trailingSlash, manifest.buildFormat)
createI18nMiddleware(i18n, manifest.base, manifest.trailingSlash, manifest.buildFormat),
);
}
// In SSR, getSecret should fail by default. Setting it here will run before the
@ -94,7 +94,7 @@ export abstract class Pipeline {
abstract tryRewrite(
rewritePayload: RewritePayload,
request: Request,
sourceRoute: RouteData
sourceRoute: RouteData,
): Promise<[RouteData, ComponentInstance, URL]>;
/**

View file

@ -10,7 +10,7 @@ function fromEntries<V>(entries: [string, V][]) {
export function addRollupInput(
inputOptions: Rollup.InputOptions,
newInputs: string[]
newInputs: string[],
): Rollup.InputOptions {
// Add input module ids to existing input option, whether it's a string, array or object
// this way you can use multiple html plugins all adding their own inputs

View file

@ -17,7 +17,7 @@ function getOutRoot(astroConfig: AstroConfig): URL {
export function getOutFolder(
astroConfig: AstroConfig,
pathname: string,
routeData: RouteData
routeData: RouteData,
): URL {
const outRoot = getOutRoot(astroConfig);
const routeType = routeData.type;
@ -59,7 +59,7 @@ export function getOutFile(
astroConfig: AstroConfig,
outFolder: URL,
pathname: string,
routeData: RouteData
routeData: RouteData,
): URL {
const routeType = routeData.type;
switch (routeType) {

View file

@ -21,7 +21,7 @@ export function shortHashedName(settings: AstroSettings) {
return createNameHash(
getFirstParentId(parents),
parents.map((page) => page.id),
settings
settings,
);
};
}
@ -29,7 +29,7 @@ export function shortHashedName(settings: AstroSettings) {
export function createNameHash(
baseId: string | undefined,
hashIds: string[],
settings: AstroSettings
settings: AstroSettings,
): string {
const baseName = baseId ? prettifyBaseName(npath.parse(baseId).name) : 'index';
const hash = crypto.createHash('sha256');

View file

@ -69,14 +69,14 @@ export async function generatePages(options: StaticBuildOptions, internals: Buil
// middleware.mjs is not emitted if there is no user middleware
// in which case the import fails with ERR_MODULE_NOT_FOUND, and we fall back to a no-op middleware
middleware = await import(new URL('middleware.mjs', baseDirectory).toString()).then(
(mod) => mod.onRequest
(mod) => mod.onRequest,
);
} catch {}
manifest = createBuildManifest(
options.settings,
internals,
renderers.renderers as SSRLoadedRenderer[],
middleware
middleware,
);
}
const pipeline = BuildPipeline.create({ internals, manifest, options });
@ -118,7 +118,7 @@ export async function generatePages(options: StaticBuildOptions, internals: Buil
} else {
const ssrEntryURLPage = createEntryURL(filePath, outFolder);
throw new Error(
`Unable to find the manifest for the module ${ssrEntryURLPage.toString()}. This is unexpected and likely a bug in Astro, please report.`
`Unable to find the manifest for the module ${ssrEntryURLPage.toString()}. This is unexpected and likely a bug in Astro, please report.`,
);
}
} else {
@ -135,7 +135,7 @@ export async function generatePages(options: StaticBuildOptions, internals: Buil
}
logger.info(
null,
green(`✓ Completed in ${getTimeStat(generatePagesTimer, performance.now())}.\n`)
green(`✓ Completed in ${getTimeStat(generatePagesTimer, performance.now())}.\n`),
);
const staticImageList = getStaticImageList();
@ -170,7 +170,7 @@ async function generatePage(
pageData: PageBuildData,
ssrEntry: SinglePageBuiltModule,
builtPaths: Set<string>,
pipeline: BuildPipeline
pipeline: BuildPipeline,
) {
// prepare information we need
const { config, logger } = pipeline;
@ -186,7 +186,7 @@ async function generatePage(
const scripts = pageData.hoistedScript ?? null;
if (!pageModulePromise) {
throw new Error(
`Unable to find the module for ${pageData.component}. This is unexpected and likely a bug in Astro, please report.`
`Unable to find the module for ${pageData.component}. This is unexpected and likely a bug in Astro, please report.`,
);
}
const pageModule = await pageModulePromise();
@ -241,7 +241,7 @@ async function getPathsForRoute(
route: RouteData,
mod: ComponentInstance,
pipeline: BuildPipeline,
builtPaths: Set<string>
builtPaths: Set<string>,
): Promise<Array<string>> {
const { logger, options, routeCache, serverLike } = pipeline;
let paths: Array<string> = [];
@ -263,7 +263,7 @@ async function getPathsForRoute(
const label = staticPaths.length === 1 ? 'page' : 'pages';
logger.debug(
'build',
`├── ${bold(green('√'))} ${route.component}${magenta(`[${staticPaths.length} ${label}]`)}`
`├── ${bold(green('√'))} ${route.component}${magenta(`[${staticPaths.length} ${label}]`)}`,
);
paths = staticPaths
@ -304,7 +304,7 @@ async function getPathsForRoute(
function getInvalidRouteSegmentError(
e: TypeError,
route: RouteData,
staticPath: GetStaticPathsItem
staticPath: GetStaticPathsItem,
): AstroError {
const invalidParam = /^Expected "([^"]+)"/.exec(e.message)?.[1];
const received = invalidParam ? staticPath.params[invalidParam] : undefined;
@ -312,7 +312,7 @@ function getInvalidRouteSegmentError(
'Learn about dynamic routes at https://docs.astro.build/en/core-concepts/routing/#dynamic-routes';
if (invalidParam && typeof received === 'string') {
const matchingSegment = route.segments.find(
(segment) => segment[0]?.content === invalidParam
(segment) => segment[0]?.content === invalidParam,
)?.[0];
const mightBeMissingSpread = matchingSegment?.dynamic && !matchingSegment?.spread;
if (mightBeMissingSpread) {
@ -325,7 +325,7 @@ function getInvalidRouteSegmentError(
? AstroErrorData.InvalidDynamicRoute.message(
route.route,
JSON.stringify(invalidParam),
JSON.stringify(received)
JSON.stringify(received),
)
: `Generated path for ${route.route} is invalid.`,
hint,
@ -355,7 +355,7 @@ function getUrlForPath(
origin: string,
format: AstroConfig['build']['format'],
trailingSlash: AstroConfig['trailingSlash'],
routeType: RouteType
routeType: RouteType,
): URL {
/**
* Examples:
@ -402,7 +402,7 @@ async function generatePath(
pathname: string,
pipeline: BuildPipeline,
gopts: GeneratePathOptions,
route: RouteData
route: RouteData,
) {
const { mod } = gopts;
const { config, logger, options } = pipeline;
@ -432,7 +432,7 @@ async function generatePath(
options.origin,
config.build.format,
config.trailingSlash,
route.type
route.type,
);
const request = createRequest({
@ -520,7 +520,7 @@ function createBuildManifest(
settings: AstroSettings,
internals: BuildInternals,
renderers: SSRLoadedRenderer[],
middleware: MiddlewareHandler
middleware: MiddlewareHandler,
): SSRManifest {
let i18nManifest: SSRManifestI18n | undefined = undefined;
if (settings.config.i18n) {

View file

@ -17,7 +17,7 @@ export function getParentExtendedModuleInfos(
order = 0,
childId = '',
seen = new Set<string>(),
accumulated: ExtendedModuleInfo[] = []
accumulated: ExtendedModuleInfo[] = [],
): ExtendedModuleInfo[] {
seen.add(id);
@ -54,7 +54,7 @@ export function getParentModuleInfos(
ctx: { getModuleInfo: GetModuleInfo },
until?: (importer: string) => boolean,
seen = new Set<string>(),
accumulated: ModuleInfo[] = []
accumulated: ModuleInfo[] = [],
): ModuleInfo[] {
seen.add(id);
@ -88,7 +88,7 @@ export function moduleIsTopLevelPage(info: ModuleInfo): boolean {
// This could be a .astro page, a .markdown or a .md (or really any file extension for markdown files) page.
export function getTopLevelPageModuleInfos(
id: string,
ctx: { getModuleInfo: GetModuleInfo }
ctx: { getModuleInfo: GetModuleInfo },
): ModuleInfo[] {
return getParentModuleInfos(id, ctx).filter(moduleIsTopLevelPage);
}

View file

@ -61,7 +61,7 @@ export interface BuildOptions {
*/
export default async function build(
inlineConfig: AstroInlineConfig,
options: BuildOptions = {}
options: BuildOptions = {},
): Promise<void> {
ensureProcessNodeEnv('production');
applyPolyfill();
@ -140,7 +140,13 @@ class AstroBuilder {
middlewareMode: true,
},
},
{ settings: this.settings, logger: this.logger, mode: 'build', command: 'build', sync: false }
{
settings: this.settings,
logger: this.logger,
mode: 'build',
command: 'build',
sync: false,
},
);
await runHookConfigDone({ settings: this.settings, logger: logger });
@ -182,7 +188,7 @@ class AstroBuilder {
this.timer.buildStart = performance.now();
this.logger.info(
'build',
green(`✓ Completed in ${getTimeStat(this.timer.init, performance.now())}.`)
green(`✓ Completed in ${getTimeStat(this.timer.init, performance.now())}.`),
);
const opts: StaticBuildOptions = {
@ -221,7 +227,7 @@ class AstroBuilder {
.concat(
this.settings.config.experimental.serverIslands
? [getServerIslandRouteData(this.settings.config)]
: []
: [],
),
logging: this.logger,
cacheManifest: internals.cacheManifestUsed,
@ -256,7 +262,7 @@ class AstroBuilder {
// outDir gets blown away so it can't be the root.
if (config.outDir.toString() === config.root.toString()) {
throw new Error(
`the outDir cannot be the root folder. Please build to a folder such as dist.`
`the outDir cannot be the root folder. Please build to a folder such as dist.`,
);
}
}

View file

@ -150,7 +150,7 @@ export function trackPageData(
component: string,
pageData: PageBuildData,
componentModuleId: string,
componentURL: URL
componentURL: URL,
): void {
pageData.moduleSpecifier = componentModuleId;
internals.pagesByKeys.set(pageData.key, pageData);
@ -163,7 +163,7 @@ export function trackPageData(
export function trackClientOnlyPageDatas(
internals: BuildInternals,
pageData: PageBuildData,
clientOnlys: string[]
clientOnlys: string[],
) {
for (const clientOnlyComponent of clientOnlys) {
let pageDataSet: Set<PageBuildData>;
@ -184,7 +184,7 @@ export function trackClientOnlyPageDatas(
export function trackScriptPageDatas(
internals: BuildInternals,
pageData: PageBuildData,
scriptIds: string[]
scriptIds: string[],
) {
for (const scriptId of scriptIds) {
let pageDataSet: Set<PageBuildData>;
@ -200,7 +200,7 @@ export function trackScriptPageDatas(
export function* getPageDatasByClientOnlyID(
internals: BuildInternals,
viteid: ViteID
viteid: ViteID,
): Generator<PageBuildData, void, unknown> {
const pagesByClientOnly = internals.pagesByClientOnly;
if (pagesByClientOnly.size) {
@ -238,7 +238,7 @@ export function* getPageDatasByClientOnlyID(
export function getPageData(
internals: BuildInternals,
route: string,
component: string
component: string,
): PageBuildData | undefined {
let pageData = internals.pagesByKeys.get(makePageDataKey(route, component));
if (pageData) {
@ -271,7 +271,7 @@ function getPagesDatasByComponent(internals: BuildInternals, component: string):
* @param pagesByKeys A map of all page data by their internal key
*/
export function getPageDatasWithPublicKey(
pagesByKeys: Map<string, PageBuildData>
pagesByKeys: Map<string, PageBuildData>,
): Map<string, PageBuildData> {
// Create a map to store the pages with the public key, mimicking internal.pagesByKeys
const pagesWithPublicKey = new Map<string, PageBuildData>();
@ -303,7 +303,7 @@ export function getPageDatasWithPublicKey(
export function getPageDataByViteID(
internals: BuildInternals,
viteid: ViteID
viteid: ViteID,
): PageBuildData | undefined {
if (internals.pagesByViteID.has(viteid)) {
return internals.pagesByViteID.get(viteid);
@ -358,7 +358,7 @@ export function cssOrder(a: OrderInfo, b: OrderInfo) {
export function mergeInlineCss(
acc: Array<StylesheetAsset>,
current: StylesheetAsset
current: StylesheetAsset,
): Array<StylesheetAsset> {
const lastAdded = acc.at(acc.length - 1);
const lastWasInline = lastAdded?.type === 'inline';
@ -379,7 +379,7 @@ export function mergeInlineCss(
*/
export function getPageDatasByHoistedScriptId(
internals: BuildInternals,
id: string
id: string,
): PageBuildData[] {
const set = internals.hoistedScriptIdToPagesMap.get(id);
const pageDatas: PageBuildData[] = [];

View file

@ -46,7 +46,7 @@ export function collectPagesData(opts: CollectPagesDataOptions): CollectPagesDat
const html = `${route.pathname}`.replace(/\/?$/, '/index.html');
debug(
'build',
`├── ${colors.bold(colors.green('✔'))} ${route.component}${colors.yellow(html)}`
`├── ${colors.bold(colors.green('✔'))} ${route.component}${colors.yellow(html)}`,
);
} else {
debug('build', `├── ${colors.bold(colors.green('✔'))} ${route.component}`);

View file

@ -54,7 +54,7 @@ export class BuildPipeline extends Pipeline {
readonly options: StaticBuildOptions,
readonly config = options.settings.config,
readonly settings = options.settings,
readonly defaultRoutes = createDefaultRoutes(manifest)
readonly defaultRoutes = createDefaultRoutes(manifest),
) {
const resolveCache = new Map<string, string>();
@ -87,7 +87,7 @@ export class BuildPipeline extends Pipeline {
manifest.renderers,
resolve,
serverLike,
streaming
streaming,
);
}
@ -114,18 +114,18 @@ export class BuildPipeline extends Pipeline {
*/
static async retrieveManifest(
staticBuildOptions: StaticBuildOptions,
internals: BuildInternals
internals: BuildInternals,
): Promise<SSRManifest> {
const config = staticBuildOptions.settings.config;
const baseDirectory = getOutputDirectory(config);
const manifestEntryUrl = new URL(
`${internals.manifestFileName}?time=${Date.now()}`,
baseDirectory
baseDirectory,
);
const { manifest } = await import(manifestEntryUrl.toString());
if (!manifest) {
throw new Error(
"Astro couldn't find the emitted manifest. This is an internal error, please file an issue."
"Astro couldn't find the emitted manifest. This is an internal error, please file an issue.",
);
}
@ -140,7 +140,7 @@ export class BuildPipeline extends Pipeline {
if (!renderers) {
throw new Error(
"Astro couldn't find the emitted renderers. This is an internal error, please file an issue."
"Astro couldn't find the emitted renderers. This is an internal error, please file an issue.",
);
}
return {
@ -161,7 +161,7 @@ export class BuildPipeline extends Pipeline {
const scripts = createModuleScriptsSet(
pageBuildData?.hoistedScript ? [pageBuildData.hoistedScript] : [],
base,
assetsPrefix
assetsPrefix,
);
const sortedCssAssets = pageBuildData?.styles
.sort(cssOrder)
@ -216,8 +216,8 @@ export class BuildPipeline extends Pipeline {
...getPagesFromVirtualModulePageName(
this.internals,
ASTRO_PAGE_RESOLVED_MODULE_ID,
virtualModulePageName
)
virtualModulePageName,
),
);
}
if (virtualModulePageName.includes(RESOLVED_SPLIT_MODULE_ID)) {
@ -225,8 +225,8 @@ export class BuildPipeline extends Pipeline {
...getPagesFromVirtualModulePageName(
this.internals,
RESOLVED_SPLIT_MODULE_ID,
virtualModulePageName
)
virtualModulePageName,
),
);
}
for (const pageData of pageDatas) {
@ -288,7 +288,7 @@ export class BuildPipeline extends Pipeline {
async tryRewrite(
payload: RewritePayload,
request: Request,
_sourceRoute: RouteData
_sourceRoute: RouteData,
): Promise<[RouteData, ComponentInstance, URL]> {
const [foundRoute, finalUrl] = findRouteToRewrite({
payload,
@ -324,7 +324,7 @@ export class BuildPipeline extends Pipeline {
async #getEntryForFallbackRoute(
route: RouteData,
internals: BuildInternals,
outFolder: URL
outFolder: URL,
): Promise<SinglePageBuiltModule> {
if (route.type !== 'fallback') {
throw new Error(`Expected a redirect route.`);
@ -344,7 +344,7 @@ export class BuildPipeline extends Pipeline {
async #getEntryForRedirectRoute(
route: RouteData,
internals: BuildInternals,
outFolder: URL
outFolder: URL,
): Promise<SinglePageBuiltModule> {
if (route.type !== 'redirect') {
throw new Error(`Expected a redirect route.`);

View file

@ -22,7 +22,7 @@ The emitted file has content similar to:
const renderers = [
Object.assign(
{ name: 'astro:jsx', serverEntrypoint: 'astro/jsx/server.js', jsxImportSource: 'astro' },
{ ssr: server_default }
{ ssr: server_default },
),
];

View file

@ -28,7 +28,7 @@ function isPropagatedAsset(id: string) {
export function vitePluginAnalyzer(
options: StaticBuildOptions,
internals: BuildInternals
internals: BuildInternals,
): VitePlugin {
function hoistedScriptScanner() {
const uniqueHoistedIds = new Map<string, string>();
@ -43,7 +43,7 @@ export function vitePluginAnalyzer(
async scan(
this: PluginContext,
scripts: AstroPluginMetadata['astro']['scripts'],
from: string
from: string,
) {
const hoistedScripts = new Set<string>();
for (let i = 0; i < scripts.length; i++) {
@ -178,7 +178,7 @@ export function vitePluginAnalyzer(
// `discoveredScripts` here, which will eventually be passed as inputs of the client build.
if (options.settings.config.experimental.directRenderScript && astro.scripts.length) {
const scriptIds = astro.scripts.map(
(_, i) => `${id.replace('/@fs', '')}?astro&type=script&index=${i}&lang.ts`
(_, i) => `${id.replace('/@fs', '')}?astro&type=script&index=${i}&lang.ts`,
);
// Assign as entrypoints for the client bundle
@ -204,7 +204,7 @@ export function vitePluginAnalyzer(
export function pluginAnalyzer(
options: StaticBuildOptions,
internals: BuildInternals
internals: BuildInternals,
): AstroBuildPlugin {
return {
targets: ['server'],

View file

@ -80,7 +80,7 @@ function vitePluginContent(
opts: StaticBuildOptions,
lookupMap: ContentLookupMap,
internals: BuildInternals,
cachedBuildOutput: Array<{ cached: URL; dist: URL }>
cachedBuildOutput: Array<{ cached: URL; dist: URL }>,
): VitePlugin {
const { config } = opts.settings;
const distContentRoot = getContentRoot(config);
@ -184,7 +184,7 @@ function vitePluginContent(
) {
const [srcRelativePath] = id.replace(rootPath, '/').split('?');
const resultId = encodeName(
`${removeLeadingForwardSlash(removeFileExtension(srcRelativePath))}.render.mjs`
`${removeLeadingForwardSlash(removeFileExtension(srcRelativePath))}.render.mjs`,
);
return resultId;
}
@ -192,7 +192,7 @@ function vitePluginContent(
const collectionEntry = findEntryFromSrcRelativePath(
lookupMap,
srcRelativePath,
entryCache
entryCache,
);
if (collectionEntry) {
let suffix = '.mjs';
@ -201,7 +201,7 @@ function vitePluginContent(
}
id =
removeLeadingForwardSlash(
removeFileExtension(encodeName(id.replace(srcPath, '/')))
removeFileExtension(encodeName(id.replace(srcPath, '/'))),
) + suffix;
return id;
}
@ -284,7 +284,7 @@ function vitePluginContent(
function findEntryFromSrcRelativePath(
lookupMap: ContentLookupMap,
srcRelativePath: string,
entryCache: Map<string, string>
entryCache: Map<string, string>,
) {
let value = entryCache.get(srcRelativePath);
if (value) return value;
@ -308,7 +308,7 @@ interface ContentEntries {
function getEntriesFromManifests(
oldManifest: ContentManifest,
newManifest: ContentManifest
newManifest: ContentManifest,
): ContentEntries {
const { entries: oldEntries } = oldManifest;
const { entries: newEntries } = newManifest;
@ -320,7 +320,7 @@ function getEntriesFromManifests(
return entries;
}
const oldEntryHashMap = new Map<string, ContentManifestKey>(
oldEntries.map(([key, hash]) => [hash, key])
oldEntries.map(([key, hash]) => [hash, key]),
);
for (const [entry, hash] of newEntryMap) {
@ -367,7 +367,7 @@ function manifestState(oldManifest: ContentManifest, newManifest: ContentManifes
async function generateContentManifest(
opts: StaticBuildOptions,
lookupMap: ContentLookupMap
lookupMap: ContentLookupMap,
): Promise<ContentManifest> {
let manifest = createContentManifest();
manifest.version = CONTENT_MANIFEST_VERSION;
@ -382,7 +382,7 @@ async function generateContentManifest(
limit(async () => {
const data = await fsMod.promises.readFile(fileURL, { encoding: 'utf8' });
manifest.entries.push([key, checksum(data, fileURL.toString())]);
})
}),
);
}
}
@ -480,7 +480,7 @@ export async function copyContentToCache(opts: StaticBuildOptions) {
export function pluginContent(
opts: StaticBuildOptions,
internals: BuildInternals
internals: BuildInternals,
): AstroBuildPlugin {
const { cacheDir, outDir } = opts.settings.config;

View file

@ -30,7 +30,7 @@ interface PluginOptions {
export function pluginCSS(
options: StaticBuildOptions,
internals: BuildInternals
internals: BuildInternals,
): AstroBuildPlugin {
return {
targets: ['client', 'server'],
@ -206,7 +206,7 @@ function rollupPluginAstroBuildCSS(options: PluginOptions): VitePlugin[] {
// Ref: https://github.com/vitejs/vite/blob/b2c0ee04d4db4a0ef5a084c50f49782c5f88587c/packages/vite/src/node/plugins/html.ts#L690-L705
if (resolvedConfig.build.cssCodeSplit) return;
const cssChunk = Object.values(bundle).find(
(chunk) => chunk.type === 'asset' && chunk.name === 'style.css'
(chunk) => chunk.type === 'asset' && chunk.name === 'style.css',
);
if (cssChunk === undefined) return;
for (const pageData of internals.pagesByKeys.values()) {
@ -293,7 +293,7 @@ function rollupPluginAstroBuildCSS(options: PluginOptions): VitePlugin[] {
function* getParentClientOnlys(
id: string,
ctx: { getModuleInfo: GetModuleInfo },
internals: BuildInternals
internals: BuildInternals,
): Generator<PageBuildData, void, unknown> {
for (const info of getParentModuleInfos(id, ctx)) {
yield* getPageDatasByClientOnlyID(internals, info.id);
@ -310,7 +310,7 @@ function appendCSSToPage(
meta: ViteMetadata,
pagesToCss: Record<string, Record<string, { order: number; depth: number }>>,
depth: number,
order: number
order: number,
) {
for (const importedCssImport of meta.importedCss) {
// CSS is prioritized based on depth. Shared CSS has a higher depth due to being imported by multiple pages.
@ -341,7 +341,7 @@ function appendCSSToPage(
*/
function isCssScopeToRendered(
cssScopeTo: Record<string, string[]>,
chunks: Rollup.RenderedChunk[]
chunks: Rollup.RenderedChunk[],
) {
for (const moduleId in cssScopeTo) {
const exports = cssScopeTo[moduleId];

View file

@ -13,7 +13,7 @@ function virtualHoistedEntry(id: string) {
export function vitePluginHoistedScripts(
settings: AstroSettings,
internals: BuildInternals
internals: BuildInternals,
): VitePlugin {
let assetsInlineLimit: NonNullable<BuildOptions['assetsInlineLimit']>;
@ -104,7 +104,7 @@ export function vitePluginHoistedScripts(
export function pluginHoistedScripts(
options: StaticBuildOptions,
internals: BuildInternals
internals: BuildInternals,
): AstroBuildPlugin {
return {
targets: ['client'],

View file

@ -36,7 +36,7 @@ export function vitePluginInternals(input: Set<string>, internals: BuildInternal
mapping.set(result.id, new Set<string>([specifier]));
}
}
})
}),
);
}
await Promise.all(promises);

View file

@ -78,7 +78,7 @@ function vitePluginManifest(_options: StaticBuildOptions, internals: BuildIntern
export function pluginManifest(
options: StaticBuildOptions,
internals: BuildInternals
internals: BuildInternals,
): AstroBuildPlugin {
return {
targets: ['server'],
@ -115,7 +115,7 @@ export function pluginManifest(
async function createManifest(
buildOpts: StaticBuildOptions,
internals: BuildInternals
internals: BuildInternals,
): Promise<SerializedSSRManifest> {
if (!internals.manifestEntryChunk) {
throw new Error(`Did not generate an entry chunk for SSR`);
@ -125,7 +125,7 @@ async function createManifest(
const clientStatics = new Set(
await glob('**/*', {
cwd: fileURLToPath(buildOpts.settings.config.build.client),
})
}),
);
for (const file of clientStatics) {
internals.staticFiles.add(file);
@ -149,7 +149,7 @@ function injectManifest(manifest: SerializedSSRManifest, chunk: Readonly<OutputC
function buildManifest(
opts: StaticBuildOptions,
internals: BuildInternals,
staticFiles: string[]
staticFiles: string[],
): SerializedSSRManifest {
const { settings } = opts;
@ -197,7 +197,7 @@ function buildManifest(
scripts.unshift(
Object.assign({}, pageData.hoistedScript, {
value,
})
}),
);
}
if (settings.scripts.some((script) => script.stage === 'page')) {

View file

@ -6,7 +6,7 @@ export { MIDDLEWARE_MODULE_ID } from '../../middleware/vite-plugin.js';
export function pluginMiddleware(
opts: StaticBuildOptions,
internals: BuildInternals
internals: BuildInternals,
): AstroBuildPlugin {
return {
targets: ['server'],

View file

@ -39,7 +39,7 @@ function vitePluginPages(opts: StaticBuildOptions, internals: BuildInternals): V
const pageDatas = getPagesFromVirtualModulePageName(
internals,
ASTRO_PAGE_RESOLVED_MODULE_ID,
id
id,
);
for (const pageData of pageDatas) {
const resolvedPage = await this.resolve(pageData.moduleSpecifier);

Some files were not shown because too many files have changed in this diff Show more