@medplum/hl7 2.0.29 → 2.0.31

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.
@@ -1,2 +1,2 @@
1
- "use strict";var L=Object.create;var f=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var k=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var O=(t,s)=>{for(var e in s)f(t,e,{get:s[e],enumerable:!0})},u=(t,s,e,r)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of S(s))!C.call(t,o)&&o!==e&&f(t,o,{get:()=>s[o],enumerable:!(r=M(s,o))||r.enumerable});return t};var y=(t,s,e)=>(e=t!=null?L(k(t)):{},u(s||!t||!t.__esModule?f(e,"default",{value:t,enumerable:!0}):e,t)),R=t=>u(f({},"__esModule",{value:!0}),t);var K={};O(K,{CR:()=>p,FS:()=>a,Hl7Base:()=>c,Hl7Client:()=>g,Hl7ErrorEvent:()=>d,Hl7MessageEvent:()=>l,Hl7Server:()=>E,VT:()=>v});module.exports=R(K);var c=class extends EventTarget{addEventListener(s,e,r){super.addEventListener(s,e,r)}removeEventListener(s,e,r){super.removeEventListener(s,e,r)}};var b=require("@medplum/core"),x=require("net");var v=String.fromCharCode(11),a=String.fromCharCode(28),p=String.fromCharCode(13);var l=class extends Event{constructor(e,r){super("message");this.socket=e;this.message=r}send(e){this.socket.write(v+e.toString()+a+p)}},d=class extends Event{constructor(e){super("error");this.error=e}};var g=class extends c{constructor(e){super();this.options=e,this.host=this.options.host,this.port=this.options.port,this.buffer="",this.awaitingResponse=!1}connect(){return new Promise((e,r)=>{let o=(0,x.connect)({host:this.host,port:this.port},()=>{o.on("data",i=>{if(this.buffer+=i.toString(),this.buffer.endsWith(a+p)){let n=b.Hl7Message.parse(this.buffer.substring(1,this.buffer.length-2));this.dispatchEvent(new l(o,n)),this.buffer="",this.awaitingResponse=!1}}),e(o)});o.on("error",function(i){r(i)}),this.socket=o})}async send(e){if(this.awaitingResponse)throw new Error("Can't send while awaiting response");this.awaitingResponse=!0;let r=this.socket;r||(r=await this.connect()),r.write(v+e.toString()+a+p)}async sendAndWait(e){let r=new Promise(o=>{function i(n){n.target.removeEventListener("message",i),o(n.message)}this.addEventListener("message",i)});return await this.send(e),r}close(){this.socket&&(this.buffer="",this.awaitingResponse=!1,this.socket.end(),this.socket.destroy(),delete this.socket)}};var H=require("@medplum/core"),w=y(require("net"));var E=class extends c{start(e,r){let o=w.default.createServer(i=>{let n="";i.on("data",h=>{try{if(n+=h.toString(),n.endsWith(a+p)){let m=H.Hl7Message.parse(n.substring(1,n.length-2));this.dispatchEvent(new l(i,m)),n=""}}catch(m){this.dispatchEvent(new d(m))}}).setEncoding(r??"utf-8"),i.on("error",h=>{n="",this.dispatchEvent(new d(h))})});o.listen(e),this.server=o}stop(){this.server&&(this.server.close(),this.server=void 0)}};0&&(module.exports={CR,FS,Hl7Base,Hl7Client,Hl7ErrorEvent,Hl7MessageEvent,Hl7Server,VT});
1
+ "use strict";var b=Object.create;var p=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,y=Object.prototype.hasOwnProperty;var O=(n,t)=>{for(var e in t)p(n,e,{get:t[e],enumerable:!0})},g=(n,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of L(t))!y.call(n,s)&&s!==e&&p(n,s,{get:()=>t[s],enumerable:!(o=M(t,s))||o.enumerable});return n};var w=(n,t,e)=>(e=n!=null?b(C(n)):{},g(t||!n||!n.__esModule?p(e,"default",{value:n,enumerable:!0}):e,n)),S=n=>g(p({},"__esModule",{value:!0}),n);var A={};O(A,{CR:()=>m,FS:()=>v,Hl7Base:()=>i,Hl7Client:()=>E,Hl7Connection:()=>c,Hl7ErrorEvent:()=>l,Hl7MessageEvent:()=>d,Hl7Server:()=>f,VT:()=>h});module.exports=S(A);var i=class extends EventTarget{addEventListener(t,e,o){super.addEventListener(t,e,o)}removeEventListener(t,e,o){super.removeEventListener(t,e,o)}};var H=require("net");var u=require("@medplum/core");var h=String.fromCharCode(11),v=String.fromCharCode(28),m=String.fromCharCode(13);var d=class extends Event{constructor(e,o){super("message");this.connection=e;this.message=o}},l=class extends Event{constructor(e){super("error");this.error=e}};var c=class extends i{constructor(e,o){super();this.socket=e;this.encoding=o;let s="";e.on("data",r=>{try{if(s+=r.toString(),s.endsWith(v+m)){let a=u.Hl7Message.parse(s.substring(1,s.length-2));this.dispatchEvent(new d(this,a)),s=""}}catch(a){this.dispatchEvent(new l(a))}}).setEncoding(o??"utf-8"),e.on("error",r=>{s="",this.dispatchEvent(new l(r))})}send(e){this.socket.write(h+e.toString()+v+m)}async sendAndWait(e){let o=new Promise(s=>{function r(a){a.target.removeEventListener("message",r),s(a.message)}this.addEventListener("message",r)});return this.send(e),o}close(){this.socket.end(),this.socket.destroy()}};var E=class extends i{constructor(e){super();this.options=e,this.host=this.options.host,this.port=this.options.port}connect(){return this.connection?Promise.resolve(this.connection):new Promise(e=>{let o=(0,H.connect)({host:this.host,port:this.port},()=>{this.connection=new c(o),e(this.connection)})})}async send(e){return(await this.connect()).send(e)}async sendAndWait(e){return(await this.connect()).sendAndWait(e)}close(){this.connection&&(this.connection.close(),delete this.connection)}};var x=w(require("net"));var f=class{constructor(t){this.handler=t}start(t,e){let o=x.default.createServer(s=>{let r=new c(s,e);this.handler(r)});o.listen(t),this.server=o}stop(){this.server&&(this.server.close(),this.server=void 0)}};0&&(module.exports={CR,FS,Hl7Base,Hl7Client,Hl7Connection,Hl7ErrorEvent,Hl7MessageEvent,Hl7Server,VT});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/index.ts", "../../src/base.ts", "../../src/client.ts", "../../src/constants.ts", "../../src/events.ts", "../../src/server.ts"],
4
- "sourcesContent": ["export * from './base';\nexport * from './client';\nexport * from './constants';\nexport * from './events';\nexport * from './server';\n", "import { Hl7ErrorEvent, Hl7MessageEvent } from './events';\n\nexport interface Hl7EventMap {\n message: Hl7MessageEvent;\n error: Hl7ErrorEvent;\n}\n\nexport abstract class Hl7Base extends EventTarget {\n addEventListener<K extends keyof Hl7EventMap>(\n type: K,\n listener: ((event: Hl7EventMap[K]) => void) | EventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void;\n\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void {\n super.addEventListener(type, listener, options);\n }\n removeEventListener<K extends keyof Hl7EventMap>(\n type: K,\n listener: ((event: Hl7EventMap[K]) => void) | EventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void;\n\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void {\n super.removeEventListener(type, listener, options);\n }\n}\n", "import { Hl7Message } from '@medplum/core';\nimport { connect, Socket } from 'net';\nimport { Hl7Base } from './base';\nimport { CR, FS, VT } from './constants';\nimport { Hl7MessageEvent } from './events';\n\nexport interface Hl7ClientOptions {\n host: string;\n port: number;\n}\n\nexport class Hl7Client extends Hl7Base {\n options: Hl7ClientOptions;\n host: string;\n port: number;\n socket?: Socket;\n buffer: string;\n awaitingResponse: boolean;\n\n constructor(options: Hl7ClientOptions) {\n super();\n this.options = options;\n this.host = this.options.host;\n this.port = this.options.port;\n this.buffer = '';\n this.awaitingResponse = false;\n }\n\n connect(): Promise<Socket> {\n return new Promise((resolve, reject) => {\n const socket = connect({ host: this.host, port: this.port }, () => {\n socket.on('data', (data) => {\n this.buffer += data.toString();\n if (this.buffer.endsWith(FS + CR)) {\n const msg = Hl7Message.parse(this.buffer.substring(1, this.buffer.length - 2));\n this.dispatchEvent(new Hl7MessageEvent(socket, msg));\n this.buffer = '';\n this.awaitingResponse = false;\n }\n });\n resolve(socket);\n });\n\n socket.on('error', function (err) {\n reject(err);\n });\n\n this.socket = socket;\n });\n }\n\n async send(msg: Hl7Message): Promise<void> {\n if (this.awaitingResponse) {\n throw new Error(\"Can't send while awaiting response\");\n }\n this.awaitingResponse = true;\n let socket = this.socket;\n if (!socket) {\n socket = await this.connect();\n }\n socket.write(VT + msg.toString() + FS + CR);\n }\n\n async sendAndWait(msg: Hl7Message): Promise<Hl7Message> {\n const promise = new Promise<Hl7Message>((resolve) => {\n function handler(event: Hl7MessageEvent): void {\n (event.target as Hl7Client).removeEventListener('message', handler);\n resolve(event.message);\n }\n\n this.addEventListener('message', handler);\n });\n\n await this.send(msg);\n return promise;\n }\n\n close(): void {\n if (this.socket) {\n this.buffer = '';\n this.awaitingResponse = false;\n this.socket.end();\n this.socket.destroy();\n delete this.socket;\n }\n }\n}\n", "export const VT = String.fromCharCode(0x0b);\nexport const FS = String.fromCharCode(0x1c);\nexport const CR = String.fromCharCode(0x0d);\n", "import { Hl7Message } from '@medplum/core';\nimport { Socket } from 'net';\nimport { CR, FS, VT } from './constants';\n\nexport class Hl7MessageEvent extends Event {\n constructor(public readonly socket: Socket, public readonly message: Hl7Message) {\n super('message');\n }\n\n send(reply: Hl7Message): void {\n this.socket.write(VT + reply.toString() + FS + CR);\n }\n}\n\nexport class Hl7ErrorEvent extends Event {\n constructor(public readonly error: Error) {\n super('error');\n }\n}\n", "import { Hl7Message } from '@medplum/core';\nimport net from 'net';\nimport { Hl7Base } from './base';\nimport { CR, FS } from './constants';\nimport { Hl7ErrorEvent, Hl7MessageEvent } from './events';\n\nexport class Hl7Server extends Hl7Base {\n server?: net.Server;\n\n start(port: number, encoding?: BufferEncoding): void {\n const server = net.createServer((socket) => {\n let buffer = '';\n\n socket\n .on('data', (data) => {\n try {\n buffer += data.toString();\n if (buffer.endsWith(FS + CR)) {\n const message = Hl7Message.parse(buffer.substring(1, buffer.length - 2));\n this.dispatchEvent(new Hl7MessageEvent(socket, message));\n buffer = '';\n }\n } catch (err) {\n this.dispatchEvent(new Hl7ErrorEvent(err as Error));\n }\n })\n .setEncoding(encoding ?? 'utf-8');\n\n socket.on('error', (err) => {\n buffer = '';\n this.dispatchEvent(new Hl7ErrorEvent(err));\n });\n });\n\n server.listen(port);\n this.server = server;\n }\n\n stop(): void {\n if (this.server) {\n this.server.close();\n this.server = undefined;\n }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["src_exports", "__export", "CR", "FS", "Hl7Base", "Hl7Client", "Hl7ErrorEvent", "Hl7MessageEvent", "Hl7Server", "VT", "__toCommonJS", "Hl7Base", "type", "listener", "options", "import_core", "import_net", "VT", "FS", "CR", "Hl7MessageEvent", "socket", "message", "reply", "VT", "FS", "CR", "Hl7ErrorEvent", "error", "Hl7Client", "Hl7Base", "options", "resolve", "reject", "socket", "data", "FS", "CR", "msg", "Hl7MessageEvent", "err", "VT", "promise", "handler", "event", "import_core", "import_net", "Hl7Server", "Hl7Base", "port", "encoding", "server", "net", "socket", "buffer", "data", "FS", "CR", "message", "Hl7MessageEvent", "err", "Hl7ErrorEvent"]
3
+ "sources": ["../../src/index.ts", "../../src/base.ts", "../../src/client.ts", "../../src/connection.ts", "../../src/constants.ts", "../../src/events.ts", "../../src/server.ts"],
4
+ "sourcesContent": ["export * from './base';\nexport * from './client';\nexport * from './connection';\nexport * from './constants';\nexport * from './events';\nexport * from './server';\n", "import { Hl7ErrorEvent, Hl7MessageEvent } from './events';\n\nexport interface Hl7EventMap {\n message: Hl7MessageEvent;\n error: Hl7ErrorEvent;\n}\n\nexport abstract class Hl7Base extends EventTarget {\n addEventListener<K extends keyof Hl7EventMap>(\n type: K,\n listener: ((event: Hl7EventMap[K]) => void) | EventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void;\n\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void {\n super.addEventListener(type, listener, options);\n }\n removeEventListener<K extends keyof Hl7EventMap>(\n type: K,\n listener: ((event: Hl7EventMap[K]) => void) | EventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void;\n\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void {\n super.removeEventListener(type, listener, options);\n }\n}\n", "import { Hl7Message } from '@medplum/core';\nimport { connect } from 'net';\nimport { Hl7Base } from './base';\nimport { Hl7Connection } from './connection';\n\nexport interface Hl7ClientOptions {\n host: string;\n port: number;\n}\n\nexport class Hl7Client extends Hl7Base {\n options: Hl7ClientOptions;\n host: string;\n port: number;\n connection?: Hl7Connection;\n\n constructor(options: Hl7ClientOptions) {\n super();\n this.options = options;\n this.host = this.options.host;\n this.port = this.options.port;\n }\n\n connect(): Promise<Hl7Connection> {\n if (this.connection) {\n return Promise.resolve(this.connection);\n }\n\n return new Promise((resolve) => {\n const socket = connect({ host: this.host, port: this.port }, () => {\n this.connection = new Hl7Connection(socket);\n resolve(this.connection);\n });\n });\n }\n\n async send(msg: Hl7Message): Promise<void> {\n return (await this.connect()).send(msg);\n }\n\n async sendAndWait(msg: Hl7Message): Promise<Hl7Message> {\n return (await this.connect()).sendAndWait(msg);\n }\n\n close(): void {\n if (this.connection) {\n this.connection.close();\n delete this.connection;\n }\n }\n}\n", "import { Hl7Message } from '@medplum/core';\nimport net from 'net';\nimport { Hl7Base } from './base';\nimport { CR, FS, VT } from './constants';\nimport { Hl7ErrorEvent, Hl7MessageEvent } from './events';\n\nexport class Hl7Connection extends Hl7Base {\n constructor(\n readonly socket: net.Socket,\n readonly encoding?: BufferEncoding\n ) {\n super();\n\n let buffer = '';\n\n socket\n .on('data', (data) => {\n try {\n buffer += data.toString();\n if (buffer.endsWith(FS + CR)) {\n const message = Hl7Message.parse(buffer.substring(1, buffer.length - 2));\n this.dispatchEvent(new Hl7MessageEvent(this, message));\n buffer = '';\n }\n } catch (err) {\n this.dispatchEvent(new Hl7ErrorEvent(err as Error));\n }\n })\n .setEncoding(encoding ?? 'utf-8');\n\n socket.on('error', (err) => {\n buffer = '';\n this.dispatchEvent(new Hl7ErrorEvent(err));\n });\n }\n\n send(reply: Hl7Message): void {\n this.socket.write(VT + reply.toString() + FS + CR);\n }\n\n async sendAndWait(msg: Hl7Message): Promise<Hl7Message> {\n const promise = new Promise<Hl7Message>((resolve) => {\n function handler(event: Hl7MessageEvent): void {\n (event.target as Hl7Connection).removeEventListener('message', handler);\n resolve(event.message);\n }\n this.addEventListener('message', handler);\n });\n\n this.send(msg);\n return promise;\n }\n\n close(): void {\n this.socket.end();\n this.socket.destroy();\n }\n}\n", "export const VT = String.fromCharCode(0x0b);\nexport const FS = String.fromCharCode(0x1c);\nexport const CR = String.fromCharCode(0x0d);\n", "import { Hl7Message } from '@medplum/core';\nimport { Hl7Connection } from './connection';\n\nexport class Hl7MessageEvent extends Event {\n constructor(\n public readonly connection: Hl7Connection,\n public readonly message: Hl7Message\n ) {\n super('message');\n }\n}\n\nexport class Hl7ErrorEvent extends Event {\n constructor(public readonly error: Error) {\n super('error');\n }\n}\n", "import net from 'net';\nimport { Hl7Connection } from './connection';\n\nexport class Hl7Server {\n server?: net.Server;\n\n constructor(public readonly handler: (connection: Hl7Connection) => void) {}\n\n start(port: number, encoding?: BufferEncoding): void {\n const server = net.createServer((socket) => {\n const connection = new Hl7Connection(socket, encoding);\n this.handler(connection);\n });\n\n server.listen(port);\n this.server = server;\n }\n\n stop(): void {\n if (this.server) {\n this.server.close();\n this.server = undefined;\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["src_exports", "__export", "CR", "FS", "Hl7Base", "Hl7Client", "Hl7Connection", "Hl7ErrorEvent", "Hl7MessageEvent", "Hl7Server", "VT", "__toCommonJS", "Hl7Base", "type", "listener", "options", "import_net", "import_core", "VT", "FS", "CR", "Hl7MessageEvent", "connection", "message", "Hl7ErrorEvent", "error", "Hl7Connection", "Hl7Base", "socket", "encoding", "buffer", "data", "FS", "CR", "message", "Hl7MessageEvent", "err", "Hl7ErrorEvent", "reply", "VT", "msg", "promise", "resolve", "handler", "event", "Hl7Client", "Hl7Base", "options", "resolve", "socket", "Hl7Connection", "msg", "import_net", "Hl7Server", "handler", "port", "encoding", "server", "net", "socket", "connection", "Hl7Connection"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var p=class extends EventTarget{addEventListener(n,e,t){super.addEventListener(n,e,t)}removeEventListener(n,e,t){super.removeEventListener(n,e,t)}};import{Hl7Message as E}from"@medplum/core";import{connect as u}from"net";var v=String.fromCharCode(11),i=String.fromCharCode(28),a=String.fromCharCode(13);var c=class extends Event{constructor(e,t){super("message");this.socket=e;this.message=t}send(e){this.socket.write(v+e.toString()+i+a)}},l=class extends Event{constructor(e){super("error");this.error=e}};var m=class extends p{constructor(e){super();this.options=e,this.host=this.options.host,this.port=this.options.port,this.buffer="",this.awaitingResponse=!1}connect(){return new Promise((e,t)=>{let r=u({host:this.host,port:this.port},()=>{r.on("data",o=>{if(this.buffer+=o.toString(),this.buffer.endsWith(i+a)){let s=E.parse(this.buffer.substring(1,this.buffer.length-2));this.dispatchEvent(new c(r,s)),this.buffer="",this.awaitingResponse=!1}}),e(r)});r.on("error",function(o){t(o)}),this.socket=r})}async send(e){if(this.awaitingResponse)throw new Error("Can't send while awaiting response");this.awaitingResponse=!0;let t=this.socket;t||(t=await this.connect()),t.write(v+e.toString()+i+a)}async sendAndWait(e){let t=new Promise(r=>{function o(s){s.target.removeEventListener("message",o),r(s.message)}this.addEventListener("message",o)});return await this.send(e),t}close(){this.socket&&(this.buffer="",this.awaitingResponse=!1,this.socket.end(),this.socket.destroy(),delete this.socket)}};import{Hl7Message as b}from"@medplum/core";import x from"net";var g=class extends p{start(e,t){let r=x.createServer(o=>{let s="";o.on("data",f=>{try{if(s+=f.toString(),s.endsWith(i+a)){let h=b.parse(s.substring(1,s.length-2));this.dispatchEvent(new c(o,h)),s=""}}catch(h){this.dispatchEvent(new l(h))}}).setEncoding(t??"utf-8"),o.on("error",f=>{s="",this.dispatchEvent(new l(f))})});r.listen(e),this.server=r}stop(){this.server&&(this.server.close(),this.server=void 0)}};export{a as CR,i as FS,p as Hl7Base,m as Hl7Client,l as Hl7ErrorEvent,c as Hl7MessageEvent,g as Hl7Server,v as VT};
1
+ var i=class extends EventTarget{addEventListener(n,e,t){super.addEventListener(n,e,t)}removeEventListener(n,e,t){super.removeEventListener(n,e,t)}};import{connect as g}from"net";import{Hl7Message as f}from"@medplum/core";var m=String.fromCharCode(11),p=String.fromCharCode(28),v=String.fromCharCode(13);var d=class extends Event{constructor(e,t){super("message");this.connection=e;this.message=t}},l=class extends Event{constructor(e){super("error");this.error=e}};var c=class extends i{constructor(e,t){super();this.socket=e;this.encoding=t;let o="";e.on("data",s=>{try{if(o+=s.toString(),o.endsWith(p+v)){let r=f.parse(o.substring(1,o.length-2));this.dispatchEvent(new d(this,r)),o=""}}catch(r){this.dispatchEvent(new l(r))}}).setEncoding(t??"utf-8"),e.on("error",s=>{o="",this.dispatchEvent(new l(s))})}send(e){this.socket.write(m+e.toString()+p+v)}async sendAndWait(e){let t=new Promise(o=>{function s(r){r.target.removeEventListener("message",s),o(r.message)}this.addEventListener("message",s)});return this.send(e),t}close(){this.socket.end(),this.socket.destroy()}};var h=class extends i{constructor(e){super();this.options=e,this.host=this.options.host,this.port=this.options.port}connect(){return this.connection?Promise.resolve(this.connection):new Promise(e=>{let t=g({host:this.host,port:this.port},()=>{this.connection=new c(t),e(this.connection)})})}async send(e){return(await this.connect()).send(e)}async sendAndWait(e){return(await this.connect()).sendAndWait(e)}close(){this.connection&&(this.connection.close(),delete this.connection)}};import u from"net";var E=class{constructor(n){this.handler=n}start(n,e){let t=u.createServer(o=>{let s=new c(o,e);this.handler(s)});t.listen(n),this.server=t}stop(){this.server&&(this.server.close(),this.server=void 0)}};export{v as CR,p as FS,i as Hl7Base,h as Hl7Client,c as Hl7Connection,l as Hl7ErrorEvent,d as Hl7MessageEvent,E as Hl7Server,m as VT};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/base.ts", "../../src/client.ts", "../../src/constants.ts", "../../src/events.ts", "../../src/server.ts"],
4
- "sourcesContent": ["import { Hl7ErrorEvent, Hl7MessageEvent } from './events';\n\nexport interface Hl7EventMap {\n message: Hl7MessageEvent;\n error: Hl7ErrorEvent;\n}\n\nexport abstract class Hl7Base extends EventTarget {\n addEventListener<K extends keyof Hl7EventMap>(\n type: K,\n listener: ((event: Hl7EventMap[K]) => void) | EventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void;\n\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void {\n super.addEventListener(type, listener, options);\n }\n removeEventListener<K extends keyof Hl7EventMap>(\n type: K,\n listener: ((event: Hl7EventMap[K]) => void) | EventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void;\n\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void {\n super.removeEventListener(type, listener, options);\n }\n}\n", "import { Hl7Message } from '@medplum/core';\nimport { connect, Socket } from 'net';\nimport { Hl7Base } from './base';\nimport { CR, FS, VT } from './constants';\nimport { Hl7MessageEvent } from './events';\n\nexport interface Hl7ClientOptions {\n host: string;\n port: number;\n}\n\nexport class Hl7Client extends Hl7Base {\n options: Hl7ClientOptions;\n host: string;\n port: number;\n socket?: Socket;\n buffer: string;\n awaitingResponse: boolean;\n\n constructor(options: Hl7ClientOptions) {\n super();\n this.options = options;\n this.host = this.options.host;\n this.port = this.options.port;\n this.buffer = '';\n this.awaitingResponse = false;\n }\n\n connect(): Promise<Socket> {\n return new Promise((resolve, reject) => {\n const socket = connect({ host: this.host, port: this.port }, () => {\n socket.on('data', (data) => {\n this.buffer += data.toString();\n if (this.buffer.endsWith(FS + CR)) {\n const msg = Hl7Message.parse(this.buffer.substring(1, this.buffer.length - 2));\n this.dispatchEvent(new Hl7MessageEvent(socket, msg));\n this.buffer = '';\n this.awaitingResponse = false;\n }\n });\n resolve(socket);\n });\n\n socket.on('error', function (err) {\n reject(err);\n });\n\n this.socket = socket;\n });\n }\n\n async send(msg: Hl7Message): Promise<void> {\n if (this.awaitingResponse) {\n throw new Error(\"Can't send while awaiting response\");\n }\n this.awaitingResponse = true;\n let socket = this.socket;\n if (!socket) {\n socket = await this.connect();\n }\n socket.write(VT + msg.toString() + FS + CR);\n }\n\n async sendAndWait(msg: Hl7Message): Promise<Hl7Message> {\n const promise = new Promise<Hl7Message>((resolve) => {\n function handler(event: Hl7MessageEvent): void {\n (event.target as Hl7Client).removeEventListener('message', handler);\n resolve(event.message);\n }\n\n this.addEventListener('message', handler);\n });\n\n await this.send(msg);\n return promise;\n }\n\n close(): void {\n if (this.socket) {\n this.buffer = '';\n this.awaitingResponse = false;\n this.socket.end();\n this.socket.destroy();\n delete this.socket;\n }\n }\n}\n", "export const VT = String.fromCharCode(0x0b);\nexport const FS = String.fromCharCode(0x1c);\nexport const CR = String.fromCharCode(0x0d);\n", "import { Hl7Message } from '@medplum/core';\nimport { Socket } from 'net';\nimport { CR, FS, VT } from './constants';\n\nexport class Hl7MessageEvent extends Event {\n constructor(public readonly socket: Socket, public readonly message: Hl7Message) {\n super('message');\n }\n\n send(reply: Hl7Message): void {\n this.socket.write(VT + reply.toString() + FS + CR);\n }\n}\n\nexport class Hl7ErrorEvent extends Event {\n constructor(public readonly error: Error) {\n super('error');\n }\n}\n", "import { Hl7Message } from '@medplum/core';\nimport net from 'net';\nimport { Hl7Base } from './base';\nimport { CR, FS } from './constants';\nimport { Hl7ErrorEvent, Hl7MessageEvent } from './events';\n\nexport class Hl7Server extends Hl7Base {\n server?: net.Server;\n\n start(port: number, encoding?: BufferEncoding): void {\n const server = net.createServer((socket) => {\n let buffer = '';\n\n socket\n .on('data', (data) => {\n try {\n buffer += data.toString();\n if (buffer.endsWith(FS + CR)) {\n const message = Hl7Message.parse(buffer.substring(1, buffer.length - 2));\n this.dispatchEvent(new Hl7MessageEvent(socket, message));\n buffer = '';\n }\n } catch (err) {\n this.dispatchEvent(new Hl7ErrorEvent(err as Error));\n }\n })\n .setEncoding(encoding ?? 'utf-8');\n\n socket.on('error', (err) => {\n buffer = '';\n this.dispatchEvent(new Hl7ErrorEvent(err));\n });\n });\n\n server.listen(port);\n this.server = server;\n }\n\n stop(): void {\n if (this.server) {\n this.server.close();\n this.server = undefined;\n }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["Hl7Base", "type", "listener", "options", "Hl7Message", "connect", "VT", "FS", "CR", "Hl7MessageEvent", "socket", "message", "reply", "VT", "FS", "CR", "Hl7ErrorEvent", "error", "Hl7Client", "Hl7Base", "options", "resolve", "reject", "socket", "connect", "data", "FS", "CR", "msg", "Hl7Message", "Hl7MessageEvent", "err", "VT", "promise", "handler", "event", "Hl7Message", "net", "Hl7Server", "Hl7Base", "port", "encoding", "server", "net", "socket", "buffer", "data", "FS", "CR", "message", "Hl7Message", "Hl7MessageEvent", "err", "Hl7ErrorEvent"]
3
+ "sources": ["../../src/base.ts", "../../src/client.ts", "../../src/connection.ts", "../../src/constants.ts", "../../src/events.ts", "../../src/server.ts"],
4
+ "sourcesContent": ["import { Hl7ErrorEvent, Hl7MessageEvent } from './events';\n\nexport interface Hl7EventMap {\n message: Hl7MessageEvent;\n error: Hl7ErrorEvent;\n}\n\nexport abstract class Hl7Base extends EventTarget {\n addEventListener<K extends keyof Hl7EventMap>(\n type: K,\n listener: ((event: Hl7EventMap[K]) => void) | EventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void;\n\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void {\n super.addEventListener(type, listener, options);\n }\n removeEventListener<K extends keyof Hl7EventMap>(\n type: K,\n listener: ((event: Hl7EventMap[K]) => void) | EventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void;\n\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void {\n super.removeEventListener(type, listener, options);\n }\n}\n", "import { Hl7Message } from '@medplum/core';\nimport { connect } from 'net';\nimport { Hl7Base } from './base';\nimport { Hl7Connection } from './connection';\n\nexport interface Hl7ClientOptions {\n host: string;\n port: number;\n}\n\nexport class Hl7Client extends Hl7Base {\n options: Hl7ClientOptions;\n host: string;\n port: number;\n connection?: Hl7Connection;\n\n constructor(options: Hl7ClientOptions) {\n super();\n this.options = options;\n this.host = this.options.host;\n this.port = this.options.port;\n }\n\n connect(): Promise<Hl7Connection> {\n if (this.connection) {\n return Promise.resolve(this.connection);\n }\n\n return new Promise((resolve) => {\n const socket = connect({ host: this.host, port: this.port }, () => {\n this.connection = new Hl7Connection(socket);\n resolve(this.connection);\n });\n });\n }\n\n async send(msg: Hl7Message): Promise<void> {\n return (await this.connect()).send(msg);\n }\n\n async sendAndWait(msg: Hl7Message): Promise<Hl7Message> {\n return (await this.connect()).sendAndWait(msg);\n }\n\n close(): void {\n if (this.connection) {\n this.connection.close();\n delete this.connection;\n }\n }\n}\n", "import { Hl7Message } from '@medplum/core';\nimport net from 'net';\nimport { Hl7Base } from './base';\nimport { CR, FS, VT } from './constants';\nimport { Hl7ErrorEvent, Hl7MessageEvent } from './events';\n\nexport class Hl7Connection extends Hl7Base {\n constructor(\n readonly socket: net.Socket,\n readonly encoding?: BufferEncoding\n ) {\n super();\n\n let buffer = '';\n\n socket\n .on('data', (data) => {\n try {\n buffer += data.toString();\n if (buffer.endsWith(FS + CR)) {\n const message = Hl7Message.parse(buffer.substring(1, buffer.length - 2));\n this.dispatchEvent(new Hl7MessageEvent(this, message));\n buffer = '';\n }\n } catch (err) {\n this.dispatchEvent(new Hl7ErrorEvent(err as Error));\n }\n })\n .setEncoding(encoding ?? 'utf-8');\n\n socket.on('error', (err) => {\n buffer = '';\n this.dispatchEvent(new Hl7ErrorEvent(err));\n });\n }\n\n send(reply: Hl7Message): void {\n this.socket.write(VT + reply.toString() + FS + CR);\n }\n\n async sendAndWait(msg: Hl7Message): Promise<Hl7Message> {\n const promise = new Promise<Hl7Message>((resolve) => {\n function handler(event: Hl7MessageEvent): void {\n (event.target as Hl7Connection).removeEventListener('message', handler);\n resolve(event.message);\n }\n this.addEventListener('message', handler);\n });\n\n this.send(msg);\n return promise;\n }\n\n close(): void {\n this.socket.end();\n this.socket.destroy();\n }\n}\n", "export const VT = String.fromCharCode(0x0b);\nexport const FS = String.fromCharCode(0x1c);\nexport const CR = String.fromCharCode(0x0d);\n", "import { Hl7Message } from '@medplum/core';\nimport { Hl7Connection } from './connection';\n\nexport class Hl7MessageEvent extends Event {\n constructor(\n public readonly connection: Hl7Connection,\n public readonly message: Hl7Message\n ) {\n super('message');\n }\n}\n\nexport class Hl7ErrorEvent extends Event {\n constructor(public readonly error: Error) {\n super('error');\n }\n}\n", "import net from 'net';\nimport { Hl7Connection } from './connection';\n\nexport class Hl7Server {\n server?: net.Server;\n\n constructor(public readonly handler: (connection: Hl7Connection) => void) {}\n\n start(port: number, encoding?: BufferEncoding): void {\n const server = net.createServer((socket) => {\n const connection = new Hl7Connection(socket, encoding);\n this.handler(connection);\n });\n\n server.listen(port);\n this.server = server;\n }\n\n stop(): void {\n if (this.server) {\n this.server.close();\n this.server = undefined;\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["Hl7Base", "type", "listener", "options", "connect", "Hl7Message", "VT", "FS", "CR", "Hl7MessageEvent", "connection", "message", "Hl7ErrorEvent", "error", "Hl7Connection", "Hl7Base", "socket", "encoding", "buffer", "data", "FS", "CR", "message", "Hl7Message", "Hl7MessageEvent", "err", "Hl7ErrorEvent", "reply", "VT", "msg", "promise", "resolve", "handler", "event", "Hl7Client", "Hl7Base", "options", "resolve", "socket", "connect", "Hl7Connection", "msg", "net", "Hl7Server", "handler", "port", "encoding", "server", "net", "socket", "connection", "Hl7Connection"]
7
7
  }
@@ -1,7 +1,6 @@
1
- /// <reference types="node" />
2
1
  import { Hl7Message } from '@medplum/core';
3
- import { Socket } from 'net';
4
2
  import { Hl7Base } from './base';
3
+ import { Hl7Connection } from './connection';
5
4
  export interface Hl7ClientOptions {
6
5
  host: string;
7
6
  port: number;
@@ -10,11 +9,9 @@ export declare class Hl7Client extends Hl7Base {
10
9
  options: Hl7ClientOptions;
11
10
  host: string;
12
11
  port: number;
13
- socket?: Socket;
14
- buffer: string;
15
- awaitingResponse: boolean;
12
+ connection?: Hl7Connection;
16
13
  constructor(options: Hl7ClientOptions);
17
- connect(): Promise<Socket>;
14
+ connect(): Promise<Hl7Connection>;
18
15
  send(msg: Hl7Message): Promise<void>;
19
16
  sendAndWait(msg: Hl7Message): Promise<Hl7Message>;
20
17
  close(): void;
@@ -0,0 +1,13 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { Hl7Message } from '@medplum/core';
4
+ import net from 'net';
5
+ import { Hl7Base } from './base';
6
+ export declare class Hl7Connection extends Hl7Base {
7
+ readonly socket: net.Socket;
8
+ readonly encoding?: BufferEncoding | undefined;
9
+ constructor(socket: net.Socket, encoding?: BufferEncoding | undefined);
10
+ send(reply: Hl7Message): void;
11
+ sendAndWait(msg: Hl7Message): Promise<Hl7Message>;
12
+ close(): void;
13
+ }
@@ -1,11 +1,9 @@
1
- /// <reference types="node" />
2
1
  import { Hl7Message } from '@medplum/core';
3
- import { Socket } from 'net';
2
+ import { Hl7Connection } from './connection';
4
3
  export declare class Hl7MessageEvent extends Event {
5
- readonly socket: Socket;
4
+ readonly connection: Hl7Connection;
6
5
  readonly message: Hl7Message;
7
- constructor(socket: Socket, message: Hl7Message);
8
- send(reply: Hl7Message): void;
6
+ constructor(connection: Hl7Connection, message: Hl7Message);
9
7
  }
10
8
  export declare class Hl7ErrorEvent extends Event {
11
9
  readonly error: Error;
@@ -1,5 +1,6 @@
1
1
  export * from './base';
2
2
  export * from './client';
3
+ export * from './connection';
3
4
  export * from './constants';
4
5
  export * from './events';
5
6
  export * from './server';
@@ -1,9 +1,11 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
3
  import net from 'net';
4
- import { Hl7Base } from './base';
5
- export declare class Hl7Server extends Hl7Base {
4
+ import { Hl7Connection } from './connection';
5
+ export declare class Hl7Server {
6
+ readonly handler: (connection: Hl7Connection) => void;
6
7
  server?: net.Server;
8
+ constructor(handler: (connection: Hl7Connection) => void);
7
9
  start(port: number, encoding?: BufferEncoding): void;
8
10
  stop(): void;
9
11
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medplum/hl7",
3
- "version": "2.0.29",
3
+ "version": "2.0.31",
4
4
  "description": "Medplum HL7 Utilities",
5
5
  "author": "Medplum <hello@medplum.com>",
6
6
  "license": "Apache-2.0",
@@ -19,7 +19,9 @@
19
19
  "test": "jest"
20
20
  },
21
21
  "dependencies": {
22
- "@medplum/core": "*",
22
+ "@medplum/core": "*"
23
+ },
24
+ "devDependencies": {
23
25
  "@medplum/fhirtypes": "*"
24
26
  },
25
27
  "main": "dist/cjs/index.cjs",