From 4041b38ebd9356adadf593fba272b16b16d382d2 Mon Sep 17 00:00:00 2001 From: Harminder virk Date: Sat, 14 Sep 2019 21:40:39 +0530 Subject: [PATCH] refactor: accept an object of options when instantiating edge --- index.ts | 3 +-- src/Contracts/index.ts | 10 +++++++ src/Edge/index.ts | 15 ++++++++--- test/edge.spec.ts | 59 ++++++++++++------------------------------ 4 files changed, 39 insertions(+), 48 deletions(-) diff --git a/index.ts b/index.ts index 6623449..dc39201 100644 --- a/index.ts +++ b/index.ts @@ -7,7 +7,6 @@ * file that was distributed with this source code. */ -import { Loader } from './src/Loader' import { Edge } from './src/Edge' export { @@ -29,5 +28,5 @@ export { export { Edge } -const edge = new Edge(new Loader()) +const edge = new Edge() export default edge diff --git a/src/Contracts/index.ts b/src/Contracts/index.ts index 78ed423..d08ea10 100644 --- a/src/Contracts/index.ts +++ b/src/Contracts/index.ts @@ -113,11 +113,21 @@ export interface EdgeRendererContract { render (templatePath: string, state?: any): string, } +/** + * Shape of options that can be passed to the + * edge constructor + */ +export type EdgeOptions = { + loader?: LoaderContract, + cache?: boolean, +} + /** * Shape of the main module */ export interface EdgeContract { loader: LoaderContract, + compiler: CompilerContract, registerTag (tag: TagContract): this, registerTemplate (templatePath: string, contents: LoaderTemplate): this, diff --git a/src/Edge/index.ts b/src/Edge/index.ts index 478fb6e..61d0374 100644 --- a/src/Edge/index.ts +++ b/src/Edge/index.ts @@ -17,10 +17,10 @@ import { Compiler } from '../Compiler' import { EdgeRenderer } from '../Renderer' import { - LoaderContract, TagContract, - LoaderTemplate, + EdgeOptions, EdgeContract, + LoaderTemplate, EdgeRendererContract, } from '../Contracts' @@ -36,12 +36,19 @@ export class Edge implements EdgeContract { */ private _tags = Object.assign({}, Tags) + /** + * The loader to load templates. A loader can read and return + * templates from anywhere. The default loader reads files + * from the disk + */ + public loader = this._options.loader || new Loader() + /** * The underlying compiler in use */ - public compiler = new Compiler(this.loader, this._tags, false) + public compiler = new Compiler(this.loader, this._tags, !!this._options.cache) - constructor (public loader: LoaderContract = new Loader()) { + constructor (private _options: EdgeOptions = {}) { } /** diff --git a/test/edge.spec.ts b/test/edge.spec.ts index 1e61955..4ed0933 100644 --- a/test/edge.spec.ts +++ b/test/edge.spec.ts @@ -12,7 +12,6 @@ import { join } from 'path' import { Filesystem } from '@poppinss/dev-utils' import { Edge } from '../src/Edge' -import { Loader } from '../src/Loader' const fs = new Filesystem(join(__dirname, 'views')) @@ -22,32 +21,32 @@ test.group('Edge', (group) => { }) test('mount default disk', (assert) => { - const edge = new Edge(new Loader()) + const edge = new Edge() edge.mount(fs.basePath) assert.deepEqual(edge.loader.mounted, { default: fs.basePath }) }) test('mount named disk', (assert) => { - const edge = new Edge(new Loader()) + const edge = new Edge() edge.mount('foo', fs.basePath) assert.deepEqual(edge.loader.mounted, { foo: fs.basePath }) }) test('unmount named disk', (assert) => { - const edge = new Edge(new Loader()) + const edge = new Edge() edge.mount('foo', fs.basePath) edge.unmount('foo') assert.deepEqual(edge.loader.mounted, {}) }) test('register globals', (assert) => { - const edge = new Edge(new Loader()) + const edge = new Edge() edge.global('foo', 'bar') assert.deepEqual(edge['_globals'].foo, 'bar') }) test('add a custom tag to the tags list', (assert) => { - const edge = new Edge(new Loader()) + const edge = new Edge() class MyTag { public static tagName = 'mytag' @@ -62,7 +61,7 @@ test.group('Edge', (group) => { }) test('render a view using the render method', async (assert) => { - const edge = new Edge(new Loader()) + const edge = new Edge() await fs.add('foo.edge', 'Hello {{ username }}') edge.mount(fs.basePath) @@ -70,7 +69,7 @@ test.group('Edge', (group) => { }) test('pass locals to the view context', async (assert) => { - const edge = new Edge(new Loader()) + const edge = new Edge() await fs.add('foo.edge', `Hello {{ username || 'guest' }}`) edge.mount(fs.basePath) @@ -83,7 +82,7 @@ test.group('Edge', (group) => { }) test('register a template as a string', async (assert) => { - const edge = new Edge(new Loader()) + const edge = new Edge() edge.registerTemplate('foo', { template: `Hello {{ username }}`, @@ -93,7 +92,7 @@ test.group('Edge', (group) => { }) test('register a template on a named disk', async (assert) => { - const edge = new Edge(new Loader()) + const edge = new Edge() edge.mount('hello', fs.basePath) edge.registerTemplate('hello::foo', { @@ -107,10 +106,7 @@ test.group('Edge', (group) => { assert.plan(1) await fs.add('foo.edge', '@if(1 + 1)') - const loader = new Loader() - loader.mount('default', fs.basePath) - - const edge = new Edge(new Loader()) + const edge = new Edge() edge.mount(fs.basePath) try { @@ -124,10 +120,7 @@ test.group('Edge', (group) => { assert.plan(1) await fs.add('foo.edge', 'Hello {{ a,:b }}') - const loader = new Loader() - loader.mount('default', fs.basePath) - - const edge = new Edge(new Loader()) + const edge = new Edge() edge.mount(fs.basePath) try { @@ -142,10 +135,7 @@ test.group('Edge', (group) => { await fs.add('foo.edge', `@layout('bar')`) await fs.add('bar.edge', `@if(username)`) - const loader = new Loader() - loader.mount('default', fs.basePath) - - const edge = new Edge(new Loader()) + const edge = new Edge() edge.mount(fs.basePath) try { @@ -160,10 +150,7 @@ test.group('Edge', (group) => { await fs.add('foo.edge', `@layout('bar')`) await fs.add('bar.edge', `{{ a:b }}`) - const loader = new Loader() - loader.mount('default', fs.basePath) - - const edge = new Edge(new Loader()) + const edge = new Edge() edge.mount(fs.basePath) try { @@ -178,10 +165,7 @@ test.group('Edge', (group) => { await fs.add('foo.edge', `@include('bar')`) await fs.add('bar.edge', `@if(username)`) - const loader = new Loader() - loader.mount('default', fs.basePath) - - const edge = new Edge(new Loader()) + const edge = new Edge() edge.mount(fs.basePath) try { @@ -196,10 +180,7 @@ test.group('Edge', (group) => { await fs.add('foo.edge', `@include('bar')`) await fs.add('bar.edge', `{{ a:b }}`) - const loader = new Loader() - loader.mount('default', fs.basePath) - - const edge = new Edge(new Loader()) + const edge = new Edge() edge.mount(fs.basePath) try { @@ -214,10 +195,7 @@ test.group('Edge', (group) => { await fs.add('foo.edge', `@!component('bar')`) await fs.add('bar.edge', `@if(username)`) - const loader = new Loader() - loader.mount('default', fs.basePath) - - const edge = new Edge(new Loader()) + const edge = new Edge() edge.mount(fs.basePath) try { @@ -232,10 +210,7 @@ test.group('Edge', (group) => { await fs.add('foo.edge', `@!component('bar')`) await fs.add('bar.edge', `{{ a:b }}`) - const loader = new Loader() - loader.mount('default', fs.basePath) - - const edge = new Edge(new Loader()) + const edge = new Edge() edge.mount(fs.basePath) try {