summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.ci/bundle.js10
-rwxr-xr-x.ci/ci.js3
-rw-r--r--.ci/ci.json3
-rw-r--r--.ci/ci.ts27
-rw-r--r--.ci/package-lock.json514
-rw-r--r--.ci/package.json17
-rw-r--r--.ci/tsconfig.json17
7 files changed, 591 insertions, 0 deletions
diff --git a/.ci/bundle.js b/.ci/bundle.js
new file mode 100644
index 0000000..524c2bb
--- /dev/null
+++ b/.ci/bundle.js
@@ -0,0 +1,10 @@
+import * as esbuild from "esbuild";
+await esbuild.build({
+ entryPoints: ['dist/ci.js'],
+ bundle: true,
+ minify: true,
+ platform: 'node',
+ outfile: 'ci.js',
+ logLevel: 'info',
+ sourcemap: false,
+}).catch(() => process.exit(1))
diff --git a/.ci/ci.js b/.ci/ci.js
new file mode 100755
index 0000000..ce29afd
--- /dev/null
+++ b/.ci/ci.js
@@ -0,0 +1,3 @@
+#!/usr/bin/env node
+"use strict";var Br=Object.create;var yt=Object.defineProperty;var Hr=Object.getOwnPropertyDescriptor;var xr=Object.getOwnPropertyNames;var Wr=Object.getPrototypeOf,Fr=Object.prototype.hasOwnProperty;var s=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports);var Jr=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of xr(e))!Fr.call(r,n)&&n!==t&&yt(r,n,{get:()=>e[n],enumerable:!(i=Hr(e,n))||i.enumerable});return r};var We=(r,e,t)=>(t=r!=null?Br(Wr(r)):{},Jr(e||!r||!r.__esModule?yt(t,"default",{value:r,enumerable:!0}):t,r));var Mt=s(be=>{"use strict";Object.defineProperty(be,"__esModule",{value:!0});be.prependWith=void 0;var Vr=(r,e)=>Array(r.length*2).fill(0).map((t,i)=>i%2===0).map((t,i)=>t?e:r[Math.floor(i/2)]);be.prependWith=Vr});var wt=s(F=>{"use strict";Object.defineProperty(F,"__esModule",{value:!0});F.isDebug=F.isProd=void 0;var Tt=!0,$r=Tt&&(process.env.ENVIRONMENT??"").toLowerCase().includes("prod")?"production":"development",Gr=()=>$r==="production";F.isProd=Gr;var Yr=!(0,F.isProd)()||Tt&&["y","t"].some((process.env.DEBUG??"").toLowerCase().startsWith),Kr=()=>Yr;F.isDebug=Kr});var St=s(me=>{"use strict";Object.defineProperty(me,"__esModule",{value:!0});me.memoize=void 0;var zr=r=>{let e=new Map;return(...t)=>{let i=JSON.stringify(t);if(e.has(i))return e.get(i);let n=r(...t);return e.set(i,n),n}};me.memoize=zr});var Et=s(L=>{"use strict";var Qr=L&&L.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,i,n)}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),Fe=L&&L.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Qr(e,r,t)};Object.defineProperty(L,"__esModule",{value:!0});Fe(Mt(),L);Fe(wt(),L);Fe(St(),L)});var Rt=s(Pt=>{"use strict";Object.defineProperty(Pt,"__esModule",{value:!0})});var jt=s(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});_e.isObject=void 0;var Zr=r=>typeof r=="object"&&!Array.isArray(r)&&!!r;_e.isObject=Zr});var Lt=s(Oe=>{"use strict";Object.defineProperty(Oe,"__esModule",{value:!0});Oe.isTagged=void 0;var Xr=Je(),kr=(r,e)=>!!((0,Xr.isObject)(r)&&"_tag"in r&&r._tag===e);Oe.isTagged=kr});var Nt=s(qt=>{"use strict";Object.defineProperty(qt,"__esModule",{value:!0})});var Dt=s(b=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});b.Optional=b.IOptionalEmptyError=b.isOptional=b.IOptionalTag=void 0;var Ge=u();b.IOptionalTag="IOptional";var ei=r=>(0,Ge.isTagged)(r,b.IOptionalTag);b.isOptional=ei;var ye=class extends Error{};b.IOptionalEmptyError=ye;var It="O.Some",Ut="O.None",ie=r=>(0,Ge.isTagged)(r,Ut),At=r=>(0,Ge.isTagged)(r,It),Ve=class{_tag;constructor(e=b.IOptionalTag){this._tag=e}},$e=class r extends Ve{self;constructor(e){super(),this.self=e}move(e){return this.map(()=>e)}orSome(e){return ie(this.self)?r.from(e()):this}get(){if(ie(this.self))throw new ye("called get() on None optional");return this.self.value}filter(e){return ie(this.self)||!e(this.self.value)?r.none():r.some(this.self.value)}map(e){return ie(this.self)?r.none():r.from(e(this.self.value))}flatMap(e){return ie(this.self)?r.none():r.from(e(this.self.value)).orSome(()=>r.none()).get()}present(){return At(this.self)}*[Symbol.iterator](){At(this.self)&&(yield this.self.value)}static some(e){return new r({value:e,_tag:It})}static _none=new r({_tag:Ut});static none(){return this._none}static from(e){return e==null?r.none():r.some(e)}};b.Optional=$e});var Ht=s(c=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});c.Either=c.isRight=c.isLeft=c.isEither=c.IEitherTag=void 0;var J=u();c.IEitherTag="IEither";var ti=r=>(0,J.isTagged)(r,c.IEitherTag);c.isEither=ti;var Ct="E.Left",ri=r=>(0,J.isTagged)(r,Ct);c.isLeft=ri;var Bt="E.Right",ii=r=>(0,J.isTagged)(r,Bt);c.isRight=ii;var Ye=class{_tag;constructor(e=c.IEitherTag){this._tag=e}},Ke=class r extends Ye{self;constructor(e){super(),this.self=e}moveRight(e){return this.mapRight(()=>e)}mapBoth(e,t){return(0,c.isLeft)(this.self)?r.left(e(this.self.err)):r.right(t(this.self.ok))}mapRight(e){return(0,c.isRight)(this.self)?r.right(e(this.self.ok)):r.left(this.self.err)}mapLeft(e){return(0,c.isLeft)(this.self)?r.left(e(this.self.err)):r.right(this.self.ok)}flatMap(e){return(0,c.isRight)(this.self)?e(this.self.ok):r.left(this.self.err)}filter(e){return(0,c.isLeft)(this.self)?r.left(this.self.err):r.fromFailable(()=>this.right().filter(e).get())}async flatMapAsync(e){return(0,c.isLeft)(this.self)?Promise.resolve(r.left(this.self.err)):await e(this.self.ok).catch(t=>r.left(t))}fold(e,t){return(0,c.isLeft)(this.self)?e(this.self.err):t(this.self.ok)}left(){return(0,c.isLeft)(this.self)?J.Optional.from(this.self.err):J.Optional.none()}right(){return(0,c.isRight)(this.self)?J.Optional.from(this.self.ok):J.Optional.none()}joinRight(e,t){return this.flatMap(i=>e.mapRight(n=>t(n,i)))}joinRightAsync(e,t){return this.flatMapAsync(async i=>await(typeof e=="function"?e():e).then(a=>a.mapRight(o=>t(o,i))))}static left(e){return new r({err:e,_tag:Ct})}static right(e){return new r({ok:e,_tag:Bt})}static fromFailable(e){try{return r.right(e())}catch(t){return r.left(t)}}static async fromFailableAsync(e){return await(typeof e=="function"?e():e).then(t=>r.right(t)).catch(t=>r.left(t))}};c.Either=Ke});var xt=s(q=>{"use strict";var ni=q&&q.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,i,n)}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),ze=q&&q.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&ni(e,r,t)};Object.defineProperty(q,"__esModule",{value:!0});ze(Nt(),q);ze(Dt(),q);ze(Ht(),q)});var Wt=s(ee=>{"use strict";Object.defineProperty(ee,"__esModule",{value:!0});ee.ListZipper=ee.Cons=void 0;var V=u(),ne=class r{value;next;constructor(e,t=V.Optional.none()){this.value=e,this.next=t}before(e){return new r(this.value,e)}replace(e){return new r(e,this.next)}*[Symbol.iterator](){for(let e=V.Optional.some(this);e.present();e=e.flatMap(t=>t.next))yield e.get().value}static addOnto(e,t){return Array.from(e).reverse().reduce((i,n)=>V.Optional.from(new r(n,i)),t)}static from(e){return r.addOnto(e,V.Optional.none())}};ee.Cons=ne;var Qe=class r{reversedPathToHead;currentHead;constructor(e,t){this.reversedPathToHead=e,this.currentHead=t}read(){return this.currentHead.map(({value:e})=>e)}next(){return this.currentHead.map(e=>new r(V.Optional.some(e.before(this.reversedPathToHead)),e.next))}previous(){return this.reversedPathToHead.map(e=>new r(e.next,V.Optional.some(e.before(this.currentHead))))}prependChunk(e){return new r(ne.addOnto(Array.from(e).reverse(),this.reversedPathToHead),this.currentHead)}prepend(e){return this.prependChunk([e])}remove(){let e=this.currentHead.flatMap(t=>t.next);return new r(this.reversedPathToHead,e)}replace(e){let t=this.currentHead.map(i=>i.replace(e));return new r(this.reversedPathToHead,t)}*[Symbol.iterator](){let e=this;for(let t=e.previous();t.present();t=t.flatMap(i=>i.previous()))e=t.get();e.currentHead.present()&&(yield*e.currentHead.get())}collection(){return Array.from(this)}static from(e){return new r(V.Optional.none(),ne.from(e))}};ee.ListZipper=Qe});var Ft=s($=>{"use strict";var si=$&&$.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,i,n)}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),oi=$&&$.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&si(e,r,t)};Object.defineProperty($,"__esModule",{value:!0});oi(Wt(),$)});var Je=s(_=>{"use strict";var ai=_&&_.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,i,n)}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),se=_&&_.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&ai(e,r,t)};Object.defineProperty(_,"__esModule",{value:!0});se(Rt(),_);se(jt(),_);se(Lt(),_);se(xt(),_);se(Ft(),_)});var Jt=s(Me=>{"use strict";Object.defineProperty(Me,"__esModule",{value:!0});Me.TraceableImpl=void 0;var Ze=class r{item;trace;constructor(e,t){this.item=e,this.trace=t}map(e){let t=e(this);return new r(t,this.trace)}coExtend(e){let t=e(this);return Array.from(t).map(i=>this.move(i))}flatMap(e){return e(this)}flatMapAsync(e){return new r(e(this).then(t=>t.get()),this.trace)}traceScope(e){return new r(this.get(),this.trace.traceScope(e(this)))}peek(e){return e(this),this}move(e){return this.map(()=>e)}bimap(e){let{item:t,trace:i}=e(this);return this.move(t).traceScope(()=>i)}get(){return this.item}};Me.TraceableImpl=Ze});var Vt=s(Te=>{"use strict";Object.defineProperty(Te,"__esModule",{value:!0});Te.EmittableMetric=void 0;var ci=we(),Xe=class{name;unit;constructor(e,t){this.name=e,this.unit=t}withValue(e){return{name:this.name,unit:this.unit,emissionTimestamp:Date.now(),value:e,_tag:ci.MetricValueTag}}};Te.EmittableMetric=Xe});var $t=s(te=>{"use strict";Object.defineProperty(te,"__esModule",{value:!0});te.ResultMetric=te.Metric=void 0;var oe=we(),ke=class{_tag;constructor(e=oe.IMetricTag){this._tag=e}},Se=class r extends ke{name;parent;count;time;static DELIM=".";constructor(e,t=void 0,i=new oe.EmittableMetric(r.join(e,"count"),oe.Unit.COUNT),n=new oe.EmittableMetric(r.join(e,"time"),oe.Unit.MILLISECONDS)){super(),this.name=e,this.parent=t,this.count=i,this.time=n}child(e){let t=r.join(this.name,e);return new r(t,this)}asResult(){return Ee.from(this)}static join(...e){return e.join(r.DELIM)}static fromName(e){return new r(e)}};te.Metric=Se;var Ee=class r extends Se{name;parent;failure;success;warn;constructor(e,t=void 0,i,n,a){super(e,t),this.name=e,this.parent=t,this.failure=i,this.success=n,this.warn=a}static from(e){let t=e.child("failure"),i=e.child("success"),n=e.child("warn");return new r(e.name,e.parent,t,i,n)}};te.ResultMetric=Ee});var Gt=s(re=>{"use strict";Object.defineProperty(re,"__esModule",{value:!0});re.MetricsTrace=re.isMetricsTraceSupplier=void 0;var G=u(),ui=r=>(0,G.isMetricValue)(r)||(0,G.isIMetric)(r)||Array.isArray(r)&&r.every(e=>(0,G.isMetricValue)(e)||(0,G.isIMetric)(e));re.isMetricsTraceSupplier=ui;var et=class r{metricConsumer;activeTraces;completedTraces;constructor(e,t=new Map,i=new Set){this.metricConsumer=e,this.activeTraces=t,this.completedTraces=i}traceScope(e){let t=Date.now(),i=(Array.isArray(e)?e:[e]).filter(G.isIMetric),n=new Map(i.map(a=>[a,t]));return new r(this.metricConsumer,n)}trace(e){if(!e||typeof e=="string")return this;let t=Date.now(),i=Array.isArray(e)?e:[e],n=i.filter(G.isMetricValue),a=i.filter(G.isIMetric),o=a.filter(f=>!this.activeTraces.has(f)),d=a.filter(f=>this.activeTraces.has(f)&&!this.completedTraces.has(f)),v=d.flatMap(f=>[f.count.withValue(1),f.time.withValue(t-this.activeTraces.get(f))]),h=[...n,...v];h.length>0&&this.metricConsumer(h);let k=new Map([...this.activeTraces,...o.map(f=>[f,t])]),B=new Set([...this.completedTraces,...d]);return new r(this.metricConsumer,k,B)}};re.MetricsTrace=et});var we=s(l=>{"use strict";var li=l&&l.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,i,n)}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),tt=l&&l.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&li(e,r,t)};Object.defineProperty(l,"__esModule",{value:!0});l.isIMetric=l.IMetricTag=l.isMetricValue=l.MetricValueTag=l.Unit=void 0;var Kt=u(),Yt;(function(r){r.COUNT="COUNT",r.MILLISECONDS="MILLISECONDS"})(Yt||(l.Unit=Yt={}));l.MetricValueTag="MetricValue";var di=r=>(0,Kt.isTagged)(r,l.MetricValueTag);l.isMetricValue=di;l.IMetricTag="IMetric";var fi=r=>(0,Kt.isTagged)(r,l.IMetricTag);l.isIMetric=fi;tt(Vt(),l);tt($t(),l);tt(Gt(),l)});var zt=s(Pe=>{"use strict";Object.defineProperty(Pe,"__esModule",{value:!0});Pe.ANSI=void 0;Pe.ANSI={RESET:"\x1B[0m",BOLD:"\x1B[1m",DIM:"\x1B[2m",RED:"\x1B[31m",GREEN:"\x1B[32m",YELLOW:"\x1B[33m",BLUE:"\x1B[34m",MAGENTA:"\x1B[35m",CYAN:"\x1B[36m",WHITE:"\x1B[37m",BRIGHT_RED:"\x1B[91m",BRIGHT_YELLOW:"\x1B[93m",GRAY:"\x1B[90m"}});var Qt=s(N=>{"use strict";Object.defineProperty(N,"__esModule",{value:!0});N.isLogLevel=N.logLevelOrder=N.LogLevel=void 0;var Y;(function(r){r.UNKNOWN="UNKNOWN",r.INFO="INFO",r.WARN="WARN",r.DEBUG="DEBUG",r.ERROR="ERROR",r.SYS="SYS"})(Y||(N.LogLevel=Y={}));N.logLevelOrder=[Y.DEBUG,Y.INFO,Y.WARN,Y.ERROR,Y.SYS];var hi=r=>typeof r=="string"&&N.logLevelOrder.some(e=>e===r);N.isLogLevel=hi});var Xt=s(Zt=>{"use strict";Object.defineProperty(Zt,"__esModule",{value:!0})});var kt=s(Re=>{"use strict";Object.defineProperty(Re,"__esModule",{value:!0});Re.PrettyJsonConsoleLogger=void 0;var g=je(),rt=class{log(e,...t){let i=JSON.stringify({level:e,trace:t},null,4),n=`${this.getStyle(e)}${i}${g.ANSI.RESET}
+`;this.getStream(e)(n)}getStream(e){return e===g.LogLevel.ERROR?console.error:console.log}getStyle(e){switch(e){case g.LogLevel.UNKNOWN:case g.LogLevel.INFO:return`${g.ANSI.MAGENTA}`;case g.LogLevel.DEBUG:return`${g.ANSI.CYAN}`;case g.LogLevel.WARN:return`${g.ANSI.BRIGHT_YELLOW}`;case g.LogLevel.ERROR:return`${g.ANSI.BRIGHT_RED}`;case g.LogLevel.SYS:return`${g.ANSI.DIM}${g.ANSI.BLUE}`}}};Re.PrettyJsonConsoleLogger=rt});var tr=s(Le=>{"use strict";Object.defineProperty(Le,"__esModule",{value:!0});Le.LogTrace=void 0;var er=u(),p=je(),it=class r{logger;traces;defaultLevel;allowedLevels;constructor(e=new p.PrettyJsonConsoleLogger,t=[gi],i=p.LogLevel.INFO,n=vi){this.logger=e,this.traces=t,this.defaultLevel=i,this.allowedLevels=n}traceScope(e){return new r(this.logger,this.traces.concat(e),this.defaultLevel,this.allowedLevels)}trace(e){let{traces:t,level:i}=this.foldTraces(this.traces.concat(e));if(!this.allowedLevels().has(i))return;let n=i===p.LogLevel.UNKNOWN?this.defaultLevel:i;this.logger.log(n,...t)}foldTraces(e){let t=e.map(o=>typeof o=="function"?o():o),i=t.filter(o=>(0,p.isLogLevel)(o)).reduce((o,d)=>Math.max(p.logLevelOrder.indexOf(d),o),-1),n=p.logLevelOrder[i]??p.LogLevel.UNKNOWN,a=t.filter(o=>!(0,p.isLogLevel)(o)).map(o=>typeof o=="object"?`TracedException.Name = ${o.name}, TracedException.Message = ${o.message}, TracedException.Stack = ${o.stack}`:o);return{level:n,traces:a}}};Le.LogTrace=it;var gi=()=>`TimeStamp = ${new Date().toISOString()}`,pi=(0,er.memoize)(r=>new Set([p.LogLevel.UNKNOWN,...r?[p.LogLevel.DEBUG]:[],p.LogLevel.INFO,p.LogLevel.WARN,p.LogLevel.ERROR,p.LogLevel.SYS])),vi=()=>pi((0,er.isDebug)())});var je=s(O=>{"use strict";var bi=O&&O.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,i,n)}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),ae=O&&O.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&bi(e,r,t)};Object.defineProperty(O,"__esModule",{value:!0});ae(zt(),O);ae(Qt(),O);ae(Xt(),O);ae(kt(),O);ae(tr(),O)});var ir=s(P=>{"use strict";Object.defineProperty(P,"__esModule",{value:!0});P.LogMetricTraceable=P.LogMetricTrace=P.EmbeddedMetricsTraceable=P.LogTraceable=void 0;var A=ot(),ce=class r extends A.TraceableImpl{static LogTrace=new A.LogTrace;static of(e){return new r(e,r.LogTrace)}};P.LogTraceable=ce;var rr=r=>e=>{e.length!==0&&r.traceScope(A.LogLevel.SYS).trace(`Metrics = <metrics>${JSON.stringify(e)}</metrics>`)},nt=class r extends A.TraceableImpl{static MetricsTrace=new A.MetricsTrace(rr(ce.LogTrace));static of(e,t=r.MetricsTrace){return new r(e,t)}};P.EmbeddedMetricsTraceable=nt;var qe=class r{logTrace;metricsTrace;constructor(e,t){this.logTrace=e,this.metricsTrace=t}traceScope(e){return(0,A.isMetricsTraceSupplier)(e)?new r(this.logTrace,this.metricsTrace.traceScope(e)):new r(this.logTrace.traceScope(e),this.metricsTrace)}trace(e){return(0,A.isMetricsTraceSupplier)(e)?(this.metricsTrace.trace(e),this):(this.logTrace.trace(e),this)}};P.LogMetricTrace=qe;var st=class r extends A.TraceableImpl{static ofLogTraceable(e){let t=new A.MetricsTrace(rr(e.trace));return new r(e.get(),new qe(e.trace,t))}static of(e){let t=ce.of(e);return r.ofLogTraceable(t)}};P.LogMetricTraceable=st});var nr=s(Ne=>{"use strict";Object.defineProperty(Ne,"__esModule",{value:!0});Ne.TraceUtil=void 0;var at=u(),ct=class r{static promiseify(e){return t=>t.flatMapAsync(async i=>i.move(await i.get()).map(e)).get()}static traceResultingEither(e,t=!1){return i=>(e&&i.trace.trace(i.get().fold(n=>t?e.warn:e.failure,n=>e.success)),i.traceScope(n=>n.get().fold(a=>t?at.LogLevel.WARN:at.LogLevel.ERROR,a=>at.LogLevel.INFO)))}static withTrace(e){return t=>t.traceScope(()=>e)}static withMetricTrace(e){return r.withTrace(e)}static withFunctionTrace(e){return r.withTrace(`fn.${e.name}`)}static withClassTrace(e){return r.withTrace(`class.${e.constructor.name}`)}};Ne.TraceUtil=ct});var ot=s(y=>{"use strict";var mi=y&&y.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,i,n)}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),ue=y&&y.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&mi(e,r,t)};Object.defineProperty(y,"__esModule",{value:!0});ue(Jt(),y);ue(we(),y);ue(je(),y);ue(ir(),y);ue(nr(),y)});var sr=s(M=>{"use strict";Object.defineProperty(M,"__esModule",{value:!0});M.getStdoutMany=M.getStdout=M.CmdMetric=void 0;var H=u(),_i=require("node:child_process");M.CmdMetric=H.Metric.fromName("Exec").asResult();var Oi=(r,e={streamTraceable:[]})=>r.flatMap(H.TraceUtil.withFunctionTrace(M.getStdout)).flatMap(t=>t.traceScope(()=>`Command = ${t.get()}`)).map(t=>{let i=t.get(),n=typeof i=="string"?i:i.join(" "),a=e.clearEnv?e.env:{...process.env,...e.env};return H.Either.fromFailableAsync(new Promise((o,d)=>{let v=(0,_i.exec)(n,{env:a}),h="";v.stdout?.on("data",B=>{let f=B.toString();h+=f,e.streamTraceable?.includes("stdout")&&t.trace.trace(f)});let k="";v.stderr?.on("data",B=>{let f=B.toString();h+=f,e.streamTraceable?.includes("stderr")&&t.trace.trace(f)}),v.on("exit",B=>{B===0?o({stdout:h,stderr:k}):d(new Error(`exited with non-zero code: ${B}. ${k}`))})}))}).map(H.TraceUtil.promiseify(t=>t.get().mapRight(({stderr:i,stdout:n})=>(i&&t.trace.traceScope(H.LogLevel.DEBUG).trace(`StdErr = ${i}`),n)))).peek(H.TraceUtil.promiseify(H.TraceUtil.traceResultingEither(M.CmdMetric))).get();M.getStdout=Oi;var yi=(r,e={streamTraceable:[]})=>r.coExtend(t=>t.get()).reduce(async(t,i)=>(await t).joinRightAsync(()=>i.map(a=>(0,M.getStdout)(a,e)).get(),(a,o)=>o.concat(a)),Promise.resolve(H.Either.right([])));M.getStdoutMany=yi});var or=s(R=>{"use strict";Object.defineProperty(R,"__esModule",{value:!0});R.getRequiredEnvVars=R.getRequiredEnv=R.getEnv=void 0;var ut=u(),Mi=r=>ut.Optional.from(process.env[r]);R.getEnv=Mi;var Ti=r=>ut.Either.fromFailable(()=>(0,R.getEnv)(r).get()).mapLeft(()=>new Error(`environment variable "${r}" is required D:`));R.getRequiredEnv=Ti;var wi=r=>{let e=ut.Either.right({}),t=(i,n,a)=>({...i,[n]:a});return r.reduce((i,n)=>i.joinRight((0,R.getRequiredEnv)(n),(a,o)=>t(o,n,a)),e)};R.getRequiredEnvVars=wi});var cr=s(K=>{"use strict";Object.defineProperty(K,"__esModule",{value:!0});K.validateExecutionEntries=K.validateIdentifier=void 0;var ar=u(),Si=r=>/^[a-zA-Z0-9_\-:. \/]+$/.test(r)&&!r.includes("..");K.validateIdentifier=Si;var Ei=r=>{let e=Object.entries(r).filter(t=>!t.every(i=>typeof i=="string"&&(0,K.validateIdentifier)(i)));return e.length>0?ar.Either.left(e):ar.Either.right(r)};K.validateExecutionEntries=Ei});var ur=s(T=>{"use strict";Object.defineProperty(T,"__esModule",{value:!0});T.argv=T.getArg=T.isArgKey=void 0;var z=u(),Pi=r=>r.startsWith("--");T.isArgKey=Pi;var Ri=(r,e,t)=>{let i=z.Optional.from(e.findIndex(n=>(0,T.isArgKey)(n)&&n.split("=")[0]===r)).filter(n=>n>=0&&n<e.length);return i.present()?i.flatMap(n=>z.Optional.from(e.at(n)).map(a=>a.includes("=")?a.split("=")[1]:e.at(n+1))).filter(n=>!(0,T.isArgKey)(n)).map(n=>t.present(n)).orSome(()=>t.unspecified).map(n=>z.Either.right(n)).get():z.Optional.from(t.absent).map(n=>z.Either.right(n)).orSome(()=>z.Either.left(new Error(`arg ${r} is not present in arguments list and does not have an 'absent' value`))).get()};T.getArg=Ri;var ji=(r,e,t=process.argv.slice(2))=>{let i={present:o=>o},n=o=>{let d=e?.[o]??i;return(0,T.getArg)(o,t,d).mapRight(v=>[o,v])};return r.map(n).reduce((o,d)=>o.flatMap(v=>d.mapRight(([h,k])=>({...v,[h]:k}))),z.Either.right({})).mapRight(o=>o)};T.argv=ji});var lr=s(j=>{"use strict";Object.defineProperty(j,"__esModule",{value:!0});j.Signals=j.SigTermMetric=j.SigIntMetric=void 0;var I=u();j.SigIntMetric=I.Metric.fromName("SigInt").asResult();j.SigTermMetric=I.Metric.fromName("SigTerm").asResult();var lt=class{static async awaitClose(e){let t=I.Either.right(void 0);return new Promise(i=>{let n=d=>v=>e.flatMap(I.TraceUtil.withMetricTrace(d)).peek(h=>h.trace.trace("closing")).move(I.Optional.from(v).map(h=>I.Either.left(h)).orSome(()=>t).get()).flatMap(I.TraceUtil.traceResultingEither(d)).map(h=>i(h.get())).peek(h=>h.trace.trace("finished")).get(),a=n(j.SigIntMetric),o=n(j.SigTermMetric);process.on("SIGINT",()=>e.flatMap(I.TraceUtil.withTrace("SIGINT")).get().close(a)),process.on("SIGTERM",()=>e.flatMap(I.TraceUtil.withTrace("SIGTERM")).get().close(o))})}};j.Signals=lt});var dr=s(w=>{"use strict";var Li=w&&w.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,i,n)}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),le=w&&w.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Li(e,r,t)};Object.defineProperty(w,"__esModule",{value:!0});le(sr(),w);le(or(),w);le(cr(),w);le(ur(),w);le(lr(),w)});var hr=s(fr=>{"use strict";Object.defineProperty(fr,"__esModule",{value:!0})});var gr=s(Ae=>{"use strict";Object.defineProperty(Ae,"__esModule",{value:!0});Ae.HttpStatusCodes=void 0;Ae.HttpStatusCodes={100:"Continue",101:"Switching Protocols",102:"Processing (WebDAV)",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status (WebDAV)",208:"Already Reported (WebDAV)",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",306:"(Unused)",307:"Temporary Redirect",308:"Permanent Redirect (experimental)",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",418:"I'm a teapot (RFC 2324)",420:"Enhance Your Calm (Twitter)",422:"Unprocessable Entity (WebDAV)",423:"Locked (WebDAV)",424:"Failed Dependency (WebDAV)",425:"Reserved for WebDAV",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",444:"No Response (Nginx)",449:"Retry With (Microsoft)",450:"Blocked by Windows Parental Controls (Microsoft)",451:"Unavailable For Legal Reasons",499:"Client Closed Request (Nginx)",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates (Experimental)",507:"Insufficient Storage (WebDAV)",508:"Loop Detected (WebDAV)",509:"Bandwidth Limit Exceeded (Apache)",510:"Not Extended",511:"Network Authentication Required",598:"Network read timeout error",599:"Network connect timeout error"}});var vr=s(pr=>{"use strict";Object.defineProperty(pr,"__esModule",{value:!0})});var br=s(U=>{"use strict";var qi=U&&U.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,i,n)}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),dt=U&&U.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&qi(e,r,t)};Object.defineProperty(U,"__esModule",{value:!0});dt(hr(),U);dt(gr(),U);dt(vr(),U)});var mr=s(D=>{"use strict";Object.defineProperty(D,"__esModule",{value:!0});D.JsonResponse=D.PenguenoResponse=D.getResponseMetrics=void 0;var de=u(),Ni=(r,e)=>{let t={...r.getResponseHeaders(),...e};return t["Content-Type"]=(t["Content-Type"]??"text/plain")+"; charset=utf-8",t},Ai=[0,1,2,3,4,5].map(r=>de.Metric.fromName(`response.${r}xx`).asResult()),Ii=(r,e)=>{let t=Math.floor(r/100);return Ai.flatMap((i,n)=>de.Optional.from(n).filter(a=>a===t).map(()=>[i.count.withValue(1)]).flatMap(a=>de.Optional.from(e).map(o=>a.concat(i.time.withValue(o))).orSome(()=>a)).orSome(()=>[i.count.withValue(0)]).get())};D.getResponseMetrics=Ii;var Ie=class{_body;statusText;status;headers;constructor(e,t,i){this._body=t,this.headers=Ni(e.get(),i?.headers??{}),this.status=i.status,this.statusText=i.statusText??de.HttpStatusCodes[this.status],e.trace.trace((0,D.getResponseMetrics)(i.status,e.get().elapsedTimeMs()))}body(){return this._body}};D.PenguenoResponse=Ie;var ft=class extends Ie{constructor(e,t,i){let n={...i,headers:{...i.headers,"Content-Type":"application/json"}};if((0,de.isEither)(t)){super(e,JSON.stringify(t.fold(a=>({error:a,ok:void 0}),a=>({ok:a}))),n);return}super(e,JSON.stringify(Math.floor(n.status/100)>4?{error:t}:{ok:t}),n)}};D.JsonResponse=ft});var _r=s(Q=>{"use strict";var Ui=Q&&Q.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,i,n)}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),Di=Q&&Q.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Ui(e,r,t)};Object.defineProperty(Q,"__esModule",{value:!0});Di(mr(),Q)});var yr=s(Ue=>{"use strict";Object.defineProperty(Ue,"__esModule",{value:!0});Ue.PenguenoRequest=void 0;var Or=["hewwo :D","hiya cutie","boop!","sending virtual hugs!","stay pawsitive"],Ci=()=>Or[Math.floor(Math.random()*Or.length)],ht=class r{req;id;at;constructor(e,t,i){this.req=e,this.id=t,this.at=i}elapsedTimeMs(e=()=>Date.now()){return e()-this.at.getTime()}getResponseHeaders(){let e=this.id,t=this.at.getTime(),i=Date.now(),n=this.elapsedTimeMs(()=>i),a=Ci();return Object.entries({RequestId:e,RequestReceivedUnix:t,RequestHandleUnix:i,DeltaUnix:n,Hai:a}).reduce((o,[d,v])=>({...o,[d]:v.toString()}),{})}static from(e){let t=crypto.randomUUID();return e.bimap(i=>{let n=i.get(),a=new URL(n.url),{pathname:o}=a,d=`RequestId = ${t}, Method = ${n.method}, Path = ${o}`;return{item:new r(n,t,new Date),trace:d}})}};Ue.PenguenoRequest=ht});var Mr=s(Z=>{"use strict";var Bi=Z&&Z.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,i,n)}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),Hi=Z&&Z.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Bi(e,r,t)};Object.defineProperty(Z,"__esModule",{value:!0});Hi(yr(),Z)});var Sr=s(x=>{"use strict";Object.defineProperty(x,"__esModule",{value:!0});x.HealthCheckActivityImpl=x.HealthCheckOutput=x.HealthCheckInput=void 0;var X=u(),gt;(function(r){r[r.CHECK=0]="CHECK"})(gt||(x.HealthCheckInput=gt={}));var Tr;(function(r){r[r.YAASSSLAYQUEEN=0]="YAASSSLAYQUEEN"})(Tr||(x.HealthCheckOutput=Tr={}));var wr=X.Metric.fromName("Health").asResult(),pt=class{check;constructor(e){this.check=e}checkHealth(e){return e.flatMap(X.TraceUtil.withFunctionTrace(this.checkHealth)).flatMap(X.TraceUtil.withMetricTrace(wr)).flatMap(t=>t.move(gt.CHECK).map(i=>this.check(i))).peek(X.TraceUtil.promiseify(X.TraceUtil.traceResultingEither(wr))).map(X.TraceUtil.promiseify(t=>{let{status:i,message:n}=t.get().fold(()=>({status:500,message:"err"}),()=>({status:200,message:"ok"}));return new X.JsonResponse(e,n,{status:i})})).get()}};x.HealthCheckActivityImpl=pt});var Pr=s(De=>{"use strict";Object.defineProperty(De,"__esModule",{value:!0});De.FourOhFourActivityImpl=void 0;var xi=u(),Er=["D: meow-t found! your api call ran away!","404-bidden! but like...in a cute way >:3 !",":< your data went on a paw-sible vacation!","uwu~ not found, but found our hearts instead!"],Wi=()=>Er[Math.floor(Math.random()*Er.length)],vt=class{fourOhFour(e){return e.move(new xi.JsonResponse(e,Wi(),{status:404})).map(t=>Promise.resolve(t.get())).get()}};De.FourOhFourActivityImpl=vt});var jr=s(W=>{"use strict";var Fi=W&&W.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,i,n)}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),Rr=W&&W.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Fi(e,r,t)};Object.defineProperty(W,"__esModule",{value:!0});Rr(Sr(),W);Rr(Pr(),W)});var Lr=s(he=>{"use strict";Object.defineProperty(he,"__esModule",{value:!0});he.requireMethod=void 0;var fe=u(),Ji=r=>e=>e.flatMap(fe.TraceUtil.withFunctionTrace(he.requireMethod)).map(t=>{let{req:{method:i}}=t.get();if(!r.includes(i)){let n="that's not how you pet me (\u22DF\uFE4F\u22DE)~";return t.trace.traceScope(fe.LogLevel.WARN).trace(n),fe.Either.left(new fe.PenguenoError(n,405))}return fe.Either.right(i)}).get();he.requireMethod=Ji});var Nr=s(ge=>{"use strict";Object.defineProperty(ge,"__esModule",{value:!0});ge.jsonModel=void 0;var C=u(),qr=C.Metric.fromName("JsonParse").asResult(),Vi=r=>e=>e.flatMap(C.TraceUtil.withFunctionTrace(ge.jsonModel)).flatMap(C.TraceUtil.withMetricTrace(qr)).map(t=>C.Either.fromFailableAsync(t.get().req.json()).then(i=>i.mapLeft(n=>(t.trace.traceScope(C.LogLevel.WARN).trace(n),new C.PenguenoError("seems to be invalid JSON (>//<) can you fix?",400))))).flatMapAsync(C.TraceUtil.promiseify(C.TraceUtil.traceResultingEither(qr))).map(C.TraceUtil.promiseify(t=>t.get().mapRight(i=>t.move(i)).flatMap(r))).get();ge.jsonModel=Vi});var Ir=s(m=>{"use strict";var $i=m&&m.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,i,n)}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),Ar=m&&m.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&$i(e,r,t)};Object.defineProperty(m,"__esModule",{value:!0});m.PenguenoError=m.ErrorSource=void 0;var Kn=u(),Ce;(function(r){r.USER="WARN",r.SYSTEM="ERROR"})(Ce||(m.ErrorSource=Ce={}));var bt=class extends Error{message;status;source;constructor(e,t){super(e),this.message=e,this.status=t,this.source=Math.floor(t/100)===4?Ce.USER:Ce.SYSTEM}};m.PenguenoError=bt;Ar(Lr(),m);Ar(Nr(),m)});var Ur=s(S=>{"use strict";var Gi=S&&S.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,i,n)}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),pe=S&&S.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Gi(e,r,t)};Object.defineProperty(S,"__esModule",{value:!0});pe(br(),S);pe(_r(),S);pe(Mr(),S);pe(jr(),S);pe(Ir(),S)});var u=s(E=>{"use strict";var Yi=E&&E.__createBinding||(Object.create?function(r,e,t,i){i===void 0&&(i=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,i,n)}:function(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}),ve=E&&E.__exportStar||function(r,e){for(var t in r)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Yi(e,r,t)};Object.defineProperty(E,"__esModule",{value:!0});ve(Et(),E);ve(Je(),E);ve(ot(),E);ve(dr(),E);ve(Ur(),E)});var mt=We(u(),1),Ki=["fetch_code","ci_pipeline","build_docker_image.js","ansible_playbook.js","checkout_ci.js","npm_publish.js"],zi=r=>typeof r=="string"&&Ki.includes(r),Dr=r=>!!((0,mt.isObject)(r)&&"arguments"in r&&(0,mt.isObject)(r.arguments)&&"type"in r&&zi(r.type)&&r);var Ot=We(u(),1);var _t=class{stages=[];addStage(e){return this.stages.push(e),this}build(){return new He(this.stages)}},Be=class extends _t{remoteUrl;refname;constructor(e=process.env.remote,t=process.env.rev,i=process.env.refname){super(),this.remoteUrl=e,this.refname=i,this.addStage({parallelJobs:[{type:"fetch_code",arguments:{remoteUrl:e,checkout:t,path:this.getSourceDestination()}}]})}getSourceDestination(){return this.remoteUrl.replace(".git","").split("/").at(-1)??"src"}getBranch(){return this.refname.split("refs/heads/").at(1)}};var xe=We(u(),1);var He=class r{serialJobs;constructor(e){this.serialJobs=e}serialize(){return JSON.stringify({serialJobs:this.serialJobs})}static from(e){return xe.Either.fromFailable(()=>JSON.parse(e)).flatMap(t=>Cr(t)?xe.Either.right(t):xe.Either.left(new Error("oh noes D: its a bad pipewine :(("))).mapRight(t=>new r(t.serialJobs))}};var Qi=r=>(0,Ot.isObject)(r)&&"parallelJobs"in r&&Array.isArray(r.parallelJobs)&&r.parallelJobs.every(e=>Dr(e)),Cr=r=>(0,Ot.isObject)(r)&&"serialJobs"in r&&Array.isArray(r.serialJobs)&&r.serialJobs.every(e=>Qi(e));var Zi=()=>{let r=new Be,e=r.getBranch();if(!e||e!=="release")return r.build();let t={type:"npm_publish.js",arguments:{source:".",registry:"//registry.npmjs.org/"}};return r.addStage({parallelJobs:[t]}),r.build()},Xi=()=>{let r=Zi().serialize();process.stdout.write(r)};Xi();
diff --git a/.ci/ci.json b/.ci/ci.json
new file mode 100644
index 0000000..e10df80
--- /dev/null
+++ b/.ci/ci.json
@@ -0,0 +1,3 @@
+{
+ "workflow": ".ci/ci.js"
+}
diff --git a/.ci/ci.ts b/.ci/ci.ts
new file mode 100644
index 0000000..7c95e77
--- /dev/null
+++ b/.ci/ci.ts
@@ -0,0 +1,27 @@
+#!/usr/bin/env node
+
+import { DefaultGitHookPipelineBuilder, NpmPublishJob } from '@emprespresso/ci_model';
+
+const getPipeline = () => {
+ const gitHookPipeline = new DefaultGitHookPipelineBuilder();
+ const branch = gitHookPipeline.getBranch();
+ if (!branch || branch !== 'release') return gitHookPipeline.build();
+
+ const publish: NpmPublishJob = {
+ type: 'npm_publish.js',
+ arguments: {
+ source: '.',
+ registry: '//registry.npmjs.org/',
+ },
+ };
+ gitHookPipeline.addStage({ parallelJobs: [publish] });
+
+ return gitHookPipeline.build();
+};
+
+const main = () => {
+ const data = getPipeline().serialize();
+ process.stdout.write(data);
+};
+
+main();
diff --git a/.ci/package-lock.json b/.ci/package-lock.json
new file mode 100644
index 0000000..050e353
--- /dev/null
+++ b/.ci/package-lock.json
@@ -0,0 +1,514 @@
+{
+ "name": ".ci",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "dependencies": {
+ "@emprespresso/ci_model": "^0.1.0"
+ },
+ "devDependencies": {
+ "esbuild": "0.25.5",
+ "typescript": "^5.8.3"
+ }
+ },
+ "node_modules/@emprespresso/ci_model": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@emprespresso/ci_model/-/ci_model-0.1.0.tgz",
+ "integrity": "sha512-Ig1F61q+KiMUBAiAP/rp8a2+WM3RKuz1+qWunHljS2KP28du4kCidHH+8Z/I9RHEi/5gPBTppIL2ZmXlccsRPg==",
+ "dependencies": {
+ "@emprespresso/pengueno": "^0.0.6"
+ }
+ },
+ "node_modules/@emprespresso/pengueno": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@emprespresso/pengueno/-/pengueno-0.0.6.tgz",
+ "integrity": "sha512-QjyNXJPFp6OlOuk6cH/0yzdFznItofqhB1wF75k/Len5A0BsqvuE1QGU9aZ7AkujGkIpbv21Vm6K21/bmk0S2A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=22.16.0",
+ "npm": ">=10.0.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",
+ "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz",
+ "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz",
+ "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz",
+ "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz",
+ "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz",
+ "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz",
+ "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz",
+ "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz",
+ "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz",
+ "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz",
+ "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz",
+ "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz",
+ "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz",
+ "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz",
+ "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz",
+ "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz",
+ "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz",
+ "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz",
+ "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz",
+ "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz",
+ "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz",
+ "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz",
+ "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.5",
+ "@esbuild/android-arm": "0.25.5",
+ "@esbuild/android-arm64": "0.25.5",
+ "@esbuild/android-x64": "0.25.5",
+ "@esbuild/darwin-arm64": "0.25.5",
+ "@esbuild/darwin-x64": "0.25.5",
+ "@esbuild/freebsd-arm64": "0.25.5",
+ "@esbuild/freebsd-x64": "0.25.5",
+ "@esbuild/linux-arm": "0.25.5",
+ "@esbuild/linux-arm64": "0.25.5",
+ "@esbuild/linux-ia32": "0.25.5",
+ "@esbuild/linux-loong64": "0.25.5",
+ "@esbuild/linux-mips64el": "0.25.5",
+ "@esbuild/linux-ppc64": "0.25.5",
+ "@esbuild/linux-riscv64": "0.25.5",
+ "@esbuild/linux-s390x": "0.25.5",
+ "@esbuild/linux-x64": "0.25.5",
+ "@esbuild/netbsd-arm64": "0.25.5",
+ "@esbuild/netbsd-x64": "0.25.5",
+ "@esbuild/openbsd-arm64": "0.25.5",
+ "@esbuild/openbsd-x64": "0.25.5",
+ "@esbuild/sunos-x64": "0.25.5",
+ "@esbuild/win32-arm64": "0.25.5",
+ "@esbuild/win32-ia32": "0.25.5",
+ "@esbuild/win32-x64": "0.25.5"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
+ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ }
+ }
+}
diff --git a/.ci/package.json b/.ci/package.json
new file mode 100644
index 0000000..d4ef12a
--- /dev/null
+++ b/.ci/package.json
@@ -0,0 +1,17 @@
+{
+ "scripts": {
+ "build": "tsc && node bundle.js",
+ "clean": "rm -rf dist ci.cjs"
+ },
+ "dependencies": {
+ "@emprespresso/ci_model": "^0.1.0"
+ },
+ "devDependencies": {
+ "esbuild": "0.25.5",
+ "typescript": "^5.8.3"
+ },
+ "files": [
+ "dist/**/*",
+ "package.json"
+ ]
+}
diff --git a/.ci/tsconfig.json b/.ci/tsconfig.json
new file mode 100644
index 0000000..39cb802
--- /dev/null
+++ b/.ci/tsconfig.json
@@ -0,0 +1,17 @@
+{
+ "extends": "../tsconfig.json",
+ "compilerOptions": {
+ "module": "ESNext",
+ "outDir": "./dist",
+ "rootDir": "./",
+ "composite": true,
+ "declaration": true,
+ "declarationMap": true,
+ "sourceMap": true,
+ "noEmit": false
+ },
+ "include": ["**/*.ts"],
+ "exclude": ["node_modules", "dist", "**/*.test.ts", "**/*.spec.ts"],
+ "references": []
+}
+