mirror of
https://github.com/harttle/liquidjs.git
synced 2026-10-03 00:55:13 -07:00
fix: restore explicit @- stdin for template and context
Keep @- for --template and --context; only the legacy bare-stdin-as-template fallback stays removed. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
+8
-10
@@ -14,8 +14,8 @@ async function render () {
|
|||||||
program
|
program
|
||||||
.name('liquidjs')
|
.name('liquidjs')
|
||||||
.description('Render a Liquid template')
|
.description('Render a Liquid template')
|
||||||
.requiredOption('-t, --template <liquid | @path>', 'liquid template to render (inline or @path to a file)')
|
.requiredOption('-t, --template <liquid | @path>', 'liquid template to render (inline, @path, or @- for stdin)')
|
||||||
.option('-c, --context <json | @path>', 'input context in JSON format (@- to read from stdin)')
|
.option('-c, --context <json | @path>', 'input context in JSON format (inline, @path, or @- for stdin)')
|
||||||
.option('-o, --output <path>', 'write rendered output to file (omit to write to stdout)')
|
.option('-o, --output <path>', 'write rendered output to file (omit to write to stdout)')
|
||||||
.option('--cache [size]', 'cache previously parsed template structures (default cache size: 1024)')
|
.option('--cache [size]', 'cache previously parsed template structures (default cache size: 1024)')
|
||||||
.option('--extname <string>', 'use a default filename extension when resolving partials and layouts')
|
.option('--extname <string>', 'use a default filename extension when resolving partials and layouts')
|
||||||
@@ -45,7 +45,12 @@ async function render () {
|
|||||||
.parse()
|
.parse()
|
||||||
|
|
||||||
const options = program.opts()
|
const options = program.opts()
|
||||||
const template = await resolveTemplate(options.template)
|
|
||||||
|
if (Object.values(options).filter((value) => value === '@-').length > 1) {
|
||||||
|
throw new Error(`The stdin input specifier '@-' must only be used once.`)
|
||||||
|
}
|
||||||
|
|
||||||
|
const template = await resolveInputOption(options.template)
|
||||||
const context = await resolveContext(options.context)
|
const context = await resolveContext(options.context)
|
||||||
const liquid = new Liquid(options)
|
const liquid = new Liquid(options)
|
||||||
const output = liquid.parseAndRenderSync(template, context)
|
const output = liquid.parseAndRenderSync(template, context)
|
||||||
@@ -65,13 +70,6 @@ async function resolveContext (contextOption) {
|
|||||||
return context
|
return context
|
||||||
}
|
}
|
||||||
|
|
||||||
async function resolveTemplate (templateOption) {
|
|
||||||
if (templateOption && templateOption.startsWith('@') && templateOption !== '@-') {
|
|
||||||
return resolveInputOption(templateOption)
|
|
||||||
}
|
|
||||||
return templateOption
|
|
||||||
}
|
|
||||||
|
|
||||||
async function resolveInputOption (option) {
|
async function resolveInputOption (option) {
|
||||||
let content = null
|
let content = null
|
||||||
if (option) {
|
if (option) {
|
||||||
|
|||||||
@@ -59,13 +59,14 @@ LiquidJS can also be used to render a template directly from CLI using `npx`:
|
|||||||
npx liquidjs --template '{{"hello" | capitalize}}'
|
npx liquidjs --template '{{"hello" | capitalize}}'
|
||||||
```
|
```
|
||||||
|
|
||||||
You can either pass the template inline (as shown above) or you can read it from a file by using the `@` character followed by a path, like so:
|
You can either pass the template inline (as shown above), read it from a file with `@` followed by a path, or from `stdin` with `@-`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx liquidjs --template @./some-template.liquid
|
npx liquidjs --template @./some-template.liquid
|
||||||
|
echo '{{"hello" | capitalize}}' | npx liquidjs --template @-
|
||||||
```
|
```
|
||||||
|
|
||||||
A context can be passed inline, from a path, or piped through `stdin`. The following three are equivalent:
|
A context can be passed the same ways (inline, from a path, or via `@-` for `stdin`). The following three are equivalent:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx liquidjs --template 'Hello, {{ name }}!' --context '{"name": "Snake"}'
|
npx liquidjs --template 'Hello, {{ name }}!' --context '{"name": "Snake"}'
|
||||||
@@ -73,6 +74,8 @@ npx liquidjs --template 'Hello, {{ name }}!' --context @./some-context.json
|
|||||||
echo '{"name": "Snake"}' | npx liquidjs --template 'Hello, {{ name }}!' --context @-
|
echo '{"name": "Snake"}' | npx liquidjs --template 'Hello, {{ name }}!' --context @-
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Note that you can only use the `stdin` specifier `@-` for a single argument. If you try to use it for both `--template` and `--context` you will get an error.
|
||||||
|
|
||||||
The rendered output is written to `stdout` by default, but you can also specify an output file (if the file exists, it will be overwritten):
|
The rendered output is written to `stdout` by default, but you can also specify an output file (if the file exists, it will be overwritten):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
Reference in New Issue
Block a user