Guard against accidentally trying to build a patch matching a patch.

This commit is contained in:
Tony Garnock-Jones 2016-02-06 07:41:11 -05:00
parent f06d951dcb
commit 4cdd595301
1 changed files with 15 additions and 6 deletions

View File

@ -43,28 +43,37 @@ function observeAtMeta(p, level) {
} }
} }
function _check(p) {
if (p instanceof Patch) {
throw new Error("Cannot construct patch pattern using an embedded patch");
}
return p;
}
function assert(p, metaLevel) { function assert(p, metaLevel) {
return new Patch(Route.compilePattern(true, prependAtMeta(p, metaLevel || 0)), Route.emptyTrie); return new Patch(Route.compilePattern(true, prependAtMeta(_check(p), metaLevel || 0)),
Route.emptyTrie);
} }
function retract(p, metaLevel) { function retract(p, metaLevel) {
return new Patch(Route.emptyTrie, Route.compilePattern(true, prependAtMeta(p, metaLevel || 0))); return new Patch(Route.emptyTrie,
Route.compilePattern(true, prependAtMeta(_check(p), metaLevel || 0)));
} }
function sub(p, metaLevel) { function sub(p, metaLevel) {
return new Patch(observeAtMeta(p, metaLevel || 0), Route.emptyTrie); return new Patch(observeAtMeta(_check(p), metaLevel || 0), Route.emptyTrie);
} }
function unsub(p, metaLevel) { function unsub(p, metaLevel) {
return new Patch(Route.emptyTrie, observeAtMeta(p, metaLevel || 0)); return new Patch(Route.emptyTrie, observeAtMeta(_check(p), metaLevel || 0));
} }
function pub(p, metaLevel) { function pub(p, metaLevel) {
return assert(advertise(p), metaLevel); return assert(advertise(_check(p)), metaLevel);
} }
function unpub(p, metaLevel) { function unpub(p, metaLevel) {
return retract(advertise(p), metaLevel); return retract(advertise(_check(p)), metaLevel);
} }
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////