secs4js 0.1.0
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.
- package/LICENSE.md +20 -0
- package/README.md +442 -0
- package/lib/core/AbstractSecsCommunicator.d.ts +76 -0
- package/lib/core/AbstractSecsCommunicator.d.ts.map +1 -0
- package/lib/core/AbstractSecsCommunicator.js +85 -0
- package/lib/core/AbstractSecsCommunicator.js.map +1 -0
- package/lib/core/AbstractSecsMessage.d.ts +36 -0
- package/lib/core/AbstractSecsMessage.d.ts.map +1 -0
- package/lib/core/AbstractSecsMessage.js +66 -0
- package/lib/core/AbstractSecsMessage.js.map +1 -0
- package/lib/core/enums/HsmsSsControlType.d.ts +59 -0
- package/lib/core/enums/HsmsSsControlType.d.ts.map +1 -0
- package/lib/core/enums/HsmsSsControlType.js +105 -0
- package/lib/core/enums/HsmsSsControlType.js.map +1 -0
- package/lib/core/enums/RejectReason.d.ts +11 -0
- package/lib/core/enums/RejectReason.d.ts.map +1 -0
- package/lib/core/enums/RejectReason.js +13 -0
- package/lib/core/enums/RejectReason.js.map +1 -0
- package/lib/core/enums/SecsItemType.d.ts +33 -0
- package/lib/core/enums/SecsItemType.d.ts.map +1 -0
- package/lib/core/enums/SecsItemType.js +22 -0
- package/lib/core/enums/SecsItemType.js.map +1 -0
- package/lib/core/enums/SelectStatus.d.ts +11 -0
- package/lib/core/enums/SelectStatus.d.ts.map +1 -0
- package/lib/core/enums/SelectStatus.js +13 -0
- package/lib/core/enums/SelectStatus.js.map +1 -0
- package/lib/core/secs2item/AbstractSecs2Item.d.ts +34 -0
- package/lib/core/secs2item/AbstractSecs2Item.d.ts.map +1 -0
- package/lib/core/secs2item/AbstractSecs2Item.js +59 -0
- package/lib/core/secs2item/AbstractSecs2Item.js.map +1 -0
- package/lib/core/secs2item/Secs2ItemAscii.d.ts +18 -0
- package/lib/core/secs2item/Secs2ItemAscii.d.ts.map +1 -0
- package/lib/core/secs2item/Secs2ItemAscii.js +27 -0
- package/lib/core/secs2item/Secs2ItemAscii.js.map +1 -0
- package/lib/core/secs2item/Secs2ItemBinary.d.ts +11 -0
- package/lib/core/secs2item/Secs2ItemBinary.d.ts.map +1 -0
- package/lib/core/secs2item/Secs2ItemBinary.js +22 -0
- package/lib/core/secs2item/Secs2ItemBinary.js.map +1 -0
- package/lib/core/secs2item/Secs2ItemBoolean.d.ts +12 -0
- package/lib/core/secs2item/Secs2ItemBoolean.d.ts.map +1 -0
- package/lib/core/secs2item/Secs2ItemBoolean.js +27 -0
- package/lib/core/secs2item/Secs2ItemBoolean.js.map +1 -0
- package/lib/core/secs2item/Secs2ItemFactory.d.ts +27 -0
- package/lib/core/secs2item/Secs2ItemFactory.d.ts.map +1 -0
- package/lib/core/secs2item/Secs2ItemFactory.js +56 -0
- package/lib/core/secs2item/Secs2ItemFactory.js.map +1 -0
- package/lib/core/secs2item/Secs2ItemList.d.ts +11 -0
- package/lib/core/secs2item/Secs2ItemList.d.ts.map +1 -0
- package/lib/core/secs2item/Secs2ItemList.js +26 -0
- package/lib/core/secs2item/Secs2ItemList.js.map +1 -0
- package/lib/core/secs2item/Secs2ItemNumeric.d.ts +14 -0
- package/lib/core/secs2item/Secs2ItemNumeric.d.ts.map +1 -0
- package/lib/core/secs2item/Secs2ItemNumeric.js +128 -0
- package/lib/core/secs2item/Secs2ItemNumeric.js.map +1 -0
- package/lib/core/secs2item/Secs2ItemParser.d.ts +12 -0
- package/lib/core/secs2item/Secs2ItemParser.d.ts.map +1 -0
- package/lib/core/secs2item/Secs2ItemParser.js +74 -0
- package/lib/core/secs2item/Secs2ItemParser.js.map +1 -0
- package/lib/gem/Clock.d.ts +21 -0
- package/lib/gem/Clock.d.ts.map +1 -0
- package/lib/gem/Clock.js +65 -0
- package/lib/gem/Clock.js.map +1 -0
- package/lib/gem/Gem.d.ts +55 -0
- package/lib/gem/Gem.d.ts.map +1 -0
- package/lib/gem/Gem.js +137 -0
- package/lib/gem/Gem.js.map +1 -0
- package/lib/helper/Secs2ItemHelper.d.ts +96 -0
- package/lib/helper/Secs2ItemHelper.d.ts.map +1 -0
- package/lib/helper/Secs2ItemHelper.js +135 -0
- package/lib/helper/Secs2ItemHelper.js.map +1 -0
- package/lib/hsms/HsmsActiveCommunicator.d.ts +29 -0
- package/lib/hsms/HsmsActiveCommunicator.d.ts.map +1 -0
- package/lib/hsms/HsmsActiveCommunicator.js +123 -0
- package/lib/hsms/HsmsActiveCommunicator.js.map +1 -0
- package/lib/hsms/HsmsCommunicator.d.ts +70 -0
- package/lib/hsms/HsmsCommunicator.d.ts.map +1 -0
- package/lib/hsms/HsmsCommunicator.js +322 -0
- package/lib/hsms/HsmsCommunicator.js.map +1 -0
- package/lib/hsms/HsmsMessage.d.ts +92 -0
- package/lib/hsms/HsmsMessage.d.ts.map +1 -0
- package/lib/hsms/HsmsMessage.js +163 -0
- package/lib/hsms/HsmsMessage.js.map +1 -0
- package/lib/hsms/HsmsPassiveCommunicator.d.ts +48 -0
- package/lib/hsms/HsmsPassiveCommunicator.d.ts.map +1 -0
- package/lib/hsms/HsmsPassiveCommunicator.js +304 -0
- package/lib/hsms/HsmsPassiveCommunicator.js.map +1 -0
- package/lib/hsms/enums/HsmsControlType.d.ts +15 -0
- package/lib/hsms/enums/HsmsControlType.d.ts.map +1 -0
- package/lib/hsms/enums/HsmsControlType.js +17 -0
- package/lib/hsms/enums/HsmsControlType.js.map +1 -0
- package/lib/hsms/enums/RejectReason.d.ts +11 -0
- package/lib/hsms/enums/RejectReason.d.ts.map +1 -0
- package/lib/hsms/enums/RejectReason.js +13 -0
- package/lib/hsms/enums/RejectReason.js.map +1 -0
- package/lib/hsms/enums/SelectStatus.d.ts +11 -0
- package/lib/hsms/enums/SelectStatus.d.ts.map +1 -0
- package/lib/hsms/enums/SelectStatus.js +13 -0
- package/lib/hsms/enums/SelectStatus.js.map +1 -0
- package/lib/index.d.ts +28 -0
- package/lib/index.js +29 -0
- package/lib/secs1/Secs1Communicator.d.ts +51 -0
- package/lib/secs1/Secs1Communicator.d.ts.map +1 -0
- package/lib/secs1/Secs1Communicator.js +342 -0
- package/lib/secs1/Secs1Communicator.js.map +1 -0
- package/lib/secs1/Secs1Message.d.ts +21 -0
- package/lib/secs1/Secs1Message.d.ts.map +1 -0
- package/lib/secs1/Secs1Message.js +77 -0
- package/lib/secs1/Secs1Message.js.map +1 -0
- package/lib/secs1/Secs1MessageBlock.d.ts +23 -0
- package/lib/secs1/Secs1MessageBlock.d.ts.map +1 -0
- package/lib/secs1/Secs1MessageBlock.js +86 -0
- package/lib/secs1/Secs1MessageBlock.js.map +1 -0
- package/lib/secs1/Secs1OnTcpIpActiveCommunicator.d.ts +23 -0
- package/lib/secs1/Secs1OnTcpIpActiveCommunicator.d.ts.map +1 -0
- package/lib/secs1/Secs1OnTcpIpActiveCommunicator.js +82 -0
- package/lib/secs1/Secs1OnTcpIpActiveCommunicator.js.map +1 -0
- package/lib/secs1/Secs1OnTcpIpPassiveCommunicator.d.ts +19 -0
- package/lib/secs1/Secs1OnTcpIpPassiveCommunicator.d.ts.map +1 -0
- package/lib/secs1/Secs1OnTcpIpPassiveCommunicator.js +49 -0
- package/lib/secs1/Secs1OnTcpIpPassiveCommunicator.js.map +1 -0
- package/lib/secs1/Secs1SerialCommunicator.d.ts +18 -0
- package/lib/secs1/Secs1SerialCommunicator.d.ts.map +1 -0
- package/lib/secs1/Secs1SerialCommunicator.js +59 -0
- package/lib/secs1/Secs1SerialCommunicator.js.map +1 -0
- package/lib/sml/SmlParser.d.ts +27 -0
- package/lib/sml/SmlParser.d.ts.map +1 -0
- package/lib/sml/SmlParser.js +184 -0
- package/lib/sml/SmlParser.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Secs2ItemBoolean.js","names":[],"sources":["../../../src/core/secs2item/Secs2ItemBoolean.ts"],"sourcesContent":["import { SecsItemType } from \"../enums/SecsItemType.js\";\nimport { AbstractSecs2Item } from \"./AbstractSecs2Item.js\";\n\nexport class Secs2ItemBoolean extends AbstractSecs2Item<boolean | boolean[]> {\n\tconstructor(value: boolean | boolean[]) {\n\t\tsuper(SecsItemType.BOOLEAN, value);\n\t}\n\n\tget valueAsArray(): boolean[] {\n\t\treturn Array.isArray(this._value) ? this._value : [this._value];\n\t}\n\n\toverride toSml(): string {\n\t\tconst values = this.valueAsArray.map((v) => (v ? \"T\" : \"F\")); // Using T/F for brevity, standard might be TRUE/FALSE\n\t\treturn `<BOOLEAN ${values.join(\" \")}>`;\n\t}\n\n\toverride toBuffer(): Buffer {\n\t\tconst values = this.valueAsArray;\n\t\tconst buffer = Buffer.alloc(values.length);\n\t\tvalues.forEach((v, i) => buffer.writeUInt8(v ? 1 : 0, i)); // Or 0xFF? Python says 0xFF if v else 0x00?\n\t\t// Python code: 0xFF if v else 0x00.\n\t\t// Let's check pysemisecs again.\n\t\t// return bytes([(0xFF if v else 0x00) for v in self._value])\n\t\t// So 0xFF.\n\t\tvalues.forEach((v, i) => buffer.writeUInt8(v ? 0xff : 0x00, i));\n\t\tconst header = this.createHeader(buffer.length);\n\t\treturn Buffer.concat([header, buffer]);\n\t}\n}\n"],"mappings":";;;;AAGA,IAAa,mBAAb,cAAsC,kBAAuC;CAC5E,YAAY,OAA4B;AACvC,QAAM,aAAa,SAAS,MAAM;;CAGnC,IAAI,eAA0B;AAC7B,SAAO,MAAM,QAAQ,KAAK,OAAO,GAAG,KAAK,SAAS,CAAC,KAAK,OAAO;;CAGhE,AAAS,QAAgB;AAExB,SAAO,YADQ,KAAK,aAAa,KAAK,MAAO,IAAI,MAAM,IAAK,CAClC,KAAK,IAAI,CAAC;;CAGrC,AAAS,WAAmB;EAC3B,MAAM,SAAS,KAAK;EACpB,MAAM,SAAS,OAAO,MAAM,OAAO,OAAO;AAC1C,SAAO,SAAS,GAAG,MAAM,OAAO,WAAW,IAAI,IAAI,GAAG,EAAE,CAAC;AAKzD,SAAO,SAAS,GAAG,MAAM,OAAO,WAAW,IAAI,MAAO,GAAM,EAAE,CAAC;EAC/D,MAAM,SAAS,KAAK,aAAa,OAAO,OAAO;AAC/C,SAAO,OAAO,OAAO,CAAC,QAAQ,OAAO,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AbstractSecs2Item } from "./AbstractSecs2Item.js";
|
|
2
|
+
import { Secs2ItemAscii } from "./Secs2ItemAscii.js";
|
|
3
|
+
import { Secs2ItemBinary } from "./Secs2ItemBinary.js";
|
|
4
|
+
import { Secs2ItemBoolean } from "./Secs2ItemBoolean.js";
|
|
5
|
+
import { Secs2ItemNumeric } from "./Secs2ItemNumeric.js";
|
|
6
|
+
import { Secs2ItemList } from "./Secs2ItemList.js";
|
|
7
|
+
|
|
8
|
+
//#region src/core/secs2item/Secs2ItemFactory.d.ts
|
|
9
|
+
declare class Secs2ItemFactory {
|
|
10
|
+
static createAsciiItem(value: string): Secs2ItemAscii;
|
|
11
|
+
static createBooleanItem(...value: boolean[]): Secs2ItemBoolean;
|
|
12
|
+
static createBinaryItem(...value: Buffer[]): Secs2ItemBinary;
|
|
13
|
+
static createListItem(...items: AbstractSecs2Item[]): Secs2ItemList;
|
|
14
|
+
static createU1Item(...value: number[]): Secs2ItemNumeric;
|
|
15
|
+
static createU2Item(...value: number[]): Secs2ItemNumeric;
|
|
16
|
+
static createU4Item(...value: number[]): Secs2ItemNumeric;
|
|
17
|
+
static createU8Item(...value: number[] | bigint[]): Secs2ItemNumeric;
|
|
18
|
+
static createI1Item(...value: number[]): Secs2ItemNumeric;
|
|
19
|
+
static createI2Item(...value: number[]): Secs2ItemNumeric;
|
|
20
|
+
static createI4Item(...value: number[]): Secs2ItemNumeric;
|
|
21
|
+
static createI8Item(...value: number[] | bigint[]): Secs2ItemNumeric;
|
|
22
|
+
static createF4Item(...value: number[]): Secs2ItemNumeric;
|
|
23
|
+
static createF8Item(...value: number[] | bigint[]): Secs2ItemNumeric;
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { Secs2ItemFactory };
|
|
27
|
+
//# sourceMappingURL=Secs2ItemFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Secs2ItemFactory.d.ts","names":[],"sources":["../../../src/core/secs2item/Secs2ItemFactory.ts"],"sourcesContent":[],"mappings":";;;;;;;;cAQa,gBAAA;yCAC2B;EAD3B,OAAA,iBAAgB,CAAA,GAAA,KAAA,EAAA,OAAA,EAAA,CAAA,EAKmB,gBALnB;EACW,OAAA,gBAAA,CAAA,GAAA,KAAA,EAQL,MARK,EAAA,CAAA,EAQM,eARN;EAIQ,OAAA,cAAA,CAAA,GAAA,KAAA,EAQf,iBARe,EAAA,CAAA,EAQO,aARP;EAIb,OAAA,YAAA,CAAA,GAAA,KAAA,EAAA,MAAA,EAAA,CAAA,EAQO,gBARP;EAAW,OAAA,YAAA,CAAA,GAAA,KAAA,EAAA,MAAA,EAAA,CAAA,EAYJ,gBAZI;EAIb,OAAA,YAAA,CAAA,GAAA,KAAA,EAAA,MAAA,EAAA,CAAA,EAYS,gBAZT;EAAsB,OAAA,YAAA,CAAA,GAAA,KAAA,EAAA,MAAA,EAAA,GAAA,MAAA,EAAA,CAAA,EAgBF,gBAhBE;EAIb,OAAA,YAAA,CAAA,GAAA,KAAA,EAAA,MAAA,EAAA,CAAA,EAgBA,gBAhBA;EAIA,OAAA,YAAA,CAAA,GAAA,KAAA,EAAA,MAAA,EAAA,CAAA,EAgBA,gBAhBA;EAIA,OAAA,YAAA,CAAA,GAAA,KAAA,EAAA,MAAA,EAAA,CAAA,EAgBA,gBAhBA;EAIW,OAAA,YAAA,CAAA,GAAA,KAAA,EAAA,MAAA,EAAA,GAAA,MAAA,EAAA,CAAA,EAgBA,gBAhBA;EAIX,OAAA,YAAA,CAAA,GAAA,KAAA,EAAA,MAAA,EAAA,CAAA,EAgBA,gBAhBA;EAIA,OAAA,YAAA,CAAA,GAAA,KAAA,EAAA,MAAA,EAAA,GAAA,MAAA,EAAA,CAAA,EAgBW,gBAhBX"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { SecsItemType } from "../enums/SecsItemType.js";
|
|
2
|
+
import { Secs2ItemNumeric } from "./Secs2ItemNumeric.js";
|
|
3
|
+
import { Secs2ItemAscii } from "./Secs2ItemAscii.js";
|
|
4
|
+
import { Secs2ItemBinary } from "./Secs2ItemBinary.js";
|
|
5
|
+
import { Secs2ItemBoolean } from "./Secs2ItemBoolean.js";
|
|
6
|
+
import { Secs2ItemList } from "./Secs2ItemList.js";
|
|
7
|
+
|
|
8
|
+
//#region src/core/secs2item/Secs2ItemFactory.ts
|
|
9
|
+
var Secs2ItemFactory = class {
|
|
10
|
+
static createAsciiItem(value) {
|
|
11
|
+
return new Secs2ItemAscii(value);
|
|
12
|
+
}
|
|
13
|
+
static createBooleanItem(...value) {
|
|
14
|
+
return new Secs2ItemBoolean(value);
|
|
15
|
+
}
|
|
16
|
+
static createBinaryItem(...value) {
|
|
17
|
+
return new Secs2ItemBinary(Buffer.concat(value));
|
|
18
|
+
}
|
|
19
|
+
static createListItem(...items) {
|
|
20
|
+
return new Secs2ItemList(items);
|
|
21
|
+
}
|
|
22
|
+
static createU1Item(...value) {
|
|
23
|
+
return new Secs2ItemNumeric(SecsItemType.U1, value);
|
|
24
|
+
}
|
|
25
|
+
static createU2Item(...value) {
|
|
26
|
+
return new Secs2ItemNumeric(SecsItemType.U2, value);
|
|
27
|
+
}
|
|
28
|
+
static createU4Item(...value) {
|
|
29
|
+
return new Secs2ItemNumeric(SecsItemType.U4, value);
|
|
30
|
+
}
|
|
31
|
+
static createU8Item(...value) {
|
|
32
|
+
return new Secs2ItemNumeric(SecsItemType.U8, value);
|
|
33
|
+
}
|
|
34
|
+
static createI1Item(...value) {
|
|
35
|
+
return new Secs2ItemNumeric(SecsItemType.I1, value);
|
|
36
|
+
}
|
|
37
|
+
static createI2Item(...value) {
|
|
38
|
+
return new Secs2ItemNumeric(SecsItemType.I2, value);
|
|
39
|
+
}
|
|
40
|
+
static createI4Item(...value) {
|
|
41
|
+
return new Secs2ItemNumeric(SecsItemType.I4, value);
|
|
42
|
+
}
|
|
43
|
+
static createI8Item(...value) {
|
|
44
|
+
return new Secs2ItemNumeric(SecsItemType.I8, value);
|
|
45
|
+
}
|
|
46
|
+
static createF4Item(...value) {
|
|
47
|
+
return new Secs2ItemNumeric(SecsItemType.F4, value);
|
|
48
|
+
}
|
|
49
|
+
static createF8Item(...value) {
|
|
50
|
+
return new Secs2ItemNumeric(SecsItemType.F8, value);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
//#endregion
|
|
55
|
+
export { Secs2ItemFactory };
|
|
56
|
+
//# sourceMappingURL=Secs2ItemFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Secs2ItemFactory.js","names":[],"sources":["../../../src/core/secs2item/Secs2ItemFactory.ts"],"sourcesContent":["import { SecsItemType } from \"../enums/SecsItemType.js\";\nimport { AbstractSecs2Item } from \"./AbstractSecs2Item.js\";\nimport { Secs2ItemNumeric } from \"./Secs2ItemNumeric.js\";\nimport { Secs2ItemAscii } from \"./Secs2ItemAscii.js\";\nimport { Secs2ItemBinary } from \"./Secs2ItemBinary.js\";\nimport { Secs2ItemBoolean } from \"./Secs2ItemBoolean.js\";\nimport { Secs2ItemList } from \"./Secs2ItemList.js\";\n\nexport class Secs2ItemFactory {\n\tstatic createAsciiItem(value: string): Secs2ItemAscii {\n\t\treturn new Secs2ItemAscii(value);\n\t}\n\n\tstatic createBooleanItem(...value: boolean[]): Secs2ItemBoolean {\n\t\treturn new Secs2ItemBoolean(value);\n\t}\n\n\tstatic createBinaryItem(...value: Buffer[]): Secs2ItemBinary {\n\t\treturn new Secs2ItemBinary(Buffer.concat(value));\n\t}\n\n\tstatic createListItem(...items: AbstractSecs2Item[]): Secs2ItemList {\n\t\treturn new Secs2ItemList(items);\n\t}\n\n\tstatic createU1Item(...value: number[]): Secs2ItemNumeric {\n\t\treturn new Secs2ItemNumeric(SecsItemType.U1, value);\n\t}\n\n\tstatic createU2Item(...value: number[]): Secs2ItemNumeric {\n\t\treturn new Secs2ItemNumeric(SecsItemType.U2, value);\n\t}\n\n\tstatic createU4Item(...value: number[]): Secs2ItemNumeric {\n\t\treturn new Secs2ItemNumeric(SecsItemType.U4, value);\n\t}\n\n\tstatic createU8Item(...value: number[] | bigint[]): Secs2ItemNumeric {\n\t\treturn new Secs2ItemNumeric(SecsItemType.U8, value);\n\t}\n\n\tstatic createI1Item(...value: number[]): Secs2ItemNumeric {\n\t\treturn new Secs2ItemNumeric(SecsItemType.I1, value);\n\t}\n\n\tstatic createI2Item(...value: number[]): Secs2ItemNumeric {\n\t\treturn new Secs2ItemNumeric(SecsItemType.I2, value);\n\t}\n\n\tstatic createI4Item(...value: number[]): Secs2ItemNumeric {\n\t\treturn new Secs2ItemNumeric(SecsItemType.I4, value);\n\t}\n\n\tstatic createI8Item(...value: number[] | bigint[]): Secs2ItemNumeric {\n\t\treturn new Secs2ItemNumeric(SecsItemType.I8, value);\n\t}\n\n\tstatic createF4Item(...value: number[]): Secs2ItemNumeric {\n\t\treturn new Secs2ItemNumeric(SecsItemType.F4, value);\n\t}\n\n\tstatic createF8Item(...value: number[] | bigint[]): Secs2ItemNumeric {\n\t\treturn new Secs2ItemNumeric(SecsItemType.F8, value);\n\t}\n}\n"],"mappings":";;;;;;;;AAQA,IAAa,mBAAb,MAA8B;CAC7B,OAAO,gBAAgB,OAA+B;AACrD,SAAO,IAAI,eAAe,MAAM;;CAGjC,OAAO,kBAAkB,GAAG,OAAoC;AAC/D,SAAO,IAAI,iBAAiB,MAAM;;CAGnC,OAAO,iBAAiB,GAAG,OAAkC;AAC5D,SAAO,IAAI,gBAAgB,OAAO,OAAO,MAAM,CAAC;;CAGjD,OAAO,eAAe,GAAG,OAA2C;AACnE,SAAO,IAAI,cAAc,MAAM;;CAGhC,OAAO,aAAa,GAAG,OAAmC;AACzD,SAAO,IAAI,iBAAiB,aAAa,IAAI,MAAM;;CAGpD,OAAO,aAAa,GAAG,OAAmC;AACzD,SAAO,IAAI,iBAAiB,aAAa,IAAI,MAAM;;CAGpD,OAAO,aAAa,GAAG,OAAmC;AACzD,SAAO,IAAI,iBAAiB,aAAa,IAAI,MAAM;;CAGpD,OAAO,aAAa,GAAG,OAA8C;AACpE,SAAO,IAAI,iBAAiB,aAAa,IAAI,MAAM;;CAGpD,OAAO,aAAa,GAAG,OAAmC;AACzD,SAAO,IAAI,iBAAiB,aAAa,IAAI,MAAM;;CAGpD,OAAO,aAAa,GAAG,OAAmC;AACzD,SAAO,IAAI,iBAAiB,aAAa,IAAI,MAAM;;CAGpD,OAAO,aAAa,GAAG,OAAmC;AACzD,SAAO,IAAI,iBAAiB,aAAa,IAAI,MAAM;;CAGpD,OAAO,aAAa,GAAG,OAA8C;AACpE,SAAO,IAAI,iBAAiB,aAAa,IAAI,MAAM;;CAGpD,OAAO,aAAa,GAAG,OAAmC;AACzD,SAAO,IAAI,iBAAiB,aAAa,IAAI,MAAM;;CAGpD,OAAO,aAAa,GAAG,OAA8C;AACpE,SAAO,IAAI,iBAAiB,aAAa,IAAI,MAAM"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AbstractSecs2Item } from "./AbstractSecs2Item.js";
|
|
2
|
+
|
|
3
|
+
//#region src/core/secs2item/Secs2ItemList.d.ts
|
|
4
|
+
declare class Secs2ItemList extends AbstractSecs2Item<AbstractSecs2Item[]> {
|
|
5
|
+
constructor(value: AbstractSecs2Item[]);
|
|
6
|
+
toSml(): string;
|
|
7
|
+
toBuffer(): Buffer;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { Secs2ItemList };
|
|
11
|
+
//# sourceMappingURL=Secs2ItemList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Secs2ItemList.d.ts","names":[],"sources":["../../../src/core/secs2item/Secs2ItemList.ts"],"sourcesContent":[],"mappings":";;;cAGa,aAAA,SAAsB,kBAAkB;qBACjC;EADP,KAAA,CAAA,CAAA,EAAA,MAAA;EAAwC,QAAA,CAAA,CAAA,EAiB/B,MAjB+B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AbstractSecs2Item } from "./AbstractSecs2Item.js";
|
|
2
|
+
import { SecsItemType } from "../enums/SecsItemType.js";
|
|
3
|
+
|
|
4
|
+
//#region src/core/secs2item/Secs2ItemList.ts
|
|
5
|
+
var Secs2ItemList = class extends AbstractSecs2Item {
|
|
6
|
+
constructor(value) {
|
|
7
|
+
super(SecsItemType.L, value);
|
|
8
|
+
}
|
|
9
|
+
toSml() {
|
|
10
|
+
if (this._value.length === 0) return "<L [0] >";
|
|
11
|
+
const lines = [`<L [${this._value.length.toString()}] `];
|
|
12
|
+
for (const item of this._value) lines.push(" " + item.toSml().replace(/\n/g, "\n "));
|
|
13
|
+
lines.push(">");
|
|
14
|
+
return lines.join("\n");
|
|
15
|
+
}
|
|
16
|
+
toBuffer() {
|
|
17
|
+
const buffers = this._value.map((item) => item.toBuffer());
|
|
18
|
+
const valueBuffer = Buffer.concat(buffers);
|
|
19
|
+
const header = this.createHeader(this._value.length);
|
|
20
|
+
return Buffer.concat([header, valueBuffer]);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
//#endregion
|
|
25
|
+
export { Secs2ItemList };
|
|
26
|
+
//# sourceMappingURL=Secs2ItemList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Secs2ItemList.js","names":[],"sources":["../../../src/core/secs2item/Secs2ItemList.ts"],"sourcesContent":["import { SecsItemType } from \"../enums/SecsItemType.js\";\nimport { AbstractSecs2Item } from \"./AbstractSecs2Item.js\";\n\nexport class Secs2ItemList extends AbstractSecs2Item<AbstractSecs2Item[]> {\n\tconstructor(value: AbstractSecs2Item[]) {\n\t\tsuper(SecsItemType.L, value);\n\t}\n\n\toverride toSml(): string {\n\t\tif (this._value.length === 0) {\n\t\t\treturn \"<L [0] >\";\n\t\t}\n\t\tconst lines = [`<L [${this._value.length.toString()}] `];\n\t\tfor (const item of this._value) {\n\t\t\tlines.push(\" \" + item.toSml().replace(/\\n/g, \"\\n \"));\n\t\t}\n\t\tlines.push(\">\");\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\toverride toBuffer(): Buffer {\n\t\tconst buffers = this._value.map((item) => item.toBuffer());\n\t\tconst valueBuffer = Buffer.concat(buffers);\n\t\t// For List, length is number of items, not byte length\n\t\tconst header = this.createHeader(this._value.length);\n\t\treturn Buffer.concat([header, valueBuffer]);\n\t}\n}\n"],"mappings":";;;;AAGA,IAAa,gBAAb,cAAmC,kBAAuC;CACzE,YAAY,OAA4B;AACvC,QAAM,aAAa,GAAG,MAAM;;CAG7B,AAAS,QAAgB;AACxB,MAAI,KAAK,OAAO,WAAW,EAC1B,QAAO;EAER,MAAM,QAAQ,CAAC,OAAO,KAAK,OAAO,OAAO,UAAU,CAAC,IAAI;AACxD,OAAK,MAAM,QAAQ,KAAK,OACvB,OAAM,KAAK,OAAO,KAAK,OAAO,CAAC,QAAQ,OAAO,OAAO,CAAC;AAEvD,QAAM,KAAK,IAAI;AACf,SAAO,MAAM,KAAK,KAAK;;CAGxB,AAAS,WAAmB;EAC3B,MAAM,UAAU,KAAK,OAAO,KAAK,SAAS,KAAK,UAAU,CAAC;EAC1D,MAAM,cAAc,OAAO,OAAO,QAAQ;EAE1C,MAAM,SAAS,KAAK,aAAa,KAAK,OAAO,OAAO;AACpD,SAAO,OAAO,OAAO,CAAC,QAAQ,YAAY,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SecsItemType } from "../enums/SecsItemType.js";
|
|
2
|
+
import { AbstractSecs2Item } from "./AbstractSecs2Item.js";
|
|
3
|
+
|
|
4
|
+
//#region src/core/secs2item/Secs2ItemNumeric.d.ts
|
|
5
|
+
declare class Secs2ItemNumeric extends AbstractSecs2Item<number | number[] | bigint | bigint[]> {
|
|
6
|
+
constructor(type: SecsItemType, value: number | number[] | bigint | bigint[]);
|
|
7
|
+
get valueAsArray(): (number | bigint)[];
|
|
8
|
+
toSml(): string;
|
|
9
|
+
toBuffer(): Buffer;
|
|
10
|
+
static fromTypeBuffer(type: SecsItemType, buffer: Buffer): Secs2ItemNumeric;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { Secs2ItemNumeric };
|
|
14
|
+
//# sourceMappingURL=Secs2ItemNumeric.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Secs2ItemNumeric.d.ts","names":[],"sources":["../../../src/core/secs2item/Secs2ItemNumeric.ts"],"sourcesContent":[],"mappings":";;;;cAGa,gBAAA,SAAyB;oBAI9B;EAJK,IAAA,YAAA,CAAA,CAAA,EAAiB,CAAA,MAAA,GAAA,MAAA,CAAA,EAAA;EAItB,KAAA,CAAA,CAAA,EAAA,MAAA;EAgBc,QAAA,CAAA,CAAA,EAAA,MAAA;EA0DO,OAAA,cAAA,CAAA,IAAA,EAAA,YAAA,EAAA,MAAA,EAAsB,MAAtB,CAAA,EAA+B,gBAA/B"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { AbstractSecs2Item } from "./AbstractSecs2Item.js";
|
|
2
|
+
import { SecsItemType } from "../enums/SecsItemType.js";
|
|
3
|
+
|
|
4
|
+
//#region src/core/secs2item/Secs2ItemNumeric.ts
|
|
5
|
+
var Secs2ItemNumeric = class Secs2ItemNumeric extends AbstractSecs2Item {
|
|
6
|
+
constructor(type, value) {
|
|
7
|
+
super(type, value);
|
|
8
|
+
}
|
|
9
|
+
get valueAsArray() {
|
|
10
|
+
return Array.isArray(this._value) ? this._value : [this._value];
|
|
11
|
+
}
|
|
12
|
+
toSml() {
|
|
13
|
+
const typeName = SecsItemType[this.type];
|
|
14
|
+
const values = this.valueAsArray.map((v) => v.toString());
|
|
15
|
+
return `<${typeName} [${values.length}] ${values.join(" ")}>`;
|
|
16
|
+
}
|
|
17
|
+
toBuffer() {
|
|
18
|
+
const values = this.valueAsArray;
|
|
19
|
+
let elementSize = 0;
|
|
20
|
+
let writeFunc;
|
|
21
|
+
switch (this.type) {
|
|
22
|
+
case SecsItemType.I1:
|
|
23
|
+
elementSize = 1;
|
|
24
|
+
writeFunc = (v, b, o) => b.writeInt8(Number(v), o);
|
|
25
|
+
break;
|
|
26
|
+
case SecsItemType.I2:
|
|
27
|
+
elementSize = 2;
|
|
28
|
+
writeFunc = (v, b, o) => b.writeInt16BE(Number(v), o);
|
|
29
|
+
break;
|
|
30
|
+
case SecsItemType.I4:
|
|
31
|
+
elementSize = 4;
|
|
32
|
+
writeFunc = (v, b, o) => b.writeInt32BE(Number(v), o);
|
|
33
|
+
break;
|
|
34
|
+
case SecsItemType.I8:
|
|
35
|
+
elementSize = 8;
|
|
36
|
+
writeFunc = (v, b, o) => b.writeBigInt64BE(BigInt(v), o);
|
|
37
|
+
break;
|
|
38
|
+
case SecsItemType.U1:
|
|
39
|
+
elementSize = 1;
|
|
40
|
+
writeFunc = (v, b, o) => b.writeUInt8(Number(v), o);
|
|
41
|
+
break;
|
|
42
|
+
case SecsItemType.U2:
|
|
43
|
+
elementSize = 2;
|
|
44
|
+
writeFunc = (v, b, o) => b.writeUInt16BE(Number(v), o);
|
|
45
|
+
break;
|
|
46
|
+
case SecsItemType.U4:
|
|
47
|
+
elementSize = 4;
|
|
48
|
+
writeFunc = (v, b, o) => b.writeUInt32BE(Number(v), o);
|
|
49
|
+
break;
|
|
50
|
+
case SecsItemType.U8:
|
|
51
|
+
elementSize = 8;
|
|
52
|
+
writeFunc = (v, b, o) => b.writeBigUInt64BE(BigInt(v), o);
|
|
53
|
+
break;
|
|
54
|
+
case SecsItemType.F4:
|
|
55
|
+
elementSize = 4;
|
|
56
|
+
writeFunc = (v, b, o) => b.writeFloatBE(Number(v), o);
|
|
57
|
+
break;
|
|
58
|
+
case SecsItemType.F8:
|
|
59
|
+
elementSize = 8;
|
|
60
|
+
writeFunc = (v, b, o) => b.writeDoubleBE(Number(v), o);
|
|
61
|
+
break;
|
|
62
|
+
default: throw new Error(`Unsupported numeric type: ${this.type.toString()}`);
|
|
63
|
+
}
|
|
64
|
+
const buffer = Buffer.alloc(values.length * elementSize);
|
|
65
|
+
values.forEach((v, i) => {
|
|
66
|
+
writeFunc(v, buffer, i * elementSize);
|
|
67
|
+
});
|
|
68
|
+
const header = this.createHeader(buffer.length);
|
|
69
|
+
return Buffer.concat([header, buffer]);
|
|
70
|
+
}
|
|
71
|
+
static fromTypeBuffer(type, buffer) {
|
|
72
|
+
let elementSize = 0;
|
|
73
|
+
let readFunc;
|
|
74
|
+
switch (type) {
|
|
75
|
+
case SecsItemType.I1:
|
|
76
|
+
elementSize = 1;
|
|
77
|
+
readFunc = (b, o) => b.readInt8(o);
|
|
78
|
+
break;
|
|
79
|
+
case SecsItemType.I2:
|
|
80
|
+
elementSize = 2;
|
|
81
|
+
readFunc = (b, o) => b.readInt16BE(o);
|
|
82
|
+
break;
|
|
83
|
+
case SecsItemType.I4:
|
|
84
|
+
elementSize = 4;
|
|
85
|
+
readFunc = (b, o) => b.readInt32BE(o);
|
|
86
|
+
break;
|
|
87
|
+
case SecsItemType.I8:
|
|
88
|
+
elementSize = 8;
|
|
89
|
+
readFunc = (b, o) => b.readBigInt64BE(o);
|
|
90
|
+
break;
|
|
91
|
+
case SecsItemType.U1:
|
|
92
|
+
elementSize = 1;
|
|
93
|
+
readFunc = (b, o) => b.readUInt8(o);
|
|
94
|
+
break;
|
|
95
|
+
case SecsItemType.U2:
|
|
96
|
+
elementSize = 2;
|
|
97
|
+
readFunc = (b, o) => b.readUInt16BE(o);
|
|
98
|
+
break;
|
|
99
|
+
case SecsItemType.U4:
|
|
100
|
+
elementSize = 4;
|
|
101
|
+
readFunc = (b, o) => b.readUInt32BE(o);
|
|
102
|
+
break;
|
|
103
|
+
case SecsItemType.U8:
|
|
104
|
+
elementSize = 8;
|
|
105
|
+
readFunc = (b, o) => b.readBigUInt64BE(o);
|
|
106
|
+
break;
|
|
107
|
+
case SecsItemType.F4:
|
|
108
|
+
elementSize = 4;
|
|
109
|
+
readFunc = (b, o) => b.readFloatBE(o);
|
|
110
|
+
break;
|
|
111
|
+
case SecsItemType.F8:
|
|
112
|
+
elementSize = 8;
|
|
113
|
+
readFunc = (b, o) => b.readDoubleBE(o);
|
|
114
|
+
break;
|
|
115
|
+
default: throw new Error(`Unsupported numeric type: ${type.toString()}`);
|
|
116
|
+
}
|
|
117
|
+
const count = buffer.length / elementSize;
|
|
118
|
+
if (!Number.isInteger(count)) throw new Error(`Buffer length ${buffer.length.toString()} is not multiple of element size ${elementSize.toString()}`);
|
|
119
|
+
const values = [];
|
|
120
|
+
for (let i = 0; i < count; i++) values.push(readFunc(buffer, i * elementSize));
|
|
121
|
+
if (type === SecsItemType.I8 || type === SecsItemType.U8) return new Secs2ItemNumeric(type, values.length === 1 ? values[0] : values);
|
|
122
|
+
return new Secs2ItemNumeric(type, values.length === 1 ? values[0] : values);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
//#endregion
|
|
127
|
+
export { Secs2ItemNumeric };
|
|
128
|
+
//# sourceMappingURL=Secs2ItemNumeric.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Secs2ItemNumeric.js","names":["writeFunc: (val: number | bigint, buf: Buffer, offset: number) => void","readFunc: (buf: Buffer, offset: number) => number | bigint","values: (number | bigint)[]"],"sources":["../../../src/core/secs2item/Secs2ItemNumeric.ts"],"sourcesContent":["import { SecsItemType } from \"../enums/SecsItemType.js\";\nimport { AbstractSecs2Item } from \"./AbstractSecs2Item.js\";\n\nexport class Secs2ItemNumeric extends AbstractSecs2Item<\n\tnumber | number[] | bigint | bigint[]\n> {\n\tconstructor(\n\t\ttype: SecsItemType,\n\t\tvalue: number | number[] | bigint | bigint[],\n\t) {\n\t\tsuper(type, value);\n\t}\n\n\tget valueAsArray(): (number | bigint)[] {\n\t\treturn Array.isArray(this._value) ? this._value : [this._value];\n\t}\n\n\toverride toSml(): string {\n\t\tconst typeName = SecsItemType[this.type];\n\t\tconst values = this.valueAsArray.map((v) => v.toString());\n\t\treturn `<${typeName} [${values.length}] ${values.join(\" \")}>`;\n\t}\n\n\toverride toBuffer(): Buffer {\n\t\tconst values = this.valueAsArray;\n\t\tlet elementSize = 0;\n\t\tlet writeFunc: (val: number | bigint, buf: Buffer, offset: number) => void;\n\n\t\tswitch (this.type) {\n\t\t\tcase SecsItemType.I1:\n\t\t\t\telementSize = 1;\n\t\t\t\twriteFunc = (v, b, o) => b.writeInt8(Number(v), o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.I2:\n\t\t\t\telementSize = 2;\n\t\t\t\twriteFunc = (v, b, o) => b.writeInt16BE(Number(v), o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.I4:\n\t\t\t\telementSize = 4;\n\t\t\t\twriteFunc = (v, b, o) => b.writeInt32BE(Number(v), o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.I8:\n\t\t\t\telementSize = 8;\n\t\t\t\twriteFunc = (v, b, o) => b.writeBigInt64BE(BigInt(v), o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.U1:\n\t\t\t\telementSize = 1;\n\t\t\t\twriteFunc = (v, b, o) => b.writeUInt8(Number(v), o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.U2:\n\t\t\t\telementSize = 2;\n\t\t\t\twriteFunc = (v, b, o) => b.writeUInt16BE(Number(v), o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.U4:\n\t\t\t\telementSize = 4;\n\t\t\t\twriteFunc = (v, b, o) => b.writeUInt32BE(Number(v), o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.U8:\n\t\t\t\telementSize = 8;\n\t\t\t\twriteFunc = (v, b, o) => b.writeBigUInt64BE(BigInt(v), o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.F4:\n\t\t\t\telementSize = 4;\n\t\t\t\twriteFunc = (v, b, o) => b.writeFloatBE(Number(v), o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.F8:\n\t\t\t\telementSize = 8;\n\t\t\t\twriteFunc = (v, b, o) => b.writeDoubleBE(Number(v), o);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported numeric type: ${this.type.toString()}`);\n\t\t}\n\n\t\tconst buffer = Buffer.alloc(values.length * elementSize);\n\t\tvalues.forEach((v, i) => {\n\t\t\twriteFunc(v, buffer, i * elementSize);\n\t\t});\n\t\tconst header = this.createHeader(buffer.length);\n\t\treturn Buffer.concat([header, buffer]);\n\t}\n\n\tstatic fromTypeBuffer(type: SecsItemType, buffer: Buffer): Secs2ItemNumeric {\n\t\tlet elementSize = 0;\n\t\tlet readFunc: (buf: Buffer, offset: number) => number | bigint;\n\n\t\tswitch (type) {\n\t\t\tcase SecsItemType.I1:\n\t\t\t\telementSize = 1;\n\t\t\t\treadFunc = (b, o) => b.readInt8(o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.I2:\n\t\t\t\telementSize = 2;\n\t\t\t\treadFunc = (b, o) => b.readInt16BE(o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.I4:\n\t\t\t\telementSize = 4;\n\t\t\t\treadFunc = (b, o) => b.readInt32BE(o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.I8:\n\t\t\t\telementSize = 8;\n\t\t\t\treadFunc = (b, o) => b.readBigInt64BE(o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.U1:\n\t\t\t\telementSize = 1;\n\t\t\t\treadFunc = (b, o) => b.readUInt8(o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.U2:\n\t\t\t\telementSize = 2;\n\t\t\t\treadFunc = (b, o) => b.readUInt16BE(o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.U4:\n\t\t\t\telementSize = 4;\n\t\t\t\treadFunc = (b, o) => b.readUInt32BE(o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.U8:\n\t\t\t\telementSize = 8;\n\t\t\t\treadFunc = (b, o) => b.readBigUInt64BE(o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.F4:\n\t\t\t\telementSize = 4;\n\t\t\t\treadFunc = (b, o) => b.readFloatBE(o);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.F8:\n\t\t\t\telementSize = 8;\n\t\t\t\treadFunc = (b, o) => b.readDoubleBE(o);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported numeric type: ${type.toString()}`);\n\t\t}\n\n\t\tconst count = buffer.length / elementSize;\n\t\tif (!Number.isInteger(count)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Buffer length ${buffer.length.toString()} is not multiple of element size ${elementSize.toString()}`,\n\t\t\t);\n\t\t}\n\n\t\tconst values: (number | bigint)[] = [];\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tvalues.push(readFunc(buffer, i * elementSize));\n\t\t}\n\n\t\tif (type === SecsItemType.I8 || type === SecsItemType.U8) {\n\t\t\treturn new Secs2ItemNumeric(\n\t\t\t\ttype,\n\t\t\t\tvalues.length === 1\n\t\t\t\t\t? (values[0] as bigint)\n\t\t\t\t\t: (values as unknown as bigint[]),\n\t\t\t);\n\t\t}\n\n\t\treturn new Secs2ItemNumeric(\n\t\t\ttype,\n\t\t\tvalues.length === 1 ? (values[0] as number) : (values as number[]),\n\t\t);\n\t}\n}\n"],"mappings":";;;;AAGA,IAAa,mBAAb,MAAa,yBAAyB,kBAEpC;CACD,YACC,MACA,OACC;AACD,QAAM,MAAM,MAAM;;CAGnB,IAAI,eAAoC;AACvC,SAAO,MAAM,QAAQ,KAAK,OAAO,GAAG,KAAK,SAAS,CAAC,KAAK,OAAO;;CAGhE,AAAS,QAAgB;EACxB,MAAM,WAAW,aAAa,KAAK;EACnC,MAAM,SAAS,KAAK,aAAa,KAAK,MAAM,EAAE,UAAU,CAAC;AACzD,SAAO,IAAI,SAAS,IAAI,OAAO,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC;;CAG5D,AAAS,WAAmB;EAC3B,MAAM,SAAS,KAAK;EACpB,IAAI,cAAc;EAClB,IAAIA;AAEJ,UAAQ,KAAK,MAAb;GACC,KAAK,aAAa;AACjB,kBAAc;AACd,iBAAa,GAAG,GAAG,MAAM,EAAE,UAAU,OAAO,EAAE,EAAE,EAAE;AAClD;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,iBAAa,GAAG,GAAG,MAAM,EAAE,aAAa,OAAO,EAAE,EAAE,EAAE;AACrD;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,iBAAa,GAAG,GAAG,MAAM,EAAE,aAAa,OAAO,EAAE,EAAE,EAAE;AACrD;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,iBAAa,GAAG,GAAG,MAAM,EAAE,gBAAgB,OAAO,EAAE,EAAE,EAAE;AACxD;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,iBAAa,GAAG,GAAG,MAAM,EAAE,WAAW,OAAO,EAAE,EAAE,EAAE;AACnD;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,iBAAa,GAAG,GAAG,MAAM,EAAE,cAAc,OAAO,EAAE,EAAE,EAAE;AACtD;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,iBAAa,GAAG,GAAG,MAAM,EAAE,cAAc,OAAO,EAAE,EAAE,EAAE;AACtD;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,iBAAa,GAAG,GAAG,MAAM,EAAE,iBAAiB,OAAO,EAAE,EAAE,EAAE;AACzD;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,iBAAa,GAAG,GAAG,MAAM,EAAE,aAAa,OAAO,EAAE,EAAE,EAAE;AACrD;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,iBAAa,GAAG,GAAG,MAAM,EAAE,cAAc,OAAO,EAAE,EAAE,EAAE;AACtD;GACD,QACC,OAAM,IAAI,MAAM,6BAA6B,KAAK,KAAK,UAAU,GAAG;;EAGtE,MAAM,SAAS,OAAO,MAAM,OAAO,SAAS,YAAY;AACxD,SAAO,SAAS,GAAG,MAAM;AACxB,aAAU,GAAG,QAAQ,IAAI,YAAY;IACpC;EACF,MAAM,SAAS,KAAK,aAAa,OAAO,OAAO;AAC/C,SAAO,OAAO,OAAO,CAAC,QAAQ,OAAO,CAAC;;CAGvC,OAAO,eAAe,MAAoB,QAAkC;EAC3E,IAAI,cAAc;EAClB,IAAIC;AAEJ,UAAQ,MAAR;GACC,KAAK,aAAa;AACjB,kBAAc;AACd,gBAAY,GAAG,MAAM,EAAE,SAAS,EAAE;AAClC;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,gBAAY,GAAG,MAAM,EAAE,YAAY,EAAE;AACrC;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,gBAAY,GAAG,MAAM,EAAE,YAAY,EAAE;AACrC;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,gBAAY,GAAG,MAAM,EAAE,eAAe,EAAE;AACxC;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,gBAAY,GAAG,MAAM,EAAE,UAAU,EAAE;AACnC;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,gBAAY,GAAG,MAAM,EAAE,aAAa,EAAE;AACtC;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,gBAAY,GAAG,MAAM,EAAE,aAAa,EAAE;AACtC;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,gBAAY,GAAG,MAAM,EAAE,gBAAgB,EAAE;AACzC;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,gBAAY,GAAG,MAAM,EAAE,YAAY,EAAE;AACrC;GACD,KAAK,aAAa;AACjB,kBAAc;AACd,gBAAY,GAAG,MAAM,EAAE,aAAa,EAAE;AACtC;GACD,QACC,OAAM,IAAI,MAAM,6BAA6B,KAAK,UAAU,GAAG;;EAGjE,MAAM,QAAQ,OAAO,SAAS;AAC9B,MAAI,CAAC,OAAO,UAAU,MAAM,CAC3B,OAAM,IAAI,MACT,iBAAiB,OAAO,OAAO,UAAU,CAAC,mCAAmC,YAAY,UAAU,GACnG;EAGF,MAAMC,SAA8B,EAAE;AACtC,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IAC1B,QAAO,KAAK,SAAS,QAAQ,IAAI,YAAY,CAAC;AAG/C,MAAI,SAAS,aAAa,MAAM,SAAS,aAAa,GACrD,QAAO,IAAI,iBACV,MACA,OAAO,WAAW,IACd,OAAO,KACP,OACJ;AAGF,SAAO,IAAI,iBACV,MACA,OAAO,WAAW,IAAK,OAAO,KAAiB,OAC/C"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AbstractSecs2Item } from "./AbstractSecs2Item.js";
|
|
2
|
+
|
|
3
|
+
//#region src/core/secs2item/Secs2ItemParser.d.ts
|
|
4
|
+
declare class Secs2ItemParser {
|
|
5
|
+
static fromBuffer(buffer: Buffer): {
|
|
6
|
+
item: AbstractSecs2Item;
|
|
7
|
+
consumed: number;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { Secs2ItemParser };
|
|
12
|
+
//# sourceMappingURL=Secs2ItemParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Secs2ItemParser.d.ts","names":[],"sources":["../../../src/core/secs2item/Secs2ItemParser.ts"],"sourcesContent":[],"mappings":";;;cAKa,eAAA;4BACc;IADd,IAAA,EAEL,iBAFoB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { SecsItemType } from "../enums/SecsItemType.js";
|
|
2
|
+
import { Secs2ItemNumeric } from "./Secs2ItemNumeric.js";
|
|
3
|
+
import { Secs2ItemFactory } from "./Secs2ItemFactory.js";
|
|
4
|
+
|
|
5
|
+
//#region src/core/secs2item/Secs2ItemParser.ts
|
|
6
|
+
var Secs2ItemParser = class Secs2ItemParser {
|
|
7
|
+
static fromBuffer(buffer) {
|
|
8
|
+
if (buffer.length === 0) throw new Error("Empty buffer");
|
|
9
|
+
const headerByte = buffer.readUInt8(0);
|
|
10
|
+
const itemType = headerByte & 252;
|
|
11
|
+
const lengthBytes = headerByte & 3;
|
|
12
|
+
let length = 0;
|
|
13
|
+
if (lengthBytes === 1) length = buffer.readUInt8(1);
|
|
14
|
+
else if (lengthBytes === 2) length = buffer.readUInt16BE(1);
|
|
15
|
+
else if (lengthBytes === 3) length = buffer.readUIntBE(1, 3);
|
|
16
|
+
else throw new Error(`Invalid length bytes count: ${lengthBytes.toString()}`);
|
|
17
|
+
const valueStart = 1 + lengthBytes;
|
|
18
|
+
if (itemType === SecsItemType.L) {
|
|
19
|
+
const items = [];
|
|
20
|
+
let offset = valueStart;
|
|
21
|
+
const numItems = length;
|
|
22
|
+
for (let i = 0; i < numItems; i++) {
|
|
23
|
+
if (offset >= buffer.length) throw new Error(`Insufficient buffer for List items. Expected ${numItems} items, got incomplete data.`);
|
|
24
|
+
const result = Secs2ItemParser.fromBuffer(buffer.subarray(offset));
|
|
25
|
+
items.push(result.item);
|
|
26
|
+
offset += result.consumed;
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
item: Secs2ItemFactory.createListItem(...items),
|
|
30
|
+
consumed: offset
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const valueEnd = valueStart + length;
|
|
34
|
+
if (buffer.length < valueEnd) throw new Error(`Insufficient buffer length. Expected ${valueEnd.toString()}, got ${buffer.length.toString()}`);
|
|
35
|
+
const valueBuffer = buffer.subarray(valueStart, valueEnd);
|
|
36
|
+
const consumed = valueEnd;
|
|
37
|
+
let item;
|
|
38
|
+
switch (itemType) {
|
|
39
|
+
case SecsItemType.A:
|
|
40
|
+
item = Secs2ItemFactory.createAsciiItem(valueBuffer.toString("ascii"));
|
|
41
|
+
break;
|
|
42
|
+
case SecsItemType.B:
|
|
43
|
+
item = Secs2ItemFactory.createBinaryItem(valueBuffer);
|
|
44
|
+
break;
|
|
45
|
+
case SecsItemType.BOOLEAN: {
|
|
46
|
+
const bools = [];
|
|
47
|
+
for (const byte of valueBuffer) bools.push(byte !== 0);
|
|
48
|
+
item = Secs2ItemFactory.createBooleanItem(...bools);
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
case SecsItemType.I1:
|
|
52
|
+
case SecsItemType.I2:
|
|
53
|
+
case SecsItemType.I4:
|
|
54
|
+
case SecsItemType.I8:
|
|
55
|
+
case SecsItemType.U1:
|
|
56
|
+
case SecsItemType.U2:
|
|
57
|
+
case SecsItemType.U4:
|
|
58
|
+
case SecsItemType.U8:
|
|
59
|
+
case SecsItemType.F4:
|
|
60
|
+
case SecsItemType.F8:
|
|
61
|
+
item = Secs2ItemNumeric.fromTypeBuffer(itemType, valueBuffer);
|
|
62
|
+
break;
|
|
63
|
+
default: throw new Error(`Unknown item type: 0x${itemType.toString(16)}`);
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
item,
|
|
67
|
+
consumed
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
//#endregion
|
|
73
|
+
export { Secs2ItemParser };
|
|
74
|
+
//# sourceMappingURL=Secs2ItemParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Secs2ItemParser.js","names":["items: AbstractSecs2Item[]","item: AbstractSecs2Item"],"sources":["../../../src/core/secs2item/Secs2ItemParser.ts"],"sourcesContent":["import { SecsItemType } from \"../enums/SecsItemType.js\";\nimport { AbstractSecs2Item } from \"./AbstractSecs2Item.js\";\nimport { Secs2ItemFactory } from \"./Secs2ItemFactory.js\";\nimport { Secs2ItemNumeric } from \"./Secs2ItemNumeric.js\";\n\nexport class Secs2ItemParser {\n\tstatic fromBuffer(buffer: Buffer): {\n\t\titem: AbstractSecs2Item;\n\t\tconsumed: number;\n\t} {\n\t\tif (buffer.length === 0) {\n\t\t\tthrow new Error(\"Empty buffer\");\n\t\t}\n\n\t\tconst headerByte = buffer.readUInt8(0);\n\t\tconst itemType = (headerByte & 0xfc) as SecsItemType; // Clear last 2 bits\n\t\tconst lengthBytes = headerByte & 0x03;\n\n\t\tlet length = 0;\n\t\tif (lengthBytes === 1) {\n\t\t\tlength = buffer.readUInt8(1);\n\t\t} else if (lengthBytes === 2) {\n\t\t\tlength = buffer.readUInt16BE(1);\n\t\t} else if (lengthBytes === 3) {\n\t\t\tlength = buffer.readUIntBE(1, 3);\n\t\t} else {\n\t\t\tthrow new Error(`Invalid length bytes count: ${lengthBytes.toString()}`);\n\t\t}\n\n\t\tconst valueStart = 1 + lengthBytes;\n\n\t\t// Handle List items differently: length is number of items, not byte length\n\t\tif (itemType === SecsItemType.L) {\n\t\t\tconst items: AbstractSecs2Item[] = [];\n\t\t\tlet offset = valueStart;\n\t\t\tconst numItems = length;\n\n\t\t\tfor (let i = 0; i < numItems; i++) {\n\t\t\t\tif (offset >= buffer.length) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Insufficient buffer for List items. Expected ${numItems} items, got incomplete data.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst result = Secs2ItemParser.fromBuffer(buffer.subarray(offset));\n\t\t\t\titems.push(result.item);\n\t\t\t\toffset += result.consumed;\n\t\t\t}\n\n\t\t\tconst item = Secs2ItemFactory.createListItem(...items);\n\t\t\treturn { item, consumed: offset };\n\t\t}\n\n\t\t// For other types, length is byte length\n\t\tconst valueEnd = valueStart + length;\n\n\t\tif (buffer.length < valueEnd) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient buffer length. Expected ${valueEnd.toString()}, got ${buffer.length.toString()}`,\n\t\t\t);\n\t\t}\n\n\t\tconst valueBuffer = buffer.subarray(valueStart, valueEnd);\n\t\tconst consumed = valueEnd;\n\n\t\tlet item: AbstractSecs2Item;\n\n\t\tswitch (itemType) {\n\t\t\tcase SecsItemType.A:\n\t\t\t\titem = Secs2ItemFactory.createAsciiItem(valueBuffer.toString(\"ascii\"));\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.B:\n\t\t\t\titem = Secs2ItemFactory.createBinaryItem(valueBuffer);\n\t\t\t\tbreak;\n\t\t\tcase SecsItemType.BOOLEAN: {\n\t\t\t\t// Parse boolean array\n\t\t\t\tconst bools = [];\n\t\t\t\tfor (const byte of valueBuffer) {\n\t\t\t\t\tbools.push(byte !== 0);\n\t\t\t\t}\n\t\t\t\titem = Secs2ItemFactory.createBooleanItem(...bools);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SecsItemType.I1:\n\t\t\tcase SecsItemType.I2:\n\t\t\tcase SecsItemType.I4:\n\t\t\tcase SecsItemType.I8:\n\t\t\tcase SecsItemType.U1:\n\t\t\tcase SecsItemType.U2:\n\t\t\tcase SecsItemType.U4:\n\t\t\tcase SecsItemType.U8:\n\t\t\tcase SecsItemType.F4:\n\t\t\tcase SecsItemType.F8:\n\t\t\t\titem = Secs2ItemNumeric.fromTypeBuffer(itemType, valueBuffer);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Unknown item type: 0x${(itemType as number).toString(16)}`,\n\t\t\t\t);\n\t\t}\n\n\t\treturn { item, consumed };\n\t}\n}\n"],"mappings":";;;;;AAKA,IAAa,kBAAb,MAAa,gBAAgB;CAC5B,OAAO,WAAW,QAGhB;AACD,MAAI,OAAO,WAAW,EACrB,OAAM,IAAI,MAAM,eAAe;EAGhC,MAAM,aAAa,OAAO,UAAU,EAAE;EACtC,MAAM,WAAY,aAAa;EAC/B,MAAM,cAAc,aAAa;EAEjC,IAAI,SAAS;AACb,MAAI,gBAAgB,EACnB,UAAS,OAAO,UAAU,EAAE;WAClB,gBAAgB,EAC1B,UAAS,OAAO,aAAa,EAAE;WACrB,gBAAgB,EAC1B,UAAS,OAAO,WAAW,GAAG,EAAE;MAEhC,OAAM,IAAI,MAAM,+BAA+B,YAAY,UAAU,GAAG;EAGzE,MAAM,aAAa,IAAI;AAGvB,MAAI,aAAa,aAAa,GAAG;GAChC,MAAMA,QAA6B,EAAE;GACrC,IAAI,SAAS;GACb,MAAM,WAAW;AAEjB,QAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAAK;AAClC,QAAI,UAAU,OAAO,OACpB,OAAM,IAAI,MACT,gDAAgD,SAAS,8BACzD;IAEF,MAAM,SAAS,gBAAgB,WAAW,OAAO,SAAS,OAAO,CAAC;AAClE,UAAM,KAAK,OAAO,KAAK;AACvB,cAAU,OAAO;;AAIlB,UAAO;IAAE,MADI,iBAAiB,eAAe,GAAG,MAAM;IACvC,UAAU;IAAQ;;EAIlC,MAAM,WAAW,aAAa;AAE9B,MAAI,OAAO,SAAS,SACnB,OAAM,IAAI,MACT,wCAAwC,SAAS,UAAU,CAAC,QAAQ,OAAO,OAAO,UAAU,GAC5F;EAGF,MAAM,cAAc,OAAO,SAAS,YAAY,SAAS;EACzD,MAAM,WAAW;EAEjB,IAAIC;AAEJ,UAAQ,UAAR;GACC,KAAK,aAAa;AACjB,WAAO,iBAAiB,gBAAgB,YAAY,SAAS,QAAQ,CAAC;AACtE;GACD,KAAK,aAAa;AACjB,WAAO,iBAAiB,iBAAiB,YAAY;AACrD;GACD,KAAK,aAAa,SAAS;IAE1B,MAAM,QAAQ,EAAE;AAChB,SAAK,MAAM,QAAQ,YAClB,OAAM,KAAK,SAAS,EAAE;AAEvB,WAAO,iBAAiB,kBAAkB,GAAG,MAAM;AACnD;;GAED,KAAK,aAAa;GAClB,KAAK,aAAa;GAClB,KAAK,aAAa;GAClB,KAAK,aAAa;GAClB,KAAK,aAAa;GAClB,KAAK,aAAa;GAClB,KAAK,aAAa;GAClB,KAAK,aAAa;GAClB,KAAK,aAAa;GAClB,KAAK,aAAa;AACjB,WAAO,iBAAiB,eAAe,UAAU,YAAY;AAC7D;GACD,QACC,OAAM,IAAI,MACT,wBAAyB,SAAoB,SAAS,GAAG,GACzD;;AAGH,SAAO;GAAE;GAAM;GAAU"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AbstractSecs2Item } from "../core/secs2item/AbstractSecs2Item.js";
|
|
2
|
+
import { Secs2ItemAscii } from "../core/secs2item/Secs2ItemAscii.js";
|
|
3
|
+
|
|
4
|
+
//#region src/gem/Clock.d.ts
|
|
5
|
+
declare enum ClockType {
|
|
6
|
+
A12 = "A12",
|
|
7
|
+
A16 = "A16",
|
|
8
|
+
}
|
|
9
|
+
declare class Clock {
|
|
10
|
+
private datetime;
|
|
11
|
+
constructor(datetime: Date);
|
|
12
|
+
toA16(): Secs2ItemAscii;
|
|
13
|
+
toA12(): Secs2ItemAscii;
|
|
14
|
+
toDatetime(): Date;
|
|
15
|
+
static now(): Clock;
|
|
16
|
+
static fromAscii(item: AbstractSecs2Item): Clock;
|
|
17
|
+
private static getYear;
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { Clock, ClockType };
|
|
21
|
+
//# sourceMappingURL=Clock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Clock.d.ts","names":[],"sources":["../../src/gem/Clock.ts"],"sourcesContent":[],"mappings":";;;;aAGY,SAAA;;EAAA,GAAA,GAAA,KAAA;AAKZ;AAC+B,cADlB,KAAA,CACkB;EAErB,QAAA,QAAA;EAgBA,WAAA,CAAA,QAAA,EAlBqB,IAkBrB;EAWK,KAAA,CAAA,CAAA,EA3BL,cA2BK;EAIA,KAAA,CAAA,CAAA,EAfL,cAeK;EAIS,UAAA,CAAA,CAAA,EART,IAQS;EAAoB,OAAA,GAAA,CAAA,CAAA,EAJ7B,KAI6B;EAAK,OAAA,SAAA,CAAA,IAAA,EAAzB,iBAAyB,CAAA,EAAL,KAAK"}
|
package/lib/gem/Clock.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Secs2ItemAscii } from "../core/secs2item/Secs2ItemAscii.js";
|
|
2
|
+
|
|
3
|
+
//#region src/gem/Clock.ts
|
|
4
|
+
let ClockType = /* @__PURE__ */ function(ClockType$1) {
|
|
5
|
+
ClockType$1["A12"] = "A12";
|
|
6
|
+
ClockType$1["A16"] = "A16";
|
|
7
|
+
return ClockType$1;
|
|
8
|
+
}({});
|
|
9
|
+
var Clock = class Clock {
|
|
10
|
+
constructor(datetime) {
|
|
11
|
+
this.datetime = datetime;
|
|
12
|
+
}
|
|
13
|
+
toA16() {
|
|
14
|
+
return new Secs2ItemAscii(`${this.datetime.getFullYear()}${(this.datetime.getMonth() + 1).toString().padStart(2, "0")}${this.datetime.getDate().toString().padStart(2, "0")}${this.datetime.getHours().toString().padStart(2, "0")}${this.datetime.getMinutes().toString().padStart(2, "0")}${this.datetime.getSeconds().toString().padStart(2, "0")}${Math.floor(this.datetime.getMilliseconds() / 10).toString().padStart(2, "0")}`);
|
|
15
|
+
}
|
|
16
|
+
toA12() {
|
|
17
|
+
return new Secs2ItemAscii(`${this.datetime.getFullYear().toString().slice(-2)}${(this.datetime.getMonth() + 1).toString().padStart(2, "0")}${this.datetime.getDate().toString().padStart(2, "0")}${this.datetime.getHours().toString().padStart(2, "0")}${this.datetime.getMinutes().toString().padStart(2, "0")}${this.datetime.getSeconds().toString().padStart(2, "0")}`);
|
|
18
|
+
}
|
|
19
|
+
toDatetime() {
|
|
20
|
+
return this.datetime;
|
|
21
|
+
}
|
|
22
|
+
static now() {
|
|
23
|
+
return new Clock(/* @__PURE__ */ new Date());
|
|
24
|
+
}
|
|
25
|
+
static fromAscii(item) {
|
|
26
|
+
if (!(item instanceof Secs2ItemAscii)) throw new Error("Clock can only be parsed from ASCII item");
|
|
27
|
+
const val = item.value;
|
|
28
|
+
const len = val.length;
|
|
29
|
+
if (len === 12) {
|
|
30
|
+
const yy = parseInt(val.substring(0, 2), 10);
|
|
31
|
+
const mm = parseInt(val.substring(2, 4), 10);
|
|
32
|
+
const dd = parseInt(val.substring(4, 6), 10);
|
|
33
|
+
const hh = parseInt(val.substring(6, 8), 10);
|
|
34
|
+
const min = parseInt(val.substring(8, 10), 10);
|
|
35
|
+
const ss = parseInt(val.substring(10, 12), 10);
|
|
36
|
+
const year = Clock.getYear(yy);
|
|
37
|
+
return new Clock(new Date(year, mm - 1, dd, hh, min, ss));
|
|
38
|
+
} else if (len === 16) {
|
|
39
|
+
const year = parseInt(val.substring(0, 4), 10);
|
|
40
|
+
const mm = parseInt(val.substring(4, 6), 10);
|
|
41
|
+
const dd = parseInt(val.substring(6, 8), 10);
|
|
42
|
+
const hh = parseInt(val.substring(8, 10), 10);
|
|
43
|
+
const min = parseInt(val.substring(10, 12), 10);
|
|
44
|
+
const ss = parseInt(val.substring(12, 14), 10);
|
|
45
|
+
const cc = parseInt(val.substring(14, 16), 10);
|
|
46
|
+
return new Clock(new Date(year, mm - 1, dd, hh, min, ss, cc * 10));
|
|
47
|
+
}
|
|
48
|
+
throw new Error("Unknown ClockType format");
|
|
49
|
+
}
|
|
50
|
+
static getYear(yy) {
|
|
51
|
+
const nowYear = (/* @__PURE__ */ new Date()).getFullYear();
|
|
52
|
+
const century = Math.floor(nowYear / 100) * 100;
|
|
53
|
+
const flacYear = nowYear % 100;
|
|
54
|
+
if (flacYear < 25) {
|
|
55
|
+
if (yy >= 75) return century - 100 + yy;
|
|
56
|
+
} else if (flacYear >= 75) {
|
|
57
|
+
if (yy < 25) return century + 100 + yy;
|
|
58
|
+
}
|
|
59
|
+
return century + yy;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
//#endregion
|
|
64
|
+
export { Clock, ClockType };
|
|
65
|
+
//# sourceMappingURL=Clock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Clock.js","names":["datetime: Date"],"sources":["../../src/gem/Clock.ts"],"sourcesContent":["import { AbstractSecs2Item } from \"../core/secs2item/AbstractSecs2Item.js\";\nimport { Secs2ItemAscii } from \"../core/secs2item/Secs2ItemAscii.js\";\n\nexport enum ClockType {\n\tA12 = \"A12\",\n\tA16 = \"A16\",\n}\n\nexport class Clock {\n\tconstructor(private datetime: Date) {}\n\n\ttoA16(): Secs2ItemAscii {\n\t\tconst year = this.datetime.getFullYear();\n\t\tconst month = (this.datetime.getMonth() + 1).toString().padStart(2, \"0\");\n\t\tconst day = this.datetime.getDate().toString().padStart(2, \"0\");\n\t\tconst hour = this.datetime.getHours().toString().padStart(2, \"0\");\n\t\tconst minute = this.datetime.getMinutes().toString().padStart(2, \"0\");\n\t\tconst second = this.datetime.getSeconds().toString().padStart(2, \"0\");\n\t\tconst cc = Math.floor(this.datetime.getMilliseconds() / 10)\n\t\t\t.toString()\n\t\t\t.padStart(2, \"0\");\n\n\t\treturn new Secs2ItemAscii(\n\t\t\t`${year}${month}${day}${hour}${minute}${second}${cc}`,\n\t\t);\n\t}\n\n\ttoA12(): Secs2ItemAscii {\n\t\tconst year = this.datetime.getFullYear().toString().slice(-2);\n\t\tconst month = (this.datetime.getMonth() + 1).toString().padStart(2, \"0\");\n\t\tconst day = this.datetime.getDate().toString().padStart(2, \"0\");\n\t\tconst hour = this.datetime.getHours().toString().padStart(2, \"0\");\n\t\tconst minute = this.datetime.getMinutes().toString().padStart(2, \"0\");\n\t\tconst second = this.datetime.getSeconds().toString().padStart(2, \"0\");\n\n\t\treturn new Secs2ItemAscii(`${year}${month}${day}${hour}${minute}${second}`);\n\t}\n\n\ttoDatetime(): Date {\n\t\treturn this.datetime;\n\t}\n\n\tstatic now(): Clock {\n\t\treturn new Clock(new Date());\n\t}\n\n\tstatic fromAscii(item: AbstractSecs2Item): Clock {\n\t\tif (!(item instanceof Secs2ItemAscii)) {\n\t\t\tthrow new Error(\"Clock can only be parsed from ASCII item\");\n\t\t}\n\t\tconst val = item.value;\n\t\tconst len = val.length;\n\n\t\tif (len === 12) {\n\t\t\t// YYMMDDHHMMSS\n\t\t\tconst yy = parseInt(val.substring(0, 2), 10);\n\t\t\tconst mm = parseInt(val.substring(2, 4), 10);\n\t\t\tconst dd = parseInt(val.substring(4, 6), 10);\n\t\t\tconst hh = parseInt(val.substring(6, 8), 10);\n\t\t\tconst min = parseInt(val.substring(8, 10), 10);\n\t\t\tconst ss = parseInt(val.substring(10, 12), 10);\n\n\t\t\tconst year = Clock.getYear(yy);\n\t\t\treturn new Clock(new Date(year, mm - 1, dd, hh, min, ss));\n\t\t} else if (len === 16) {\n\t\t\t// YYYYMMDDHHMMSSCC\n\t\t\tconst year = parseInt(val.substring(0, 4), 10);\n\t\t\tconst mm = parseInt(val.substring(4, 6), 10);\n\t\t\tconst dd = parseInt(val.substring(6, 8), 10);\n\t\t\tconst hh = parseInt(val.substring(8, 10), 10);\n\t\t\tconst min = parseInt(val.substring(10, 12), 10);\n\t\t\tconst ss = parseInt(val.substring(12, 14), 10);\n\t\t\tconst cc = parseInt(val.substring(14, 16), 10);\n\n\t\t\treturn new Clock(new Date(year, mm - 1, dd, hh, min, ss, cc * 10));\n\t\t}\n\n\t\tthrow new Error(\"Unknown ClockType format\");\n\t}\n\n\tprivate static getYear(yy: number): number {\n\t\tconst nowYear = new Date().getFullYear();\n\t\tconst century = Math.floor(nowYear / 100) * 100;\n\t\tconst flacYear = nowYear % 100;\n\n\t\tif (flacYear < 25) {\n\t\t\tif (yy >= 75) return century - 100 + yy;\n\t\t} else if (flacYear >= 75) {\n\t\t\tif (yy < 25) return century + 100 + yy;\n\t\t}\n\t\treturn century + yy;\n\t}\n}\n"],"mappings":"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"}
|
package/lib/gem/Gem.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { SecsMessage } from "../core/AbstractSecsMessage.js";
|
|
2
|
+
import { AbstractSecsCommunicator } from "../core/AbstractSecsCommunicator.js";
|
|
3
|
+
import { Clock, ClockType } from "./Clock.js";
|
|
4
|
+
|
|
5
|
+
//#region src/gem/Gem.d.ts
|
|
6
|
+
declare enum CommAck {
|
|
7
|
+
OK = 0,
|
|
8
|
+
DENIED = 1,
|
|
9
|
+
}
|
|
10
|
+
declare enum OflAck {
|
|
11
|
+
OK = 0,
|
|
12
|
+
}
|
|
13
|
+
declare enum OnlAck {
|
|
14
|
+
OK = 0,
|
|
15
|
+
REFUSE = 1,
|
|
16
|
+
ALREADY_ONLINE = 2,
|
|
17
|
+
}
|
|
18
|
+
declare enum TiAck {
|
|
19
|
+
OK = 0,
|
|
20
|
+
NOT_DONE = 1,
|
|
21
|
+
}
|
|
22
|
+
declare class Gem {
|
|
23
|
+
comm: AbstractSecsCommunicator;
|
|
24
|
+
private static readonly DEFAULT_MDLN;
|
|
25
|
+
private static readonly DEFAULT_SOFTREV;
|
|
26
|
+
private static readonly DEFAULT_CLOCK_TYPE;
|
|
27
|
+
mdln: string;
|
|
28
|
+
softrev: string;
|
|
29
|
+
clockType: ClockType;
|
|
30
|
+
constructor(comm: AbstractSecsCommunicator);
|
|
31
|
+
s1f2(primaryMsg: SecsMessage): Promise<void>;
|
|
32
|
+
s1f13(): Promise<number>;
|
|
33
|
+
s1f14(primaryMsg: SecsMessage, commAck: CommAck): Promise<void>;
|
|
34
|
+
s1f15(): Promise<number>;
|
|
35
|
+
s1f16(primaryMsg: SecsMessage): Promise<void>;
|
|
36
|
+
s1f17(): Promise<number>;
|
|
37
|
+
s1f18(primaryMsg: SecsMessage, onlAck: OnlAck): Promise<void>;
|
|
38
|
+
s2f17(): Promise<Clock>;
|
|
39
|
+
s2f18(primaryMsg: SecsMessage, clock?: Clock): Promise<void>;
|
|
40
|
+
s2f18Now(primaryMsg: SecsMessage): Promise<void>;
|
|
41
|
+
s2f31(clock: Clock): Promise<number>;
|
|
42
|
+
s2f31Now(): Promise<number>;
|
|
43
|
+
s2f32(primaryMsg: SecsMessage, tiAck: TiAck): Promise<void>;
|
|
44
|
+
s9f1(refMsg: SecsMessage): Promise<void>;
|
|
45
|
+
s9f3(refMsg: SecsMessage): Promise<void>;
|
|
46
|
+
s9f5(refMsg: SecsMessage): Promise<void>;
|
|
47
|
+
s9f7(refMsg: SecsMessage): Promise<void>;
|
|
48
|
+
s9f9(refMsg: SecsMessage): Promise<void>;
|
|
49
|
+
s9f11(refMsg: SecsMessage): Promise<void>;
|
|
50
|
+
private s9fy;
|
|
51
|
+
private getHeader10Bytes;
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
export { CommAck, Gem, OflAck, OnlAck, TiAck };
|
|
55
|
+
//# sourceMappingURL=Gem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Gem.d.ts","names":[],"sources":["../../src/gem/Gem.ts"],"sourcesContent":[],"mappings":";;;;;aAQY,OAAA;;EAAA,MAAA,GAAA,CAAO;AAKnB;AAIY,aAJA,MAAA;EAUA,EAAA,GAAA,CAAA;AAKZ;AAS0B,aApBd,MAAA;EAkBO,EAAA,GAAA,CAAA;EAEO,MAAA,GAAA,CAAA;EAGF,cAAA,GAAA,CAAA;;AAKR,aAtBJ,KAAA;EA0Ca,EAAA,GAAA,CAAA;EAAsB,QAAA,GAAA,CAAA;;AAW/B,cAhDH,GAAA,CAgDG;EASS,IAAA,EAhDC,wBAgDD;EAAc,wBAAA,YAAA;EAKvB,wBAAA,eAAA;EASS,wBAAA,kBAAA;EAAqB,IAAA,EAAA,MAAA;EAAS,OAAA,EAAA,MAAA;EAK/B,SAAA,EArEL,SAqEK;EAAR,WAAA,CAAA,IAAA,EAnEU,wBAmEV;EAUF,IAAA,CAAA,UAAA,EA1EU,WA0EV,CAAA,EA1EwB,OA0ExB,CAAA,IAAA,CAAA;EACL,KAAA,CAAA,CAAA,EAtEO,OAsEP,CAAA,MAAA,CAAA;EACL,KAAA,CAAA,UAAA,EAnDqB,WAmDrB,EAAA,OAAA,EAnD2C,OAmD3C,CAAA,EAnDqD,OAmDrD,CAAA,IAAA,CAAA;EAMwB,KAAA,CAAA,CAAA,EA9CZ,OA8CY,CAAA,MAAA,CAAA;EAAc,KAAA,CAAA,UAAA,EArCjB,WAqCiB,CAAA,EArCH,OAqCG,CAAA,IAAA,CAAA;EAKtB,KAAA,CAAA,CAAA,EArCJ,OAqCI,CAAA,MAAA,CAAA;EAAQ,KAAA,CAAA,UAAA,EA5BH,WA4BG,EAAA,MAAA,EA5BkB,MA4BlB,CAAA,EA5B2B,OA4B3B,CAAA,IAAA,CAAA;EAUT,KAAA,CAAA,CAAA,EAjCH,OAiCG,CAjCK,KAiCL,CAAA;EAKM,KAAA,CAAA,UAAA,EA5BX,WA4BW,EAAA,KAAA,CAAA,EA3BhB,KA2BgB,CAAA,EA1BrB,OA0BqB,CAAA,IAAA,CAAA;EAAoB,QAAA,CAAA,UAAA,EApBjB,WAoBiB,CAAA,EApBH,OAoBG,CAAA,IAAA,CAAA;EAAQ,KAAA,CAAA,KAAA,EAfjC,KAeiC,CAAA,EAfzB,OAeyB,CAAA,MAAA,CAAA;EAKjC,QAAA,CAAA,CAAA,EAVD,OAUC,CAAA,MAAA,CAAA;EAAc,KAAA,CAAA,UAAA,EALT,WAKS,EAAA,KAAA,EALW,KAKX,CAAA,EALmB,OAKnB,CAAA,IAAA,CAAA;EAGd,IAAA,CAAA,MAAA,EAHA,WAGA,CAAA,EAHc,OAGd,CAAA,IAAA,CAAA;EAAc,IAAA,CAAA,MAAA,EAAd,WAAc,CAAA,EAAA,OAAA,CAAA,IAAA,CAAA;EAGd,IAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAc,OAAd,CAAA,IAAA,CAAA;EAAc,IAAA,CAAA,MAAA,EAGd,WAHc,CAAA,EAGA,OAHA,CAAA,IAAA,CAAA;EAGd,IAAA,CAAA,MAAA,EAGA,WAHA,CAAA,EAGc,OAHd,CAAA,IAAA,CAAA;EAAc,KAAA,CAAA,MAAA,EAMb,WANa,CAAA,EAMC,OAND,CAAA,IAAA,CAAA;EAGd,QAAA,IAAA;EAAc,QAAA,gBAAA"}
|