UNPKG

prsc

Version:

Tiny parser combinators library

3 lines (2 loc) 4.44 kB
function n(n,t){return{success:!0,offset:n,value:t}}function t(t){return n(t,void 0)}function e(n,t,e=!1){return{success:!1,offset:n,expected:t,fatal:e}}function r(t){return(r,u)=>{const o=u+t.length;return r.slice(u,o)===t?n(o,t):e(u,[t])}}function u(n){return n>65535?2:1}function o(n,r){return(o,c)=>{const f=o.codePointAt(c);return void 0!==f&&n(f)?t(c+u(f)):e(c,r)}}function c(n,r){return(u,o)=>{const c=o;for(;;){const t=u.codePointAt(o);if(void 0===t)break;if(!n(t))break;o+=t>65535?2:1}return void 0!==r&&o===c?e(o,r):t(o)}}function f(n,t,e){return o(e=>n<=e&&e<=t,e||[`${String.fromCodePoint(n)}-${String.fromCodePoint(t)}`])}function s(n){return(r,o)=>{let c=n;for(;c>0;){const n=r.codePointAt(o);if(void 0===n)return e(o,["any character"]);o+=u(n),c-=1}return t(o)}}function i(t,e){return(r,u)=>{const o=t(r,u);return o.success?n(o.offset,e(o.value)):o}}function l(n){return i(n,()=>{})}function a(n,t,r,u){return(o,c)=>{const f=n(o,c);return f.success?t(f.value)?f:e(c,r,u):f}}function d(n,t){return(r,u)=>{let o=null;for(const e of n){const n=e(r,u);if(n.success)return n;if(null===o||n.offset>o.offset?o=n:n.offset===o.offset&&void 0===t&&(o.expected=o.expected.concat(n.expected)),n.fatal)return n}return t=t||(null==o?void 0:o.expected)||[],o&&(o.expected=t),o||e(u,t)}}function v(t){return(e,r)=>{const u=t(e,r);return u.success||u.fatal?u:n(r,null)}}function p(t){return(e,r)=>{let u=[],o=r;for(;;){const n=t(e,o);if(!n.success){if(n.fatal)return n;break}if(u.push(n.value),n.offset===o)break;o=n.offset}return n(o,u)}}function x(n){return(e,r)=>{let u=r;for(;;){const t=n(e,u);if(!t.success){if(t.fatal)return t;break}if(t.offset===u)break;u=t.offset}return t(u)}}function y(n){return i(n,n=>n.filter(n=>void 0!==n))}function b(t,e,r){return(u,o)=>{const c=t(u,o);if(!c.success)return c;const f=e(u,c.offset);return f.success?n(f.offset,r(c.value,f.value)):f}}function h(...t){return(e,r)=>{const u=[];for(const n of t){const t=n(e,r);if(!t.success)return t;r=t.offset,u.push(t.value)}return n(r,u)}}function k(...n){return(e,r)=>{for(const t of n){const n=t(e,r);if(!n.success)return n;r=n.offset}return t(r)}}function P(n){return b(n,p(n),(n,t)=>[n].concat(t))}function g(n,t){return n}function A(n,t){return t}function m(n){return b(n,x(n),A)}function C(n,t){return b(n,t,A)}function S(n,t){return b(n,t,g)}function $(n,t,e,r=!1){return C(n,r?D(S(t,e)):S(t,e))}function j(t){return(e,r)=>{const u=t(e,r);return u.success?n(u.offset,e.slice(r,u.offset)):u}}function q(t){return(e,r)=>{const u=t(e,r);return u.success?n(r,u.value):u}}function w(n,r){return(u,o)=>n(u,o).success?e(o,r):t(o)}function z(n,t,e){return C(w(t,e),n)}function B(n,t,r=0,u=[]){return(o,c)=>{const f=o.codePointAt(c+r);if(void 0===f)return e(c,u);const s=n[f];return void 0===s?void 0===t?e(c,u):t(o,c):s(o,c)}}function D(n){return(t,r)=>{const u=n(t,r);return u.success?u:e(u.offset,u.expected,!0)}}const E=(n,r)=>0===r?t(r):e(r,["start of input"]),F=(n,r)=>n.length===r?t(r):e(r,["end of input"]);function G(n){return b(n,F,g)}function H(n){const t=[];let e=n.next();for(;!e.done;)t.push(e.value),e=n.next();return[t,e.value]}function I(n){return function*(t,e){const r=n(t,e);return r.success&&(yield r.value),r}}function J(n,t){return function*(e,r){const u=yield*n(e,r);return u.success?yield*t(e,u.offset):u}}function K(n){return function*(t,e){const r=n(t,e);let u=r.next();for(;!u.done;){const n=u.value;void 0!==n&&(yield n),u=r.next()}return u.value}}function L(n){return function*(e,r){for(;;){const[u,o]=H(n(e,r));if(!o.success)return o.fatal?o:t(r);if(yield*u,r===o.offset)return t(r);r=o.offset}}}function M(n){return function*(e,r){const[u,o]=H(n(e,r));return o.success?(yield*u,o):o.fatal?o:t(r)}}function N(n){return function*(t,e){const r=yield*n(t,e);return r.success?F(t,r.offset):r}}export{o as codepoint,c as codepoints,H as collect,G as complete,l as consume,D as cut,$ as delimited,B as dispatch,F as end,e as error,z as except,a as filter,y as filterUndefined,g as first,S as followed,i as map,w as not,t as ok,n as okWithValue,v as optional,d as or,q as peek,P as plus,m as plusConsumed,C as preceded,f as range,j as recognize,A as second,h as sequence,k as sequenceConsumed,s as skipChars,p as star,x as starConsumed,E as start,I as streaming,N as streamingComplete,K as streamingFilterUndefined,M as streamingOptional,L as streamingStar,J as streamingThen,b as then,r as token}; //# sourceMappingURL=prsc.esm.js.map