Comparing version 1.2.3 to 1.3.0
{ | ||
"name": "asty", | ||
"version": "1.2.3", | ||
"version": "1.3.0", | ||
"description": "Abstract Syntax Tree (AST) Data Structure", | ||
@@ -5,0 +5,0 @@ "main": "lib/asty.browser.js", |
@@ -26,15 +26,15 @@ /* | ||
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ASTY = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){ | ||
"use strict";function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),ASTYBase=function(){function t(){_classCallCheck(this,t)}return _createClass(t,[{key:"init",value:function(t,e,n){if("undefined"==typeof t)throw new Error("init: invalid argument");if(this.ASTy=!0,this.T=t,this.L={L:0,C:0,O:0},this.A={},this.C=[],this.P=null,"object"==typeof e)for(var r in e)e.hasOwnProperty(r)&&this.set(r,e[r]);return"object"==typeof n&&n instanceof Array&&this.add(n),this}},{key:"type",value:function(t){if(0===arguments.length)return this.T;if(1===arguments.length)return this.T=t,this;throw new Error("type: invalid number of arguments")}},{key:"pos",value:function(t,e,n){if(0===arguments.length)return{line:this.L.L,column:this.L.C,offset:this.L.O};if(arguments.length<=3)return this.L.L=t||0,this.L.C=e||0,this.L.O=n||0,this;throw new Error("pos: invalid number of arguments")}},{key:"set",value:function(){var t=arguments,e=this;if(1===arguments.length&&"object"==typeof arguments[0])!function(){var n=t;Object.keys(n[0]).forEach(function(t){e.A[t]=n[0][t]})}();else{if(2!==arguments.length)throw new Error("set: invalid arguments");this.A[arguments[0]]=arguments[1]}return this}},{key:"unset",value:function(){var t=this;if(1===arguments.length&&"object"==typeof arguments[0]&&arguments[0]instanceof Array)arguments[0].forEach(function(e){delete t.A[e]});else{if(1!==arguments.length)throw new Error("unset: invalid arguments");delete this.A[arguments[0]]}return this}},{key:"get",value:function(t){if(1!==arguments.length)throw new Error("get: invalid number of arguments");if("string"!=typeof t)throw new Error("get: invalid argument");return this.A[t]}},{key:"attrs",value:function(){return Object.keys(this.A)}},{key:"add",value:function(){var t=this;if(0===arguments.length)throw new Error("add: missing argument(s)");var e=function(t,e){if(!("object"==typeof e&&"string"==typeof e.T&&"object"==typeof e.L&&"object"==typeof e.A&&"object"==typeof e.P&&"object"==typeof e.C&&e.C instanceof Array))throw new Error("add: invalid AST node: "+JSON.stringify(e));t.C.push(e),e.P=t};return null!==arguments&&Array.prototype.slice.call(arguments,0).forEach(function(n){"object"==typeof n&&n instanceof Array?n.forEach(function(n){e(t,n)}):null!==n&&e(t,n)}),this}},{key:"del",value:function(){var t=this;if(0===arguments.length)throw new Error("del: invalid argument");return Array.prototype.slice.call(arguments,0).forEach(function(e){for(var n=!1,r=0;r<t.C.length;r++)if(t.C[r]===e){t.C.splice(r,1),e.P=null,n=!0;break}if(!n)throw new Error("del: child not found")}),this}},{key:"childs",value:function(){return this.C}},{key:"parent",value:function(){return this.P}}]),t}();exports["default"]=ASTYBase,module.exports=exports["default"]; | ||
"use strict";function _classCallCheck(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function t(t,n){for(var e=0;e<n.length;e++){var r=n[e];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(n,e,r){return e&&t(n.prototype,e),r&&t(n,r),n}}(),ASTYBase=function(){function t(){_classCallCheck(this,t)}return _createClass(t,[{key:"init",value:function(t,n,e,r){if(arguments.length<2)throw new Error("init: invalid number of arguments");if(this.ctx=t,this.ASTy=!0,this.T=n,this.L={L:0,C:0,O:0},this.A={},this.C=[],this.P=null,"object"==typeof e)for(var i in e)e.hasOwnProperty(i)&&this.set(i,e[i]);return"object"==typeof r&&r instanceof Array&&this.add(r),this}},{key:"type",value:function(t){if(0===arguments.length)return this.T;if(1===arguments.length)return this.T=t,this;throw new Error("type: invalid number of arguments")}},{key:"pos",value:function(t,n,e){if(0===arguments.length)return{line:this.L.L,column:this.L.C,offset:this.L.O};if(arguments.length<=3)return this.L.L=t||0,this.L.C=n||0,this.L.O=e||0,this;throw new Error("pos: invalid number of arguments")}},{key:"set",value:function(){for(var t=this,n=arguments.length,e=Array(n),r=0;n>r;r++)e[r]=arguments[r];if(1===e.length&&"object"==typeof e[0])Object.keys(e[0]).forEach(function(n){t.A[n]=e[0][n]});else{if(2!==e.length)throw new Error("set: invalid number of arguments");this.A[e[0]]=e[1]}return this}},{key:"unset",value:function(){for(var t=this,n=arguments.length,e=Array(n),r=0;n>r;r++)e[r]=arguments[r];if(1===e.length&&"object"==typeof e[0]&&e[0]instanceof Array)e[0].forEach(function(n){delete t.A[n]});else{if(1!==e.length)throw new Error("unset: invalid number of arguments");delete this.A[e[0]]}return this}},{key:"get",value:function(t){if(1!==arguments.length)throw new Error("get: invalid number of arguments");if("string"!=typeof t)throw new Error("get: invalid key argument");return this.A[t]}},{key:"attrs",value:function(){return Object.keys(this.A)}},{key:"nth",value:function n(){if(null===this.P)return 1;var n=this.P.C.indexOf(this);if(0>n)throw new Error("nth: internal error -- node not in childs of its parent");return n}},{key:"ins",value:function(t){for(var n=this,e=arguments.length,r=Array(e>1?e-1:0),i=1;e>i;i++)r[i-1]=arguments[i];if(0===r.length)throw new Error("ins: invalid number of arguments");if(0>t&&(t=this.C.length+1-t),!(t>0&&t<this.C.length))throw new Error("ins: invalid position");var o=function(e){if(!n.ctx.isA(e))throw new Error("ins: invalid AST node argument: "+JSON.stringify(e));n.C.splice(t++,0,e),e.P=n};r.forEach(function(t){"object"==typeof t&&t instanceof Array?t.forEach(function(t){o(t)}):null!==t&&o(t)})}},{key:"add",value:function(){for(var t=this,n=arguments.length,e=Array(n),r=0;n>r;r++)e[r]=arguments[r];if(0===e.length)throw new Error("add: invalid number of arguments");var i=function(n){if(!t.ctx.isA(n))throw new Error("add: invalid AST node argument: "+JSON.stringify(n));t.C.push(n),n.P=t};e.forEach(function(t){"object"==typeof t&&t instanceof Array?t.forEach(function(t){i(t)}):null!==t&&i(t)})}},{key:"del",value:function(){for(var t=this,n=arguments.length,e=Array(n),r=0;n>r;r++)e[r]=arguments[r];if(0===e.length)throw new Error("del: invalid number of argument");return e.forEach(function(n){if(!t.ctx.isA(n))throw new Error("del: invalid AST node argument: "+JSON.stringify(n));for(var e=!1,r=0;r<t.C.length;r++)if(t.C[r]===n){t.C.splice(r,1),n.P=null,e=!0;break}if(!e)throw new Error("del: AST node not found in childs")}),this}},{key:"childs",value:function(){return this.C}},{key:"parent",value:function(){return this.P}}]),t}();exports["default"]=ASTYBase,module.exports=exports["default"]; | ||
},{}],2:[function(_dereq_,module,exports){ | ||
"use strict";function _classCallCheck(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function e(e,r){for(var n=0;n<r.length;n++){var t=r[n];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(e,t.key,t)}}return function(r,n,t){return n&&e(r.prototype,n),t&&e(r,t),r}}(),ASTYDump=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:"dump",value:function(e){void 0===e&&(e=1/0);var r="";return this.walk(function(n,t){if(!(t>e)){for(var a=0;t>a;a++)r+=" ";r+=n.T+" ";var c=Object.keys(n.A);c.length>0&&!function(){r+="(";var e=!0;c.forEach(function(t){e?e=!1:r+=", ",r+=t+": ";var a=n.A[t];switch(typeof a){case"string":var c=function(e){return e.charCodeAt(0).toString(16).toUpperCase()};r+='"'+a.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,function(e){return"\\x0"+c(e)}).replace(/[\x10-\x1F\x80-\xFF]/g,function(e){return"\\x"+c(e)}).replace(/[\u0100-\u0FFF]/g,function(e){return"\\u0"+c(e)}).replace(/[\u1000-\uFFFF]/g,function(e){return"\\u"+c(e)})+'"';break;case"object":r+=a instanceof RegExp?a.source:JSON.stringify(a);break;default:r+=JSON.stringify(a)}}),r+=") "}(),r+="["+n.L.L+"/"+n.L.C+"]\n"}},"downward"),r}}]),e}();exports["default"]=ASTYDump,module.exports=exports["default"]; | ||
},{}],3:[function(_dereq_,module,exports){ | ||
"use strict";function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),ASTYMerge=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:"merge",value:function(e,t,n){var r=this;if("object"!=typeof e)throw new Error("merge: invalid AST node argument");if("undefined"==typeof t&&(t=!1),"undefined"==typeof n&&(n={}),t){var o=e.pos();this.pos(o.L,o.C,o.O)}return e.attrs().forEach(function(t){var o="undefined"!=typeof n[t]?n[t]:t;null!==o&&r.set(o,e.get(t))}),e.childs().forEach(function(e){r.add(e)}),this}}]),e}();exports["default"]=ASTYMerge,module.exports=exports["default"]; | ||
"use strict";function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}(),ASTYMerge=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:"merge",value:function(e){var t=this,r=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],n=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];if(!this.ctx.isA(e))throw new Error("merge: invalid AST node argument");if(r){var a=e.pos();this.pos(a.L,a.C,a.O)}return e.attrs().forEach(function(r){var a="undefined"!=typeof n[r]?n[r]:r;null!==a&&t.set(a,e.get(r))}),e.childs().forEach(function(e){t.add(e)}),this}}]),e}();exports["default"]=ASTYMerge,module.exports=exports["default"]; | ||
},{}],4:[function(_dereq_,module,exports){ | ||
"use strict";function _classCallCheck(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function e(e,r){for(var t=0;t<r.length;t++){var n=r[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(r,t,n){return t&&e(r.prototype,t),n&&e(r,n),r}}(),ASTYSerialize=function(){function e(){_classCallCheck(this,e)}return _createClass(e,null,[{key:"serialize",value:function(e,r){var t=function n(e){var r={T:e.T,L:{L:e.L.L,C:e.L.C,O:e.L.O}},t=Object.keys(e.A);return t.length>0&&(r.A={},t.forEach(function(t){var n=e.A[t];switch(typeof n){case"boolean":case"number":case"string":r.A[t]=n;break;default:r.A[t]=JSON.parse(JSON.stringify(n))}})),e.C.length>0&&(r.C=e.C.map(function(e){return n(e)})),r};if(!e.isA(r))throw new Error("failed to serialize: not an ASTy node");return JSON.stringify({ASTy:t(r)})}},{key:"unserialize",value:function(e,r){var t=function a(r){var t=e.create(r.T);return t.pos(r.L.L,r.L.C,r.L.O),"object"==typeof r.A&&Object.keys(r.A).forEach(function(e){var n=r.A[e];switch(typeof n){case"boolean":case"number":case"string":t.set(e,n);break;default:t.set(e,JSON.parse(JSON.stringify(n)))}}),"object"==typeof r.C&&r.C instanceof Array&&t.add(r.C.map(function(e){return a(e)})),t},n=JSON.parse(r);if("object"!=typeof n||"object"!=typeof n.ASTy)throw new Error("failed to unserialize: not an ASTy JSON export");return t(n.ASTy)}}]),e}();exports["default"]=ASTYSerialize,module.exports=exports["default"]; | ||
"use strict";function _classCallCheck(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function e(e,r){for(var t=0;t<r.length;t++){var n=r[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(r,t,n){return t&&e(r.prototype,t),n&&e(r,n),r}}(),ASTYSerialize=function(){function e(){_classCallCheck(this,e)}return _createClass(e,null,[{key:"serialize",value:function(e,r){var t=function n(e){var r={T:e.T,L:{L:e.L.L,C:e.L.C,O:e.L.O}},t=Object.keys(e.A);return t.length>0&&(r.A={},t.forEach(function(t){var n=e.A[t];switch(typeof n){case"boolean":case"number":case"string":r.A[t]=n;break;default:r.A[t]=JSON.parse(JSON.stringify(n))}})),e.C.length>0&&(r.C=e.C.map(function(e){return n(e)})),r};if(!e.isA(r))throw new Error("serialize: not an ASTy node");return JSON.stringify({ASTy:t(r)})}},{key:"unserialize",value:function(e,r){var t=function a(r){var t=e.create(r.T);return t.pos(r.L.L,r.L.C,r.L.O),"object"==typeof r.A&&Object.keys(r.A).forEach(function(e){var n=r.A[e];switch(typeof n){case"boolean":case"number":case"string":t.set(e,n);break;default:t.set(e,JSON.parse(JSON.stringify(n)))}}),"object"==typeof r.C&&r.C instanceof Array&&t.add(r.C.map(function(e){return a(e)})),t},n=JSON.parse(r);if("object"!=typeof n||"object"!=typeof n.ASTy)throw new Error("unserialize: not an ASTy JSON export");return t(n.ASTy)}}]),e}();exports["default"]=ASTYSerialize,module.exports=exports["default"]; | ||
},{}],5:[function(_dereq_,module,exports){ | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var version={major:1,minor:2,micro:3,date:20150819};exports["default"]=version,module.exports=exports["default"]; | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var version={major:1,minor:3,micro:0,date:20150819};exports["default"]=version,module.exports=exports["default"]; | ||
},{}],6:[function(_dereq_,module,exports){ | ||
"use strict";function _classCallCheck(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function e(e,n){for(var t=0;t<n.length;t++){var a=n[t];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(n,t,a){return t&&e(n.prototype,t),a&&e(n,a),n}}(),ASTYWalk=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:"walk",value:function(e,n){"undefined"==typeof n&&(n="downward");var t=function a(t,r,l){("downward"===n||"both"===n)&&e.call(null,t,r,l,"downward"),t.C.forEach(function(e){a(e,r+1,t)}),("upward"===n||"both"===n)&&e.call(null,t,r,l,"upward")};return t(this,0,null),this}}]),e}();exports["default"]=ASTYWalk,module.exports=exports["default"]; | ||
"use strict";function _classCallCheck(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function e(e,n){for(var t=0;t<n.length;t++){var a=n[t];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(n,t,a){return t&&e(n.prototype,t),a&&e(n,a),n}}(),ASTYWalk=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:"walk",value:function(e){var n=arguments.length<=1||void 0===arguments[1]?"downward":arguments[1],t=function a(t,r,l){("downward"===n||"both"===n)&&e.call(null,t,r,l,"downward"),t.C.forEach(function(e){a(e,r+1,t)}),("upward"===n||"both"===n)&&e.call(null,t,r,l,"upward")};return t(this,0,null),this}}]),e}();exports["default"]=ASTYWalk,module.exports=exports["default"]; | ||
},{}],7:[function(_dereq_,module,exports){ | ||
"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{"default":e}}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function e(e,t){for(var s=0;s<t.length;s++){var a=t[s];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,s,a){return s&&e(t.prototype,s),a&&e(t,a),t}}(),_astyBaseJs=_dereq_("./asty-base.js"),_astyBaseJs2=_interopRequireDefault(_astyBaseJs),_astyMergeJs=_dereq_("./asty-merge.js"),_astyMergeJs2=_interopRequireDefault(_astyMergeJs),_astyWalkJs=_dereq_("./asty-walk.js"),_astyWalkJs2=_interopRequireDefault(_astyWalkJs),_astyDumpJs=_dereq_("./asty-dump.js"),_astyDumpJs2=_interopRequireDefault(_astyDumpJs),_astySerializeJs=_dereq_("./asty-serialize.js"),_astySerializeJs2=_interopRequireDefault(_astySerializeJs),_astyVersionJs=_dereq_("./asty-version.js"),_astyVersionJs2=_interopRequireDefault(_astyVersionJs),ASTYCtx=function(){function e(){var t=this;_classCallCheck(this,e),this.ASTYNode=function(){};var s=[[_astyBaseJs2["default"],"init","type","pos","set","unset","get","attrs","add","del","childs","parent"],[_astyMergeJs2["default"],"merge"],[_astyWalkJs2["default"],"walk"],[_astyDumpJs2["default"],"dump"]];return s.forEach(function(e){var s=e[0].prototype;e.slice(1).forEach(function(e){t.ASTYNode.prototype[e]=s[e]})}),this}return _createClass(e,[{key:"version",value:function(){return _astyVersionJs2["default"]}},{key:"extend",value:function(e){for(var t in e)e.hasOwnProperty(t)&&(this.ASTYNode.prototype[t]=e[t]);return this}},{key:"create",value:function(e){return(new this.ASTYNode).init(e)}},{key:"isA",value:function(e){return"object"==typeof e&&e instanceof this.ASTYNode&&"boolean"==typeof e.ASTy&&e.ASTy===!0}},{key:"serialize",value:function(e){return _astySerializeJs2["default"].serialize(this,e)}},{key:"unserialize",value:function(e){return _astySerializeJs2["default"].unserialize(this,e)}}]),e}();exports["default"]=ASTYCtx,module.exports=exports["default"]; | ||
"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{"default":e}}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function e(e,t){for(var s=0;s<t.length;s++){var a=t[s];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,s,a){return s&&e(t.prototype,s),a&&e(t,a),t}}(),_astyBaseJs=_dereq_("./asty-base.js"),_astyBaseJs2=_interopRequireDefault(_astyBaseJs),_astyMergeJs=_dereq_("./asty-merge.js"),_astyMergeJs2=_interopRequireDefault(_astyMergeJs),_astyWalkJs=_dereq_("./asty-walk.js"),_astyWalkJs2=_interopRequireDefault(_astyWalkJs),_astyDumpJs=_dereq_("./asty-dump.js"),_astyDumpJs2=_interopRequireDefault(_astyDumpJs),_astySerializeJs=_dereq_("./asty-serialize.js"),_astySerializeJs2=_interopRequireDefault(_astySerializeJs),_astyVersionJs=_dereq_("./asty-version.js"),_astyVersionJs2=_interopRequireDefault(_astyVersionJs),ASTYCtx=function(){function e(){var t=this;_classCallCheck(this,e),this.ASTYNode=function(){};var s=[[_astyBaseJs2["default"],"init","type","pos","set","unset","get","attrs","add","del","childs","parent"],[_astyMergeJs2["default"],"merge"],[_astyWalkJs2["default"],"walk"],[_astyDumpJs2["default"],"dump"]];return s.forEach(function(e){var s=e[0].prototype;e.slice(1).forEach(function(e){t.ASTYNode.prototype[e]=s[e]})}),this}return _createClass(e,[{key:"version",value:function(){return _astyVersionJs2["default"]}},{key:"extend",value:function(e){for(var t in e)e.hasOwnProperty(t)&&(this.ASTYNode.prototype[t]=e[t]);return this}},{key:"create",value:function(e){return(new this.ASTYNode).init(this,e)}},{key:"isA",value:function(e){return"object"==typeof e&&e instanceof this.ASTYNode&&"boolean"==typeof e.ASTy&&e.ASTy===!0}},{key:"serialize",value:function(e){return _astySerializeJs2["default"].serialize(this,e)}},{key:"unserialize",value:function(e){return _astySerializeJs2["default"].unserialize(this,e)}}]),e}();exports["default"]=ASTYCtx,module.exports=exports["default"]; | ||
},{"./asty-base.js":1,"./asty-dump.js":2,"./asty-merge.js":3,"./asty-serialize.js":4,"./asty-version.js":5,"./asty-walk.js":6}]},{},[1,2,3,4,5,6,7])(7) | ||
@@ -41,0 +41,0 @@ }); |
@@ -69,4 +69,5 @@ /* | ||
/* AST node initialization */ | ||
value: function init(T, A, C) { | ||
if (typeof T === "undefined") throw new Error("init: invalid argument"); | ||
value: function init(ctx, T, A, C) { | ||
if (arguments.length < 2) throw new Error("init: invalid number of arguments"); | ||
this.ctx = ctx; | ||
this.ASTy = true; | ||
@@ -117,13 +118,13 @@ this.T = T; | ||
value: function set() { | ||
var _arguments = arguments, | ||
_this = this; | ||
var _this = this; | ||
if (arguments.length === 1 && typeof arguments[0] === "object") { | ||
(function () { | ||
var args = _arguments; | ||
Object.keys(args[0]).forEach(function (key) { | ||
_this.A[key] = args[0][key]; | ||
}); | ||
})(); | ||
} else if (arguments.length === 2) this.A[arguments[0]] = arguments[1];else throw new Error("set: invalid arguments"); | ||
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { | ||
args[_key] = arguments[_key]; | ||
} | ||
if (args.length === 1 && typeof args[0] === "object") { | ||
Object.keys(args[0]).forEach(function (key) { | ||
_this.A[key] = args[0][key]; | ||
}); | ||
} else if (args.length === 2) this.A[args[0]] = args[1];else throw new Error("set: invalid number of arguments"); | ||
return this; | ||
@@ -138,7 +139,11 @@ } | ||
if (arguments.length === 1 && typeof arguments[0] === "object" && arguments[0] instanceof Array) { | ||
arguments[0].forEach(function (key) { | ||
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { | ||
args[_key2] = arguments[_key2]; | ||
} | ||
if (args.length === 1 && typeof args[0] === "object" && args[0] instanceof Array) { | ||
args[0].forEach(function (key) { | ||
delete _this2.A[key]; | ||
}); | ||
} else if (arguments.length === 1) delete this.A[arguments[0]];else throw new Error("unset: invalid arguments"); | ||
} else if (args.length === 1) delete this.A[args[0]];else throw new Error("unset: invalid number of arguments"); | ||
return this; | ||
@@ -152,3 +157,3 @@ } | ||
if (arguments.length !== 1) throw new Error("get: invalid number of arguments"); | ||
if (typeof key !== "string") throw new Error("get: invalid argument"); | ||
if (typeof key !== "string") throw new Error("get: invalid key argument"); | ||
return this.A[key]; | ||
@@ -164,2 +169,37 @@ } | ||
/* return current sibling position */ | ||
}, { | ||
key: "nth", | ||
value: function nth() { | ||
if (this.P === null) return 1; | ||
var nth = this.P.C.indexOf(this); | ||
if (nth < 0) throw new Error("nth: internal error -- node not in childs of its parent"); | ||
return nth; | ||
} | ||
/* insert child AST node(s) */ | ||
}, { | ||
key: "ins", | ||
value: function ins(pos) { | ||
var _this3 = this; | ||
for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { | ||
args[_key3 - 1] = arguments[_key3]; | ||
} | ||
if (args.length === 0) throw new Error("ins: invalid number of arguments"); | ||
if (pos < 0) pos = this.C.length + 1 - pos; | ||
if (!(0 < pos && pos < this.C.length)) throw new Error("ins: invalid position"); | ||
var _ins = function _ins(node) { | ||
if (!_this3.ctx.isA(node)) throw new Error("ins: invalid AST node argument: " + JSON.stringify(node)); | ||
_this3.C.splice(pos++, 0, node); | ||
node.P = _this3; | ||
}; | ||
args.forEach(function (arg) { | ||
if (typeof arg === "object" && arg instanceof Array) arg.forEach(function (arg) { | ||
_ins(arg); | ||
});else if (arg !== null) _ins(arg); | ||
}); | ||
} | ||
/* add child AST node(s) */ | ||
@@ -169,18 +209,19 @@ }, { | ||
value: function add() { | ||
var _this3 = this; | ||
var _this4 = this; | ||
if (arguments.length === 0) throw new Error("add: missing argument(s)"); | ||
var _add = function _add(node, child) { | ||
if (!(typeof child === "object" && typeof child.T === "string" && typeof child.L === "object" && typeof child.A === "object" && typeof child.P === "object" && (typeof child.C === "object" && child.C instanceof Array))) throw new Error("add: invalid AST node: " + JSON.stringify(child)); | ||
node.C.push(child); | ||
child.P = node; | ||
for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { | ||
args[_key4] = arguments[_key4]; | ||
} | ||
if (args.length === 0) throw new Error("add: invalid number of arguments"); | ||
var _add = function _add(node) { | ||
if (!_this4.ctx.isA(node)) throw new Error("add: invalid AST node argument: " + JSON.stringify(node)); | ||
_this4.C.push(node); | ||
node.P = _this4; | ||
}; | ||
if (arguments !== null) { | ||
Array.prototype.slice.call(arguments, 0).forEach(function (arg) { | ||
if (typeof arg === "object" && arg instanceof Array) arg.forEach(function (child) { | ||
_add(_this3, child); | ||
});else if (arg !== null) _add(_this3, arg); | ||
}); | ||
} | ||
return this; | ||
args.forEach(function (arg) { | ||
if (typeof arg === "object" && arg instanceof Array) arg.forEach(function (arg) { | ||
_add(arg); | ||
});else if (arg !== null) _add(arg); | ||
}); | ||
} | ||
@@ -192,11 +233,16 @@ | ||
value: function del() { | ||
var _this4 = this; | ||
var _this5 = this; | ||
if (arguments.length === 0) throw new Error("del: invalid argument"); | ||
Array.prototype.slice.call(arguments, 0).forEach(function (arg) { | ||
for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { | ||
args[_key5] = arguments[_key5]; | ||
} | ||
if (args.length === 0) throw new Error("del: invalid number of argument"); | ||
args.forEach(function (node) { | ||
if (!_this5.ctx.isA(node)) throw new Error("del: invalid AST node argument: " + JSON.stringify(node)); | ||
var found = false; | ||
for (var j = 0; j < _this4.C.length; j++) { | ||
if (_this4.C[j] === arg) { | ||
_this4.C.splice(j, 1); | ||
arg.P = null; | ||
for (var j = 0; j < _this5.C.length; j++) { | ||
if (_this5.C[j] === node) { | ||
_this5.C.splice(j, 1); | ||
node.P = null; | ||
found = true; | ||
@@ -206,3 +252,3 @@ break; | ||
} | ||
if (!found) throw new Error("del: child not found"); | ||
if (!found) throw new Error("del: AST node not found in childs"); | ||
}); | ||
@@ -376,8 +422,9 @@ return this; | ||
/* merge attributes and childs of an AST node */ | ||
value: function merge(node, takePos, attrMap) { | ||
value: function merge(node) { | ||
var _this = this; | ||
if (typeof node !== "object") throw new Error("merge: invalid AST node argument"); | ||
if (typeof takePos === "undefined") takePos = false; | ||
if (typeof attrMap === "undefined") attrMap = {}; | ||
var takePos = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; | ||
var attrMap = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; | ||
if (!this.ctx.isA(node)) throw new Error("merge: invalid AST node argument"); | ||
if (takePos) { | ||
@@ -477,3 +524,3 @@ var pos = node.pos(); | ||
}; | ||
if (!asty.isA(node)) throw new Error("failed to serialize: not an ASTy node"); | ||
if (!asty.isA(node)) throw new Error("serialize: not an ASTy node"); | ||
return JSON.stringify({ ASTy: serializeNode(node) }); | ||
@@ -511,3 +558,3 @@ } | ||
var obj = JSON.parse(json); | ||
if (typeof obj !== "object" || typeof obj.ASTy !== "object") throw new Error("failed to unserialize: not an ASTy JSON export"); | ||
if (typeof obj !== "object" || typeof obj.ASTy !== "object") throw new Error("unserialize: not an ASTy JSON export"); | ||
return unserializeNode(obj.ASTy); | ||
@@ -549,4 +596,4 @@ } | ||
/* global 1: false */ | ||
/* global 2: false */ | ||
/* global 3: false */ | ||
/* global 0: false */ | ||
/* global 20150819: false */ | ||
@@ -561,4 +608,4 @@ | ||
major: 1, | ||
minor: 2, | ||
micro: 3, | ||
minor: 3, | ||
micro: 0, | ||
date: 20150819 | ||
@@ -614,4 +661,5 @@ }; | ||
/* walk the AST recursively */ | ||
value: function walk(cb, when) { | ||
if (typeof when === "undefined") when = "downward"; | ||
value: function walk(cb) { | ||
var when = arguments.length <= 1 || arguments[1] === undefined ? "downward" : arguments[1]; | ||
var _walk = function _walk(node, depth, parent) { | ||
@@ -728,3 +776,3 @@ if (when === "downward" || when === "both") cb.call(null, node, depth, parent, "downward"); | ||
value: function create(type) { | ||
return new this.ASTYNode().init(type); | ||
return new this.ASTYNode().init(this, type); | ||
} | ||
@@ -731,0 +779,0 @@ }, { |
{ | ||
"name": "asty", | ||
"version": "1.2.3", | ||
"version": "1.3.0", | ||
"description": "Abstract Syntax Tree (AST) Data Structure", | ||
@@ -5,0 +5,0 @@ "keywords": [ "ast", "abstract", "syntax", "tree", "data", "structure" ], |
@@ -105,6 +105,15 @@ | ||
- `ASTYNode#nth(): Number:<br/> | ||
Get position among sibling nodes in parent's child node list. | ||
The positions start at 0. | ||
- `ASTYNode#ins(pos: Number, childs: ASTYNode[]): ASTYNode`:<br/> | ||
Add one or more childs to a node, at a fixed position `pos`. The array `childs` | ||
can either contain ASTYNode objects or even arrays of ASTYNode objects. | ||
If `pos` is negative it counts from the end of child list, | ||
with `-1` the position after the last existing child. | ||
- `ASTYNode#add(childs: ASTYNode[]): ASTYNode`:<br/> | ||
Add one or more childs to a node. The array `childs` | ||
can either contain ASTYNode objects or even arrays | ||
of ASTYNode objects. | ||
Add one or more childs to a node, at the end of the child list. The array `childs` | ||
can either contain ASTYNode objects or even arrays of ASTYNode objects. | ||
@@ -111,0 +120,0 @@ - `ASTYNode#del(childs: ASTYNode[]): ASTYNode`:<br/> |
@@ -27,5 +27,6 @@ /* | ||
/* AST node initialization */ | ||
init (T, A, C) { | ||
if (typeof T === "undefined") | ||
throw new Error("init: invalid argument") | ||
init (ctx, T, A, C) { | ||
if (arguments.length < 2) | ||
throw new Error("init: invalid number of arguments") | ||
this.ctx = ctx | ||
this.ASTy = true | ||
@@ -78,5 +79,5 @@ this.T = T | ||
/* set AST node attributes */ | ||
set () { | ||
if (arguments.length === 1 && typeof arguments[0] === "object") { | ||
let args = arguments | ||
set (...args) { | ||
if ( args.length === 1 | ||
&& typeof args[0] === "object") { | ||
Object.keys(args[0]).forEach((key) => { | ||
@@ -86,6 +87,6 @@ this.A[key] = args[0][key] | ||
} | ||
else if (arguments.length === 2) | ||
this.A[arguments[0]] = arguments[1] | ||
else if (args.length === 2) | ||
this.A[args[0]] = args[1] | ||
else | ||
throw new Error("set: invalid arguments") | ||
throw new Error("set: invalid number of arguments") | ||
return this | ||
@@ -95,12 +96,14 @@ } | ||
/* unset AST node attributes */ | ||
unset () { | ||
if (arguments.length === 1 && typeof arguments[0] === "object" && arguments[0] instanceof Array) { | ||
arguments[0].forEach((key) => { | ||
unset (...args) { | ||
if ( args.length === 1 | ||
&& typeof args[0] === "object" | ||
&& args[0] instanceof Array ) { | ||
args[0].forEach((key) => { | ||
delete this.A[key] | ||
}) | ||
} | ||
else if (arguments.length === 1) | ||
delete this.A[arguments[0]] | ||
else if (args.length === 1) | ||
delete this.A[args[0]] | ||
else | ||
throw new Error("unset: invalid arguments") | ||
throw new Error("unset: invalid number of arguments") | ||
return this | ||
@@ -114,3 +117,3 @@ } | ||
if (typeof key !== "string") | ||
throw new Error("get: invalid argument") | ||
throw new Error("get: invalid key argument") | ||
return this.A[key] | ||
@@ -124,38 +127,64 @@ } | ||
/* return current sibling position */ | ||
nth () { | ||
if (this.P === null) | ||
return 1 | ||
let nth = this.P.C.indexOf(this) | ||
if (nth < 0) | ||
throw new Error("nth: internal error -- node not in childs of its parent") | ||
return nth | ||
} | ||
/* insert child AST node(s) */ | ||
ins (pos, ...args) { | ||
if (args.length === 0) | ||
throw new Error("ins: invalid number of arguments") | ||
if (pos < 0) | ||
pos = (this.C.length + 1) - pos | ||
if (!(0 < pos && pos < this.C.length)) | ||
throw new Error("ins: invalid position") | ||
let _ins = (node) => { | ||
if (!this.ctx.isA(node)) | ||
throw new Error(`ins: invalid AST node argument: ${ JSON.stringify(node) }`) | ||
this.C.splice(pos++, 0, node) | ||
node.P = this | ||
} | ||
args.forEach((arg) => { | ||
if (typeof arg === "object" && arg instanceof Array) | ||
arg.forEach((arg) => { _ins(arg) }) | ||
else if (arg !== null) | ||
_ins(arg) | ||
}) | ||
} | ||
/* add child AST node(s) */ | ||
add () { | ||
if (arguments.length === 0) | ||
throw new Error("add: missing argument(s)") | ||
let _add = (node, child) => { | ||
if (!((typeof child === "object") && | ||
(typeof child.T === "string") && | ||
(typeof child.L === "object") && | ||
(typeof child.A === "object") && | ||
(typeof child.P === "object") && | ||
(typeof child.C === "object" && child.C instanceof Array))) | ||
throw new Error(`add: invalid AST node: ${ JSON.stringify(child) }`) | ||
node.C.push(child) | ||
child.P = node | ||
add (...args) { | ||
if (args.length === 0) | ||
throw new Error("add: invalid number of arguments") | ||
let _add = (node) => { | ||
if (!this.ctx.isA(node)) | ||
throw new Error(`add: invalid AST node argument: ${ JSON.stringify(node) }`) | ||
this.C.push(node) | ||
node.P = this | ||
} | ||
if (arguments !== null) { | ||
Array.prototype.slice.call(arguments, 0).forEach((arg) => { | ||
if (typeof arg === "object" && arg instanceof Array) | ||
arg.forEach((child) => { _add(this, child) }) | ||
else if (arg !== null) | ||
_add(this, arg) | ||
}) | ||
} | ||
return this | ||
args.forEach((arg) => { | ||
if (typeof arg === "object" && arg instanceof Array) | ||
arg.forEach((arg) => { _add(arg) }) | ||
else if (arg !== null) | ||
_add(arg) | ||
}) | ||
} | ||
/* delete child AST node(s) */ | ||
del () { | ||
if (arguments.length === 0) | ||
throw new Error("del: invalid argument") | ||
Array.prototype.slice.call(arguments, 0).forEach((arg) => { | ||
del (...args) { | ||
if (args.length === 0) | ||
throw new Error("del: invalid number of argument") | ||
args.forEach((node) => { | ||
if (!this.ctx.isA(node)) | ||
throw new Error(`del: invalid AST node argument: ${ JSON.stringify(node) }`) | ||
let found = false | ||
for (let j = 0; j < this.C.length; j++) { | ||
if (this.C[j] === arg) { | ||
if (this.C[j] === node) { | ||
this.C.splice(j, 1) | ||
arg.P = null | ||
node.P = null | ||
found = true | ||
@@ -166,3 +195,3 @@ break | ||
if (!found) | ||
throw new Error("del: child not found") | ||
throw new Error("del: AST node not found in childs") | ||
}) | ||
@@ -169,0 +198,0 @@ return this |
@@ -27,9 +27,5 @@ /* | ||
/* merge attributes and childs of an AST node */ | ||
merge (node, takePos, attrMap) { | ||
if (typeof node !== "object") | ||
merge (node, takePos = false, attrMap = {}) { | ||
if (!this.ctx.isA(node)) | ||
throw new Error("merge: invalid AST node argument") | ||
if (typeof takePos === "undefined") | ||
takePos = false | ||
if (typeof attrMap === "undefined") | ||
attrMap = {} | ||
if (takePos) { | ||
@@ -36,0 +32,0 @@ let pos = node.pos() |
@@ -56,3 +56,3 @@ /* | ||
if (!asty.isA(node)) | ||
throw new Error("failed to serialize: not an ASTy node") | ||
throw new Error("serialize: not an ASTy node") | ||
return JSON.stringify({ ASTy: serializeNode(node) }) | ||
@@ -88,3 +88,3 @@ } | ||
if (typeof obj !== "object" || typeof obj.ASTy !== "object") | ||
throw new Error("failed to unserialize: not an ASTy JSON export") | ||
throw new Error("unserialize: not an ASTy JSON export") | ||
return unserializeNode(obj.ASTy) | ||
@@ -91,0 +91,0 @@ } |
@@ -27,5 +27,3 @@ /* | ||
/* walk the AST recursively */ | ||
walk (cb, when) { | ||
if (typeof when === "undefined") | ||
when = "downward" | ||
walk (cb, when = "downward") { | ||
let _walk = (node, depth, parent) => { | ||
@@ -32,0 +30,0 @@ if (when === "downward" || when === "both") |
@@ -59,3 +59,3 @@ /* | ||
create (type) { | ||
return (new this.ASTYNode()).init(type) | ||
return (new this.ASTYNode()).init(this, type) | ||
} | ||
@@ -62,0 +62,0 @@ isA (node) { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
144963
1843
184