itty-router
Advanced tools
Comparing version 5.0.9 to 5.0.10
@@ -1,2 +0,2 @@ | ||
"use strict";const r=((r="text/plain; charset=utf-8",e)=>(t,{...o}={})=>{if(void 0===t||t instanceof Response)return t;const a=new Response(e?.(t)??t,o);return a.headers.set("content-type",r),a})("application/json; charset=utf-8",JSON.stringify),e=r=>({400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error"}[r]||"Unknown Error"),t=(t=500,o)=>{if(t instanceof Error){const{message:r,...a}=t;t=t.status||500,o={error:r||e(t),...a}}return o={status:t,..."object"==typeof o?o:{error:o||e(t)}},r(o,{status:t})},o=r=>{r.proxy=new Proxy(r.proxy||r,{get:(e,t)=>void 0!==e[t]?e[t]?.bind?.(r)||e[t]:e?.params?.[t]})};exports.AutoRouter=({format:e=r,missing:a=(()=>t(404)),finally:n=[],before:s=[],...c}={})=>(({base:r="",routes:e=[],...t}={})=>({__proto__:new Proxy({},{get:(t,o,a,n)=>(t,...s)=>e.push([o.toUpperCase?.(),RegExp(`^${(n=(r+t).replace(/\/+(\/|$)/g,"$1")).replace(/(\/?\.?):(\w+)\+/g,"($1(?<$2>*))").replace(/(\/?\.?):(\w+)/g,"($1(?<$2>[^$1/]+?))").replace(/\./g,"\\.").replace(/(\/?)\*/g,"($1.*)?")}/*$`),s,n])&&a}),routes:e,...t,async fetch(r,...o){let a,n,s=new URL(r.url),c=r.query={__proto__:null};for(let[r,e]of s.searchParams)c[r]=c[r]?[].concat(c[r],e):e;r:try{for(let e of t.before||[])if(null!=(a=await e(r.proxy??r,...o)))break r;e:for(let[t,c,f,i]of e)if((t==r.method||"ALL"==t)&&(n=s.pathname.match(c))){r.params=n.groups||{},r.route=i;for(let e of f)if(null!=(a=await e(r.proxy??r,...o)))break e}}catch(e){if(!t.catch)throw e;a=await t.catch(e,r.proxy??r,...o)}try{for(let e of t.finally||[])a=await e(a,r.proxy??r,...o)??a}catch(e){if(!t.catch)throw e;a=await t.catch(e,r.proxy??r,...o)}return a}}))({before:[o,...s],catch:t,finally:[(r,...e)=>r??a(r,...e),e,...n],...c}); | ||
"use strict";const r=((r="text/plain; charset=utf-8",e)=>(t,o={})=>{if(void 0===t||t instanceof Response)return t;const a=new Response(e?.(t)??t,o.url?void 0:o);return a.headers.set("content-type",r),a})("application/json; charset=utf-8",JSON.stringify),e=r=>({400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error"}[r]||"Unknown Error"),t=(t=500,o)=>{if(t instanceof Error){const{message:r,...a}=t;t=t.status||500,o={error:r||e(t),...a}}return o={status:t,..."object"==typeof o?o:{error:o||e(t)}},r(o,{status:t})},o=r=>{r.proxy=new Proxy(r.proxy||r,{get:(e,t)=>void 0!==e[t]?e[t]?.bind?.(r)||e[t]:e?.params?.[t]})};exports.AutoRouter=({format:e=r,missing:a=(()=>t(404)),finally:n=[],before:s=[],...c}={})=>(({base:r="",routes:e=[],...t}={})=>({__proto__:new Proxy({},{get:(t,o,a,n)=>(t,...s)=>e.push([o.toUpperCase?.(),RegExp(`^${(n=(r+t).replace(/\/+(\/|$)/g,"$1")).replace(/(\/?\.?):(\w+)\+/g,"($1(?<$2>*))").replace(/(\/?\.?):(\w+)/g,"($1(?<$2>[^$1/]+?))").replace(/\./g,"\\.").replace(/(\/?)\*/g,"($1.*)?")}/*$`),s,n])&&a}),routes:e,...t,async fetch(r,...o){let a,n,s=new URL(r.url),c=r.query={__proto__:null};for(let[r,e]of s.searchParams)c[r]=c[r]?[].concat(c[r],e):e;r:try{for(let e of t.before||[])if(null!=(a=await e(r.proxy??r,...o)))break r;e:for(let[t,c,f,i]of e)if((t==r.method||"ALL"==t)&&(n=s.pathname.match(c))){r.params=n.groups||{},r.route=i;for(let e of f)if(null!=(a=await e(r.proxy??r,...o)))break e}}catch(e){if(!t.catch)throw e;a=await t.catch(e,r.proxy??r,...o)}try{for(let e of t.finally||[])a=await e(a,r.proxy??r,...o)??a}catch(e){if(!t.catch)throw e;a=await t.catch(e,r.proxy??r,...o)}return a}}))({before:[o,...s],catch:t,finally:[(r,...e)=>r??a(r,...e),e,...n],...c}); | ||
//# sourceMappingURL=AutoRouter.js.map |
@@ -1,2 +0,2 @@ | ||
"use strict";exports.createResponse=(e="text/plain; charset=utf-8",t)=>(s,{...n}={})=>{if(void 0===s||s instanceof Response)return s;const r=new Response(t?.(s)??s,n);return r.headers.set("content-type",e),r}; | ||
"use strict";exports.createResponse=(e="text/plain; charset=utf-8",t)=>(s,n={})=>{if(void 0===s||s instanceof Response)return s;const r=new Response(t?.(s)??s,n.url?void 0:n);return r.headers.set("content-type",e),r}; | ||
//# sourceMappingURL=createResponse.js.map |
@@ -1,2 +0,2 @@ | ||
"use strict";const r=((r="text/plain; charset=utf-8",t)=>(e,{...n}={})=>{if(void 0===e||e instanceof Response)return e;const s=new Response(t?.(e)??e,n);return s.headers.set("content-type",r),s})("application/json; charset=utf-8",JSON.stringify),t=r=>({400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error"}[r]||"Unknown Error");exports.error=(e=500,n)=>{if(e instanceof Error){const{message:r,...s}=e;e=e.status||500,n={error:r||t(e),...s}}return n={status:e,..."object"==typeof n?n:{error:n||t(e)}},r(n,{status:e})}; | ||
"use strict";const r=((r="text/plain; charset=utf-8",t)=>(e,n={})=>{if(void 0===e||e instanceof Response)return e;const s=new Response(t?.(e)??e,n.url?void 0:n);return s.headers.set("content-type",r),s})("application/json; charset=utf-8",JSON.stringify),t=r=>({400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error"}[r]||"Unknown Error");exports.error=(e=500,n)=>{if(e instanceof Error){const{message:r,...s}=e;e=e.status||500,n={error:r||t(e),...s}}return n={status:e,..."object"==typeof n?n:{error:n||t(e)}},r(n,{status:e})}; | ||
//# sourceMappingURL=error.js.map |
@@ -1,2 +0,2 @@ | ||
"use strict";const t=((t="text/plain; charset=utf-8",e)=>(s,{...n}={})=>{if(void 0===s||s instanceof Response)return s;const o=new Response(e?.(s)??s,n);return o.headers.set("content-type",t),o})("text/html");exports.html=t; | ||
"use strict";const t=((t="text/plain; charset=utf-8",e)=>(s,n={})=>{if(void 0===s||s instanceof Response)return s;const o=new Response(e?.(s)??s,n.url?void 0:n);return o.headers.set("content-type",t),o})("text/html");exports.html=t; | ||
//# sourceMappingURL=html.js.map |
@@ -1,2 +0,2 @@ | ||
"use strict";const e=({base:e="",routes:t=[],...r}={})=>({__proto__:new Proxy({},{get:(r,o,s,a)=>(r,...n)=>t.push([o.toUpperCase?.(),RegExp(`^${(a=(e+r).replace(/\/+(\/|$)/g,"$1")).replace(/(\/?\.?):(\w+)\+/g,"($1(?<$2>*))").replace(/(\/?\.?):(\w+)/g,"($1(?<$2>[^$1/]+?))").replace(/\./g,"\\.").replace(/(\/?)\*/g,"($1.*)?")}/*$`),n,a])&&s}),routes:t,...r,async fetch(e,...o){let s,a,n=new URL(e.url),c=e.query={__proto__:null};for(let[e,t]of n.searchParams)c[e]=c[e]?[].concat(c[e],t):t;e:try{for(let t of r.before||[])if(null!=(s=await t(e.proxy??e,...o)))break e;t:for(let[r,c,l,p]of t)if((r==e.method||"ALL"==r)&&(a=n.pathname.match(c))){e.params=a.groups||{},e.route=p;for(let t of l)if(null!=(s=await t(e.proxy??e,...o)))break t}}catch(t){if(!r.catch)throw t;s=await r.catch(t,e.proxy??e,...o)}try{for(let t of r.finally||[])s=await t(s,e.proxy??e,...o)??s}catch(t){if(!r.catch)throw t;s=await r.catch(t,e.proxy??e,...o)}return s}}),t=(e="text/plain; charset=utf-8",t)=>(r,{...o}={})=>{if(void 0===r||r instanceof Response)return r;const s=new Response(t?.(r)??r,o);return s.headers.set("content-type",e),s},r=t("application/json; charset=utf-8",JSON.stringify),o=e=>({400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error"}[e]||"Unknown Error"),s=(e=500,t)=>{if(e instanceof Error){const{message:r,...s}=e;e=e.status||500,t={error:r||o(e),...s}}return t={status:e,..."object"==typeof t?t:{error:t||o(e)}},r(t,{status:e})},a=e=>{e.proxy=new Proxy(e.proxy||e,{get:(t,r)=>void 0!==t[r]?t[r]?.bind?.(e)||t[r]:t?.params?.[r]})};class n extends Error{status;constructor(e=500,t){super("object"==typeof t?t.error:t),"object"==typeof t&&Object.assign(this,t),this.status=e}}const c=t("text/plain; charset=utf-8",String),l=t("text/html"),p=t("image/jpeg"),i=t("image/png"),u=t("image/webp");exports.AutoRouter=({format:t=r,missing:o=(()=>s(404)),finally:n=[],before:c=[],...l}={})=>e({before:[a,...c],catch:s,finally:[(e,...t)=>e??o(e,...t),t,...n],...l}),exports.IttyRouter=({base:e="",routes:t=[],...r}={})=>({__proto__:new Proxy({},{get:(r,o,s,a)=>(r,...n)=>t.push([o.toUpperCase(),RegExp(`^${(a=(e+r).replace(/\/+(\/|$)/g,"$1")).replace(/(\/?\.?):(\w+)\+/g,"($1(?<$2>*))").replace(/(\/?\.?):(\w+)/g,"($1(?<$2>[^$1/]+?))").replace(/\./g,"\\.").replace(/(\/?)\*/g,"($1.*)?")}/*$`),n,a])&&s}),routes:t,...r,async fetch(e,...r){let o,s,a=new URL(e.url),n=e.query={__proto__:null};for(let[e,t]of a.searchParams)n[e]=n[e]?[].concat(n[e],t):t;for(let[n,c,l,p]of t)if((n==e.method||"ALL"==n)&&(s=a.pathname.match(c))){e.params=s.groups||{},e.route=p;for(let t of l)if(null!=(o=await t(e.proxy??e,...r)))return o}}}),exports.Router=e,exports.StatusError=n,exports.cors=(e={})=>{const{origin:t="*",credentials:r=!1,allowMethods:o="*",allowHeaders:s,exposeHeaders:a,maxAge:n}=e,c=e=>{const o=e?.headers.get("origin");return!0===t?o:t instanceof RegExp?t.test(o)?o:void 0:Array.isArray(t)?t.includes(o)?o:void 0:t instanceof Function?t(o):"*"==t&&r?o:t},l=(e,t)=>{for(const[r,o]of Object.entries(t))o&&e.headers.append(r,o);return e};return{corsify:(e,t)=>e?.headers?.get("access-control-allow-origin")||101==e.status?e:l(e,{"access-control-allow-origin":c(t),"access-control-allow-credentials":r}),preflight:e=>{if("OPTIONS"==e.method){const t=new Response(null,{status:204});return l(t,{"access-control-allow-origin":c(e),"access-control-allow-methods":o?.join?.(",")??o,"access-control-expose-headers":a?.join?.(",")??a,"access-control-allow-headers":s?.join?.(",")??s??e.headers.get("access-control-request-headers"),"access-control-max-age":n,"access-control-allow-credentials":r})}}}},exports.createResponse=t,exports.error=s,exports.html=l,exports.jpeg=p,exports.json=r,exports.png=i,exports.status=(e,t)=>new Response(null,{...t,status:e}),exports.text=c,exports.webp=u,exports.withContent=async e=>{e.content=e.body?await e.clone().json().catch((()=>e.clone().formData())).catch((()=>e.text())):void 0},exports.withCookies=e=>{e.cookies=(e.headers.get("Cookie")||"").split(/;\s*/).map((e=>e.split(/=(.+)/))).reduce(((e,[t,r])=>r?(e[t]=r,e):e),{})},exports.withParams=a; | ||
"use strict";const e=({base:e="",routes:t=[],...r}={})=>({__proto__:new Proxy({},{get:(r,o,s,a)=>(r,...n)=>t.push([o.toUpperCase?.(),RegExp(`^${(a=(e+r).replace(/\/+(\/|$)/g,"$1")).replace(/(\/?\.?):(\w+)\+/g,"($1(?<$2>*))").replace(/(\/?\.?):(\w+)/g,"($1(?<$2>[^$1/]+?))").replace(/\./g,"\\.").replace(/(\/?)\*/g,"($1.*)?")}/*$`),n,a])&&s}),routes:t,...r,async fetch(e,...o){let s,a,n=new URL(e.url),c=e.query={__proto__:null};for(let[e,t]of n.searchParams)c[e]=c[e]?[].concat(c[e],t):t;e:try{for(let t of r.before||[])if(null!=(s=await t(e.proxy??e,...o)))break e;t:for(let[r,c,l,p]of t)if((r==e.method||"ALL"==r)&&(a=n.pathname.match(c))){e.params=a.groups||{},e.route=p;for(let t of l)if(null!=(s=await t(e.proxy??e,...o)))break t}}catch(t){if(!r.catch)throw t;s=await r.catch(t,e.proxy??e,...o)}try{for(let t of r.finally||[])s=await t(s,e.proxy??e,...o)??s}catch(t){if(!r.catch)throw t;s=await r.catch(t,e.proxy??e,...o)}return s}}),t=(e="text/plain; charset=utf-8",t)=>(r,o={})=>{if(void 0===r||r instanceof Response)return r;const s=new Response(t?.(r)??r,o.url?void 0:o);return s.headers.set("content-type",e),s},r=t("application/json; charset=utf-8",JSON.stringify),o=e=>({400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error"}[e]||"Unknown Error"),s=(e=500,t)=>{if(e instanceof Error){const{message:r,...s}=e;e=e.status||500,t={error:r||o(e),...s}}return t={status:e,..."object"==typeof t?t:{error:t||o(e)}},r(t,{status:e})},a=e=>{e.proxy=new Proxy(e.proxy||e,{get:(t,r)=>void 0!==t[r]?t[r]?.bind?.(e)||t[r]:t?.params?.[r]})};class n extends Error{status;constructor(e=500,t){super("object"==typeof t?t.error:t),"object"==typeof t&&Object.assign(this,t),this.status=e}}const c=t("text/plain; charset=utf-8",String),l=t("text/html"),p=t("image/jpeg"),i=t("image/png"),u=t("image/webp");exports.AutoRouter=({format:t=r,missing:o=(()=>s(404)),finally:n=[],before:c=[],...l}={})=>e({before:[a,...c],catch:s,finally:[(e,...t)=>e??o(e,...t),t,...n],...l}),exports.IttyRouter=({base:e="",routes:t=[],...r}={})=>({__proto__:new Proxy({},{get:(r,o,s,a)=>(r,...n)=>t.push([o.toUpperCase(),RegExp(`^${(a=(e+r).replace(/\/+(\/|$)/g,"$1")).replace(/(\/?\.?):(\w+)\+/g,"($1(?<$2>*))").replace(/(\/?\.?):(\w+)/g,"($1(?<$2>[^$1/]+?))").replace(/\./g,"\\.").replace(/(\/?)\*/g,"($1.*)?")}/*$`),n,a])&&s}),routes:t,...r,async fetch(e,...r){let o,s,a=new URL(e.url),n=e.query={__proto__:null};for(let[e,t]of a.searchParams)n[e]=n[e]?[].concat(n[e],t):t;for(let[n,c,l,p]of t)if((n==e.method||"ALL"==n)&&(s=a.pathname.match(c))){e.params=s.groups||{},e.route=p;for(let t of l)if(null!=(o=await t(e.proxy??e,...r)))return o}}}),exports.Router=e,exports.StatusError=n,exports.cors=(e={})=>{const{origin:t="*",credentials:r=!1,allowMethods:o="*",allowHeaders:s,exposeHeaders:a,maxAge:n}=e,c=e=>{const o=e?.headers.get("origin");return!0===t?o:t instanceof RegExp?t.test(o)?o:void 0:Array.isArray(t)?t.includes(o)?o:void 0:t instanceof Function?t(o):"*"==t&&r?o:t},l=(e,t)=>{for(const[r,o]of Object.entries(t))o&&e.headers.append(r,o);return e};return{corsify:(e,t)=>e?.headers?.get("access-control-allow-origin")||101==e.status?e:l(e,{"access-control-allow-origin":c(t),"access-control-allow-credentials":r}),preflight:e=>{if("OPTIONS"==e.method){const t=new Response(null,{status:204});return l(t,{"access-control-allow-origin":c(e),"access-control-allow-methods":o?.join?.(",")??o,"access-control-expose-headers":a?.join?.(",")??a,"access-control-allow-headers":s?.join?.(",")??s??e.headers.get("access-control-request-headers"),"access-control-max-age":n,"access-control-allow-credentials":r})}}}},exports.createResponse=t,exports.error=s,exports.html=l,exports.jpeg=p,exports.json=r,exports.png=i,exports.status=(e,t)=>new Response(null,{...t,status:e}),exports.text=c,exports.webp=u,exports.withContent=async e=>{e.content=e.body?await e.clone().json().catch((()=>e.clone().formData())).catch((()=>e.text())):void 0},exports.withCookies=e=>{e.cookies=(e.headers.get("Cookie")||"").split(/;\s*/).map((e=>e.split(/=(.+)/))).reduce(((e,[t,r])=>r?(e[t]=r,e):e),{})},exports.withParams=a; | ||
//# sourceMappingURL=index.js.map |
@@ -1,2 +0,2 @@ | ||
"use strict";const e=((e="text/plain; charset=utf-8",t)=>(s,{...n}={})=>{if(void 0===s||s instanceof Response)return s;const o=new Response(t?.(s)??s,n);return o.headers.set("content-type",e),o})("image/jpeg");exports.jpeg=e; | ||
"use strict";const e=((e="text/plain; charset=utf-8",t)=>(s,n={})=>{if(void 0===s||s instanceof Response)return s;const o=new Response(t?.(s)??s,n.url?void 0:n);return o.headers.set("content-type",e),o})("image/jpeg");exports.jpeg=e; | ||
//# sourceMappingURL=jpeg.js.map |
@@ -1,2 +0,2 @@ | ||
"use strict";const t=((t="text/plain; charset=utf-8",e)=>(s,{...n}={})=>{if(void 0===s||s instanceof Response)return s;const o=new Response(e?.(s)??s,n);return o.headers.set("content-type",t),o})("application/json; charset=utf-8",JSON.stringify);exports.json=t; | ||
"use strict";const t=((t="text/plain; charset=utf-8",e)=>(s,n={})=>{if(void 0===s||s instanceof Response)return s;const o=new Response(e?.(s)??s,n.url?void 0:n);return o.headers.set("content-type",t),o})("application/json; charset=utf-8",JSON.stringify);exports.json=t; | ||
//# sourceMappingURL=json.js.map |
{ | ||
"name": "itty-router", | ||
"version": "5.0.9", | ||
"version": "5.0.10", | ||
"description": "A tiny, zero-dependency router, designed to make beautiful APIs in any environment.", | ||
@@ -5,0 +5,0 @@ "main": "./index.js", |
@@ -1,2 +0,2 @@ | ||
"use strict";const e=((e="text/plain; charset=utf-8",t)=>(n,{...s}={})=>{if(void 0===n||n instanceof Response)return n;const o=new Response(t?.(n)??n,s);return o.headers.set("content-type",e),o})("image/png");exports.png=e; | ||
"use strict";const e=((e="text/plain; charset=utf-8",t)=>(n,s={})=>{if(void 0===n||n instanceof Response)return n;const o=new Response(t?.(n)??n,s.url?void 0:s);return o.headers.set("content-type",e),o})("image/png");exports.png=e; | ||
//# sourceMappingURL=png.js.map |
@@ -1,2 +0,2 @@ | ||
"use strict";const t=((t="text/plain; charset=utf-8",e)=>(n,{...s}={})=>{if(void 0===n||n instanceof Response)return n;const r=new Response(e?.(n)??n,s);return r.headers.set("content-type",t),r})("text/plain; charset=utf-8",String);exports.text=t; | ||
"use strict";const t=((t="text/plain; charset=utf-8",e)=>(n,s={})=>{if(void 0===n||n instanceof Response)return n;const r=new Response(e?.(n)??n,s.url?void 0:s);return r.headers.set("content-type",t),r})("text/plain; charset=utf-8",String);exports.text=t; | ||
//# sourceMappingURL=text.js.map |
@@ -1,2 +0,2 @@ | ||
"use strict";const e=((e="text/plain; charset=utf-8",t)=>(s,{...n}={})=>{if(void 0===s||s instanceof Response)return s;const o=new Response(t?.(s)??s,n);return o.headers.set("content-type",e),o})("image/webp");exports.webp=e; | ||
"use strict";const e=((e="text/plain; charset=utf-8",t)=>(s,n={})=>{if(void 0===s||s instanceof Response)return s;const o=new Response(t?.(s)??s,n.url?void 0:n);return o.headers.set("content-type",e),o})("image/webp");exports.webp=e; | ||
//# sourceMappingURL=webp.js.map |
@@ -1,2 +0,2 @@ | ||
"use strict";exports.websocket=(e,t={})=>((e="text/plain; charset=utf-8",t)=>(s,{...n}={})=>{if(void 0===s||s instanceof Response)return s;const o=new Response(t?.(s)??s,n);return o.headers.set("content-type",e),o})()(null,{status:101,webSocket:e,...t}); | ||
"use strict";exports.websocket=(e,t={})=>((e="text/plain; charset=utf-8",t)=>(s,n={})=>{if(void 0===s||s instanceof Response)return s;const o=new Response(t?.(s)??s,n.url?void 0:n);return o.headers.set("content-type",e),o})()(null,{status:101,webSocket:e,...t}); | ||
//# sourceMappingURL=websocket.js.map |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
85037
344