{"version":3,"sources":["../../../../src/lib/A-Request/A-HttpServerRequest.context.ts"],"names":["request"],"mappings":";;;;AAKO,MAAM,mCAEH,kBAAA,CAoBR;AAAA,EAQE,IAAc,QAAA,GAA4B;AACtC,IAAA,OAAO,MAAM,MAAA,CAAO,OAAA;AAAA,EACxB;AAAA,EAEA,IAAc,SAAA,GAA4B;AACtC,IAAA,OAAO,MAAM,MAAA,CAAO,QAAA;AAAA,EACxB;AAAA,EAKA,WAAA,CACIA,UACA,QAAA,EACF;AACE,IAAA,KAAA,CAAM,qBAAA,EAAuB,EAAE,OAAA,EAAAA,QAAAA,EAAS,UAAU,CAAA;AAGlD,IAAA,IAAA,CAAK,GAAA,GAAM,iBAAiB,cAAA,EAAe;AAAA,EAC/C;AAAA,EAEA,IAAI,EAAA,GAAa;AACb,IAAA,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,KAAK,QAAA,CAAS,GAAG,CAAA,CAAA,EAAI,IAAA,CAAK,GAAG,CAAA,CAAA;AAAA,EACpE;AAAA,EAEA,IAAI,OAAA,GAAoB;AACpB,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,SAAS,CAAA,EAAG;AAC5B,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,SAAA,EAAW,EAAE,CAAA;AAAA,IAChC;AACA,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,SAAS,CAAA;AAAA,EACnC;AAAA,EAEA,IAAI,WAAA,GAAkC;AAClC,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,cAAc,CAAA,IAAK,MAAA;AAAA,EACpD;AAAA,EAGA,IAAI,IAAA,GAAkB;AAClB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA;AAAA,EAChC;AAAA,EAEA,IAAI,KAAK,KAAA,EAAkB;AACvB,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,MAAA,EAAQ,KAAK,CAAA;AAAA,EAChC;AAAA,EAEA,IAAI,MAAA,GAAiB;AACjB,IAAA,OAAO,IAAA,CAAK,QAAQ,MAAA,CAAO,CAAC,KAAK,GAAA,KAAQ,GAAA,GAAM,GAAA,CAAI,MAAA,EAAQ,CAAC,CAAA;AAAA,EAChE;AAAA,EAEA,IAAI,cAAA,GAAyB;AACzB,IAAA,IAAI,UAAU,IAAA,CAAK,QAAA;AACnB,IAAA,IAAI,CAAC,OAAA,EAAS;AACV,MAAA,OAAA,GAAU,QAAQ,MAAA,EAAO;AAAA,IAC7B;AAEA,IAAA,MAAM,CAAC,OAAA,EAAS,WAAW,IAAI,OAAA,CAAQ,MAAA,CAAO,KAAK,UAAU,CAAA;AAC7D,IAAA,OAAO,OAAA,GAAU,MAAO,WAAA,GAAc,GAAA;AAAA,EAC1C;AAAA,EAGA,eAAA,GAAkB;AACd,IAAA,IAAA,CAAK,UAAA,GAAa,QAAQ,MAAA,EAAO;AAAA,EACrC;AAAA,EAEA,cAAA,GAAiB;AACb,IAAA,IAAA,CAAK,QAAA,GAAW,QAAQ,MAAA,EAAO;AAAA,EACnC;AACJ","file":"A-HttpServerRequest.context.mjs","sourcesContent":["import { A_Context, A_Fragment, A_IdentityHelper } from \"@adaas/a-concept\";\nimport { IncomingMessage, request, ServerResponse } from \"http\";\nimport { A_Operation_Storage, A_OperationContext } from \"@adaas/a-utils/a-operation\";\n\n\nexport class A_HttpServerRequestContext<\n    _DataType extends any = any,\n> extends A_OperationContext<\n    'http-server-request',\n    {\n        request: IncomingMessage,\n        response: ServerResponse\n    },\n    {\n        buffers: Buffer[]\n        data: _DataType\n        files: Record<string, any[]>\n    },\n    {\n        buffers: Buffer[]\n        data: _DataType\n        files: Record<string, any[]>\n        params: {\n            request: IncomingMessage,\n            response: ServerResponse\n        }\n    } & A_Operation_Storage\n> {\n\n    protected _id!: string;\n\n    protected _startTime!: [number, number];\n    protected _endTime?: [number, number];\n    protected _ready?: Promise<void>;\n\n    protected get _request(): IncomingMessage {\n        return super.params.request;\n    }\n\n    protected get _response(): ServerResponse {\n        return super.params.response;\n    }\n\n    protected _customResponse: any;\n\n\n    constructor(\n        request: IncomingMessage,\n        response: ServerResponse\n    ) {\n        super('http-server-request', { request, response });\n\n\n        this._id = A_IdentityHelper.generateTimeId();\n    }\n\n    get id(): string {\n        return `[${this._request.method}]${this._request.url}-${this._id}`;\n    }\n\n    get buffers(): Buffer[] {\n        if (!this._meta.has('buffers')) {\n            this._meta.set('buffers', []);\n        }\n        return this._meta.get('buffers')!;\n    }\n\n    get contentType(): string | undefined {\n        return this._request.headers['content-type'] || undefined;\n    }\n\n\n    get data(): _DataType {\n        return this._meta.get('data')!;\n    }\n\n    set data(value: _DataType) {\n        this._meta.set('data', value);\n    }\n\n    get length(): number {\n        return this.buffers.reduce((acc, buf) => acc + buf.length, 0);\n    }\n\n    get processingTime(): number {\n        let endTime = this._endTime;\n        if (!endTime) {\n            endTime = process.hrtime();\n        }\n\n        const [seconds, nanoseconds] = process.hrtime(this._startTime);\n        return seconds * 1000 + nanoseconds / 1000000;\n    }\n\n\n    startProcessing() {\n        this._startTime = process.hrtime();\n    }\n\n    stopProcessing() {\n        this._endTime = process.hrtime();\n    }\n}"]}