diff --git a/bin/liquid.js b/bin/liquid.js index 9d54b865d..b09b984eb 100755 --- a/bin/liquid.js +++ b/bin/liquid.js @@ -3,19 +3,7 @@ const fs = require('fs/promises') const Liquid = require('..').Liquid -// Preserve compatibility by falling back to legacy CLI behavior if: -// - stdin is redirected (i.e. not connected to a terminal) AND -// - there are either no arguments, or only a single argument which does not start with a dash -// TODO: Remove this fallback for 11.0 - -let renderPromise = null -if (!process.stdin.isTTY && (process.argv.length === 2 || (process.argv.length === 3 && !process.argv[2].startsWith('-')))) { - renderPromise = renderLegacy() -} else { - renderPromise = render() -} - -renderPromise.catch(err => { +render().catch(err => { process.stderr.write(`${err.message}\n`) process.exitCode = 1 }) @@ -26,7 +14,7 @@ async function render () { program .name('liquidjs') .description('Render a Liquid template') - .requiredOption('-t, --template ', 'liquid template to render (@- to read from stdin)') // TODO: Change to argument in 11.0 + .requiredOption('-t, --template ', 'liquid template to render (inline or @path to a file)') // TODO: Change to argument in 11.0 .option('-c, --context ', 'input context in JSON format (@- to read from stdin)') .option('-o, --output ', 'write rendered output to file (omit to write to stdout)') .option('--cache [size]', 'cache previously parsed template structures (default cache size: 1024)') @@ -58,8 +46,8 @@ async function render () { const options = program.opts() - if (Object.values(options).filter((value) => value === '@-').length > 1) { - throw new Error(`The stdin input specifier '@-' must only be used once.`) + if (options.template === '@-') { + throw new Error(`Reading template from stdin is not supported. Pass an inline template or @path.`) } const template = await resolveInputOption(options.template) @@ -108,32 +96,3 @@ async function readStream (stream) { } return Buffer.concat(chunks).toString('utf8') } - -// TODO: Remove for 11.0 -async function renderLegacy () { - process.stderr.write('Reading template from stdin. This mode will be removed in next major version, use --template option instead.\n') - const contextArg = process.argv.slice(2)[0] - let context = {} - if (contextArg) { - const contextJson = await resolveInputOptionLegacy(contextArg) - context = JSON.parse(contextJson) - } - const template = await readStream(process.stdin) - const liquid = new Liquid() - const output = liquid.parseAndRenderSync(template, context) - process.stdout.write(output) -} - -// TODO: Remove for 11.0 -async function resolveInputOptionLegacy (option) { - let content = null - if (option) { - const stat = await fs.stat(option).catch(e => null) - if (stat && stat.isFile) { - content = await fs.readFile(option, 'utf8') - } else { - content = option - } - } - return content -} diff --git a/docs/source/tutorials/setup.md b/docs/source/tutorials/setup.md index 894c938f3..8db5f8f40 100644 --- a/docs/source/tutorials/setup.md +++ b/docs/source/tutorials/setup.md @@ -65,13 +65,7 @@ You can either pass the template inline (as shown above) or you can read it from npx liquidjs --template @./some-template.liquid ``` -You can also use the `@-` syntax to read the template from `stdin`: - -```bash -echo '{{"hello" | capitalize}}' | npx liquidjs --template @- -``` - -A context can be passed in the same ways (i.e. inline, from a path or piped through `stdin`). The following three are equivalent: +A context can be passed inline, from a path, or piped through `stdin`. The following three are equivalent: ```bash npx liquidjs --template 'Hello, {{ name }}!' --context '{"name": "Snake"}' @@ -79,8 +73,6 @@ npx liquidjs --template 'Hello, {{ name }}!' --context @./some-context.json 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): ```bash