Skip to content

Commit af29997

Browse files
committed
Change template engine: EJS > ETA
* change template engine: EJS > ETA * enhance comment processing * replace newline to `<br />` or `\\n` * rewrite `README.md` for changed template engine
1 parent c964198 commit af29997

File tree

22 files changed

+186
-270
lines changed

22 files changed

+186
-270
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ ERdia is create ER Diagram and Entity schema specification using by TypeORM and
1414

1515
Why `ERdia` ?
1616

17-
`erdia` automatic create DB entity specification, ER diagram. DB entity specification, ER diagram important document that are maintainence and develop process. But not so easy keep freshness. `erdia` help to easily keep freshness and easily create beautiful document using [EJS](https://ejs.co) template engine.
17+
`erdia` automatic create DB entity specification, ER diagram. DB entity specification, ER diagram important document that are maintainence and develop process. But not so easy keep freshness. `erdia` help to easily keep freshness and easily create beautiful document using [ETA](https://eta.js.org/) template engine.
1818

1919
Summary,
2020

2121
1. ER diagram create using [mermaid.js](http://mermaid.js.org/) syntax.
22-
1. Every document create using EJS template engine
22+
1. Every document create using ETA template engine
2323
1. Only need TypeORM configuration
2424

2525
Automate your database ER diagram drawing!
@@ -59,7 +59,7 @@ direction TB
5959
C[TypeORM Entity]-->|extract <br/>entity specification|B[erdia]
6060
end
6161
erdia-->|extract <br />specification|D
62-
D[EJS<br />template<br />engine]-->E[html]
62+
D[ETA<br />template<br />engine]-->E[html]
6363
D-->F[markdown]
6464
D-->G[pdf]
6565
D-->H[image]
@@ -111,7 +111,7 @@ erdia build -d [your dataSourcePath] -o db.pdf --format pdf
111111

112112
## Template
113113

114-
`erdia` use EJS template for entity specification document and ER diagram. Template easily detach from erdia.
114+
`erdia` use ETA template for entity specification document and ER diagram. Template easily detach from erdia.
115115

116116
```bash
117117
npx erdia template

package-lock.json

Lines changed: 17 additions & 111 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@
8080
"@swc/helpers": "^0.5.1",
8181
"@swc/jest": "^0.2.26",
8282
"@tsconfig/node16": "^16.1.0",
83-
"@types/ejs": "^3.1.2",
8483
"@types/inquirer": "^9.0.3",
8584
"@types/inquirer-autocomplete-prompt": "^3.0.0",
8685
"@types/jest": "^29.5.3",
@@ -133,7 +132,7 @@
133132
"dayjs": "^1.11.9",
134133
"deep-object-diff": "^1.1.9",
135134
"del": "^6.1.1",
136-
"ejs": "^3.1.9",
135+
"eta": "^3.1.0",
137136
"fast-safe-stringify": "^2.1.1",
138137
"find-up": "^5.0.0",
139138
"fuse.js": "^6.6.2",

src/configs/const-enum/CE_OUTPUT_FORMAT.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export const CE_OUTPUT_FORMAT = {
22
HTML: 'html',
3-
MARKDOWN: 'markdown',
3+
MARKDOWN: 'md',
44
PDF: 'pdf',
55
IMAGE: 'image',
66
} as const;

src/template/evaluateTemplate.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
import { getTemplates } from '#template/loadTemplates';
22
import consola from 'consola';
3-
import { compile } from 'ejs';
3+
import { Eta } from 'eta';
44
import { isError } from 'my-easy-fp';
55

6+
const eta = new Eta({ views: 'erdia' });
7+
eta.resolvePath = (templatePath: string) => templatePath;
8+
eta.readFile = (templatePath: string) => getTemplates()[templatePath];
9+
610
export default async function evaluateTemplate<T extends object>(name: string, data: T) {
711
try {
8-
const templates = getTemplates();
9-
const template = templates[name];
10-
11-
const renderer = compile(template, {
12-
includer: (op, _pp) => ({ template: templates[op] }),
13-
});
14-
15-
const rendered = renderer(data);
12+
const rendered = eta.render(name, data);
1613
return rendered;
1714
} catch (caught) {
1815
const err = isError(caught, new Error('raise error from evaluateTemplate'));

src/template/html/document-toc.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const documentToC = `<aside class="bd-aside sticky-xl-top text-body-secondary align-self-start mb-3 mb-xl-5 px-2">
2-
<% versions.forEach((version) => { %>
3-
<section class="entity-version-toc-section toc-<%= metadata.name %>-<%= version.version.replaceAll('.', '-') %> <% if (!version.latest) { -%>
2+
<% it.versions.forEach((version) => { %>
3+
<section class="entity-version-toc-section toc-<%= it.metadata.name %>-<%= version.version.replaceAll('.', '-') %> <% if (!version.latest) { -%>
44
hide
55
<% } -%>">
66
<h2 class="h6 pt-4 pb-3 mb-4 border-bottom"><%= version.version %></h2>

src/template/html/document.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,34 @@ const htmlDocument = `<!DOCTYPE html>
55
<html lang="en" data-bs-theme="dark">
66
77
<head>
8-
<% if (metadata.title != null) { %>
9-
<title><%= metadata.title %></title>
8+
<% if (it.metadata.title != null) { %>
9+
<title><%= it.metadata.title %></title>
1010
<% } else { %>
11-
<title><% metadata.name %> entity specification</title>
11+
<title><%= it.metadata.name %> entity specification</title>
1212
<% } %>
1313
<meta charset="utf-8">
1414
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-4bw+/aepP/YC94hEpVNVgiZdgIC5+VKNBQNGCHeKRQN+PtmoHDEXuppvnDJzQIu9" crossorigin="anonymous">
1515
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-HwwvtgBNo3bZJJLYd8oVXjrBZt8cqVSpeBNS5n7C8IVInixGAoxmnlMuBnhbgrkm" crossorigin="anonymous"></script>
16-
<%- include('${CE_TEMPLATE_NAME.HTML_STYLE}', { versions, option, metadata }); %>
16+
<%~ include('${CE_TEMPLATE_NAME.HTML_STYLE}', it); %>
1717
</head>
1818
1919
<body class="bg-body-tertiary">
2020
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
2121
<div class="container-fluid">
22-
<a class="navbar-brand" href="#"><%= metadata.name %></a>
22+
<a class="navbar-brand" href="#"><%= it.metadata.name %></a>
2323
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
2424
<span class="navbar-toggler-icon"></span>
2525
</button>
2626
<div class="collapse navbar-collapse" id="navbarCollapse">
2727
<ul class="navbar-nav me-auto mb-2 mb-md-0">
28-
<% if (option.components.includes('${CE_OUTPUT_COMPONENT.TABLE}')) { %>
28+
<% if (it.option.components.includes('${CE_OUTPUT_COMPONENT.TABLE}')) { %>
2929
<li class="nav-item">
3030
<a class="nav-link active" aria-current="page" href="/">Entity</a>
3131
</li>
3232
<% } %>
33-
<% if (option.components.includes('${CE_OUTPUT_COMPONENT.ER}')) { %>
33+
<% if (it.option.components.includes('${CE_OUTPUT_COMPONENT.ER}')) { %>
3434
<li class="nav-item">
35-
<% if (option.components.includes('${CE_OUTPUT_COMPONENT.TABLE}')) { %>
35+
<% if (it.option.components.includes('${CE_OUTPUT_COMPONENT.TABLE}')) { %>
3636
<a class="nav-link" href="/mermaid.html">ER Diagram</a>
3737
<% } else { %>
3838
<a class="nav-link" href="/">ER Diagram</a>
@@ -44,30 +44,30 @@ const htmlDocument = `<!DOCTYPE html>
4444
</div>
4545
</nav>
4646
47-
<%- include('${CE_TEMPLATE_NAME.HTML_DOCUMENT_TOC}', { versions, option, metadata }); %>
47+
<%~ include('${CE_TEMPLATE_NAME.HTML_DOCUMENT_TOC}', it); %>
4848
4949
<div class="bd-cheatsheet container-fluid bg-body">
5050
<section>
5151
<select id="entity-version-select" class="form-select form-select-lg mb-3" aria-label="Large select example">
52-
<% versions.forEach((version) => { %>
52+
<% it.versions.forEach((version) => { %>
5353
<option
54-
value="<%= metadata.name %>-<%= version.version.replaceAll('.', '-') %>"
54+
value="<%= it.metadata.name %>-<%= version.version.replaceAll('.', '-') %>"
5555
<% if (version.latest) { -%>
5656
<%= " selected" -%>
5757
<% } -%>
5858
>
59-
<%= metadata.name %> <%= version.version %>
59+
<%= it.metadata.name %> <%= version.version %>
6060
</option>
6161
<% }) %>
6262
</select>
6363
</section>
6464
65-
<% versions.forEach((version) => { %>
66-
<section class="entity-version-content-section content-<%= metadata.name %>-<%= version.version.replaceAll('.', '-') %> <% if (!version.latest) { -%>
65+
<% it.versions.forEach((version) => { %>
66+
<section class="entity-version-content-section content-<%= it.metadata.name %>-<%= version.version.replaceAll('.', '-') %> <% if (!version.latest) { -%>
6767
hide
6868
<% } %>">
69-
<h2><%= metadata.name %> <%= version.version %></h2>
70-
<%- include('${CE_TEMPLATE_NAME.HTML_TABLE}', { version, option, metadata }); %>
69+
<h2><%= it.metadata.name %> <%= version.version %></h2>
70+
<%~ include('${CE_TEMPLATE_NAME.HTML_TABLE}', { version, option: it.option, metadata: it.metadata }); %>
7171
</section>
7272
<% }) %>
7373
</div>

0 commit comments

Comments
 (0)