@tsed/engines 7.18.1 → 7.18.3-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.VueEngine = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const
|
|
6
|
-
const viewEngine_1 = require("../decorators/viewEngine");
|
|
7
|
-
const cache_1 = require("../utils/cache");
|
|
5
|
+
const filedirname_1 = tslib_1.__importDefault(require("filedirname"));
|
|
8
6
|
const path_1 = require("path");
|
|
9
7
|
const util_1 = require("util");
|
|
8
|
+
const viewEngine_1 = require("../decorators/viewEngine");
|
|
9
|
+
const cache_1 = require("../utils/cache");
|
|
10
|
+
const Engine_1 = require("./Engine");
|
|
11
|
+
// FIXME remove when esm is ready
|
|
12
|
+
const [, rootDir] = (0, filedirname_1.default)();
|
|
10
13
|
function requireFromString(src, filename) {
|
|
11
14
|
const Module = module.constructor;
|
|
12
15
|
const m = new Module();
|
|
@@ -22,14 +25,6 @@ function hashCode(str) {
|
|
|
22
25
|
}
|
|
23
26
|
let VueEngine = class VueEngine extends Engine_1.Engine {
|
|
24
27
|
#renderToString;
|
|
25
|
-
async $onInit() {
|
|
26
|
-
await super.$onInit();
|
|
27
|
-
await (0, cache_1.importEngine)("vue-pronto/lib/index", "pronto");
|
|
28
|
-
await (0, cache_1.importEngine)("vueify");
|
|
29
|
-
await (0, cache_1.importEngine)("vue-server-renderer");
|
|
30
|
-
const ssrRenderer = this.vueServerRenderer.createRenderer();
|
|
31
|
-
this.#renderToString = (0, util_1.promisify)(ssrRenderer.renderToString.bind(this));
|
|
32
|
-
}
|
|
33
28
|
get pronto() {
|
|
34
29
|
return (0, cache_1.getCachedEngine)("pronto");
|
|
35
30
|
}
|
|
@@ -39,8 +34,16 @@ let VueEngine = class VueEngine extends Engine_1.Engine {
|
|
|
39
34
|
get vueServerRenderer() {
|
|
40
35
|
return (0, cache_1.getCachedEngine)("vue-server-renderer");
|
|
41
36
|
}
|
|
37
|
+
async $onInit() {
|
|
38
|
+
await super.$onInit();
|
|
39
|
+
await (0, cache_1.importEngine)("vue-pronto/lib/index", "pronto");
|
|
40
|
+
await (0, cache_1.importEngine)("vueify");
|
|
41
|
+
await (0, cache_1.importEngine)("vue-server-renderer");
|
|
42
|
+
const ssrRenderer = this.vueServerRenderer.createRenderer();
|
|
43
|
+
this.#renderToString = (0, util_1.promisify)(ssrRenderer.renderToString.bind(this));
|
|
44
|
+
}
|
|
42
45
|
$cacheOptions(template, options, fromFile) {
|
|
43
|
-
const fullPath = (0, path_1.join)(
|
|
46
|
+
const fullPath = (0, path_1.join)(rootDir, `/${hashCode(template)}`);
|
|
44
47
|
if (!fromFile) {
|
|
45
48
|
return {
|
|
46
49
|
...options,
|
|
@@ -51,7 +54,7 @@ let VueEngine = class VueEngine extends Engine_1.Engine {
|
|
|
51
54
|
}
|
|
52
55
|
$compile(template, options) {
|
|
53
56
|
// make up a fake path
|
|
54
|
-
const fullPath = (0, path_1.join)(
|
|
57
|
+
const fullPath = (0, path_1.join)(rootDir, `/${hashCode(template)}`);
|
|
55
58
|
const promise = this.getComponent(fullPath, template, options);
|
|
56
59
|
return async (options) => {
|
|
57
60
|
return this.renderComponent(await promise, options);
|
|
@@ -60,7 +63,7 @@ let VueEngine = class VueEngine extends Engine_1.Engine {
|
|
|
60
63
|
async $compileFile(file, options) {
|
|
61
64
|
// prontoRenderer assume that the filepath is relative to a passed "rootpath"
|
|
62
65
|
// and if you don't pass a rootpath it will try to find one
|
|
63
|
-
// based on its current
|
|
66
|
+
// based on its current rootDir
|
|
64
67
|
// https://github.com/express-vue/vue-pronto/blob/c88e380fee8656bc3ed21c7d3adb2ef331be07d5/lib/utils/findPaths.js#L10-L18
|
|
65
68
|
const fullPath = (0, path_1.resolve)(file);
|
|
66
69
|
const rootPath = process.cwd();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VueEngine.js","sourceRoot":"","sources":["../../../src/components/VueEngine.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"VueEngine.js","sourceRoot":"","sources":["../../../src/components/VueEngine.ts"],"names":[],"mappings":";;;;AAAA,sEAAsC;AACtC,+BAAmC;AACnC,+BAA+B;AAC/B,yDAAoD;AACpD,0CAA6D;AAC7D,qCAA+C;AAC/C,iCAAiC;AACjC,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,IAAA,qBAAW,GAAE,CAAC;AAElC,SAAS,iBAAiB,CAAC,GAAW,EAAE,QAAgB;IACtD,MAAM,MAAM,GAAQ,MAAM,CAAC,WAAW,CAAC;IACvC,MAAM,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;IACvB,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC1B,OAAO,CAAC,CAAC,OAAO,CAAC;AACnB,CAAC;AAED;;;GAGG;AAEH,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5G,CAAC;AAKD,IAAa,SAAS,GAAtB,MAAa,SAAU,SAAQ,eAAM;IACnC,eAAe,CAAM;IAErB,IAAI,MAAM;QACR,OAAO,IAAA,uBAAe,EAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAA,uBAAe,EAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAA,uBAAe,EAAC,qBAAqB,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QACtB,MAAM,IAAA,oBAAY,EAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;QACrD,MAAM,IAAA,oBAAY,EAAC,QAAQ,CAAC,CAAC;QAC7B,MAAM,IAAA,oBAAY,EAAC,qBAAqB,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC;QAE5D,IAAI,CAAC,eAAe,GAAG,IAAA,gBAAS,EAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,CAAC;IAES,aAAa,CAAC,QAAgB,EAAE,OAAsB,EAAE,QAAkB;QAClF,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEzD,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;gBACL,GAAG,OAAO;gBACV,QAAQ,EAAE,QAAQ;aACnB,CAAC;SACH;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAES,QAAQ,CAAC,QAAgB,EAAE,OAAsB;QACzD,sBAAsB;QACtB,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE/D,OAAO,KAAK,EAAE,OAAsB,EAAE,EAAE;YACtC,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,OAAO,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,OAAsB;QAC/D,6EAA6E;QAC7E,2DAA2D;QAC3D,+BAA+B;QAC/B,yHAAyH;QACzH,MAAM,QAAQ,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,GAAG,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,aAAa,GAAQ;YACzB,QAAQ;YACR,UAAU,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC;SAC7B,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAClB,2BAA2B;YAC3B,aAAa,CAAC,YAAY,GAAG,EAAC,GAAG,EAAE,CAAC,EAAC,CAAC;SACvC;QAED,IAAI,cAAc,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAEjE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAClB,gCAAgC;YAChC,MAAM;YACN,cAAc,CAAC,aAAa,GAAG;gBAC7B,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;gBACb,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;aACd,CAAC;SACH;aAAM;YACL,8CAA8C;YAC9C,qDAAqD;YACrD,yDAAyD;YACzD,mFAAmF;YACnF,MAAM,aAAa,GAAG,cAAc,CAAC,aAAa,CAAC;YAEnD,cAAc,CAAC,aAAa,GAAG;gBAC7B,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C,GAAG,CAAC,QAAgB,EAAE,SAAc;oBAClC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE;wBAC1B,GAAG,SAAS;wBACZ,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;qBACxC,CAAC,CAAC;gBACL,CAAC;aACF,CAAC;SACH;QAED,OAAO,CAAC,OAAsB,EAAE,EAAE;YAChC,OAAO,cAAc,CAAC,cAAc,CAClC,QAAQ,EACR,EAAE,EACF;gBACE,SAAS,EAAE,OAAO;aACnB,CACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,QAAgB,EAAE,OAAsB;QACnF,kEAAkE;QAClE,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE;YACrC,sDAAsD;YACtD,MAAM,OAAO,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC9C,OAAO,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;SACzC;QAED,OAAO;YACL,QAAQ;YACR,IAAI;gBACF,OAAO,OAAO,CAAC;YACjB,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,SAAc,EAAE,OAAsB;QAClE,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,QAAQ,GAAG,IAAI,OAAO,CAAC,EAAC,SAAS,EAAE,OAAO,EAAC,CAAC,CAAC;QAEjD,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;CACF,CAAA;AA/HY,SAAS;IAHrB,IAAA,uBAAU,EAAC,KAAK,EAAE;QACjB,QAAQ,EAAE,KAAK;KAChB,CAAC;GACW,SAAS,CA+HrB;AA/HY,8BAAS","sourcesContent":["import filedirname from \"filedirname\";\nimport {join, resolve} from \"path\";\nimport {promisify} from \"util\";\nimport {ViewEngine} from \"../decorators/viewEngine\";\nimport {getCachedEngine, importEngine} from \"../utils/cache\";\nimport {Engine, EngineOptions} from \"./Engine\";\n// FIXME remove when esm is ready\nconst [, rootDir] = filedirname();\n\nfunction requireFromString(src: string, filename: string) {\n const Module: any = module.constructor;\n const m = new Module();\n m._compile(src, filename);\n return m.exports;\n}\n\n/**\n * simple hash a string\n * https://stackoverflow.com/a/34842797/493756\n */\n\nfunction hashCode(str: string) {\n return str.split(\"\").reduce((prevHash, currVal) => (prevHash << 5) - prevHash + currVal.charCodeAt(0), 0);\n}\n\n@ViewEngine(\"vue\", {\n requires: \"vue\"\n})\nexport class VueEngine extends Engine {\n #renderToString: any;\n\n get pronto() {\n return getCachedEngine(\"pronto\");\n }\n\n get vueify() {\n return getCachedEngine(\"vueify\");\n }\n\n get vueServerRenderer() {\n return getCachedEngine(\"vue-server-renderer\");\n }\n\n async $onInit() {\n await super.$onInit();\n await importEngine(\"vue-pronto/lib/index\", \"pronto\");\n await importEngine(\"vueify\");\n await importEngine(\"vue-server-renderer\");\n const ssrRenderer = this.vueServerRenderer.createRenderer();\n\n this.#renderToString = promisify(ssrRenderer.renderToString.bind(this));\n }\n\n protected $cacheOptions(template: string, options: EngineOptions, fromFile?: boolean): EngineOptions {\n const fullPath = join(rootDir, `/${hashCode(template)}`);\n\n if (!fromFile) {\n return {\n ...options,\n filename: fullPath\n };\n }\n\n return options;\n }\n\n protected $compile(template: string, options: EngineOptions) {\n // make up a fake path\n const fullPath = join(rootDir, `/${hashCode(template)}`);\n const promise = this.getComponent(fullPath, template, options);\n\n return async (options: EngineOptions) => {\n return this.renderComponent(await promise, options);\n };\n }\n\n protected async $compileFile(file: string, options: EngineOptions) {\n // prontoRenderer assume that the filepath is relative to a passed \"rootpath\"\n // and if you don't pass a rootpath it will try to find one\n // based on its current rootDir\n // https://github.com/express-vue/vue-pronto/blob/c88e380fee8656bc3ed21c7d3adb2ef331be07d5/lib/utils/findPaths.js#L10-L18\n const fullPath = resolve(file);\n const rootPath = process.cwd();\n const filepath = fullPath.replace(`${rootPath}/`, \"\");\n const prontoOptions: any = {\n rootPath,\n vueVersion: {disabled: true}\n };\n\n if (!options.cache) {\n // disable pronto lru cache\n prontoOptions.cacheOptions = {max: 0};\n }\n\n let prontoRenderer = new this.pronto.ProntoVueify(prontoOptions);\n\n if (!options.cache) {\n // disable pronto internal cache\n // yup\n prontoRenderer.internalCache = {\n get: () => {},\n set: () => {}\n };\n } else {\n // so, this ties each \"renderer\" to a rootPath\n // so I have to create a new prontoRenderer each time\n // which sucks! because I loose the internal cache of it,\n // unless, I keep tabs on both lru and internal caches and replace them every time.\n const internalCache = prontoRenderer.internalCache;\n\n prontoRenderer.internalCache = {\n get: internalCache.get.bind(internalCache),\n set(filename: string, component: any) {\n internalCache.set(filename, {\n ...component,\n data: component.data || (() => options)\n });\n }\n };\n }\n\n return (options: EngineOptions) => {\n return prontoRenderer.RenderToString(\n filepath,\n {},\n {\n propsData: options\n }\n );\n };\n }\n\n private async getComponent(fullPath: string, template: string, options: EngineOptions) {\n // assume that the str the content of a <template> ... </template>\n if (/<template/.test(template.trim())) {\n // assume that the str is a fileContent of a .vue file\n const compile = promisify(this.vueify.compiler.compile.bind(this.vueify.compiler));\n const cmp = await compile(template, fullPath);\n return requireFromString(cmp, fullPath);\n }\n\n return {\n template,\n data() {\n return options;\n }\n };\n }\n\n private async renderComponent(Component: any, options: EngineOptions) {\n let Factory = this.engine.extend(Component);\n let instance = new Factory({propsData: options});\n\n return this.#renderToString(instance);\n }\n}\n"]}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import
|
|
3
|
-
import { ViewEngine } from "../decorators/viewEngine.js";
|
|
4
|
-
import { getCachedEngine, importEngine } from "../utils/cache.js";
|
|
2
|
+
import filedirname from "filedirname";
|
|
5
3
|
import { join, resolve } from "path";
|
|
6
4
|
import { promisify } from "util";
|
|
5
|
+
import { ViewEngine } from "../decorators/viewEngine.js";
|
|
6
|
+
import { getCachedEngine, importEngine } from "../utils/cache.js";
|
|
7
|
+
import { Engine } from "./Engine.js";
|
|
8
|
+
// FIXME remove when esm is ready
|
|
9
|
+
const [, rootDir] = filedirname();
|
|
7
10
|
function requireFromString(src, filename) {
|
|
8
11
|
const Module = module.constructor;
|
|
9
12
|
const m = new Module();
|
|
@@ -19,14 +22,6 @@ function hashCode(str) {
|
|
|
19
22
|
}
|
|
20
23
|
let VueEngine = class VueEngine extends Engine {
|
|
21
24
|
#renderToString;
|
|
22
|
-
async $onInit() {
|
|
23
|
-
await super.$onInit();
|
|
24
|
-
await importEngine("vue-pronto/lib/index", "pronto");
|
|
25
|
-
await importEngine("vueify");
|
|
26
|
-
await importEngine("vue-server-renderer");
|
|
27
|
-
const ssrRenderer = this.vueServerRenderer.createRenderer();
|
|
28
|
-
this.#renderToString = promisify(ssrRenderer.renderToString.bind(this));
|
|
29
|
-
}
|
|
30
25
|
get pronto() {
|
|
31
26
|
return getCachedEngine("pronto");
|
|
32
27
|
}
|
|
@@ -36,8 +31,16 @@ let VueEngine = class VueEngine extends Engine {
|
|
|
36
31
|
get vueServerRenderer() {
|
|
37
32
|
return getCachedEngine("vue-server-renderer");
|
|
38
33
|
}
|
|
34
|
+
async $onInit() {
|
|
35
|
+
await super.$onInit();
|
|
36
|
+
await importEngine("vue-pronto/lib/index", "pronto");
|
|
37
|
+
await importEngine("vueify");
|
|
38
|
+
await importEngine("vue-server-renderer");
|
|
39
|
+
const ssrRenderer = this.vueServerRenderer.createRenderer();
|
|
40
|
+
this.#renderToString = promisify(ssrRenderer.renderToString.bind(this));
|
|
41
|
+
}
|
|
39
42
|
$cacheOptions(template, options, fromFile) {
|
|
40
|
-
const fullPath = join(
|
|
43
|
+
const fullPath = join(rootDir, `/${hashCode(template)}`);
|
|
41
44
|
if (!fromFile) {
|
|
42
45
|
return {
|
|
43
46
|
...options,
|
|
@@ -48,7 +51,7 @@ let VueEngine = class VueEngine extends Engine {
|
|
|
48
51
|
}
|
|
49
52
|
$compile(template, options) {
|
|
50
53
|
// make up a fake path
|
|
51
|
-
const fullPath = join(
|
|
54
|
+
const fullPath = join(rootDir, `/${hashCode(template)}`);
|
|
52
55
|
const promise = this.getComponent(fullPath, template, options);
|
|
53
56
|
return async (options) => {
|
|
54
57
|
return this.renderComponent(await promise, options);
|
|
@@ -57,7 +60,7 @@ let VueEngine = class VueEngine extends Engine {
|
|
|
57
60
|
async $compileFile(file, options) {
|
|
58
61
|
// prontoRenderer assume that the filepath is relative to a passed "rootpath"
|
|
59
62
|
// and if you don't pass a rootpath it will try to find one
|
|
60
|
-
// based on its current
|
|
63
|
+
// based on its current rootDir
|
|
61
64
|
// https://github.com/express-vue/vue-pronto/blob/c88e380fee8656bc3ed21c7d3adb2ef331be07d5/lib/utils/findPaths.js#L10-L18
|
|
62
65
|
const fullPath = resolve(file);
|
|
63
66
|
const rootPath = process.cwd();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VueEngine.js","sourceRoot":"","sources":["../../../src/components/VueEngine.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"VueEngine.js","sourceRoot":"","sources":["../../../src/components/VueEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import filedirname from \"filedirname\";\nimport {join, resolve} from \"path\";\nimport {promisify} from \"util\";\nimport {ViewEngine} from \"../decorators/viewEngine\";\nimport {getCachedEngine, importEngine} from \"../utils/cache\";\nimport {Engine, EngineOptions} from \"./Engine\";\n// FIXME remove when esm is ready\nconst [, rootDir] = filedirname();\n\nfunction requireFromString(src: string, filename: string) {\n const Module: any = module.constructor;\n const m = new Module();\n m._compile(src, filename);\n return m.exports;\n}\n\n/**\n * simple hash a string\n * https://stackoverflow.com/a/34842797/493756\n */\n\nfunction hashCode(str: string) {\n return str.split(\"\").reduce((prevHash, currVal) => (prevHash << 5) - prevHash + currVal.charCodeAt(0), 0);\n}\n\n@ViewEngine(\"vue\", {\n requires: \"vue\"\n})\nexport class VueEngine extends Engine {\n #renderToString: any;\n\n get pronto() {\n return getCachedEngine(\"pronto\");\n }\n\n get vueify() {\n return getCachedEngine(\"vueify\");\n }\n\n get vueServerRenderer() {\n return getCachedEngine(\"vue-server-renderer\");\n }\n\n async $onInit() {\n await super.$onInit();\n await importEngine(\"vue-pronto/lib/index\", \"pronto\");\n await importEngine(\"vueify\");\n await importEngine(\"vue-server-renderer\");\n const ssrRenderer = this.vueServerRenderer.createRenderer();\n\n this.#renderToString = promisify(ssrRenderer.renderToString.bind(this));\n }\n\n protected $cacheOptions(template: string, options: EngineOptions, fromFile?: boolean): EngineOptions {\n const fullPath = join(rootDir, `/${hashCode(template)}`);\n\n if (!fromFile) {\n return {\n ...options,\n filename: fullPath\n };\n }\n\n return options;\n }\n\n protected $compile(template: string, options: EngineOptions) {\n // make up a fake path\n const fullPath = join(rootDir, `/${hashCode(template)}`);\n const promise = this.getComponent(fullPath, template, options);\n\n return async (options: EngineOptions) => {\n return this.renderComponent(await promise, options);\n };\n }\n\n protected async $compileFile(file: string, options: EngineOptions) {\n // prontoRenderer assume that the filepath is relative to a passed \"rootpath\"\n // and if you don't pass a rootpath it will try to find one\n // based on its current rootDir\n // https://github.com/express-vue/vue-pronto/blob/c88e380fee8656bc3ed21c7d3adb2ef331be07d5/lib/utils/findPaths.js#L10-L18\n const fullPath = resolve(file);\n const rootPath = process.cwd();\n const filepath = fullPath.replace(`${rootPath}/`, \"\");\n const prontoOptions: any = {\n rootPath,\n vueVersion: {disabled: true}\n };\n\n if (!options.cache) {\n // disable pronto lru cache\n prontoOptions.cacheOptions = {max: 0};\n }\n\n let prontoRenderer = new this.pronto.ProntoVueify(prontoOptions);\n\n if (!options.cache) {\n // disable pronto internal cache\n // yup\n prontoRenderer.internalCache = {\n get: () => {},\n set: () => {}\n };\n } else {\n // so, this ties each \"renderer\" to a rootPath\n // so I have to create a new prontoRenderer each time\n // which sucks! because I loose the internal cache of it,\n // unless, I keep tabs on both lru and internal caches and replace them every time.\n const internalCache = prontoRenderer.internalCache;\n\n prontoRenderer.internalCache = {\n get: internalCache.get.bind(internalCache),\n set(filename: string, component: any) {\n internalCache.set(filename, {\n ...component,\n data: component.data || (() => options)\n });\n }\n };\n }\n\n return (options: EngineOptions) => {\n return prontoRenderer.RenderToString(\n filepath,\n {},\n {\n propsData: options\n }\n );\n };\n }\n\n private async getComponent(fullPath: string, template: string, options: EngineOptions) {\n // assume that the str the content of a <template> ... </template>\n if (/<template/.test(template.trim())) {\n // assume that the str is a fileContent of a .vue file\n const compile = promisify(this.vueify.compiler.compile.bind(this.vueify.compiler));\n const cmp = await compile(template, fullPath);\n return requireFromString(cmp, fullPath);\n }\n\n return {\n template,\n data() {\n return options;\n }\n };\n }\n\n private async renderComponent(Component: any, options: EngineOptions) {\n let Factory = this.engine.extend(Component);\n let instance = new Factory({propsData: options});\n\n return this.#renderToString(instance);\n }\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Engine, EngineOptions } from "./Engine";
|
|
2
2
|
export declare class VueEngine extends Engine {
|
|
3
3
|
#private;
|
|
4
|
-
$onInit(): Promise<void>;
|
|
5
4
|
get pronto(): any;
|
|
6
5
|
get vueify(): any;
|
|
7
6
|
get vueServerRenderer(): any;
|
|
7
|
+
$onInit(): Promise<void>;
|
|
8
8
|
protected $cacheOptions(template: string, options: EngineOptions, fromFile?: boolean): EngineOptions;
|
|
9
9
|
protected $compile(template: string, options: EngineOptions): (options: EngineOptions) => Promise<any>;
|
|
10
10
|
protected $compileFile(file: string, options: EngineOptions): Promise<(options: EngineOptions) => any>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsed/engines",
|
|
3
|
-
"version": "7.18.1",
|
|
3
|
+
"version": "7.18.3-rc.1",
|
|
4
4
|
"description": "Template engines library. Provide an API to adding custom engines from decorators.",
|
|
5
5
|
"source": "./src/index.ts",
|
|
6
6
|
"main": "./lib/cjs/index.js",
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
},
|
|
22
22
|
"private": false,
|
|
23
23
|
"dependencies": {
|
|
24
|
+
"filedirname": "^2.7.0",
|
|
24
25
|
"fs-extra": "10.0.1",
|
|
25
26
|
"tslib": "2.4.0"
|
|
26
27
|
},
|
|
@@ -96,5 +97,8 @@
|
|
|
96
97
|
},
|
|
97
98
|
"homepage": "https://github.com/tsedio/tsed/tree/production/packages/engines",
|
|
98
99
|
"author": "Romain Lenzotti",
|
|
99
|
-
"license": "MIT"
|
|
100
|
+
"license": "MIT",
|
|
101
|
+
"publishConfig": {
|
|
102
|
+
"tag": "rc"
|
|
103
|
+
}
|
|
100
104
|
}
|