1.2.2 • Published 1 year ago

nestjs-handlebars v1.2.2

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

NestJS Handlebars Template Engine

Description

This is a Handlebars template engine for NestJS. It uses the i18next library for internationalization.

Integration

To start using it, we first install the required dependencies. In this chapter we will demonstrate the use of the pagination for nestjs.

You simply need to install the package !

$ npm install --save nestjs-handlebars

Getting Started

Once the installation process is complete, we can import the HandlebarsModule into the root AppModule

import {Module} from '@nestjs/common';
import {HandlebarsModule} from 'nestjs-handlebars';
import {MailModule} from './modules/mail/mail.module';
import {SmsModule} from './modules/sms/sms.module';

@Module({
    imports: [
        HandlebarsModule.forRoot({
            // Global configuration
            i18n: {
                use: true,
                i18nHelperName: 'i18n',
            },
        }),
        MailModule,
        SmsModule,
    ],
})
export class ApplicationModule {
}

The forRoot() method supports all the configuration properties exposed by the handlebars constuctor . In addition, there are several extra configuration properties described below.

Configuration for I18nOptions

FieldDescription
useIndicates whether the I18n feature is enabled or not.
i18nHelperNameSpecifies a custom name for the Handlebars helper.
directoriesArray containing directories where translation files are located.
defaultDirectoryNameSpecifies the default directory name where translation files are located.

Configuration for HandlebarsOptions

FieldDescription
partialDirectoriesArray containing directories where partial files are located.
templateOptionsAn object of type RuntimeOptions used to determine template options.
compileOptionsAn object of type CompileOptions used to determine compile options.
helpersList of available Handlebars helpers.
i18nAn object of type I18nOptions used to determine I18n features.

Usage

HandlebarsModule.forSubModule()

The forSubModule() method is used to import the HandlebarsService into a sub-module. The first parameter is the module name and the second parameter is the configuration object. Configuration properties are the same as the * *forRoot() method and extra configuration property is templateDirectory**. This property is used to specify the directory where the template files are located for the sub-module.

import {Module} from '@nestjs/common';
import {HandlebarsModule} from 'nestjs-handlebars';
import * as path from 'path';
import {SmsService} from './sms.service';

@Module({
    imports: [
        HandlebarsModule.forSubModule('sms', {
            templateDirectory: path.join(__dirname, 'templates'),
            partialDirectories: [path.join(__dirname, 'partials')],
            i18n: {
                use: true,
                directories: [path.join(__dirname, 'i18n')],
            },
        }),
    ],
    providers: [SmsService],
    exports: [SmsService],
})
export class SmsModule {
}

Service

Handlebars implements the Active Record pattern. With this pattern, you use model classes directly to interact with the database. To continue the example, we need at least one model. Let's define the Item Model.

import {Injectable} from '@nestjs/common';
import {HandlebarsService, InjectHandlebars} from 'nestjs-handlebars';

@Injectable()
export class SmsService {
    @InjectHandlebars('sms') private readonly handlebars: HandlebarsService;

    compileSmsTest() {
        return this.handlebars.compile('sms-test');
    }

    compileSmsWithLocale(locale?: string) {
        return this.handlebars.compile(`sms-with-locale`, {}, locale);
    }

    compileSmsWithPartial() {
        return this.handlebars.compile('sms-with-partial');
    }

    compileSmsWithPartialWithParam(param: { name: string }) {
        return this.handlebars.compile('sms-with-partial-with-param', param);
    }
}

Decorator

InjectHandlebars is a decorator that allows you to inject a HandlebarsService instance into a property. The decorator wants module name as a parameter.

License

nestjs-handlebars is MIT licensed.

1.2.2

1 year ago

1.2.1

1 year ago

1.2.0

1 year ago

1.1.0

1 year ago

1.0.0

1 year ago