You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.4 KiB

import fastify from "fastify";
import pointOfView, { PointOfViewOptions } from "..";
import { expectAssignable } from "tsd";
import * as path from "path";
interface Locals {
appVersion: string,
}
declare module "fastify" {
interface FastifyReply {
locals: Partial<Locals> | undefined
}
}
const app = fastify();
app.register(pointOfView, {
engine: {
handlebars: require("handlebars"),
},
templates: "templates",
includeViewExtension: true,
defaultContext: {
dev: true,
},
options: {},
layout: "layout",
charset: "utf-8",
maxCache: 100,
production: false,
root: path.resolve(__dirname, "../templates"),
viewExt: "ejs",
});
app.get("/", (request, reply) => {
reply.view("/index-with-no-data");
});
app.get("/data", (request, reply) => {
if (!reply.locals) {
reply.locals = {}
}
// reply.locals.appVersion = 1 // not a valid type
reply.locals.appVersion = '4.14.0'
reply.view("/index", { text: "Sample data" });
});
app.get("/dataTyped", (request, reply) => {
if (!reply.locals) {
reply.locals = {}
}
// reply.locals.appVersion = 1 // not a valid type
reply.locals.appVersion = '4.14.0'
reply.view<{ text: string; }>("/index", { text: "Sample data" });
});
app.listen(3000, (err, address) => {
if (err) throw err
console.log(`server listening on ${address} ...`)
})
expectAssignable<PointOfViewOptions>({ engine: { twig: require('twig') }, propertyName: 'mobile' })