Skip to content

Commit

Permalink
add option to disable two-way binding (#54)
Browse files Browse the repository at this point in the history
  • Loading branch information
Rich-Harris committed Dec 30, 2017
1 parent 8b5dba9 commit 20962f9
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 2 deletions.
5 changes: 5 additions & 0 deletions src/parse/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ class ParseError extends CompileError {

interface ParserOptions {
filename?: string;
bind?: boolean;
}

type ParserState = (parser: Parser) => (ParserState | void);
Expand All @@ -38,6 +39,8 @@ export class Parser {
js: Node;
metaTags: {};

allowBindings: boolean;

constructor(template: string, options: ParserOptions) {
if (typeof template !== 'string') {
throw new TypeError('Template must be a string');
Expand All @@ -46,6 +49,8 @@ export class Parser {
this.template = template.replace(/\s+$/, '');
this.filename = options.filename;

this.allowBindings = options.bind !== false;

this.index = 0;
this.stack = [];
this.metaTags = {};
Expand Down
4 changes: 4 additions & 0 deletions src/parse/state/tag.ts
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,10 @@ export default function tag(parser: Parser) {

let attribute;
while ((attribute = readAttribute(parser, uniqueNames))) {
if (attribute.type === 'Binding' && !parser.allowBindings) {
parser.error(`Two-way binding is disabled`, attribute.start);
}

element.attributes.push(attribute);
parser.allowWhitespace();
}
Expand Down
6 changes: 4 additions & 2 deletions test/parser/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import assert from 'assert';
import fs from 'fs';
import { svelte } from '../helpers.js';
import { svelte, tryToLoadJson } from '../helpers.js';

describe('parse', () => {
fs.readdirSync('test/parser/samples').forEach(dir => {
Expand All @@ -20,8 +20,10 @@ describe('parse', () => {
.readFileSync(`test/parser/samples/${dir}/input.html`, 'utf-8')
.replace(/\s+$/, '');

const options = tryToLoadJson(`test/parser/samples/${dir}/options.json`) || {};

try {
const actual = svelte.parse(input);
const actual = svelte.parse(input, options);
fs.writeFileSync(
`test/parser/samples/${dir}/_actual.json`,
JSON.stringify(actual, null, '\t')
Expand Down
8 changes: 8 additions & 0 deletions test/parser/samples/error-binding-disabled/error.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"message": "Two-way binding is disabled",
"loc": {
"line": 1,
"column": 7
},
"pos": 7
}
1 change: 1 addition & 0 deletions test/parser/samples/error-binding-disabled/input.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<input bind:value='name'>
3 changes: 3 additions & 0 deletions test/parser/samples/error-binding-disabled/options.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"bind": false
}

0 comments on commit 20962f9

Please sign in to comment.