@prairielearn/html-ejs
Advanced tools
| module.exports = { | ||
| require: ['tsx'], | ||
| }; |
+11
-0
| # @prairielearn/html-ejs | ||
| ## 2.0.0 | ||
| ### Major Changes | ||
| - 4f30b7e: Publish as native ESM | ||
| ### Patch Changes | ||
| - Updated dependencies [4f30b7e] | ||
| - @prairielearn/html@4.0.0 | ||
| ## 1.1.19 | ||
@@ -4,0 +15,0 @@ |
+7
-14
@@ -1,11 +0,5 @@ | ||
| "use strict"; | ||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||
| return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.renderEjs = void 0; | ||
| const ejs_1 = __importDefault(require("ejs")); | ||
| const path_1 = __importDefault(require("path")); | ||
| const url_1 = require("url"); | ||
| const html_1 = require("@prairielearn/html"); | ||
| import ejs from 'ejs'; | ||
| import path from 'path'; | ||
| import { fileURLToPath } from 'url'; | ||
| import { unsafeHtml } from '@prairielearn/html'; | ||
| /** | ||
@@ -23,3 +17,3 @@ * This is a shim to allow for the use of EJS templates inside of HTML tagged | ||
| */ | ||
| function renderEjs(filePathOrUrl, template, data = {}) { | ||
| export function renderEjs(filePathOrUrl, template, data = {}) { | ||
| let resolvedPath = filePathOrUrl; | ||
@@ -29,7 +23,6 @@ // This allows for us to pass `import.meta.url` to this function in ES Modules | ||
| if (filePathOrUrl.startsWith('file://')) { | ||
| resolvedPath = (0, url_1.fileURLToPath)(filePathOrUrl); | ||
| resolvedPath = fileURLToPath(filePathOrUrl); | ||
| } | ||
| return (0, html_1.unsafeHtml)(ejs_1.default.render(template, data, { views: [path_1.default.dirname(resolvedPath)] })); | ||
| return unsafeHtml(ejs.render(template, data, { views: [path.dirname(resolvedPath)] })); | ||
| } | ||
| exports.renderEjs = renderEjs; | ||
| //# sourceMappingURL=index.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAsB;AACtB,gDAAwB;AACxB,6BAAoC;AAEpC,6CAAqE;AACrE;;;;;;;;;;;GAWG;AACH,SAAgB,SAAS,CAAC,aAAqB,EAAE,QAAgB,EAAE,OAAY,EAAE;IAC/E,IAAI,YAAY,GAAG,aAAa,CAAC;IAEjC,8EAA8E;IAC9E,oDAAoD;IACpD,IAAI,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,YAAY,GAAG,IAAA,mBAAa,EAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,IAAA,iBAAU,EAAC,aAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzF,CAAC;AAVD,8BAUC"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAuB,MAAM,oBAAoB,CAAC;AACrE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,SAAS,CAAC,aAAqB,EAAE,QAAgB,EAAE,OAAY,EAAE;IAC/E,IAAI,YAAY,GAAG,aAAa,CAAC;IAEjC,8EAA8E;IAC9E,oDAAoD;IACpD,IAAI,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,YAAY,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzF,CAAC","sourcesContent":["import ejs from 'ejs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nimport { unsafeHtml, type HtmlSafeString } from '@prairielearn/html';\n/**\n * This is a shim to allow for the use of EJS templates inside of HTML tagged\n * template literals.\n *\n * The resulting string is assumed to be appropriately escaped and will be used\n * verbatim in the resulting HTML.\n *\n * @param filePathOrUrl The path or file URL of the file from which relative includes should be resolved.\n * @param template The raw EJS template string.\n * @param data Any data to be made available to the template.\n * @returns The rendered EJS.\n */\nexport function renderEjs(filePathOrUrl: string, template: string, data: any = {}): HtmlSafeString {\n let resolvedPath = filePathOrUrl;\n\n // This allows for us to pass `import.meta.url` to this function in ES Modules\n // environments where `__filename` is not available.\n if (filePathOrUrl.startsWith('file://')) {\n resolvedPath = fileURLToPath(filePathOrUrl);\n }\n\n return unsafeHtml(ejs.render(template, data, { views: [path.dirname(resolvedPath)] }));\n}\n"]} |
@@ -1,13 +0,11 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| const chai_1 = require("chai"); | ||
| const index_1 = require("./index"); | ||
| import { assert } from 'chai'; | ||
| import { renderEjs } from './index.js'; | ||
| describe('renderEjs', () => { | ||
| it('renders EJS template without data', () => { | ||
| chai_1.assert.equal((0, index_1.renderEjs)(__filename, '<p>Hello</p>', {}).toString(), '<p>Hello</p>'); | ||
| assert.equal(renderEjs(import.meta.url, '<p>Hello</p>', {}).toString(), '<p>Hello</p>'); | ||
| }); | ||
| it('renders EJS template with data', () => { | ||
| chai_1.assert.equal((0, index_1.renderEjs)(__filename, '<p>Hello <%= name %></p>', { name: 'Divya' }).toString(), '<p>Hello Divya</p>'); | ||
| assert.equal(renderEjs(import.meta.url, '<p>Hello <%= name %></p>', { name: 'Divya' }).toString(), '<p>Hello Divya</p>'); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=index.test.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAE9B,mCAAoC;AAEpC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,aAAM,CAAC,KAAK,CAAC,IAAA,iBAAS,EAAC,UAAU,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,cAAc,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,aAAM,CAAC,KAAK,CACV,IAAA,iBAAS,EAAC,UAAU,EAAE,0BAA0B,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,EAC/E,oBAAoB,CACrB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} | ||
| {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,cAAc,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,KAAK,CACV,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,0BAA0B,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,EACpF,oBAAoB,CACrB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { assert } from 'chai';\n\nimport { renderEjs } from './index.js';\n\ndescribe('renderEjs', () => {\n it('renders EJS template without data', () => {\n assert.equal(renderEjs(import.meta.url, '<p>Hello</p>', {}).toString(), '<p>Hello</p>');\n });\n\n it('renders EJS template with data', () => {\n assert.equal(\n renderEjs(import.meta.url, '<p>Hello <%= name %></p>', { name: 'Divya' }).toString(),\n '<p>Hello Divya</p>',\n );\n });\n});\n"]} |
+6
-5
| { | ||
| "name": "@prairielearn/html-ejs", | ||
| "version": "1.1.19", | ||
| "version": "2.0.0", | ||
| "type": "module", | ||
| "main": "dist/index.js", | ||
@@ -13,7 +14,7 @@ "repository": { | ||
| "dev": "tsc --watch --preserveWatchOutput", | ||
| "test": "mocha --no-config --require tsx src/index.test.ts" | ||
| "test": "mocha src/**/*.test.ts" | ||
| }, | ||
| "dependencies": { | ||
| "@prairielearn/html": "^3.1.7", | ||
| "ejs": "^3.1.9" | ||
| "@prairielearn/html": "^4.0.0", | ||
| "ejs": "^3.1.10" | ||
| }, | ||
@@ -26,5 +27,5 @@ "devDependencies": { | ||
| "mocha": "^10.4.0", | ||
| "tsx": "^4.7.1", | ||
| "tsx": "^4.9.3", | ||
| "typescript": "^5.4.3" | ||
| } | ||
| } |
+2
-2
@@ -12,3 +12,3 @@ # `@prairielearn/html-ejs` | ||
| ```js | ||
| ```ts | ||
| import { html } from '@prairielearn/html'; | ||
@@ -20,5 +20,5 @@ import { renderEjs } from '@prairielearn/html-ejs'; | ||
| <div>Hello, world!</div> | ||
| <div>${renderEjs(__filename, "<%- include('./hello'); %>", { name: 'Anjali' })}</div> | ||
| <div>${renderEjs(import.meta.url, "<%- include('./hello'); %>", { name: 'Anjali' })}</div> | ||
| `.toString(), | ||
| ); | ||
| ``` |
| import { assert } from 'chai'; | ||
| import { renderEjs } from './index'; | ||
| import { renderEjs } from './index.js'; | ||
| describe('renderEjs', () => { | ||
| it('renders EJS template without data', () => { | ||
| assert.equal(renderEjs(__filename, '<p>Hello</p>', {}).toString(), '<p>Hello</p>'); | ||
| assert.equal(renderEjs(import.meta.url, '<p>Hello</p>', {}).toString(), '<p>Hello</p>'); | ||
| }); | ||
@@ -12,3 +12,3 @@ | ||
| assert.equal( | ||
| renderEjs(__filename, '<p>Hello <%= name %></p>', { name: 'Divya' }).toString(), | ||
| renderEjs(import.meta.url, '<p>Hello <%= name %></p>', { name: 'Divya' }).toString(), | ||
| '<p>Hello Divya</p>', | ||
@@ -15,0 +15,0 @@ ); |
10879
16.44%14
7.69%Yes
NaN99
-5.71%+ Added
- Removed
Updated
Updated