Skip to content

Commit

Permalink
Convert more adapter files to TypeScript (#138)
Browse files Browse the repository at this point in the history
  • Loading branch information
benmccann authored Nov 20, 2020
1 parent 8f04a25 commit 05bb61b
Show file tree
Hide file tree
Showing 15 changed files with 287 additions and 237 deletions.
3 changes: 2 additions & 1 deletion packages/adapter-netlify/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.DS_Store
node_modules
render.js
render.js
render.d.ts
2 changes: 1 addition & 1 deletion packages/adapter-netlify/rollup.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import commonjs from '@rollup/plugin-commonjs';
import typescript from 'rollup-plugin-typescript2';

export default {
input: 'src/index.ts',
input: 'src/render.ts',
output: {
file: 'render.js',
format: 'cjs'
Expand Down
File renamed without changes.
5 changes: 4 additions & 1 deletion packages/adapter-node/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
.DS_Store
node_modules
server.js
index.js
index.d.ts
server.js
server.d.ts
42 changes: 0 additions & 42 deletions packages/adapter-node/index.js

This file was deleted.

16 changes: 14 additions & 2 deletions packages/adapter-node/rollup.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,20 @@ import { nodeResolve } from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import typescript from 'rollup-plugin-typescript2';

export default {
export default [{
input: 'src/index.ts',
output: {
file: 'index.js',
format: 'cjs'
},
plugins: [
nodeResolve(),
commonjs(),
typescript()
],
external: require('module').builtinModules
}, {
input: 'src/server.ts',
output: {
file: 'server.js',
format: 'cjs'
Expand All @@ -14,4 +26,4 @@ export default {
typescript()
],
external: require('module').builtinModules
};
}];
117 changes: 47 additions & 70 deletions packages/adapter-node/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,72 +1,49 @@
import * as fs from 'fs';
import * as http from 'http';
import { parse, URLSearchParams } from 'url';
import sirv from 'sirv';
import { render } from '@sveltejs/app-utils/renderer';
import { get_body } from '@sveltejs/app-utils/http';
import type { PageComponentManifest, EndpointManifest, Method } from '@sveltejs/app-utils';

const manifest = require('./manifest.js');
const client = require('./client.json');

const { PORT = 3000 } = process.env;

const mutable = (dir: string) => sirv(dir, {
etag: true,
maxAge: 0
});

const static_handler = mutable('static');
const prerendered_handler = fs.existsSync('build/prerendered')
? mutable('build/prerendered')
: (_req: http.IncomingMessage, _res: http.ServerResponse, next: () => void) => next();

const assets_handler = sirv('build/assets', {
maxAge: 31536000,
immutable: true
});

const root = require('./root.js');
const setup = require('./setup.js');
const template = fs.readFileSync('build/app.html', 'utf-8');

const server = http.createServer((req, res) => {
assets_handler(req, res, () => {
static_handler(req, res, () => {
prerendered_handler(req, res, async () => {
const parsed = parse(req.url || '');

const rendered = await render({
host: null, // TODO
method: req.method as Method,
headers: req.headers as Record<string, string>, // TODO: what about repeated headers, i.e. string[]
path: parsed.pathname as string,
body: await get_body(req),
query: new URLSearchParams(parsed.query || '')
}, {
static_dir: 'static',
template,
manifest,
client,
root,
setup,
load: (route: PageComponentManifest | EndpointManifest) => require(`./routes/${route.name}.js`),
dev: false,
only_prerender: false
});

if (rendered) {
res.writeHead(rendered.status, rendered.headers);
res.end(rendered.body);
} else {
res.statusCode = 404;
res.end('Not found');
}
});
});
import fs from 'fs';
import { RouteManifest } from '@sveltejs/app-utils';
import { copy } from '@sveltejs/app-utils/files';
import { prerender } from '@sveltejs/app-utils/renderer';
import { Logger } from '@sveltejs/app-utils/renderer/prerender';

module.exports = async function adapter({
dir,
manifest,
log
}: {
dir: string,
manifest: RouteManifest,
log: Logger
}) {
const out = 'build'; // TODO implement adapter options

copy(`${dir}/client`, `${out}/assets/_app`, file => !!file && file[0] !== '.');
copy(`${dir}/server`, out);
copy(`${__dirname}/server.js`, `${out}/index.js`);
copy(`${dir}/client.json`, `${out}/client.json`);
copy('src/app.html', `${out}/app.html`);

log.info('Prerendering static pages...');

await prerender({
force: true,
dir,
out: `${out}/prerendered`,
assets: `${out}/assets`,
manifest,
log
});
});

server.listen(PORT, () => {
console.log(`Listening on port ${PORT}`);
});
// generate manifest
const written_manifest = `module.exports = {
layout: ${JSON.stringify(manifest.layout)},
error: ${JSON.stringify(manifest.error)},
components: ${JSON.stringify(manifest.components)},
pages: [
${manifest.pages.map(page => `{ pattern: ${page.pattern}, parts: ${JSON.stringify(page.parts)} }`).join(',\n\t\t\t')}
],
endpoints: [
${manifest.endpoints.map(route => `{ name: '${route.name}', pattern: ${route.pattern}, file: '${route.file}', params: ${JSON.stringify(route.params)} }`).join(',\n\t\t\t')}
]
};`.replace(/^\t/gm, '');

fs.writeFileSync(`${out}/manifest.js`, written_manifest);
};
72 changes: 72 additions & 0 deletions packages/adapter-node/src/server.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import * as fs from 'fs';
import * as http from 'http';
import { parse, URLSearchParams } from 'url';
import sirv from 'sirv';
import { render } from '@sveltejs/app-utils/renderer';
import { get_body } from '@sveltejs/app-utils/http';
import type { PageComponentManifest, EndpointManifest, Method } from '@sveltejs/app-utils';

const manifest = require('./manifest.js');
const client = require('./client.json');

const { PORT = 3000 } = process.env;

const mutable = (dir: string) => sirv(dir, {
etag: true,
maxAge: 0
});

const static_handler = mutable('static');
const prerendered_handler = fs.existsSync('build/prerendered')
? mutable('build/prerendered')
: (_req: http.IncomingMessage, _res: http.ServerResponse, next: () => void) => next();

const assets_handler = sirv('build/assets', {
maxAge: 31536000,
immutable: true
});

const root = require('./root.js');
const setup = require('./setup.js');
const template = fs.readFileSync('build/app.html', 'utf-8');

const server = http.createServer((req, res) => {
assets_handler(req, res, () => {
static_handler(req, res, () => {
prerendered_handler(req, res, async () => {
const parsed = parse(req.url || '');

const rendered = await render({
host: null, // TODO
method: req.method as Method,
headers: req.headers as Record<string, string>, // TODO: what about repeated headers, i.e. string[]
path: parsed.pathname as string,
body: await get_body(req),
query: new URLSearchParams(parsed.query || '')
}, {
static_dir: 'static',
template,
manifest,
client,
root,
setup,
load: (route: PageComponentManifest | EndpointManifest) => require(`./routes/${route.name}.js`),
dev: false,
only_prerender: false
});

if (rendered) {
res.writeHead(rendered.status, rendered.headers);
res.end(rendered.body);
} else {
res.statusCode = 404;
res.end('Not found');
}
});
});
});
});

server.listen(PORT, () => {
console.log(`Listening on port ${PORT}`);
});
5 changes: 4 additions & 1 deletion packages/adapter-static/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
.DS_Store
node_modules
server.js
index.js
index.d.ts
server.js
server.d.ts
6 changes: 5 additions & 1 deletion packages/adapter-vercel/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
.DS_Store
node_modules
node_modules
index.js
index.d.ts
server.js
server.d.ts
57 changes: 0 additions & 57 deletions packages/adapter-vercel/index.js

This file was deleted.

16 changes: 14 additions & 2 deletions packages/adapter-vercel/rollup.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,20 @@ import { nodeResolve } from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import typescript from 'rollup-plugin-typescript2';

export default {
export default [{
input: 'src/index.ts',
output: {
file: 'index.js',
format: 'cjs'
},
plugins: [
nodeResolve(),
commonjs(),
typescript()
],
external: require('module').builtinModules
}, {
input: 'src/server.ts',
output: {
file: 'server.js',
format: 'cjs'
Expand All @@ -14,4 +26,4 @@ export default {
typescript()
],
external: require('module').builtinModules
};
}];
Loading

0 comments on commit 05bb61b

Please sign in to comment.