Added ability to build and install cli binary so that templates can be executed directly

This commit is contained in:
Ben Ashton 2022-09-04 13:53:04 -06:00
parent 8220e097df
commit 8b1efa29c4
11 changed files with 4944 additions and 8 deletions

View File

@ -4,7 +4,7 @@ import { spawn } from 'node:child_process';
import { file } from 'tmp-promise';
import { renderFile } from './src/template_engine.js';
import { renderFile } from './src/template_engine.mjs';
if (process.argv.length <= 2) {

4
dist/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
# Preserve directory, but ignore contents
*
*/
!.gitignore

1
example_templates/readme_example.n0m Normal file → Executable file
View File

@ -1,3 +1,4 @@
#!/usr/bin/env n0m
$ #!/bin/sh
$ title='My Restaurant Randomizer';
<!doctype html>

View File

@ -1 +1 @@
export { TemplateEngine, renderFile } from './src/template_engine.js';
export { TemplateEngine, renderFile } from './src/template_engine.mjs';

4905
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -2,15 +2,26 @@
"name": "n0m-template-engine",
"version": "1.0.0",
"description": "",
"main": "index.js",
"module": "index.mjs",
"scripts": {
"start": "node cli.js",
"test": "echo \"Error: no test specified\" && exit 1"
"test": "echo \"Error: no test specified\" && exit 1",
"make": "npx webpack && npx pkg .",
"install": "sudo cp ./dist/n0m-template-engine /usr/local/bin/n0m"
},
"author": "",
"license": "MIT",
"type": "module",
"dependencies": {
"tmp-promise": "^3.0.3"
},
"devDependencies": {
"pkg": "^5.8.0",
"webpack": "^5.74.0",
"webpack-cli": "^4.10.0"
},
"bin": "dist/cli.js",
"pkg": {
"targets": [ "node18-linux" ],
"outputPath": "dist"
}
}

View File

@ -1,4 +1,4 @@
import { TokenStream } from './token_stream.js';
import { TokenStream } from './token_stream.mjs';
export class TemplateEngine {
async render(fileName) {

View File

@ -1,5 +1,5 @@
import { CharacterStream } from './character_stream.js';
import { TemplateSyntaxError } from './errors/template_syntax_error.js';
import { CharacterStream } from './character_stream.mjs';
import { TemplateSyntaxError } from './errors/template_syntax_error.mjs';
export class TokenStream {
static OPEN_INLINE = '<%';

15
webpack.config.mjs Normal file
View File

@ -0,0 +1,15 @@
import * as url from 'url';
import path from 'path';
const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
export default {
mode: 'development',
target: 'node',
entry: path.join(__dirname, 'cli.mjs'),
experiments: {
topLevelAwait: true
},
output: {
filename: 'cli.js'
}
};