[ci] format

This commit is contained in:
matthewp 2022-10-12 21:27:56 +00:00 committed by fredkbot
parent e55af8a232
commit 575bf9205e
20 changed files with 138 additions and 114 deletions

View file

@ -6,7 +6,7 @@ import node from '@astrojs/node';
export default defineConfig({ export default defineConfig({
output: 'server', output: 'server',
adapter: node({ adapter: node({
mode: 'standalone' mode: 'standalone',
}), }),
integrations: [svelte()], integrations: [svelte()],
}); });

View file

@ -1422,7 +1422,9 @@ export interface PreviewServerParams {
port: number; port: number;
} }
export type CreatePreviewServer = (params: PreviewServerParams) => PreviewServer | Promise<PreviewServer>; export type CreatePreviewServer = (
params: PreviewServerParams
) => PreviewServer | Promise<PreviewServer>;
export interface PreviewModule { export interface PreviewModule {
default: CreatePreviewServer; default: CreatePreviewServer;

View file

@ -346,7 +346,7 @@ function mergeConfigRecursively(
merged[key] = [...arraify(existing ?? []), ...arraify(value ?? [])]; merged[key] = [...arraify(existing ?? []), ...arraify(value ?? [])];
continue; continue;
} }
if(isURL(existing) && isURL(value)) { if (isURL(existing) && isURL(value)) {
merged[key] = value; merged[key] = value;
continue; continue;
} }

View file

@ -21,7 +21,7 @@ const ASTRO_CONFIG_DEFAULTS: AstroUserConfig & any = {
format: 'directory', format: 'directory',
client: './dist/client/', client: './dist/client/',
server: './dist/server/', server: './dist/server/',
serverEntry: 'entry.mjs' serverEntry: 'entry.mjs',
}, },
server: { server: {
host: false, host: false,
@ -112,10 +112,7 @@ export const AstroConfigSchema = z.object({
.optional() .optional()
.default(ASTRO_CONFIG_DEFAULTS.build.server) .default(ASTRO_CONFIG_DEFAULTS.build.server)
.transform((val) => new URL(val)), .transform((val) => new URL(val)),
serverEntry: z serverEntry: z.string().optional().default(ASTRO_CONFIG_DEFAULTS.build.serverEntry),
.string()
.optional()
.default(ASTRO_CONFIG_DEFAULTS.build.serverEntry),
}) })
.optional() .optional()
.default({}), .default({}),
@ -252,28 +249,26 @@ export function createRelativeSchema(cmd: string, fileProtocolRoot: URL) {
.string() .string()
.default(ASTRO_CONFIG_DEFAULTS.outDir) .default(ASTRO_CONFIG_DEFAULTS.outDir)
.transform((val) => new URL(appendForwardSlash(val), fileProtocolRoot)), .transform((val) => new URL(appendForwardSlash(val), fileProtocolRoot)),
build: z.object({ build: z
format: z .object({
.union([z.literal('file'), z.literal('directory')]) format: z
.union([z.literal('file'), z.literal('directory')])
.optional()
.default(ASTRO_CONFIG_DEFAULTS.build.format),
client: z
.string()
.optional()
.default(ASTRO_CONFIG_DEFAULTS.build.client)
.transform((val) => new URL(val, fileProtocolRoot)),
server: z
.string()
.optional()
.default(ASTRO_CONFIG_DEFAULTS.build.server)
.transform((val) => new URL(val, fileProtocolRoot)),
serverEntry: z.string().optional().default(ASTRO_CONFIG_DEFAULTS.build.serverEntry),
})
.optional() .optional()
.default(ASTRO_CONFIG_DEFAULTS.build.format), .default({}),
client: z
.string()
.optional()
.default(ASTRO_CONFIG_DEFAULTS.build.client)
.transform(val => new URL(val, fileProtocolRoot)),
server: z
.string()
.optional()
.default(ASTRO_CONFIG_DEFAULTS.build.server)
.transform(val => new URL(val, fileProtocolRoot)),
serverEntry: z
.string()
.optional()
.default(ASTRO_CONFIG_DEFAULTS.build.serverEntry),
})
.optional()
.default({}),
server: z.preprocess( server: z.preprocess(
// preprocess // preprocess
(val) => (val) =>
@ -306,13 +301,19 @@ export function createRelativeSchema(cmd: string, fileProtocolRoot: URL) {
}) })
.optional() .optional()
.default({}), .default({}),
}).transform(config => { }).transform((config) => {
// If the user changed outDir but not build.server, build.config, adjust so those // If the user changed outDir but not build.server, build.config, adjust so those
// are relative to the outDir, as is the expected default. // are relative to the outDir, as is the expected default.
if(!config.build.server.toString().startsWith(config.outDir.toString()) && config.build.server.toString().endsWith('dist/server/')) { if (
!config.build.server.toString().startsWith(config.outDir.toString()) &&
config.build.server.toString().endsWith('dist/server/')
) {
config.build.server = new URL('./dist/server/', config.outDir); config.build.server = new URL('./dist/server/', config.outDir);
} }
if(!config.build.client.toString().startsWith(config.outDir.toString()) && config.build.client.toString().endsWith('dist/client/')) { if (
!config.build.client.toString().startsWith(config.outDir.toString()) &&
config.build.client.toString().endsWith('dist/client/')
) {
config.build.client = new URL('./dist/client/', config.outDir); config.build.client = new URL('./dist/client/', config.outDir);
} }
return config; return config;

View file

@ -1,9 +1,9 @@
import type { AstroTelemetry } from '@astrojs/telemetry'; import type { AstroTelemetry } from '@astrojs/telemetry';
import { createRequire } from 'module';
import type { AstroSettings, PreviewModule, PreviewServer } from '../../@types/astro'; import type { AstroSettings, PreviewModule, PreviewServer } from '../../@types/astro';
import { runHookConfigDone, runHookConfigSetup } from '../../integrations/index.js'; import { runHookConfigDone, runHookConfigSetup } from '../../integrations/index.js';
import type { LogOptions } from '../logger/core'; import type { LogOptions } from '../logger/core';
import createStaticPreviewServer from './static-preview-server.js'; import createStaticPreviewServer from './static-preview-server.js';
import { createRequire } from 'module';
import { getResolvedHostForHttpServer } from './util.js'; import { getResolvedHostForHttpServer } from './util.js';
interface PreviewOptions { interface PreviewOptions {
@ -42,7 +42,7 @@ export default async function preview(
const previewEntrypoint = require.resolve(settings.adapter.previewEntrypoint); const previewEntrypoint = require.resolve(settings.adapter.previewEntrypoint);
const previewModule = (await import(previewEntrypoint)) as Partial<PreviewModule>; const previewModule = (await import(previewEntrypoint)) as Partial<PreviewModule>;
if(typeof previewModule.default !== 'function') { if (typeof previewModule.default !== 'function') {
throw new Error(`[preview] ${settings.adapter.name} cannot preview your app.`); throw new Error(`[preview] ${settings.adapter.name} cannot preview your app.`);
} }
@ -51,7 +51,7 @@ export default async function preview(
client: settings.config.build.client, client: settings.config.build.client,
serverEntrypoint: new URL(settings.config.build.serverEntry, settings.config.build.server), serverEntrypoint: new URL(settings.config.build.serverEntry, settings.config.build.server),
host, host,
port port,
}); });
return server; return server;

View file

@ -212,7 +212,10 @@ export async function runHookBuildStart({
buildConfig: BuildConfig; buildConfig: BuildConfig;
logging: LogOptions; logging: LogOptions;
}) { }) {
function warnDeprecated(integration: AstroIntegration, prop: 'server' | 'client' | 'serverEntry') { function warnDeprecated(
integration: AstroIntegration,
prop: 'server' | 'client' | 'serverEntry'
) {
let value: any = Reflect.get(buildConfig, prop); let value: any = Reflect.get(buildConfig, prop);
Object.defineProperty(buildConfig, prop, { Object.defineProperty(buildConfig, prop, {
enumerable: true, enumerable: true,
@ -221,18 +224,23 @@ export async function runHookBuildStart({
}, },
set(newValue) { set(newValue) {
value = newValue; value = newValue;
warn(logging, 'astro:build:start', `Your adapter ${bold(integration.name)} is using a deprecated API, buildConfig. ${bold(prop)} config should be set via config.build.${prop} instead.`); warn(
} logging,
'astro:build:start',
`Your adapter ${bold(integration.name)} is using a deprecated API, buildConfig. ${bold(
prop
)} config should be set via config.build.${prop} instead.`
);
},
}); });
return () => { return () => {
Object.defineProperty(buildConfig, prop, { Object.defineProperty(buildConfig, prop, {
enumerable: true, enumerable: true,
value value,
}); });
} };
} }
for (const integration of config.integrations) { for (const integration of config.integrations) {
if (integration?.hooks?.['astro:build:start']) { if (integration?.hooks?.['astro:build:start']) {
const undoClientWarning = warnDeprecated(integration, 'client'); const undoClientWarning = warnDeprecated(integration, 'client');

View file

@ -48,7 +48,7 @@ export default function createIntegration(args?: Options): AstroIntegration {
client: new URL('./static/', config.outDir), client: new URL('./static/', config.outDir),
server: new URL('./', config.outDir), server: new URL('./', config.outDir),
serverEntry: '_worker.js', serverEntry: '_worker.js',
} },
}); });
}, },
'astro:config:done': ({ setAdapter, config }) => { 'astro:config:done': ({ setAdapter, config }) => {
@ -83,7 +83,7 @@ export default function createIntegration(args?: Options): AstroIntegration {
}, },
'astro:build:start': ({ buildConfig }) => { 'astro:build:start': ({ buildConfig }) => {
// Backwards compat // Backwards compat
if(needsBuildConfig) { if (needsBuildConfig) {
buildConfig.client = new URL('./static/', _config.outDir); buildConfig.client = new URL('./static/', _config.outDir);
buildConfig.server = new URL('./', _config.outDir); buildConfig.server = new URL('./', _config.outDir);
buildConfig.serverEntry = '_worker.js'; buildConfig.serverEntry = '_worker.js';

View file

@ -49,7 +49,7 @@ export default function createIntegration(args?: Options): AstroIntegration {
}, },
'astro:build:start': ({ buildConfig }) => { 'astro:build:start': ({ buildConfig }) => {
// Backwards compat // Backwards compat
if(needsBuildConfig) { if (needsBuildConfig) {
_buildConfig = buildConfig; _buildConfig = buildConfig;
} }
}, },

View file

@ -100,7 +100,7 @@ export default function integration(options: IntegrationOptions = {}): AstroInte
}, },
'astro:build:start': ({ buildConfig }) => { 'astro:build:start': ({ buildConfig }) => {
// Backwards compat // Backwards compat
if(needsBuildConfig) { if (needsBuildConfig) {
_buildConfig = buildConfig; _buildConfig = buildConfig;
} }
}, },

View file

@ -157,7 +157,7 @@ export function netlifyEdgeFunctions({ dist }: NetlifyEdgeFunctionsOptions = {})
} }
}, },
'astro:build:start': ({ buildConfig }) => { 'astro:build:start': ({ buildConfig }) => {
if(needsBuildConfig) { if (needsBuildConfig) {
buildConfig.client = _config.outDir; buildConfig.client = _config.outDir;
buildConfig.server = new URL('./.netlify/edge-functions/', _config.root); buildConfig.server = new URL('./.netlify/edge-functions/', _config.root);
buildConfig.serverEntry = 'entry.js'; buildConfig.serverEntry = 'entry.js';

View file

@ -34,7 +34,7 @@ function netlifyFunctions({
build: { build: {
client: outDir, client: outDir,
server: new URL('./.netlify/functions-internal/', config.root), server: new URL('./.netlify/functions-internal/', config.root),
} },
}); });
}, },
'astro:config:done': ({ config, setAdapter }) => { 'astro:config:done': ({ config, setAdapter }) => {
@ -50,7 +50,7 @@ function netlifyFunctions({
} }
}, },
'astro:build:start': ({ buildConfig }) => { 'astro:build:start': ({ buildConfig }) => {
if(needsBuildConfig) { if (needsBuildConfig) {
buildConfig.client = _config.outDir; buildConfig.client = _config.outDir;
buildConfig.server = new URL('./.netlify/functions-internal/', _config.root); buildConfig.server = new URL('./.netlify/functions-internal/', _config.root);
entryFile = buildConfig.serverEntry.replace(/\.m?js/, ''); entryFile = buildConfig.serverEntry.replace(/\.m?js/, '');

View file

@ -1,8 +1,8 @@
import fs from 'fs'; import fs from 'fs';
import http from 'http'; import http from 'http';
import https from 'https'; import https from 'https';
import { fileURLToPath } from 'url';
import send from 'send'; import send from 'send';
import { fileURLToPath } from 'url';
interface CreateServerOptions { interface CreateServerOptions {
client: URL; client: URL;
@ -10,9 +10,12 @@ interface CreateServerOptions {
host: string | undefined; host: string | undefined;
} }
export function createServer({ client, port, host }: CreateServerOptions, handler: http.RequestListener) { export function createServer(
{ client, port, host }: CreateServerOptions,
handler: http.RequestListener
) {
const listener: http.RequestListener = (req, res) => { const listener: http.RequestListener = (req, res) => {
if(req.url) { if (req.url) {
const fileURL = new URL('.' + req.url, client); const fileURL = new URL('.' + req.url, client);
const stream = send(req, fileURLToPath(fileURL), { const stream = send(req, fileURLToPath(fileURL), {
@ -21,8 +24,8 @@ export function createServer({ client, port, host }: CreateServerOptions, handle
let forwardError = false; let forwardError = false;
stream.on('error', err => { stream.on('error', (err) => {
if(forwardError) { if (forwardError) {
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
console.error(err.toString()); console.error(err.toString());
res.writeHead(500); res.writeHead(500);
@ -42,14 +45,18 @@ export function createServer({ client, port, host }: CreateServerOptions, handle
} }
}; };
let httpServer: http.Server<typeof http.IncomingMessage, typeof http.ServerResponse> | let httpServer:
https.Server<typeof http.IncomingMessage, typeof http.ServerResponse>; | http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>
| https.Server<typeof http.IncomingMessage, typeof http.ServerResponse>;
if(process.env.SERVER_CERT_PATH && process.env.SERVER_KEY_PATH) { if (process.env.SERVER_CERT_PATH && process.env.SERVER_KEY_PATH) {
httpServer = https.createServer({ httpServer = https.createServer(
key: fs.readFileSync(process.env.SERVER_KEY_PATH), {
cert: fs.readFileSync(process.env.SERVER_CERT_PATH), key: fs.readFileSync(process.env.SERVER_KEY_PATH),
}, listener); cert: fs.readFileSync(process.env.SERVER_CERT_PATH),
},
listener
);
} else { } else {
httpServer = http.createServer(listener); httpServer = http.createServer(listener);
} }

View file

@ -7,13 +7,13 @@ export function getAdapter(options: Options): AstroAdapter {
serverEntrypoint: '@astrojs/node/server.js', serverEntrypoint: '@astrojs/node/server.js',
previewEntrypoint: '@astrojs/node/preview.js', previewEntrypoint: '@astrojs/node/preview.js',
exports: ['handler'], exports: ['handler'],
args: options args: options,
}; };
} }
export default function createIntegration(userOptions: UserOptions): AstroIntegration { export default function createIntegration(userOptions: UserOptions): AstroIntegration {
if(!userOptions?.mode) { if (!userOptions?.mode) {
throw new Error(`[@astrojs/node] Setting the 'mode' option is required.`) throw new Error(`[@astrojs/node] Setting the 'mode' option is required.`);
} }
let needsBuildConfig = false; let needsBuildConfig = false;
@ -38,11 +38,11 @@ export default function createIntegration(userOptions: UserOptions): AstroIntegr
}, },
'astro:build:start': ({ buildConfig }) => { 'astro:build:start': ({ buildConfig }) => {
// Backwards compat // Backwards compat
if(needsBuildConfig) { if (needsBuildConfig) {
_options.client = buildConfig.client.toString(); _options.client = buildConfig.client.toString();
_options.server = buildConfig.server.toString(); _options.server = buildConfig.server.toString();
} }
} },
}, },
}; };
} }

View file

@ -2,8 +2,12 @@ import type { NodeApp } from 'astro/app/node';
import type { IncomingMessage, ServerResponse } from 'http'; import type { IncomingMessage, ServerResponse } from 'http';
import type { Readable } from 'stream'; import type { Readable } from 'stream';
export default function(app: NodeApp) { export default function (app: NodeApp) {
return async function(req: IncomingMessage, res: ServerResponse, next?: (err?: unknown) => void) { return async function (
req: IncomingMessage,
res: ServerResponse,
next?: (err?: unknown) => void
) {
try { try {
const route = app.match(req); const route = app.match(req);

View file

@ -1,28 +1,27 @@
import type { CreatePreviewServer } from 'astro'; import type { CreatePreviewServer } from 'astro';
import type { createExports } from './server';
import http from 'http'; import http from 'http';
import { fileURLToPath } from 'url'; import { fileURLToPath } from 'url';
import { createServer } from './http-server.js'; import { createServer } from './http-server.js';
import type { createExports } from './server';
const preview: CreatePreviewServer = async function({ const preview: CreatePreviewServer = async function ({ client, serverEntrypoint, host, port }) {
client,
serverEntrypoint,
host,
port,
}) {
type ServerModule = ReturnType<typeof createExports>; type ServerModule = ReturnType<typeof createExports>;
type MaybeServerModule = Partial<ServerModule>; type MaybeServerModule = Partial<ServerModule>;
let ssrHandler: ServerModule['handler']; let ssrHandler: ServerModule['handler'];
try { try {
process.env.ASTRO_NODE_AUTOSTART = 'disabled'; process.env.ASTRO_NODE_AUTOSTART = 'disabled';
const ssrModule: MaybeServerModule = await import(serverEntrypoint.toString()); const ssrModule: MaybeServerModule = await import(serverEntrypoint.toString());
if(typeof ssrModule.handler === 'function') { if (typeof ssrModule.handler === 'function') {
ssrHandler = ssrModule.handler; ssrHandler = ssrModule.handler;
} else { } else {
throw new Error(`The server entrypoint doesn't have a handler. Are you sure this is the right file?`); throw new Error(
`The server entrypoint doesn't have a handler. Are you sure this is the right file?`
);
} }
} catch(_err) { } catch (_err) {
throw new Error(`The server entrypoint ${fileURLToPath} does not exist. Have you ran a build yet?`); throw new Error(
`The server entrypoint ${fileURLToPath} does not exist. Have you ran a build yet?`
);
} }
const handler: http.RequestListener = (req, res) => { const handler: http.RequestListener = (req, res) => {
@ -37,18 +36,19 @@ const preview: CreatePreviewServer = async function({
}); });
}; };
const server = createServer({ const server = createServer(
client, {
port, client,
host, port,
}, handler); host,
},
handler
);
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
console.log(`Preview server listening on http://${host}:${port}`); console.log(`Preview server listening on http://${host}:${port}`);
return server; return server;
}
export {
preview as default
}; };
export { preview as default };

View file

@ -1,9 +1,9 @@
import type { SSRManifest } from 'astro';
import type { Options } from './types';
import { polyfill } from '@astrojs/webapi'; import { polyfill } from '@astrojs/webapi';
import type { SSRManifest } from 'astro';
import { NodeApp } from 'astro/app/node'; import { NodeApp } from 'astro/app/node';
import middleware from './middleware.js'; import middleware from './middleware.js';
import startServer from './standalone.js'; import startServer from './standalone.js';
import type { Options } from './types';
polyfill(globalThis, { polyfill(globalThis, {
exclude: 'window document', exclude: 'window document',
@ -12,12 +12,12 @@ polyfill(globalThis, {
export function createExports(manifest: SSRManifest) { export function createExports(manifest: SSRManifest) {
const app = new NodeApp(manifest); const app = new NodeApp(manifest);
return { return {
handler: middleware(app) handler: middleware(app),
}; };
} }
export function start(manifest: SSRManifest, options: Options) { export function start(manifest: SSRManifest, options: Options) {
if(options.mode !== 'standalone' || process.env.ASTRO_NODE_AUTOSTART === 'disabled') { if (options.mode !== 'standalone' || process.env.ASTRO_NODE_AUTOSTART === 'disabled') {
return; return;
} }

View file

@ -1,9 +1,9 @@
import type { NodeApp } from 'astro/app/node'; import type { NodeApp } from 'astro/app/node';
import type { Options } from './types';
import path from 'path'; import path from 'path';
import { fileURLToPath } from 'url'; import { fileURLToPath } from 'url';
import middleware from './middleware.js';
import { createServer } from './http-server.js'; import { createServer } from './http-server.js';
import middleware from './middleware.js';
import type { Options } from './types';
function resolvePaths(options: Options) { function resolvePaths(options: Options) {
const clientURLRaw = new URL(options.client); const clientURLRaw = new URL(options.client);
@ -35,16 +35,19 @@ export function getResolvedHostForHttpServer(host: string | boolean) {
} }
export default function startServer(app: NodeApp, options: Options) { export default function startServer(app: NodeApp, options: Options) {
const port = process.env.PORT ? Number(process.env.port) : (options.port ?? 8080); const port = process.env.PORT ? Number(process.env.port) : options.port ?? 8080;
const { client } = resolvePaths(options); const { client } = resolvePaths(options);
const handler = middleware(app); const handler = middleware(app);
const host = getResolvedHostForHttpServer(options.host); const host = getResolvedHostForHttpServer(options.host);
const server = createServer({ const server = createServer(
client, {
port, client,
host, port,
}, handler); host,
},
handler
);
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
console.log(`Server listening on http://${host}:${port}`); console.log(`Server listening on http://${host}:${port}`);

View file

@ -1,4 +1,3 @@
export interface UserOptions { export interface UserOptions {
/** /**
* Specifies the mode that the adapter builds to. * Specifies the mode that the adapter builds to.
@ -6,7 +5,7 @@ export interface UserOptions {
* - 'middleware' - Build to middleware, to be used within another Node.js server, such as Express. * - 'middleware' - Build to middleware, to be used within another Node.js server, such as Express.
* - 'standalone' - Build to a standalone server. The server starts up just by running the built script. * - 'standalone' - Build to a standalone server. The server starts up just by running the built script.
*/ */
mode: 'middleware' | 'standalone'; mode: 'middleware' | 'standalone';
} }
export interface Options extends UserOptions { export interface Options extends UserOptions {

View file

@ -31,7 +31,7 @@ export default function vercelEdge(): AstroIntegration {
serverEntry: 'entry.mjs', serverEntry: 'entry.mjs',
client: new URL('./static/', outDir), client: new URL('./static/', outDir),
server: new URL('./functions/render.func/', config.outDir), server: new URL('./functions/render.func/', config.outDir),
} },
}); });
}, },
'astro:config:done': ({ setAdapter, config }) => { 'astro:config:done': ({ setAdapter, config }) => {
@ -41,7 +41,7 @@ export default function vercelEdge(): AstroIntegration {
functionFolder = config.build.server; functionFolder = config.build.server;
}, },
'astro:build:start': ({ buildConfig }) => { 'astro:build:start': ({ buildConfig }) => {
if(needsBuildConfig) { if (needsBuildConfig) {
buildConfig.client = new URL('./static/', _config.outDir); buildConfig.client = new URL('./static/', _config.outDir);
serverEntry = buildConfig.serverEntry = 'entry.mjs'; serverEntry = buildConfig.serverEntry = 'entry.mjs';
functionFolder = buildConfig.server = new URL('./functions/render.func/', _config.outDir); functionFolder = buildConfig.server = new URL('./functions/render.func/', _config.outDir);

View file

@ -33,7 +33,7 @@ export default function vercelEdge(): AstroIntegration {
serverEntry: 'entry.js', serverEntry: 'entry.js',
client: new URL('./static/', outDir), client: new URL('./static/', outDir),
server: new URL('./dist/', config.root), server: new URL('./dist/', config.root),
} },
}); });
}, },
'astro:config:done': ({ setAdapter, config }) => { 'astro:config:done': ({ setAdapter, config }) => {
@ -51,7 +51,7 @@ export default function vercelEdge(): AstroIntegration {
} }
}, },
'astro:build:start': ({ buildConfig }) => { 'astro:build:start': ({ buildConfig }) => {
if(needsBuildConfig) { if (needsBuildConfig) {
buildConfig.client = new URL('./static/', _config.outDir); buildConfig.client = new URL('./static/', _config.outDir);
buildTempFolder = buildConfig.server = new URL('./dist/', _config.root); buildTempFolder = buildConfig.server = new URL('./dist/', _config.root);
serverEntry = buildConfig.serverEntry = 'entry.js'; serverEntry = buildConfig.serverEntry = 'entry.js';