From 3a67eb7f1cc7e54d2ec94a985eca4c1f147cdd61 Mon Sep 17 00:00:00 2001 From: Harttle Date: Sun, 4 Jun 2023 12:00:32 +0800 Subject: [PATCH] fix: incorrect error message for browser UMD bundle --- src/util/error.ts | 16 +++++++--------- test/e2e/browser.spec.ts | 10 ++++++++++ 2 files changed, 17 insertions(+), 9 deletions(-) create mode 100644 test/e2e/browser.spec.ts diff --git a/src/util/error.ts b/src/util/error.ts index 6a71e94bf..4960011f9 100644 --- a/src/util/error.ts +++ b/src/util/error.ts @@ -7,18 +7,16 @@ export abstract class LiquidError extends Error { public context = '' private originalError?: Error public constructor (err: Error | string, token: Token) { + /** + * note: for ES5 targeting, `this` will be replaced by return value of Error(), + * thus everything on `this` will be lost, avoid calling `LiquidError` methods here + */ super(typeof err === 'string' ? err : err.message) - if (typeof err !== 'string') this.defineUnEnumerable('originalError', err) - this.defineUnEnumerable('token', token) - } - private defineUnEnumerable (property: string, value: unknown) { - Object.defineProperty(this, property, { - value: value, - enumerable: false - }) + if (typeof err !== 'string') Object.defineProperty(this, 'originalError', { value: err, enumerable: false }) + Object.defineProperty(this, 'token', { value: token, enumerable: false }) } protected update () { - this.defineUnEnumerable('context', mkContext(this.token)) + Object.defineProperty(this, 'context', { value: mkContext(this.token), enumerable: false }) this.message = mkMessage(this.message, this.token) this.stack = this.message + '\n' + this.context + '\n' + this.stack diff --git a/test/e2e/browser.spec.ts b/test/e2e/browser.spec.ts new file mode 100644 index 000000000..7020e44db --- /dev/null +++ b/test/e2e/browser.spec.ts @@ -0,0 +1,10 @@ +const LiquidUMD = require('../../dist/liquid.browser.umd.js').Liquid + +describe('browser', function () { + it('should yield unclosed output error', () => { + const engine = new LiquidUMD() + return expect(engine.parseAndRender('{{huh')).rejects.toMatchObject({ + message: 'output "{{huh" not closed, line:1, col:1' + }) + }) +})