blaizejs 0.10.0 → 0.10.1

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 (23) hide show
  1. package/dist/{chunk-IPU6LCPL.js → chunk-C2PTO7BZ.js} +3 -3
  2. package/dist/{chunk-PGUWVOHK.js → chunk-FL7RIGDR.js} +3 -3
  3. package/dist/{chunk-VEQ5CZZF.js → chunk-JEG7DCHT.js} +3 -3
  4. package/dist/{chunk-4UKXEMYU.js → chunk-KK6W6LDB.js} +2 -2
  5. package/dist/{chunk-JY6NZIG2.js → chunk-KTMO67JQ.js} +3 -3
  6. package/dist/index.cjs +3 -4
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.js +12 -13
  9. package/dist/index.js.map +1 -1
  10. package/dist/{internal-server-error-VJDQ4MEY.js → internal-server-error-RIRTDP3D.js} +3 -3
  11. package/dist/{payload-too-large-error-GVRSZNQ3.js → payload-too-large-error-6HOOZBD6.js} +3 -3
  12. package/dist/{unsupported-media-type-error-XA32IKKD.js → unsupported-media-type-error-HSTEA3TX.js} +3 -3
  13. package/dist/{validation-error-FY37VOK2.js → validation-error-V74LVJBA.js} +3 -3
  14. package/package.json +4 -4
  15. /package/dist/{chunk-IPU6LCPL.js.map → chunk-C2PTO7BZ.js.map} +0 -0
  16. /package/dist/{chunk-PGUWVOHK.js.map → chunk-FL7RIGDR.js.map} +0 -0
  17. /package/dist/{chunk-VEQ5CZZF.js.map → chunk-JEG7DCHT.js.map} +0 -0
  18. /package/dist/{chunk-4UKXEMYU.js.map → chunk-KK6W6LDB.js.map} +0 -0
  19. /package/dist/{chunk-JY6NZIG2.js.map → chunk-KTMO67JQ.js.map} +0 -0
  20. /package/dist/{internal-server-error-VJDQ4MEY.js.map → internal-server-error-RIRTDP3D.js.map} +0 -0
  21. /package/dist/{payload-too-large-error-GVRSZNQ3.js.map → payload-too-large-error-6HOOZBD6.js.map} +0 -0
  22. /package/dist/{unsupported-media-type-error-XA32IKKD.js.map → unsupported-media-type-error-HSTEA3TX.js.map} +0 -0
  23. /package/dist/{validation-error-FY37VOK2.js.map → validation-error-V74LVJBA.js.map} +0 -0
@@ -1,11 +1,11 @@
1
1
 
2
2
  /**
3
- * blaizejs v0.10.0
3
+ * blaizejs v0.10.1
4
4
  * A blazing-fast, TypeScript-first Node.js framework with HTTP/2 support, file-based routing, powerful middleware system, and end-to-end type safety for building modern APIs.
5
5
  *
6
6
  * Copyright (c) 2026 BlaizeJS Contributors
7
7
  * @license MIT
8
8
  */
9
9
 
10
- import{c as r,h as e}from"./chunk-4UKXEMYU.js";var t=class extends e{constructor(n,o=void 0,i=void 0){super("INTERNAL_SERVER_ERROR",n,500,i??r(),o)}};export{t as a};
11
- //# sourceMappingURL=chunk-IPU6LCPL.js.map
10
+ import{c as r,h as e}from"./chunk-KK6W6LDB.js";var t=class extends e{constructor(n,o=void 0,i=void 0){super("INTERNAL_SERVER_ERROR",n,500,i??r(),o)}};export{t as a};
11
+ //# sourceMappingURL=chunk-C2PTO7BZ.js.map
@@ -1,11 +1,11 @@
1
1
 
2
2
  /**
3
- * blaizejs v0.10.0
3
+ * blaizejs v0.10.1
4
4
  * A blazing-fast, TypeScript-first Node.js framework with HTTP/2 support, file-based routing, powerful middleware system, and end-to-end type safety for building modern APIs.
5
5
  *
6
6
  * Copyright (c) 2026 BlaizeJS Contributors
7
7
  * @license MIT
8
8
  */
9
9
 
10
- import{c as r,h as o}from"./chunk-4UKXEMYU.js";var e=class extends o{constructor(t,a,i){super("PAYLOAD_TOO_LARGE",t,413,i??r(),a)}};export{e as a};
11
- //# sourceMappingURL=chunk-PGUWVOHK.js.map
10
+ import{c as r,h as o}from"./chunk-KK6W6LDB.js";var e=class extends o{constructor(t,a,i){super("PAYLOAD_TOO_LARGE",t,413,i??r(),a)}};export{e as a};
11
+ //# sourceMappingURL=chunk-FL7RIGDR.js.map
@@ -1,11 +1,11 @@
1
1
 
2
2
  /**
3
- * blaizejs v0.10.0
3
+ * blaizejs v0.10.1
4
4
  * A blazing-fast, TypeScript-first Node.js framework with HTTP/2 support, file-based routing, powerful middleware system, and end-to-end type safety for building modern APIs.
5
5
  *
6
6
  * Copyright (c) 2026 BlaizeJS Contributors
7
7
  * @license MIT
8
8
  */
9
9
 
10
- import{c as r,h as o}from"./chunk-4UKXEMYU.js";var t=class extends o{constructor(n,s,e){super("UNSUPPORTED_MEDIA_TYPE",n,415,e??r(),s)}};export{t as a};
11
- //# sourceMappingURL=chunk-VEQ5CZZF.js.map
10
+ import{c as r,h as o}from"./chunk-KK6W6LDB.js";var t=class extends o{constructor(n,s,e){super("UNSUPPORTED_MEDIA_TYPE",n,415,e??r(),s)}};export{t as a};
11
+ //# sourceMappingURL=chunk-JEG7DCHT.js.map
@@ -1,6 +1,6 @@
1
1
 
2
2
  /**
3
- * blaizejs v0.10.0
3
+ * blaizejs v0.10.1
4
4
  * A blazing-fast, TypeScript-first Node.js framework with HTTP/2 support, file-based routing, powerful middleware system, and end-to-end type safety for building modern APIs.
5
5
  *
6
6
  * Copyright (c) 2026 BlaizeJS Contributors
@@ -8,4 +8,4 @@
8
8
  */
