@puffinstudio/fizzyx 0.5.2 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/main.js +6 -2
  2. package/package.json +1 -1
package/dist/main.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var NS=Object.defineProperty;var US=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var LS=(e)=>e;function DS(e,t){this[e]=LS.bind(null,t)}var _o=(e,t)=>{for(var r in t)NS(e,r,{get:t[r],enumerable:!0,configurable:!0,set:DS.bind(t,r)})};var gr=import.meta.require;var Ix=US((PU,GO)=>{GO.exports={name:"@puffinstudio/fizzyx",version:"0.5.2",homepage:"https://github.com/PuffinStudio/fizzyx#readme",bugs:{url:"https://github.com/PuffinStudio/fizzyx/issues"},repository:{type:"git",url:"git+ssh://git@github.com/PuffinStudio/fizzyx.git"},bin:{fizzyx:"dist/main.js"},type:"module",main:"./dist/main.js",scripts:{build:"bun build ./src/main.ts --outfile ./dist/main.js --target bun --format esm --minify",dev:"bun run src/main.ts",prepublishOnly:"bun run check && bun run build",typecheck:"tsgo --noEmit",fmt:"oxfmt .",lint:"oxlint",test:"bun test",check:"bun --bun run typecheck && bun --bun run fmt && bun --bun run lint && bun test"},dependencies:{"@apidevtools/json-schema-ref-parser":"^15.4.0",camelcase:"^9.0.0","openapi-types":"^12.1.3"},devDependencies:{"@tanstack/react-query":"^5.101.1","@types/bun":"latest",effect:"^4.0.0-beta.86","miniprogram-api-typings":"^5.2.1",oxfmt:"^0.56.0",oxlint:"^1.71.0",typescript:"^7.0.1-rc"}}});var R={};_o(R,{withTime:()=>w0,withGroup:()=>C0,warn:()=>S0,trace:()=>b0,timeLog:()=>E0,time:()=>x0,table:()=>y0,log:()=>g0,info:()=>h0,group:()=>m0,error:()=>d0,dirxml:()=>p0,dir:()=>l0,debug:()=>f0,countReset:()=>u0,count:()=>a0,consoleWith:()=>De,clear:()=>c0,assert:()=>i0,Console:()=>Fh});var ae=(e,t)=>{switch(t.length){case 0:return e;case 1:return t[0](e);case 2:return t[1](t[0](e));case 3:return t[2](t[1](t[0](e)));case 4:return t[3](t[2](t[1](t[0](e))));case 5:return t[4](t[3](t[2](t[1](t[0](e)))));case 6:return t[5](t[4](t[3](t[2](t[1](t[0](e))))));case 7:return t[6](t[5](t[4](t[3](t[2](t[1](t[0](e)))))));case 8:return t[7](t[6](t[5](t[4](t[3](t[2](t[1](t[0](e))))))));case 9:return t[8](t[7](t[6](t[5](t[4](t[3](t[2](t[1](t[0](e)))))))));default:{let r=e;for(let n=0,o=t.length;n<o;n++)r=t[n](r);return r}}},zS={pipe(){return ae(this,arguments)}},Jl=function(){function e(){}return e.prototype=zS,e}();var g=function(e,t){if(typeof e==="function")return function(){return e(arguments)?t.apply(this,arguments):(r)=>t(r,...arguments)};switch(e){case 0:case 1:throw RangeError(`Invalid arity ${e}`);case 2:return function(r,n){if(arguments.length>=2)return t(r,n);return function(o){return t(o,r)}};case 3:return function(r,n,o){if(arguments.length>=3)return t(r,n,o);return function(s){return t(s,r,n)}};default:return function(){if(arguments.length>=e)return t.apply(this,arguments);let r=arguments;return function(n){return t(n,...r)}}}};var J=(e)=>e;var Me=(e)=>()=>e,bt=Me(!0),Hn=Me(!1);var Mt=Me(void 0),on=Mt;var $o=(e)=>{let t=new Set(Reflect.ownKeys(e));if(e.constructor===Object)return t;if(e instanceof Error)t.delete("stack");let r=Object.getPrototypeOf(e),n=r;while(n!==null&&n!==Object.prototype){let o=Reflect.ownKeys(n);for(let s=0;s<o.length;s++)t.add(o[s]);n=Object.getPrototypeOf(n)}if(t.has("constructor")&&typeof e.constructor==="function"&&r===e.constructor.prototype)t.delete("constructor");return t},Bn=new WeakSet;function qn(e){return typeof e==="string"}function Yl(e){return typeof e==="number"}function ya(e){return typeof e==="function"}function yr(e){return e!==void 0}function HS(e){return typeof e==="object"&&e!==null||ya(e)}var Z=g(2,(e,t)=>HS(e)&&(t in e)),Jt=g(2,(e,t)=>Z(e,"_tag")&&e._tag===t);function xr(e){return Z(e,Symbol.iterator)||qn(e)}var Se="~effect/interfaces/Hash",be=(e)=>{switch(typeof e){case"number":return fi(e);case"bigint":return Ne(e.toString(10));case"boolean":return Ne(String(e));case"symbol":return Ne(String(e));case"string":return Ne(e);case"undefined":return Ne("undefined");case"function":case"object":if(e===null)return Ne("null");else if(e instanceof Date)return Ne(e.toISOString());else if(e instanceof RegExp)return Ne(e.toString());else{if(Bn.has(e))return ai(e);if(Ea.has(e))return Ea.get(e);let t=VS(e,()=>{if(BS(e))return e[Se]();else if(typeof e==="function")return ai(e);else if(Array.isArray(e)||ArrayBuffer.isView(e))return Mo(e);else if(e instanceof Map)return qS(e);else if(e instanceof Set)return WS(e);return Fo(e)});return Ea.set(e,t),t}default:throw Error(`BUG: unhandled typeof ${typeof e} - please report an issue at https://github.com/Effect-TS/effect/issues`)}},ai=(e)=>{if(!xa.has(e))xa.set(e,fi(Math.floor(Math.random()*Number.MAX_SAFE_INTEGER)));return xa.get(e)},rt=g(2,(e,t)=>e*53^t),ui=(e)=>e&3221225471|e>>>1&1073741824,BS=(e)=>Z(e,Se),fi=(e)=>{if(e!==e)return Ne("NaN");if(e===1/0)return Ne("Infinity");if(e===-1/0)return Ne("-Infinity");let t=e|0;if(t!==e)t^=e*4294967295;while(e>4294967295)t^=e/=4294967295;return ui(t)},Ne=(e)=>{let t=5381,r=e.length;while(r)t=t*33^e.charCodeAt(--r);return ui(t)},Sa=(e,t)=>{let r=12289;for(let n of t)r^=rt(be(n),be(e[n]));return ui(r)},Fo=(e)=>Sa(e,$o(e)),Ca=(e,t)=>(r)=>{let n=e;for(let o of r)n^=t(o);return ui(n)},Mo=Ca(6151,be),qS=Ca(Ne("Map"),([e,t])=>rt(be(e),be(t))),WS=Ca(Ne("Set"),be),xa=new WeakMap,Ea=new WeakMap,ba=new WeakSet;function VS(e,t){if(ba.has(e))return Ne("[Circular]");ba.add(e);let r=t();return ba.delete(e),r}var Ce="~effect/interfaces/Equal";function Ue(){if(arguments.length===1)return(e)=>sn(e,arguments[0]);return sn(arguments[0],arguments[1])}function sn(e,t){if(e===t)return!0;if(e==null||t==null)return!1;let r=typeof e;if(r!==typeof t)return!1;if(r==="number"&&e!==e&&t!==t)return!0;if(r!=="object"&&r!=="function")return!1;if(Bn.has(e)||Bn.has(t))return!1;return JS(e,t,GS)}function KS(e,t,r){let n=wa.has(e),o=ka.has(t);if(n&&o)return!0;if(n||o)return!1;wa.add(e),ka.add(t);let s=r();return wa.delete(e),ka.delete(t),s}var wa=new WeakSet,ka=new WeakSet;function GS(e,t){if(be(e)!==be(t))return!1;else if(e instanceof Date){if(!(t instanceof Date))return!1;return e.toISOString()===t.toISOString()}else if(e instanceof RegExp){if(!(t instanceof RegExp))return!1;return e.toString()===t.toString()}let r=Ql(e),n=Ql(t);if(r!==n)return!1;let o=r&&n;if(typeof e==="function"&&!o)return!1;return KS(e,t,()=>{if(o)return e[Ce](t);else if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;return YS(e,t)}else if(ArrayBuffer.isView(e)){if(!ArrayBuffer.isView(t)||e.byteLength!==t.byteLength)return!1;return QS(e,t)}else if(e instanceof Map){if(!(t instanceof Map)||e.size!==t.size)return!1;return eC(e,t)}else if(e instanceof Set){if(!(t instanceof Set)||e.size!==t.size)return!1;return rC(e,t)}return XS(e,t)})}function JS(e,t,r){let n=li.get(e);if(!n)n=new WeakMap,li.set(e,n);else if(n.has(t))return n.get(t);let o=r(e,t);n.set(t,o);let s=li.get(t);if(!s)s=new WeakMap,li.set(t,s);return s.set(e,o),o}var li=new WeakMap;function YS(e,t){for(let r=0;r<e.length;r++)if(!sn(e[r],t[r]))return!1;return!0}function QS(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}function XS(e,t){let r=$o(e),n=$o(t);if(r.size!==n.size)return!1;for(let o of r)if(!n.has(o)||!sn(e[o],t[o]))return!1;return!0}function ZS(e,t){return function(n,o){for(let[s,i]of n){let a=!1;for(let[f,u]of o)if(e(s,f)&&t(i,u)){a=!0;break}if(!a)return!1}return!0}}var eC=ZS(sn,sn);function tC(e){return function(r,n){for(let o of r){let s=!1;for(let i of n)if(e(o,i)){s=!0;break}if(!s)return!1}return!0}}var rC=tC(sn),Ql=(e)=>Z(e,Ce),Xl=()=>Ue;var Zl=(e)=>(Bn.add(e),e);var Wn=Symbol.for("~effect/Redactable"),nC=(e)=>Z(e,Wn);function Ut(e){if(nC(e))return va(e);return e}function va(e){return e[Wn](globalThis[Vn]?.context??oC)}var Vn="~effect/Fiber/currentFiber",oC={"~effect/Context":{},mapUnsafe:new Map,pipe(){return ae(this,arguments)}};function He(e,t){let r=t?.space??0,n=new WeakSet,o=!r?"":typeof r==="number"?" ".repeat(r):r,s=(u)=>o.repeat(u),i=(u,m)=>{let l=u?.constructor;return l&&l!==Object.prototype.constructor&&l.name?`${l.name}(${m})`:m},a=(u)=>{try{return Reflect.ownKeys(u)}catch{return["[ownKeys threw]"]}};function f(u,m=0){if(Array.isArray(u)){if(n.has(u))return ep;if(n.add(u),!o||u.length<=1)return`[${u.map((h)=>f(h,m)).join(",")}]`;let l=u.map((h)=>f(h,m+1)).join(`,
3
+ var NS=Object.defineProperty;var US=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var LS=(e)=>e;function DS(e,t){this[e]=LS.bind(null,t)}var _o=(e,t)=>{for(var r in t)NS(e,r,{get:t[r],enumerable:!0,configurable:!0,set:DS.bind(t,r)})};var gr=import.meta.require;var Ix=US((PU,GO)=>{GO.exports={name:"@puffinstudio/fizzyx",version:"0.5.3",homepage:"https://github.com/PuffinStudio/fizzyx#readme",bugs:{url:"https://github.com/PuffinStudio/fizzyx/issues"},repository:{type:"git",url:"git+ssh://git@github.com/PuffinStudio/fizzyx.git"},bin:{fizzyx:"dist/main.js"},type:"module",main:"./dist/main.js",scripts:{build:"bun build ./src/main.ts --outfile ./dist/main.js --target bun --format esm --minify",dev:"bun run src/main.ts",prepublishOnly:"bun run check && bun run build",typecheck:"tsgo --noEmit",fmt:"oxfmt .",lint:"oxlint",test:"bun test",check:"bun --bun run typecheck && bun --bun run fmt && bun --bun run lint && bun test"},dependencies:{"@apidevtools/json-schema-ref-parser":"^15.4.0",camelcase:"^9.0.0","openapi-types":"^12.1.3"},devDependencies:{"@tanstack/react-query":"^5.101.1","@types/bun":"latest",effect:"^4.0.0-beta.86","miniprogram-api-typings":"^5.2.1",oxfmt:"^0.56.0",oxlint:"^1.71.0",typescript:"^7.0.1-rc"}}});var R={};_o(R,{withTime:()=>w0,withGroup:()=>C0,warn:()=>S0,trace:()=>b0,timeLog:()=>E0,time:()=>x0,table:()=>y0,log:()=>g0,info:()=>h0,group:()=>m0,error:()=>d0,dirxml:()=>p0,dir:()=>l0,debug:()=>f0,countReset:()=>u0,count:()=>a0,consoleWith:()=>De,clear:()=>c0,assert:()=>i0,Console:()=>Fh});var ae=(e,t)=>{switch(t.length){case 0:return e;case 1:return t[0](e);case 2:return t[1](t[0](e));case 3:return t[2](t[1](t[0](e)));case 4:return t[3](t[2](t[1](t[0](e))));case 5:return t[4](t[3](t[2](t[1](t[0](e)))));case 6:return t[5](t[4](t[3](t[2](t[1](t[0](e))))));case 7:return t[6](t[5](t[4](t[3](t[2](t[1](t[0](e)))))));case 8:return t[7](t[6](t[5](t[4](t[3](t[2](t[1](t[0](e))))))));case 9:return t[8](t[7](t[6](t[5](t[4](t[3](t[2](t[1](t[0](e)))))))));default:{let r=e;for(let n=0,o=t.length;n<o;n++)r=t[n](r);return r}}},zS={pipe(){return ae(this,arguments)}},Jl=function(){function e(){}return e.prototype=zS,e}();var g=function(e,t){if(typeof e==="function")return function(){return e(arguments)?t.apply(this,arguments):(r)=>t(r,...arguments)};switch(e){case 0:case 1:throw RangeError(`Invalid arity ${e}`);case 2:return function(r,n){if(arguments.length>=2)return t(r,n);return function(o){return t(o,r)}};case 3:return function(r,n,o){if(arguments.length>=3)return t(r,n,o);return function(s){return t(s,r,n)}};default:return function(){if(arguments.length>=e)return t.apply(this,arguments);let r=arguments;return function(n){return t(n,...r)}}}};var J=(e)=>e;var Me=(e)=>()=>e,bt=Me(!0),Hn=Me(!1);var Mt=Me(void 0),on=Mt;var $o=(e)=>{let t=new Set(Reflect.ownKeys(e));if(e.constructor===Object)return t;if(e instanceof Error)t.delete("stack");let r=Object.getPrototypeOf(e),n=r;while(n!==null&&n!==Object.prototype){let o=Reflect.ownKeys(n);for(let s=0;s<o.length;s++)t.add(o[s]);n=Object.getPrototypeOf(n)}if(t.has("constructor")&&typeof e.constructor==="function"&&r===e.constructor.prototype)t.delete("constructor");return t},Bn=new WeakSet;function qn(e){return typeof e==="string"}function Yl(e){return typeof e==="number"}function ya(e){return typeof e==="function"}function yr(e){return e!==void 0}function HS(e){return typeof e==="object"&&e!==null||ya(e)}var Z=g(2,(e,t)=>HS(e)&&(t in e)),Jt=g(2,(e,t)=>Z(e,"_tag")&&e._tag===t);function xr(e){return Z(e,Symbol.iterator)||qn(e)}var Se="~effect/interfaces/Hash",be=(e)=>{switch(typeof e){case"number":return fi(e);case"bigint":return Ne(e.toString(10));case"boolean":return Ne(String(e));case"symbol":return Ne(String(e));case"string":return Ne(e);case"undefined":return Ne("undefined");case"function":case"object":if(e===null)return Ne("null");else if(e instanceof Date)return Ne(e.toISOString());else if(e instanceof RegExp)return Ne(e.toString());else{if(Bn.has(e))return ai(e);if(Ea.has(e))return Ea.get(e);let t=VS(e,()=>{if(BS(e))return e[Se]();else if(typeof e==="function")return ai(e);else if(Array.isArray(e)||ArrayBuffer.isView(e))return Mo(e);else if(e instanceof Map)return qS(e);else if(e instanceof Set)return WS(e);return Fo(e)});return Ea.set(e,t),t}default:throw Error(`BUG: unhandled typeof ${typeof e} - please report an issue at https://github.com/Effect-TS/effect/issues`)}},ai=(e)=>{if(!xa.has(e))xa.set(e,fi(Math.floor(Math.random()*Number.MAX_SAFE_INTEGER)));return xa.get(e)},rt=g(2,(e,t)=>e*53^t),ui=(e)=>e&3221225471|e>>>1&1073741824,BS=(e)=>Z(e,Se),fi=(e)=>{if(e!==e)return Ne("NaN");if(e===1/0)return Ne("Infinity");if(e===-1/0)return Ne("-Infinity");let t=e|0;if(t!==e)t^=e*4294967295;while(e>4294967295)t^=e/=4294967295;return ui(t)},Ne=(e)=>{let t=5381,r=e.length;while(r)t=t*33^e.charCodeAt(--r);return ui(t)},Sa=(e,t)=>{let r=12289;for(let n of t)r^=rt(be(n),be(e[n]));return ui(r)},Fo=(e)=>Sa(e,$o(e)),Ca=(e,t)=>(r)=>{let n=e;for(let o of r)n^=t(o);return ui(n)},Mo=Ca(6151,be),qS=Ca(Ne("Map"),([e,t])=>rt(be(e),be(t))),WS=Ca(Ne("Set"),be),xa=new WeakMap,Ea=new WeakMap,ba=new WeakSet;function VS(e,t){if(ba.has(e))return Ne("[Circular]");ba.add(e);let r=t();return ba.delete(e),r}var Ce="~effect/interfaces/Equal";function Ue(){if(arguments.length===1)return(e)=>sn(e,arguments[0]);return sn(arguments[0],arguments[1])}function sn(e,t){if(e===t)return!0;if(e==null||t==null)return!1;let r=typeof e;if(r!==typeof t)return!1;if(r==="number"&&e!==e&&t!==t)return!0;if(r!=="object"&&r!=="function")return!1;if(Bn.has(e)||Bn.has(t))return!1;return JS(e,t,GS)}function KS(e,t,r){let n=wa.has(e),o=ka.has(t);if(n&&o)return!0;if(n||o)return!1;wa.add(e),ka.add(t);let s=r();return wa.delete(e),ka.delete(t),s}var wa=new WeakSet,ka=new WeakSet;function GS(e,t){if(be(e)!==be(t))return!1;else if(e instanceof Date){if(!(t instanceof Date))return!1;return e.toISOString()===t.toISOString()}else if(e instanceof RegExp){if(!(t instanceof RegExp))return!1;return e.toString()===t.toString()}let r=Ql(e),n=Ql(t);if(r!==n)return!1;let o=r&&n;if(typeof e==="function"&&!o)return!1;return KS(e,t,()=>{if(o)return e[Ce](t);else if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;return YS(e,t)}else if(ArrayBuffer.isView(e)){if(!ArrayBuffer.isView(t)||e.byteLength!==t.byteLength)return!1;return QS(e,t)}else if(e instanceof Map){if(!(t instanceof Map)||e.size!==t.size)return!1;return eC(e,t)}else if(e instanceof Set){if(!(t instanceof Set)||e.size!==t.size)return!1;return rC(e,t)}return XS(e,t)})}function JS(e,t,r){let n=li.get(e);if(!n)n=new WeakMap,li.set(e,n);else if(n.has(t))return n.get(t);let o=r(e,t);n.set(t,o);let s=li.get(t);if(!s)s=new WeakMap,li.set(t,s);return s.set(e,o),o}var li=new WeakMap;function YS(e,t){for(let r=0;r<e.length;r++)if(!sn(e[r],t[r]))return!1;return!0}function QS(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}function XS(e,t){let r=$o(e),n=$o(t);if(r.size!==n.size)return!1;for(let o of r)if(!n.has(o)||!sn(e[o],t[o]))return!1;return!0}function ZS(e,t){return function(n,o){for(let[s,i]of n){let a=!1;for(let[f,u]of o)if(e(s,f)&&t(i,u)){a=!0;break}if(!a)return!1}return!0}}var eC=ZS(sn,sn);function tC(e){return function(r,n){for(let o of r){let s=!1;for(let i of n)if(e(o,i)){s=!0;break}if(!s)return!1}return!0}}var rC=tC(sn),Ql=(e)=>Z(e,Ce),Xl=()=>Ue;var Zl=(e)=>(Bn.add(e),e);var Wn=Symbol.for("~effect/Redactable"),nC=(e)=>Z(e,Wn);function Ut(e){if(nC(e))return va(e);return e}function va(e){return e[Wn](globalThis[Vn]?.context??oC)}var Vn="~effect/Fiber/currentFiber",oC={"~effect/Context":{},mapUnsafe:new Map,pipe(){return ae(this,arguments)}};function He(e,t){let r=t?.space??0,n=new WeakSet,o=!r?"":typeof r==="number"?" ".repeat(r):r,s=(u)=>o.repeat(u),i=(u,m)=>{let l=u?.constructor;return l&&l!==Object.prototype.constructor&&l.name?`${l.name}(${m})`:m},a=(u)=>{try{return Reflect.ownKeys(u)}catch{return["[ownKeys threw]"]}};function f(u,m=0){if(Array.isArray(u)){if(n.has(u))return ep;if(n.add(u),!o||u.length<=1)return`[${u.map((h)=>f(h,m)).join(",")}]`;let l=u.map((h)=>f(h,m+1)).join(`,
4
4
  `+s(m+1));return`[
5
5
  ${s(m+1)}${l}
6
6
  ${s(m)}]`}if(u instanceof Date)return iC(u);if(!t?.ignoreToString&&Z(u,"toString")&&typeof u.toString==="function"&&u.toString!==Object.prototype.toString&&u.toString!==Array.prototype.toString){let l=cC(u);if(u instanceof Error&&u.cause)return`${l} (cause: ${f(u.cause,m)})`;return l}if(typeof u==="string")return JSON.stringify(u);if(typeof u==="number"||u==null||typeof u==="boolean"||typeof u==="symbol")return String(u);if(typeof u==="bigint")return String(u)+"n";if(typeof u==="object"||typeof u==="function"){if(n.has(u))return ep;if(n.add(u),Wn in u)return He(va(u));if(Symbol.iterator in u)return`${u.constructor.name}(${f(Array.from(u),m)})`;let l=a(u);if(!o||l.length<=1){let y=`{${l.map((E)=>`${tp(E)}:${f(u[E],m)}`).join(",")}}`;return i(u,y)}let h=`{
@@ -491,7 +491,11 @@ async function check() {
491
491
  for (let i = 0; i < Math.max(cur.length, lat.length); i++) {
492
492
  const a = lat[i] ?? 0;
493
493
  const b = cur[i] ?? 0;
494
- if (a > b) { console.error("\\n update available: " + CURRENT + " \\u2192 " + version); console.error(" run: bun add -g @puffinstudio/fizzyx\\n"); return; }
494
+ if (a > b) {
495
+ const proc = Bun.spawnSync(["bun", "add", "-g", "@puffinstudio/fizzyx"], { stdio: ["ignore", "ignore", "ignore"] });
496
+ if (proc.exitCode === 0) return;
497
+ return;
498
+ }
495
499
  if (a < b) return;
496
500
  }
497
501
  } catch {}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@puffinstudio/fizzyx",
3
- "version": "0.5.2",
3
+ "version": "0.5.3",
4
4
  "homepage": "https://github.com/PuffinStudio/fizzyx#readme",
5
5
  "bugs": {
6
6
  "url": "https://github.com/PuffinStudio/fizzyx/issues"