9
9
 
10
10
  import{AsyncLocalStorage as u}from"node:async_hooks";var a={headerName:"x-correlation-id",generator:d},s={...a},c=new u;function d(){let t=Date.now().toString(36),r=Math.random().toString(36).substr(2,9);return`req_${t}_${r}`}function f(t,r){s={headerName:t||a.headerName,generator:r||a.generator}}function _(){return s.headerName}function m(){return s.generator()}function I(){let t=c.getStore();return t&&t.trim()?t:"unknown"}function O(t,r){return c.run(t,r)}function S(t){let r=s.headerName,n=t[r],i;return Array.isArray(n)?i=n[0]:typeof n=="string"&&(i=n),i&&i.trim()?i:m()}var E=(e=>(e.VALIDATION_ERROR="VALIDATION_ERROR",e.NOT_FOUND="NOT_FOUND",e.UNAUTHORIZED="UNAUTHORIZED",e.FORBIDDEN="FORBIDDEN",e.SSE_NOT_ACCEPTABLE="SSE_NOT_ACCEPTABLE",e.CONFLICT="CONFLICT",e.RATE_LIMITED="RATE_LIMITED",e.INTERNAL_SERVER_ERROR="INTERNAL_SERVER_ERROR",e.PAYLOAD_TOO_LARGE="PAYLOAD_TOO_LARGE",e.UNSUPPORTED_MEDIA_TYPE="UNSUPPORTED_MEDIA_TYPE",e.UPLOAD_TIMEOUT="UPLOAD_TIMEOUT",e.UNPROCESSABLE_ENTITY="UNPROCESSABLE_ENTITY",e.NETWORK_ERROR="NETWORK_ERROR",e.TIMEOUT_ERROR="TIMEOUT_ERROR",e.PARSE_ERROR="PARSE_ERROR",e.HTTP_ERROR="HTTP_ERROR",e.SSE_CONNECTION_ERROR="SSE_CONNECTION_ERROR",e.SSE_BUFFER_OVERFLOW="SSE_BUFFER_OVERFLOW",e.SSE_STREAM_CLOSED="SSE_STREAM_CLOSED",e.SERVICE_UNAVAILABLE="SERVICE_UNAVAILABLE",e.COMPRESSION_CONFIGURATION_ERROR="COMPRESSION_CONFIGURATION_ERROR",e))(E||{}),R=(o=>(o.LOW="low",o.MEDIUM="medium",o.HIGH="high",o.CRITICAL="critical",o))(R||{}),l=class extends Error{type;title;status;correlationId;timestamp;details;constructor(r,n,i,o,g){super(n),this.name=this.constructor.name,this.type=r,this.title=n,this.status=i,this.correlationId=o,this.timestamp=new Date,this.details=g,Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toJSON(){let r={type:this.type,title:this.title,status:this.status,correlationId:this.correlationId,timestamp:this.timestamp.toISOString()};return this.details!==void 0?{...r,details:this.details}:r}toString(){return`${this.name}: ${this.title} [${this.correlationId}]`}};export{f as a,_ as b,I as c,O as d,S as e,E as f,R as g,l as h};
11
- //# sourceMappingURL=chunk-4UKXEMYU.js.map
11
+ //# sourceMappingURL=chunk-KK6W6LDB.js.map
@@ -1,11 +1,11 @@
1
1
 
2
2
  /**
3
- * blaizejs v0.10.0
3
+ * blaizejs v0.10.1
4
4
  * A blazing-fast, TypeScript-first Node.js framework with HTTP/2 support, file-based routing, powerful middleware system, and end-to-end type safety for building modern APIs.
5
5
  *
6
6
  * Copyright (c) 2026 BlaizeJS Contributors
7
7
  * @license MIT
8
8
  */
9
9
 
10
- import{c as r,h as e}from"./chunk-4UKXEMYU.js";var i=class extends e{constructor(o,t=void 0,n=void 0){super("VALIDATION_ERROR",o,400,n??r(),t)}};export{i as a};
11
- //# sourceMappingURL=chunk-JY6NZIG2.js.map
10
+ import{c as r,h as e}from"./chunk-KK6W6LDB.js";var i=class extends e{constructor(o,t=void 0,n=void 0){super("VALIDATION_ERROR",o,400,n??r(),t)}};export{i as a};
11
+ //# sourceMappingURL=chunk-KTMO67JQ.js.map
package/dist/index.cjs CHANGED
@@ -1,13 +1,13 @@
1
1
 
2
2
  /**
3
- * blaizejs v0.10.0
3
+ * blaizejs v0.10.1
4
4
  * A blazing-fast, TypeScript-first Node.js framework with HTTP/2 support, file-based routing, powerful middleware system, and end-to-end type safety for building modern APIs.
5
5
  *
6
6
  * Copyright (c) 2026 BlaizeJS Contributors
7
7
  * @license MIT
8
8
  */
9
9
 
10
- "use strict";var Mn=Object.create;var _e=Object.defineProperty;var zn=Object.getOwnPropertyDescriptor;var On=Object.getOwnPropertyNames;var _n=Object.getPrototypeOf,kn=Object.prototype.hasOwnProperty;var oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var de=(e,t)=>{for(var r in t)_e(e,r,{get:t[r],enumerable:!0})},qt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of On(t))!kn.call(e,o)&&o!==r&&_e(e,o,{get:()=>t[o],enumerable:!(n=zn(t,o))||n.enumerable});return e};var _=(e,t,r)=>(r=e!=null?Mn(_n(e)):{},qt(t||!e||!e.__esModule?_e(r,"default",{value:e,enumerable:!0}):r,e)),Ln=e=>qt(_e({},"__esModule",{value:!0}),e);function $n(){let e=Date.now().toString(36),t=Math.random().toString(36).substr(2,9);return`req_${e}_${t}`}function Jt(e,t){Le={headerName:e||dt.headerName,generator:t||dt.generator}}function X(){return Le.headerName}function Un(){return Le.generator()}function h(){let e=Zt.getStore();return e&&e.trim()?e:"unknown"}function Kt(e,t){return Zt.run(e,t)}function Fe(e){let t=Le.headerName,r=e[t],n;return Array.isArray(r)?n=r[0]:typeof r=="string"&&(n=r),n&&n.trim()?n:Un()}var Qt,dt,Le,Zt,C=oe(()=>{"use strict";Qt=require("async_hooks"),dt={headerName:"x-correlation-id",generator:$n},Le={...dt},Zt=new Qt.AsyncLocalStorage});var z,Yt,w,P=oe(()=>{"use strict";z=(g=>(g.VALIDATION_ERROR="VALIDATION_ERROR",g.NOT_FOUND="NOT_FOUND",g.UNAUTHORIZED="UNAUTHORIZED",g.FORBIDDEN="FORBIDDEN",g.SSE_NOT_ACCEPTABLE="SSE_NOT_ACCEPTABLE",g.CONFLICT="CONFLICT",g.RATE_LIMITED="RATE_LIMITED",g.INTERNAL_SERVER_ERROR="INTERNAL_SERVER_ERROR",g.PAYLOAD_TOO_LARGE="PAYLOAD_TOO_LARGE",g.UNSUPPORTED_MEDIA_TYPE="UNSUPPORTED_MEDIA_TYPE",g.UPLOAD_TIMEOUT="UPLOAD_TIMEOUT",g.UNPROCESSABLE_ENTITY="UNPROCESSABLE_ENTITY",g.NETWORK_ERROR="NETWORK_ERROR",g.TIMEOUT_ERROR="TIMEOUT_ERROR",g.PARSE_ERROR="PARSE_ERROR",g.HTTP_ERROR="HTTP_ERROR",g.SSE_CONNECTION_ERROR="SSE_CONNECTION_ERROR",g.SSE_BUFFER_OVERFLOW="SSE_BUFFER_OVERFLOW",g.SSE_STREAM_CLOSED="SSE_STREAM_CLOSED",g.SERVICE_UNAVAILABLE="SERVICE_UNAVAILABLE",g.COMPRESSION_CONFIGURATION_ERROR="COMPRESSION_CONFIGURATION_ERROR",g))(z||{}),Yt=(o=>(o.LOW="low",o.MEDIUM="medium",o.HIGH="high",o.CRITICAL="critical",o))(Yt||{}),w=class extends Error{type;title;status;correlationId;timestamp;details;constructor(t,r,n,o,i){super(r),this.name=this.constructor.name,this.type=t,this.title=r,this.status=n,this.correlationId=o,this.timestamp=new Date,this.details=i,Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toJSON(){let t={type:this.type,title:this.title,status:this.status,correlationId:this.correlationId,timestamp:this.timestamp.toISOString()};return this.details!==void 0?{...t,details:this.details}:t}toString(){return`${this.name}: ${this.title} [${this.correlationId}]`}}});var te={};de(te,{ValidationError:()=>T});var T,A=oe(()=>{"use strict";P();C();T=class extends w{constructor(t,r=void 0,n=void 0){super("VALIDATION_ERROR",t,400,n??h(),r)}}});var Et={};de(Et,{PayloadTooLargeError:()=>N});var N,ve=oe(()=>{"use strict";P();C();N=class extends w{constructor(t,r,n){super("PAYLOAD_TOO_LARGE",t,413,n??h(),r)}}});var Tt={};de(Tt,{UnsupportedMediaTypeError:()=>W});var W,Ee=oe(()=>{"use strict";P();C();W=class extends w{constructor(t,r,n){super("UNSUPPORTED_MEDIA_TYPE",t,415,n??h(),r)}}});var zr={};de(zr,{InternalServerError:()=>j});var j,Te=oe(()=>{"use strict";P();C();j=class extends w{constructor(t,r=void 0,n=void 0){super("INTERNAL_SERVER_ERROR",t,500,n??h(),r)}}});var ts={};de(ts,{Blaize:()=>es,BlaizeError:()=>w,ConflictError:()=>ot,ConsoleTransport:()=>U,ErrorSeverity:()=>Yt,ErrorType:()=>z,EventValidationError:()=>V,ForbiddenError:()=>ae,InternalServerError:()=>j,JSONTransport:()=>Y,Logger:()=>ie,MemoryEventBus:()=>se,MiddlewareAPI:()=>Cn,NotFoundError:()=>G,NullTransport:()=>pe,PayloadTooLargeError:()=>N,PluginsAPI:()=>Pn,RateLimitError:()=>it,RequestTimeoutError:()=>st,RouterAPI:()=>Rn,ServerAPI:()=>xn,ServiceNotAvailableError:()=>ct,UnauthorizedError:()=>nt,UnprocessableEntityError:()=>at,UnsupportedMediaTypeError:()=>W,VERSION:()=>bn,ValidationError:()=>T,asMiddlewareArray:()=>Ji,asPluginArray:()=>Ki,buildUrl:()=>Je,compilePathPattern:()=>ce,compose:()=>ee,configureGlobalLogger:()=>fe,cors:()=>he,createDeleteRoute:()=>We,createGetRoute:()=>qe,createHeadRoute:()=>Qe,createLogger:()=>k,createMatcher:()=>le,createMiddleware:()=>L,createMiddlewareArray:()=>Yi,createOptionsRoute:()=>Ze,createPatchRoute:()=>Ge,createPlugin:()=>Be,createPluginArray:()=>Xi,createPostRoute:()=>je,createPutRoute:()=>Ve,createRouteFactory:()=>vt,createServer:()=>rt,createServiceMiddleware:()=>Ae,createStateMiddleware:()=>Ie,createTypedEventBus:()=>me,extractParams:()=>ne,file:()=>Bt,getCorrelationId:()=>h,inferContext:()=>Ht,isMiddleware:()=>Qi,isPlugin:()=>Zi,logger:()=>x,paramsToQuery:()=>Se,requestLoggerMiddleware:()=>yt});module.exports=Ln(ts);var jt={name:"blaizejs",version:"0.10.0",description:"A blazing-fast, TypeScript-first Node.js framework with HTTP/2 support, file-based routing, powerful middleware system, and end-to-end type safety for building modern APIs.",author:"J.Lea-Jones <jason@careymarcel.com>",repository:{type:"git",url:"https://github.com/jleajones/blaize.git"},homepage:"https://github.com/jleajones/blaize/tree/main/packages/blaize-core#readme",bugs:{url:"https://github.com/jleajones/blaize/issues"},publishConfig:{access:"public"},type:"module",main:"./dist/index.js",types:"./dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js",require:"./dist/index.cjs"}},files:["dist"],scripts:{dev:"NODE_ENV=development tsx --watch src/examples/basic.ts",build:"NODE_ENV=production tsup --minify","build:watch":"NODE_ENV=production tsup --watch","type-check":"tsc --noEmit",test:"vitest run --typecheck","test:watch":"vitest","test:coverage":"vitest run --coverage",lint:"eslint .",clean:"rimraf dist"},dependencies:{zod:"^3.24.4"},devDependencies:{"@blaizejs/eslint-config":"workspace:*","@blaizejs/testing-utils":"workspace:*","@blaizejs/tsconfig":"workspace:*","@blaizejs/tsup-config":"workspace:*","@blaizejs/vitest-config":"workspace:*","@types/node":"^22.15.17","@types/selfsigned":"^2.1.0","@vitest/coverage-v8":"^3.1.3",chokidar:"^4.0.3",selfsigned:"^2.4.1",tsx:"^4.19.4",typescript:"^5.8.3","vite-tsconfig-paths":"^5.1.4",vitest:"^3.1.3"},keywords:["nodejs","framework","typescript","http","http2","server","file-based-routing","middleware","plugins","type-safe"],license:"MIT"};var pt=require("crypto");var Wt=require("util");function lt(e){return e instanceof Error}function ut(e){return{message:e.message,name:e.name,stack:e.stack}}function ke(e){let t={};for(let[r,n]of Object.entries(e))if(lt(n))t[r]=ut(n);else if(Array.isArray(n))t[r]=n.map(o=>lt(o)?ut(o):o);else if(n instanceof Date)t[r]=n;else if(n&&typeof n=="object"){let o={};for(let[i,s]of Object.entries(n))lt(s)?o[i]=ut(s):o[i]=s;t[r]=o}else t[r]=n;return t}function Vt(){let e=new WeakSet;return(t,r)=>{if(typeof r=="object"&&r!==null){if(e.has(r))return"[Circular]";e.add(r)}return r}}var In={debug:"\x1B[36m",info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m"},An="\x1B[0m",Bn="\x1B[1m",U=class{write(t,r,n){let o=ke(n),a=`${`${In[t]}${Bn}[${t.toUpperCase()}]${An}`} ${r}`,l=Object.keys(o).length>0?`
10
+ "use strict";var Mn=Object.create;var _e=Object.defineProperty;var zn=Object.getOwnPropertyDescriptor;var On=Object.getOwnPropertyNames;var _n=Object.getPrototypeOf,kn=Object.prototype.hasOwnProperty;var oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var de=(e,t)=>{for(var r in t)_e(e,r,{get:t[r],enumerable:!0})},qt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of On(t))!kn.call(e,o)&&o!==r&&_e(e,o,{get:()=>t[o],enumerable:!(n=zn(t,o))||n.enumerable});return e};var _=(e,t,r)=>(r=e!=null?Mn(_n(e)):{},qt(t||!e||!e.__esModule?_e(r,"default",{value:e,enumerable:!0}):r,e)),Ln=e=>qt(_e({},"__esModule",{value:!0}),e);function $n(){let e=Date.now().toString(36),t=Math.random().toString(36).substr(2,9);return`req_${e}_${t}`}function Jt(e,t){Le={headerName:e||dt.headerName,generator:t||dt.generator}}function X(){return Le.headerName}function Un(){return Le.generator()}function h(){let e=Zt.getStore();return e&&e.trim()?e:"unknown"}function Kt(e,t){return Zt.run(e,t)}function Fe(e){let t=Le.headerName,r=e[t],n;return Array.isArray(r)?n=r[0]:typeof r=="string"&&(n=r),n&&n.trim()?n:Un()}var Qt,dt,Le,Zt,C=oe(()=>{"use strict";Qt=require("async_hooks"),dt={headerName:"x-correlation-id",generator:$n},Le={...dt},Zt=new Qt.AsyncLocalStorage});var z,Yt,w,P=oe(()=>{"use strict";z=(g=>(g.VALIDATION_ERROR="VALIDATION_ERROR",g.NOT_FOUND="NOT_FOUND",g.UNAUTHORIZED="UNAUTHORIZED",g.FORBIDDEN="FORBIDDEN",g.SSE_NOT_ACCEPTABLE="SSE_NOT_ACCEPTABLE",g.CONFLICT="CONFLICT",g.RATE_LIMITED="RATE_LIMITED",g.INTERNAL_SERVER_ERROR="INTERNAL_SERVER_ERROR",g.PAYLOAD_TOO_LARGE="PAYLOAD_TOO_LARGE",g.UNSUPPORTED_MEDIA_TYPE="UNSUPPORTED_MEDIA_TYPE",g.UPLOAD_TIMEOUT="UPLOAD_TIMEOUT",g.UNPROCESSABLE_ENTITY="UNPROCESSABLE_ENTITY",g.NETWORK_ERROR="NETWORK_ERROR",g.TIMEOUT_ERROR="TIMEOUT_ERROR",g.PARSE_ERROR="PARSE_ERROR",g.HTTP_ERROR="HTTP_ERROR",g.SSE_CONNECTION_ERROR="SSE_CONNECTION_ERROR",g.SSE_BUFFER_OVERFLOW="SSE_BUFFER_OVERFLOW",g.SSE_STREAM_CLOSED="SSE_STREAM_CLOSED",g.SERVICE_UNAVAILABLE="SERVICE_UNAVAILABLE",g.COMPRESSION_CONFIGURATION_ERROR="COMPRESSION_CONFIGURATION_ERROR",g))(z||{}),Yt=(o=>(o.LOW="low",o.MEDIUM="medium",o.HIGH="high",o.CRITICAL="critical",o))(Yt||{}),w=class extends Error{type;title;status;correlationId;timestamp;details;constructor(t,r,n,o,i){super(r),this.name=this.constructor.name,this.type=t,this.title=r,this.status=n,this.correlationId=o,this.timestamp=new Date,this.details=i,Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toJSON(){let t={type:this.type,title:this.title,status:this.status,correlationId:this.correlationId,timestamp:this.timestamp.toISOString()};return this.details!==void 0?{...t,details:this.details}:t}toString(){return`${this.name}: ${this.title} [${this.correlationId}]`}}});var te={};de(te,{ValidationError:()=>T});var T,A=oe(()=>{"use strict";P();C();T=class extends w{constructor(t,r=void 0,n=void 0){super("VALIDATION_ERROR",t,400,n??h(),r)}}});var Et={};de(Et,{PayloadTooLargeError:()=>N});var N,ve=oe(()=>{"use strict";P();C();N=class extends w{constructor(t,r,n){super("PAYLOAD_TOO_LARGE",t,413,n??h(),r)}}});var Tt={};de(Tt,{UnsupportedMediaTypeError:()=>W});var W,Ee=oe(()=>{"use strict";P();C();W=class extends w{constructor(t,r,n){super("UNSUPPORTED_MEDIA_TYPE",t,415,n??h(),r)}}});var zr={};de(zr,{InternalServerError:()=>j});var j,Te=oe(()=>{"use strict";P();C();j=class extends w{constructor(t,r=void 0,n=void 0){super("INTERNAL_SERVER_ERROR",t,500,n??h(),r)}}});var ts={};de(ts,{Blaize:()=>es,BlaizeError:()=>w,ConflictError:()=>ot,ConsoleTransport:()=>U,ErrorSeverity:()=>Yt,ErrorType:()=>z,EventValidationError:()=>V,ForbiddenError:()=>ae,InternalServerError:()=>j,JSONTransport:()=>Y,Logger:()=>ie,MemoryEventBus:()=>se,MiddlewareAPI:()=>Cn,NotFoundError:()=>G,NullTransport:()=>pe,PayloadTooLargeError:()=>N,PluginsAPI:()=>Pn,RateLimitError:()=>it,RequestTimeoutError:()=>st,RouterAPI:()=>Rn,ServerAPI:()=>xn,ServiceNotAvailableError:()=>ct,UnauthorizedError:()=>nt,UnprocessableEntityError:()=>at,UnsupportedMediaTypeError:()=>W,VERSION:()=>bn,ValidationError:()=>T,asMiddlewareArray:()=>Ji,asPluginArray:()=>Ki,buildUrl:()=>Je,compilePathPattern:()=>ce,compose:()=>ee,configureGlobalLogger:()=>fe,cors:()=>he,createDeleteRoute:()=>We,createGetRoute:()=>qe,createHeadRoute:()=>Qe,createLogger:()=>k,createMatcher:()=>le,createMiddleware:()=>L,createMiddlewareArray:()=>Yi,createOptionsRoute:()=>Ze,createPatchRoute:()=>Ge,createPlugin:()=>Be,createPluginArray:()=>Xi,createPostRoute:()=>je,createPutRoute:()=>Ve,createRouteFactory:()=>vt,createServer:()=>rt,createServiceMiddleware:()=>Ae,createStateMiddleware:()=>Ie,createTypedEventBus:()=>me,extractParams:()=>ne,file:()=>Bt,getCorrelationId:()=>h,inferContext:()=>Ht,isMiddleware:()=>Qi,isPlugin:()=>Zi,logger:()=>x,paramsToQuery:()=>Se,requestLoggerMiddleware:()=>yt});module.exports=Ln(ts);var jt={name:"blaizejs",version:"0.10.1",description:"A blazing-fast, TypeScript-first Node.js framework with HTTP/2 support, file-based routing, powerful middleware system, and end-to-end type safety for building modern APIs.",author:"J.Lea-Jones <jason@careymarcel.com>",repository:{type:"git",url:"https://github.com/jleajones/blaize.git"},homepage:"https://github.com/jleajones/blaize/tree/main/packages/blaize-core#readme",bugs:{url:"https://github.com/jleajones/blaize/issues"},publishConfig:{access:"public"},type:"module",main:"./dist/index.js",types:"./dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js",require:"./dist/index.cjs"}},files:["dist"],scripts:{dev:"NODE_ENV=development tsx --watch src/examples/basic.ts",build:"NODE_ENV=production tsup --minify","build:watch":"NODE_ENV=production tsup --watch","type-check":"tsc --noEmit",test:"vitest run --typecheck","test:watch":"vitest","test:coverage":"vitest run --coverage",lint:"eslint .",clean:"rimraf dist"},dependencies:{zod:"^3.24.4"},devDependencies:{"@blaizejs/eslint-config":"workspace:*","@blaizejs/testing-utils":"workspace:*","@blaizejs/tsconfig":"workspace:*","@blaizejs/tsup-config":"workspace:*","@blaizejs/vitest-config":"workspace:*","@types/node":"^22.15.17","@types/selfsigned":"^2.1.0","@vitest/coverage-v8":"^3.1.3",chokidar:"^4.0.3",selfsigned:"^2.4.1",tsx:"^4.19.4",typescript:"^5.8.3","vite-tsconfig-paths":"^5.1.4",vitest:"^3.1.3"},keywords:["nodejs","framework","typescript","http","http2","server","file-based-routing","middleware","plugins","type-safe"],license:"MIT"};var pt=require("crypto");var Wt=require("util");function lt(e){return e instanceof Error}function ut(e){return{message:e.message,name:e.name,stack:e.stack}}function ke(e){let t={};for(let[r,n]of Object.entries(e))if(lt(n))t[r]=ut(n);else if(Array.isArray(n))t[r]=n.map(o=>lt(o)?ut(o):o);else if(n instanceof Date)t[r]=n;else if(n&&typeof n=="object"){let o={};for(let[i,s]of Object.entries(n))lt(s)?o[i]=ut(s):o[i]=s;t[r]=o}else t[r]=n;return t}function Vt(){let e=new WeakSet;return(t,r)=>{if(typeof r=="object"&&r!==null){if(e.has(r))return"[Circular]";e.add(r)}return r}}var In={debug:"\x1B[36m",info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m"},An="\x1B[0m",Bn="\x1B[1m",U=class{write(t,r,n){let o=ke(n),a=`${`${In[t]}${Bn}[${t.toUpperCase()}]${An}`} ${r}`,l=Object.keys(o).length>0?`
11
11
 
12
12
  ${(0,Wt.inspect)(o,{colors:!0,depth:3,compact:!1,breakLength:80})}`:"";switch(t){case"error":console.error(a+l);break;case"warn":console.warn(a+l);break;case"debug":case"info":default:console.log(a+l);break}}};var Y=class{write(t,r,n){let o=ke(n),i={level:t,message:r,...o},s=JSON.stringify(i,Vt());console.log(s)}async flush(){return Promise.resolve()}};var Gt={debug:0,info:1,warn:2,error:3},ie=class e{config;inheritedMeta;minLevelPriority;constructor(t,r){this.config=t,this.inheritedMeta=Object.freeze(r?{...r}:{}),this.minLevelPriority=Gt[t.level]}debug(t,r){this.log("debug",t,r)}info(t,r){this.log("info",t,r)}warn(t,r){this.log("warn",t,r)}error(t,r){this.log("error",t,r)}child(t){let r={...this.inheritedMeta,...t};return new e(this.config,r)}async flush(){await this.config.transport.flush?.()}log(t,r,n){if(!this.shouldLog(t))return;let o={...this.inheritedMeta,...n||{}},i=o;this.config.includeTimestamp&&(i={timestamp:new Date().toISOString(),...o});let s=this.redact(i);this.config.transport.write(t,r,s)}shouldLog(t){return Gt[t]>=this.minLevelPriority}redact(t){if(this.config.redactKeys.length===0)return t;let r=new Set(this.config.redactKeys.map(o=>o.toLowerCase())),n={};for(let[o,i]of Object.entries(t))r.has(o.toLowerCase())?n[o]="[REDACTED]":n[o]=i;return n}};function Dn(){return process.env.NODE_ENV!=="production"?new U:new Y}function k(e){let t=process.env.NODE_ENV!=="production",r={level:e?.level??(t?"debug":"info"),transport:e?.transport??Dn(),redactKeys:e?.redactKeys??[],includeTimestamp:e?.includeTimestamp??!0};return new ie(r)}var pe=class{write(t,r,n){}async flush(){return Promise.resolve()}};var x=k({level:process.env.NODE_ENV==="development"?"debug":"info",transport:new U,includeTimestamp:!0,redactKeys:[]}),Nn=x;function fe(e){let t=k(e);Nn=t,Object.assign(x,t)}C();function Hn(e){if(e==="*")return/^.*$/;let t=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,"[^:]*");return new RegExp(`^${t}$`)}function qn(e){if(e instanceof RegExp)return e;if(e.includes("*"))return Hn(e);let t=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`^${t}$`)}var se=class{serverId;subscriptions=new Map;adapter;adapterUnsubscribe;logger;constructor(t,r){this.serverId=t||(0,pt.randomUUID)(),r?this.logger=r.child({component:"EventBus",serverId:this.serverId}):this.logger=k().child({component:"EventBus",serverId:this.serverId})}async publish(t,r){if(!t||t.trim()==="")throw new Error("Event type cannot be empty");let n={type:t,data:r,timestamp:Date.now(),serverId:this.serverId,correlationId:h()};if(await this.emitToSubscribers(n),this.adapter)try{await this.adapter.publish(n)}catch(o){this.logger.error("Adapter publish failed",{eventType:t,serverId:this.serverId,error:o instanceof Error?o.message:String(o)})}}subscribe(t,r){if(typeof t=="string"&&t.trim()==="")throw new Error("Pattern cannot be empty");let n=(0,pt.randomUUID)(),o=qn(t),i={id:n,pattern:t,matcher:o,handler:r};this.subscriptions.set(n,i);let s=!1;return()=>{s||(this.subscriptions.delete(n),s=!0)}}async setAdapter(t){this.adapter&&await this.disconnectAdapter(),this.adapter=t,await t.connect(),this.adapterUnsubscribe=await t.subscribe("*",r=>{r.serverId!==this.serverId&&this.emitToSubscribers(r)}),this.logger.info("Adapter connected",{serverId:this.serverId,adapterType:t.constructor.name})}async disconnect(){this.adapter&&await this.disconnectAdapter(),this.subscriptions.clear(),this.logger.info("EventBus disconnected",{serverId:this.serverId})}async disconnectAdapter(){if(this.adapter){this.adapterUnsubscribe&&(this.adapterUnsubscribe(),this.adapterUnsubscribe=void 0);try{await this.adapter.disconnect()}catch(t){this.logger.error("Adapter disconnect failed",{serverId:this.serverId,error:t instanceof Error?t.message:String(t)})}this.adapter=void 0}}async emitToSubscribers(t){let r=[];for(let o of this.subscriptions.values())o.matcher.test(t.type)&&r.push(o.handler);let n=r.map(async o=>{try{await o(t)}catch(i){this.logger.error("Event handler error",{eventType:t.type,serverId:t.serverId,correlationId:t.correlationId,error:i instanceof Error?i.message:String(i),stack:i instanceof Error?i.stack:void 0})}});await Promise.all(n)}};var Xt=require("zod");P();var V=class extends w{constructor(t,r,n){super("VALIDATION_ERROR",t,400,n??crypto.randomUUID(),r),this.name="EventValidationError"}toJSON(){let t={type:this.type,title:this.title,status:this.status,correlationId:this.correlationId,timestamp:this.timestamp.toISOString()};if(this.details){let r={eventType:this.details.eventType,context:this.details.context};return this.details.zodError&&(r.errors=this.details.zodError.issues.map(n=>({path:n.path.join("."),message:n.message,code:n.code}))),this.details.data!==void 0&&(r.data=this.details.data),{...t,details:r}}return t}toString(){let t=this.details?.context?` during ${this.details.context}`:"",r=this.details?.eventType?` for '${this.details.eventType}'`:"";return`${this.name}: ${this.title}${r}${t} [${this.correlationId}]`}};var ft=class{base;schemas;options;logger;constructor(t,r,n){this.base=t,this.schemas=r.schemas,this.options={schemas:r.schemas,unknownEventBehavior:r.unknownEventBehavior??"warn",onValidationError:r.onValidationError},n?this.logger=n.child({component:"TypedEventBus",serverId:t.serverId}):this.logger=k().child({component:"TypedEventBus",serverId:t.serverId})}async publish(t,r){let n=this.validateEvent(t,r,"publish");await this.base.publish(t,n)}subscribe(t,r){return this.base.subscribe(t,async n=>{try{let o=this.validateEvent(n.type,n.data,"receive"),i={...n,data:o};await r(i)}catch(o){if(o instanceof V){this.logger.error("Receive validation failed, dropping event",{eventType:n.type,serverId:n.serverId,correlationId:n.correlationId,validationErrors:o.details?.zodError?.issues});return}throw this.logger.error("Handler error",{eventType:n.type,error:o instanceof Error?o.message:String(o),stack:o instanceof Error?o.stack:void 0}),o}})}async setAdapter(t){await this.base.setAdapter(t)}async disconnect(){await this.base.disconnect()}get serverId(){return this.base.serverId}validateEvent(t,r,n){let o=this.schemas[t];if(!o)return this.handleUnknownEvent(t,r,n);try{return o.parse(r)}catch(i){let s=new V(`Event validation failed for "${t}"`,{eventType:t,context:n,zodError:i instanceof Xt.z.ZodError?i:void 0,data:r});throw this.options.onValidationError&&this.options.onValidationError(s),s}}handleUnknownEvent(t,r,n){let o=this.options.unknownEventBehavior;if(o==="error"){let i=new V(`Unknown event type: "${t}"`,{eventType:t,context:n,data:r});throw this.options.onValidationError&&this.options.onValidationError(i),i}return o==="warn"&&this.logger.warn("Unknown event type, allowing through",{eventType:t,context:n}),r}};function me(e,t,r){return new ft(e,t,r)}function er(e,t,r,n,o){if(!e||e.skip&&e.skip(t))return Promise.resolve(r());try{let i=e.execute({ctx:t,next:r,logger:n,eventBus:o});return i instanceof Promise?i:Promise.resolve(i)}catch(i){return Promise.reject(i)}}function ee(e){return e.length===0?async({next:t})=>{await Promise.resolve(t())}:async function(t){let{ctx:r,next:n,logger:o,eventBus:i}=t,s=new Set,a=async c=>{if(c>=e.length)return Promise.resolve(n());let l=e[c],u=()=>{if(s.has(c))throw new Error("next() called multiple times");return s.add(c),a(c+1)},m=o.child({middleware:l?.name||"anonymous"});return er(l,r,u,m,i)};return a(0)}}P();C();var ae=class extends w{constructor(t,r=void 0,n=void 0){super("FORBIDDEN",t,403,n??h(),r)}};function L(e){if(typeof e=="function")return{name:"anonymous",execute:e,debug:!1};let{name:t="anonymous",handler:r,skip:n,debug:o=!1}=e;return{name:t,execute:r,debug:o,...n!==void 0&&{skip:n}}}function Ie(e){return L({name:"state-middleware",handler:e})}function Ae(e){return L({name:"service-middleware",handler:e})}var jn={origin:!0,methods:["GET","HEAD","PUT","PATCH","POST","DELETE"],credentials:!1,optionsSuccessStatus:204},Vn={origin:!1,methods:["GET","HEAD"],credentials:!1,optionsSuccessStatus:204};function tr(e){return e===void 0&&(e=process.env.NODE_ENV!=="production"),e?{...jn}:{...Vn}}function Wn(e=6e4,t=1e3){let r=new Map,n={ttl:e,maxSize:t},o=(m,E,b)=>`${m}:${E}:${b||"anonymous"}`,i=()=>{if(r.size===0)return;let m=null,E=1/0;for(let[b,M]of r.entries())M.lastAccessed<E&&(E=M.lastAccessed,m=b);m&&r.delete(m)};return{get:(m,E,b)=>{let M=o(m,E,b),I=r.get(M);if(!I)return null;let d=Date.now();return d>I.expiresAt?(r.delete(M),null):(I.lastAccessed=d,I.allowed)},set:(m,E,b,M)=>{let I=o(m,b,M),d=Date.now();if(r.has(I)){r.set(I,{allowed:E,expiresAt:d+n.ttl,lastAccessed:d});return}r.size>=n.maxSize&&i(),r.set(I,{allowed:E,expiresAt:d+n.ttl,lastAccessed:d})},clear:()=>{r.clear()},cleanExpired:()=>{let m=Date.now(),E=0;for(let[b,M]of r.entries())m>M.expiresAt&&(r.delete(b),E++);return E},getStats:()=>({size:r.size,maxSize:n.maxSize,ttl:n.ttl})}}var rr=Wn();function Gn(e){return typeof e=="boolean"||typeof e=="function"?!1:Array.isArray(e)?e.every(t=>typeof t=="string"||t instanceof RegExp):typeof e=="string"||e instanceof RegExp}function Qn(e){return typeof e=="string"?`str:${e}`:e instanceof RegExp?`regex:${e.source}:${e.flags}`:Array.isArray(e)?`array:[${e.map(t=>typeof t=="string"?`str:${t}`:t instanceof RegExp?`regex:${t.source}:${t.flags}`:"unknown").join(",")}]`:"unknown"}async function Zn(e,t){return t==="*"?!0:e===t}async function Jn(e,t){return t.test(e)}async function Kn(e,t,r,n=100){let o;try{let i=new Promise(a=>{o=setTimeout(()=>{a({timedOut:!0})},n)}),s=await Promise.race([Promise.resolve(t(e,r)).then(a=>({result:a})),i]);return o&&clearTimeout(o),"timedOut"in s?(console.warn(`CORS origin validation function timed out after ${n}ms for origin: ${e}`),!1):s.result}catch(i){return o&&clearTimeout(o),console.error("CORS origin validation function error:",i),!1}}async function nr(e,t,r){let n=t.map(i=>mt(e,i,r));return(await Promise.all(n)).some(i=>i===!0)}async function mt(e,t,r){return typeof t=="string"?Zn(e,t):t instanceof RegExp?Jn(e,t):typeof t=="function"?Kn(e,t,r):(console.warn("Unknown CORS origin type:",typeof t),!1)}async function ge(e,t,r){if(t===!0)return!0;if(t===!1)return!1;if(Gn(t)){let o=r?.state?.user?.id||r?.state?.userId,i=Qn(t),s=rr.get(e,i,o);if(s!==null)return s;let a;return Array.isArray(t)?a=await nr(e,t,r):a=await mt(e,t,r),rr.set(e,a,i,o),a}else return Array.isArray(t)?nr(e,t,r):mt(e,t,r)}A();function Yn(e){let t=e.request.header("origin")||e.request.header("Origin"),r=e.request.header("access-control-request-method")||e.request.header("Access-Control-Request-Method"),n=e.request.header("access-control-request-headers")||e.request.header("Access-Control-Request-Headers"),o=n?n.split(",").map(i=>i.trim().toLowerCase()):void 0;return{origin:t,requestedMethod:r,requestedHeaders:o}}function gt(e){return e.toUpperCase()}function Xn(e,t){return t?(typeof t=="string"?t.split(",").map(n=>n.trim()):t).map(n=>gt(n)).includes(gt(e)):["GET","HEAD","PUT","PATCH","POST","DELETE"].includes(gt(e))}function eo(e,t){if(!e||e.length===0||t===void 0)return!0;let r=typeof t=="string"?t.split(",").map(n=>n.trim().toLowerCase()):t.map(n=>n.toLowerCase());return e.every(n=>r.includes(n.toLowerCase()))}function to(e,t,r,n){n&&(t.origin===!0&&!t.credentials?e.response.header("Access-Control-Allow-Origin","*"):(e.response.header("Access-Control-Allow-Origin",r),e.response.header("Vary","Origin"))),t.credentials&&n&&e.response.header("Access-Control-Allow-Credentials","true");let o=t.methods||["GET","HEAD","PUT","PATCH","POST","DELETE"],i=typeof o=="string"?o:o.join(", ");if(e.response.header("Access-Control-Allow-Methods",i),t.allowedHeaders){let s=typeof t.allowedHeaders=="string"?t.allowedHeaders:t.allowedHeaders.join(", ");e.response.header("Access-Control-Allow-Headers",s)}else{let s=e.request.header("access-control-request-headers")||e.request.header("Access-Control-Request-Headers");s&&e.response.header("Access-Control-Allow-Headers",s)}t.maxAge!==void 0&&t.maxAge>=0&&e.response.header("Access-Control-Max-Age",String(t.maxAge))}async function or(e,t){let r=Yn(e);if(!r.origin||!r.requestedMethod)throw e.response.status(403),new T("Invalid preflight request: missing required headers",{fields:[{field:r.origin?"Access-Control-Request-Method":"Origin",messages:["Required header is missing"]}],errorCount:1,section:"body"});let n=await ge(r.origin,t.origin||!1,e);if(!n)throw e.response.status(403),new T("CORS origin not allowed",{fields:[{field:"Origin",messages:[`Origin '${r.origin}' is not allowed`],rejectedValue:r.origin}],errorCount:1,section:"body"});if(!Xn(r.requestedMethod,t.methods))throw e.response.status(403),new T("CORS method not allowed",{fields:[{field:"Access-Control-Request-Method",messages:[`Method '${r.requestedMethod}' is not allowed`],rejectedValue:r.requestedMethod,expectedType:typeof t.methods=="string"?t.methods:t.methods?.join(", ")}],errorCount:1,section:"body"});if(!eo(r.requestedHeaders,t.allowedHeaders)){let i=r.requestedHeaders?.filter(s=>{let a=t.allowedHeaders;return a?!(typeof a=="string"?a.split(",").map(l=>l.trim().toLowerCase()):a.map(l=>l.toLowerCase())).includes(s.toLowerCase()):!1});throw e.response.status(403),new T("CORS headers not allowed",{fields:[{field:"Access-Control-Request-Headers",messages:[`Headers not allowed: ${i?.join(", ")}`],rejectedValue:i}],errorCount:1,section:"body"})}to(e,t,r.origin,n);let o=t.optionsSuccessStatus||204;e.response.status(o),t.preflightContinue||e.response.text("")}function ht(e){return e.request.method==="OPTIONS"&&!!(e.request.header("access-control-request-method")||e.request.header("Access-Control-Request-Method"))}var R=require("zod"),ro=R.z.enum(["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"]),no=R.z.union([R.z.array(ro),R.z.string().transform(e=>e.split(",").map(t=>t.trim()))]).optional(),ir=R.z.union([R.z.array(R.z.string()),R.z.string().transform(e=>e.split(",").map(t=>t.trim()))]).optional(),oo=R.z.custom(e=>typeof e=="function"&&e.length<=2,{message:"Origin validator must be a function accepting (origin, ctx?) parameters"}),sr=R.z.union([R.z.string(),R.z.instanceof(RegExp),oo]),io=R.z.union([R.z.boolean(),sr,R.z.array(sr)]),ar=R.z.object({origin:io.optional(),methods:no,allowedHeaders:ir,exposedHeaders:ir,credentials:R.z.boolean().optional(),maxAge:R.z.number().int().optional(),preflightContinue:R.z.boolean().optional(),optionsSuccessStatus:R.z.number().int().min(200).max(299).optional()}).strict(),cr=R.z.union([R.z.boolean(),ar]).optional();function lr(e){try{return typeof e=="boolean"?e===!1?{origin:!1}:{origin:!0}:ar.parse(e)}catch(t){if(t instanceof R.z.ZodError){let r=so(t);throw new Error(`Invalid CORS options:
13
13
  ${r}`)}throw new Error(`Invalid CORS options: ${String(t)}`)}}function so(e){return e.errors.map(r=>` - ${r.path.join(".")||"root"}: ${r.message}`).join(`
@@ -35,8 +35,7 @@ ${r}`)}throw new Error(`Invalid CORS options: ${String(t)}`)}}function so(e){ret
35
35
 
36
36
  \u{1F680} Server: ${a}
37
37
  \u{1F525} Hot Reload: Enabled
38
- \u{1F6E0}\uFE0F Mode: Development
39
-
38
+ \u{1F6E0}\uFE0F Mode: ${process.env.NODE_ENV==="development"?"Development":"Production"}
40
39
  Time to build something amazing! \u{1F680}
41
40
 
42
41
  \u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}\u{1F525}