@canboat/canboatjs 3.5.3 → 3.7.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.
@@ -0,0 +1,209 @@
1
+ # Architecture Diagram: canboatjs, n2k-signalk, and signalk-server Integration
2
+
3
+ ## Overview
4
+ This diagram shows how the three main components work together to process marine data from NMEA 2000 devices to Signal K format and beyond.
5
+
6
+ ```mermaid
7
+ graph TB
8
+ %% Hardware Layer
9
+ subgraph "Hardware Layer"
10
+ N2K[NMEA 2000 Network]
11
+ ACTISENSE[Actisense NGT-1]
12
+ YDWG[Yacht Devices YDWG-02]
13
+ IKON[Digital Yacht iKonvert]
14
+ MINIPLEX[MiniPlex-3-N2K]
15
+ SOCKETCAN[SocketCAN Interface]
16
+ end
17
+
18
+ %% Data Formats
19
+ subgraph "Raw Data Formats"
20
+ ACT_FMT["Actisense Format<br/>2017-03-13T01:00:00.146Z,2,127245,204,255,8,fc,f8,ff,7f,ff,7f,ff,ff"]
21
+ YDWG_FMT["YDWG Raw Format<br/>16:29:27.082 R 09F8017F 50 C3 B8 13 47 D8 2B C6"]
22
+ IKON_FMT["iKonvert Format<br/>!PDGY,127245,255,/Pj/f/9///8="]
23
+ CANDUMP_FMT["candump Format<br/>can0 09F8027F [8] 00 FC FF FF 00 00 FF FF"]
24
+ PCDIN_FMT["PCDIN Format<br/>$PCDIN,01F119,00000000,0F,2AAF00D1067414FF*59"]
25
+ MXPGN_FMT["MXPGN Format<br/>$MXPGN,01F801,2801,C1308AC40C5DE343*19"]
26
+ end
27
+
28
+ %% canboatjs Layer
29
+ FROMPGN["@canboat/canboatjs<br>FromPGN Parser"]
30
+ TOPGN["@canboat/canboatjs<br>ToPGN Converter"]
31
+ JSON_N2K_OUT["Canboat JSON Format<br/>(for output)"]
32
+
33
+ %% Parsed Data
34
+ subgraph "Parsed N2K Data (JSON)"
35
+ JSON_N2K["Canboat JSON Format<br/><code>{<br/> 'pgn': 127245,<br/> 'src': 204,<br/> 'dst': 255,<br/> 'fields': {<br/> 'Instance': 252,<br/> 'Direction Order': 0,<br/>'Angle Order': 0.1745<br> }<br/>}</code>"]
36
+ end
37
+ style JSON_N2K text-align:left
38
+
39
+ %% n2k-signalk Layer
40
+ N2K_MAPPER["@signalk/n2k-signalk<br>N2kMapper"]
41
+
42
+ %% Signal K Delta
43
+ subgraph "Signal K Delta Format"
44
+ SIGNALK_DELTA["Signal K Delta<br/><code>{<br/> 'context': 'vessels.self',<br/> 'updates': [{<br/>'values': [{<br/> 'path': 'steering.rudderAngle',<br/> 'value': 0.1745<br/> }]<br/> }]<br/>}</code>"]
45
+ end
46
+ style SIGNALK_DELTA text-align:left
47
+
48
+ %% signalk-server Layer
49
+ SIGNALK_SERVER[Signal K Server]
50
+
51
+ %% Client Applications
52
+ subgraph "Client Applications"
53
+ APPS[Navigation Apps<br/>Navionics, iSailor,<br/>iNavX, Aqua Map]
54
+ WILHELMSK[WilhelmSK]
55
+ WIDGETS[Web Widgets]
56
+ CUSTOM_CLIENTS[Custom Applications]
57
+ end
58
+
59
+ %% Output Formats
60
+ subgraph "Output Data Formats"
61
+ NMEA0183_OUT[NMEA 0183 TCP :10110]
62
+ SIGNALK_WS[Signal K WebSocket]
63
+ SIGNALK_REST[Signal K REST API]
64
+ SIGNALK_TCP[Signal K TCP]
65
+ end
66
+
67
+ %% Connections - Hardware to canboatjs
68
+ N2K <--> ACTISENSE
69
+ N2K <--> YDWG
70
+ N2K <--> IKON
71
+ N2K <--> MINIPLEX
72
+ N2K <--> SOCKETCAN
73
+
74
+ ACTISENSE <--> ACT_FMT
75
+ YDWG <--> YDWG_FMT
76
+ IKON <--> IKON_FMT
77
+ SOCKETCAN <--> CANDUMP_FMT
78
+ MINIPLEX <--> MXPGN_FMT
79
+
80
+ %% canboatjs parsing
81
+ ACT_FMT --> FROMPGN
82
+ YDWG_FMT --> FROMPGN
83
+ IKON_FMT --> FROMPGN
84
+ CANDUMP_FMT --> FROMPGN
85
+ PCDIN_FMT --> FROMPGN
86
+ MXPGN_FMT --> FROMPGN
87
+
88
+ FROMPGN --> JSON_N2K
89
+
90
+ %% n2k-signalk conversion
91
+ JSON_N2K --> N2K_MAPPER
92
+ N2K_MAPPER --> SIGNALK_DELTA
93
+
94
+ %% signalk-server processing
95
+ SIGNALK_DELTA --> SIGNALK_SERVER
96
+
97
+ %% Output connections
98
+ SIGNALK_SERVER --> SIGNALK_WS
99
+ SIGNALK_SERVER --> SIGNALK_REST
100
+ SIGNALK_SERVER --> SIGNALK_TCP
101
+ SIGNALK_SERVER --> NMEA0183_OUT
102
+
103
+ %% Client connections
104
+ SIGNALK_WS --> APPS
105
+ SIGNALK_REST --> WIDGETS
106
+ NMEA0183_OUT --> APPS
107
+ SIGNALK_TCP --> CUSTOM_CLIENTS
108
+ SIGNALK_WS --> WILHELMSK
109
+
110
+ %% Reverse flow - Signal K to N2K
111
+ SIGNALK_SERVER --> JSON_N2K_OUT
112
+ JSON_N2K_OUT --> TOPGN
113
+ TOPGN --> ACT_FMT
114
+
115
+ %% Styling
116
+ classDef hardware fill:#e1f5fe,stroke:#0277bd,stroke-width:2px
117
+ classDef format fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
118
+ classDef canboatjs fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
119
+ classDef n2ksignalk fill:#fff3e0,stroke:#ef6c00,stroke-width:2px
120
+ classDef signalkserver fill:#e0f2f1,stroke:#00695c,stroke-width:2px
121
+ classDef output fill:#fce4ec,stroke:#c2185b,stroke-width:2px
122
+ classDef clients fill:#f1f8e9,stroke:#558b2f,stroke-width:2px
123
+
124
+ class N2K,CAN,ACTISENSE,YDWG,IKON,MINIPLEX,SOCKETCAN hardware
125
+ class ACT_FMT,YDWG_FMT,IKON_FMT,CANDUMP_FMT,PCDIN_FMT,MXPGN_FMT,JSON_N2K_OUT format
126
+ class FROMPGN canboatjs
127
+ class TOPGN canboatjs
128
+ class N2K_MAPPER,DELTA_CONV,STANDARD_PGNS,FUSION_PGNS,LOWRANCE_PGNS,RAYMARINE_PGNS,MARETRON_PGNS,ACTISENSE_PGNS,DIGITALYACHT_PGNS,SIMRAD_PGNS n2ksignalk
129
+ class SIGNALK_SERVER signalkserver
130
+ class NMEA0183_OUT,SIGNALK_WS,SIGNALK_REST,SIGNALK_TCP output
131
+ class APPS,WIDGETS,CUSTOM_CLIENTS,WILHELMSK clients
132
+ ```
133
+
134
+ ## Data Flow Explanation
135
+
136
+ ### 1. **Hardware Layer**
137
+ - **NMEA 2000 Network**: Marine electronics network using CAN bus protocol
138
+ - **Gateways**: Various hardware devices that bridge NMEA 2000 to serial/ethernet/wifi
139
+ - **Interfaces**: Direct CAN bus interfaces for Linux systems
140
+
141
+ ### 2. **canboatjs (@canboat/canboatjs)**
142
+ **Purpose**: Parse and encode NMEA 2000 data in various formats
143
+ - **FromPgn Parser**: Core parser that converts various N2K formats to standardized JSON
144
+
145
+ **Key Features**:
146
+ - Multi-format input support (Actisense, YDWG, iKonvert, etc.)
147
+ - Real-time stream processing
148
+ - Bidirectional conversion (parse and generate)
149
+ - Hardware abstraction layer
150
+
151
+ ### 3. **n2k-signalk (@signalk/n2k-signalk)**
152
+ **Purpose**: Convert parsed NMEA 2000 JSON to Signal K delta format
153
+ - **N2kMapper**: Main conversion engine
154
+ - **PGN Mappings**: Manufacturer-specific and standard PGN definitions
155
+ - **Delta Converter**: Transforms N2K data to Signal K delta updates
156
+
157
+ **Key Features**:
158
+ - Comprehensive PGN coverage
159
+ - Manufacturer-specific extensions
160
+ - Signal K delta format output
161
+ - Custom mapping support
162
+
163
+ ### 4. **signalk-server**
164
+ **Purpose**: Central hub for marine data processing and distribution
165
+ - **Stream Processors**: Handle different data types and formats
166
+ - **Data Providers**: Connect to various data sources
167
+ - **Plugin System**: Extensible architecture for custom functionality
168
+ - **Network Interfaces**: Serve data via HTTP, WebSocket, TCP, etc.
169
+
170
+ **Key Features**:
171
+ - Multi-protocol support (NMEA 2000, NMEA 0183, Signal K)
172
+ - Web-based administration interface
173
+ - Plugin ecosystem for extensions
174
+ - Real-time data streaming
175
+ - Format conversion and bridging
176
+
177
+ ## Integration Points
178
+
179
+ ### **canboatjs → n2k-signalk**
180
+ - canboatjs parses raw N2K data into standardized JSON format
181
+ - n2k-signalk consumes this JSON and converts it to Signal K deltas
182
+ - Both libraries share common PGN definitions from @canboat/ts-pgns
183
+
184
+ ### **n2k-signalk → signalk-server**
185
+ - signalk-server uses n2k-signalk as a stream processor
186
+ - N2K data flows through canboatjs → n2k-signalk → Signal K deltas
187
+ - Server maintains device metadata and manages data flow
188
+
189
+ ## Output Capabilities
190
+
191
+ ### **Data Formats**
192
+ - **Signal K**: Native JSON format via WebSocket and REST APIs
193
+ - **NMEA 0183**: Converted output via TCP for legacy applications
194
+ - **NMEA 2000**: Bidirectional N2K communication
195
+
196
+ ### **Client Applications**
197
+ - **Navigation Apps**: Navionics, iSailor, iNavX, Aqua Map via NMEA 0183 TCP
198
+ - **Signal K Apps**: WilhelmSK and custom applications via Signal K APIs
199
+ - **Web Applications**: Browser-based instruments and controls
200
+ - **Custom Clients**: Direct API access for specialized applications
201
+
202
+ ## Key Benefits
203
+
204
+ 1. **Multi-Format Support**: Handle various proprietary formats from different manufacturers
205
+ 2. **Real-Time Processing**: Stream-based architecture for live data
206
+ 3. **Extensibility**: Plugin system and custom mappings
207
+ 4. **Standardization**: Convert proprietary formats to open Signal K standard
208
+ 5. **Bridging**: Connect legacy NMEA 0183 apps to modern NMEA 2000 networks
209
+ 6. **Device Integration**: Support for multiple hardware interfaces and protocols
@@ -9,9 +9,10 @@ const minimist_1 = __importDefault(require("minimist"));
9
9
  const readline_1 = __importDefault(require("readline"));
10
10
  const utils_1 = require("./utils");
11
11
  const fs_1 = __importDefault(require("fs"));
12
+ const util_1 = __importDefault(require("util"));
12
13
  const argv = (0, minimist_1.default)(process.argv.slice(2), {
13
14
  alias: { h: 'help' },
14
- string: ['pgn', 'manufacturer', 'file'],
15
+ string: ['pgn', 'manufacturer', 'src', 'file', 'dst', 'filter'],
15
16
  boolean: [
16
17
  'n',
17
18
  'r',
@@ -21,7 +22,9 @@ const argv = (0, minimist_1.default)(process.argv.slice(2), {
21
22
  //'show-create-pgns',
22
23
  'pretty',
23
24
  'show-warnings',
24
- 'coalesced'
25
+ 'coalesced',
26
+ 'js',
27
+ 'js-colors'
25
28
  ]
26
29
  });
27
30
  (0, utils_1.printVersion)(argv);
@@ -33,7 +36,9 @@ Options:
33
36
  -n output null values
34
37
  -r parse $MXPGN as little endian
35
38
  --file <path> read from the given file
36
- --pretty pretty json
39
+ --pretty output pretty json
40
+ --js output in JavaScript format
41
+ --js-colors output in JavaScript format with colors
37
42
  --camel output field names in camelCase
38
43
  --camel-compat output field names in camelCase and regular
39
44
  --show-non-matches show pgn data without any matches
@@ -41,7 +46,10 @@ Options:
41
46
  --coalesced force coalesced format
42
47
  --fast force fast format
43
48
  --pgn <number> filter for the given pgn number
49
+ --src <number> filter for the given source address
50
+ --dst <number> filter for the given destination address
44
51
  --manufacturer <str> filter for pgns from the given manufacturer
52
+ --filter <js> filter for the given JavaScript expression
45
53
  -h, --help output usage information`);
46
54
  process.exit(1);
47
55
  }
@@ -52,11 +60,7 @@ if (argv['coalesced']) {
52
60
  else if (argv['fast']) {
53
61
  format = 0;
54
62
  }
55
- let pgn_filter = argv['pgn'];
56
- const manufacturer_filter = argv['manufacturer'];
57
- if (pgn_filter !== undefined && Array.isArray(pgn_filter) === false) {
58
- pgn_filter = [pgn_filter];
59
- }
63
+ const filter = (0, utils_1.setupFilters)(argv);
60
64
  const parser = new fromPgn_1.Parser({
61
65
  returnNulls: argv['n'] === true,
62
66
  littleEndianMXPGN: argv['r'] === true,
@@ -107,17 +111,17 @@ rl.on('line', (line) => {
107
111
  else {
108
112
  pgn = parser.parseString(line.trim());
109
113
  }
110
- if (pgn &&
111
- (pgn_filter === undefined ||
112
- pgn_filter.find((p) => pgn.pgn === Number(p)))) {
113
- if (manufacturer_filter !== undefined) {
114
- const manufacturer = pgn.fields.manufacturerCode ||
115
- pgn.fields['Manufacturer Code'];
116
- if (manufacturer !== manufacturer_filter) {
117
- return;
118
- }
114
+ if (pgn && (0, utils_1.filterPGN)(pgn, filter)) {
115
+ if (argv['js'] || argv['js-colors']) {
116
+ console.log(util_1.default.inspect(pgn, {
117
+ depth: null,
118
+ colors: argv['js-colors'],
119
+ breakLength: 1
120
+ }));
121
+ }
122
+ else {
123
+ console.log(JSON.stringify(pgn, null, argv['pretty'] ? 2 : 0));
119
124
  }
120
- console.log(JSON.stringify(pgn, null, argv['pretty'] ? 2 : 0));
121
125
  }
122
126
  });
123
127
  //# sourceMappingURL=analyzerjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analyzerjs.js","sourceRoot":"","sources":["../../lib/bin/analyzerjs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyzerjs.js","sourceRoot":"","sources":["../../lib/bin/analyzerjs.ts"],"names":[],"mappings":"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"}
@@ -9,14 +9,24 @@ const canId_1 = require("../canId");
9
9
  const minimist_1 = __importDefault(require("minimist"));
10
10
  const utilities_1 = require("../utilities");
11
11
  const utils_1 = require("./utils");
12
+ const util_1 = __importDefault(require("util"));
12
13
  // eslint-disable-next-line @typescript-eslint/no-require-imports
13
14
  const socketcan = require('socketcan');
14
15
  const argv = (0, minimist_1.default)(process.argv.slice(2), {
15
16
  alias: {
16
17
  h: 'help'
17
18
  },
18
- string: ['format', 'manufacturer'],
19
- boolean: ['n', 'r', 'camel', 'camel-compat', 'show-non-matches', 'pretty']
19
+ string: ['format', 'manufacturer', 'src', 'pgn', 'dst', 'filter'],
20
+ boolean: [
21
+ 'n',
22
+ 'r',
23
+ 'camel',
24
+ 'camel-compat',
25
+ 'show-non-matches',
26
+ 'pretty',
27
+ 'js',
28
+ 'js-colors'
29
+ ]
20
30
  });
21
31
  (0, utils_1.printVersion)(argv);
22
32
  if (argv['help']) {
@@ -27,12 +37,17 @@ Options:
27
37
  -c don't check for invalid values
28
38
  -n output null values
29
39
  -r parse $MXPGN as little endian
30
- --pretty pretty json
40
+ --pretty pretty json
41
+ --js output in JavaScript format
42
+ --js-colors output in JavaScript format with colors
31
43
  --camel output field names in camelCase
32
44
  --camel-compat output field names in camelCase and regular
33
45
  --show-non-matches show pgn data without any matches
34
46
  --pgn <number> filter for the given pgn number
47
+ --src <number> filter for the given source address
48
+ --dst <number> filter for the given destination address
35
49
  --manufacturer <str> filter for pgns from the given manufacturer
50
+ --filter <js> filter for the given JavaScript expression
36
51
  -h, --help output usage information`);
37
52
  process.exit(1);
38
53
  }
@@ -40,11 +55,7 @@ if (argv['_'].length === 0) {
40
55
  console.error('Please specify a device');
41
56
  process.exit(1);
42
57
  }
43
- let pgn_filter = argv['pgn'];
44
- const manufacturer_filter = argv['manufacturer'];
45
- if (pgn_filter !== undefined && Array.isArray(pgn_filter) === false) {
46
- pgn_filter = [pgn_filter];
47
- }
58
+ const filter = (0, utils_1.setupFilters)(argv);
48
59
  const parser = new index_1.FromPgn({
49
60
  returnNulls: argv['n'] === true,
50
61
  littleEndianMXPGN: argv['r'] === true,
@@ -59,15 +70,17 @@ parser.on('error', (pgn, error) => {
59
70
  console.error(error.stack);
60
71
  });
61
72
  parser.on('pgn', (pgn) => {
62
- if (pgn_filter === undefined ||
63
- pgn_filter.find((p) => pgn.pgn === Number(p))) {
64
- if (manufacturer_filter !== undefined) {
65
- const manufacturer = pgn.fields.manufacturerCode || pgn.fields['Manufacturer Code'];
66
- if (manufacturer !== manufacturer_filter) {
67
- return;
68
- }
73
+ if ((0, utils_1.filterPGN)(pgn, filter)) {
74
+ if (argv['js'] || argv['js-colors']) {
75
+ console.log(util_1.default.inspect(pgn, {
76
+ depth: null,
77
+ colors: argv['js-colors'],
78
+ breakLength: 1
79
+ }));
80
+ }
81
+ else {
82
+ console.log(JSON.stringify(pgn, null, argv['pretty'] ? 2 : 0));
69
83
  }
70
- console.log(JSON.stringify(pgn, null, argv['pretty'] ? 2 : 0));
71
84
  }
72
85
  });
73
86
  const canDevice = argv['_'][0];
@@ -1 +1 @@
1
- {"version":3,"file":"candumpjs.js","sourceRoot":"","sources":["../../lib/bin/candumpjs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"candumpjs.js","sourceRoot":"","sources":["../../lib/bin/candumpjs.ts"],"names":[],"mappings":";;;;;;AAEA,oCAAkC;AAClC,oCAAqC;AACrC,wDAA+B;AAC/B,4CAA6C;AAC7C,mCAA+D;AAC/D,gDAAuB;AAEvB,iEAAiE;AACjE,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;AAEtC,MAAM,IAAI,GAAG,IAAA,kBAAQ,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAC3C,KAAK,EAAE;QACL,CAAC,EAAE,MAAM;KACV;IACD,MAAM,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC;IACjE,OAAO,EAAE;QACP,GAAG;QACH,GAAG;QACH,OAAO;QACP,cAAc;QACd,kBAAkB;QAClB,QAAQ;QACR,IAAI;QACJ,WAAW;KACZ;CACF,CAAC,CAAA;AAEF,IAAA,oBAAY,EAAC,IAAI,CAAC,CAAA;AAElB,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IACjB,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;gDAkBO,CAAC,CAAA;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,IAAI,CAAC,CAAA;AAEjC,MAAM,MAAM,GAAG,IAAI,eAAO,CAAC;IACzB,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI;IAC/B,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI;IACrC,qBAAqB,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI;IACzC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;IACvB,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC;IACpC,gBAAgB,EAAE,IAAI,CAAC,kBAAkB,CAAC;CAC3C,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAA;AAEvC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,KAAU,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC,CAAA;IAClD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;AAC5B,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAQ,EAAE,EAAE;IAC5B,IAAI,IAAA,iBAAS,EAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CACT,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE;gBAChB,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC;gBACzB,WAAW,EAAE,CAAC;aACf,CAAC,CACH,CAAA;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAChE,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAE9B,MAAM,OAAO,GAAG,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAA;AAErD,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,GAAQ,EAAE,EAAE;IAC5C,OAAO,CAAC,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAA;AAC3C,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,GAAQ,EAAE,EAAE;IAC5C,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAE9B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAE1C,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAE9E,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;IAC9E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;IAC3B,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,KAAK,EAAE,CAAA"}
@@ -1,4 +1,15 @@
1
+ import { PGN } from '@canboat/ts-pgns';
1
2
  export declare const printVersion: (argv: {
2
3
  [key: string]: any;
3
4
  }) => void;
5
+ export declare const setupFilters: (argv: {
6
+ [key: string]: any;
7
+ }) => {
8
+ pgn_filter: any;
9
+ manufacturer_filter: any;
10
+ src_filter: any;
11
+ dst_filter: any;
12
+ js_filter: any;
13
+ };
14
+ export declare const filterPGN: (pgn: PGN, filter: any) => boolean;
4
15
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/bin/utils.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,GAAI,MAAM;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,SAKxD,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/bin/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,eAAO,MAAM,YAAY,GAAI,MAAM;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,SAKxD,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,MAAM;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE;;;;;;CA8BxD,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,KAAK,GAAG,EAAE,QAAQ,GAAG,KAAG,OA6BjD,CAAA"}
package/dist/bin/utils.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.printVersion = void 0;
6
+ exports.filterPGN = exports.setupFilters = exports.printVersion = void 0;
7
7
  const package_json_1 = __importDefault(require("../../package.json"));
8
8
  const printVersion = (argv) => {
9
9
  if (argv['version']) {
@@ -12,4 +12,59 @@ const printVersion = (argv) => {
12
12
  }
13
13
  };
14
14
  exports.printVersion = printVersion;
15
+ const setupFilters = (argv) => {
16
+ let pgn_filter = argv['pgn'];
17
+ const manufacturer_filter = argv['manufacturer'];
18
+ if (pgn_filter !== undefined && Array.isArray(pgn_filter) === false) {
19
+ pgn_filter = [pgn_filter];
20
+ }
21
+ let src_filter = argv['src'];
22
+ if (src_filter !== undefined && Array.isArray(src_filter) === false) {
23
+ src_filter = [src_filter];
24
+ }
25
+ let dst_filter = argv['dst'];
26
+ if (dst_filter !== undefined && Array.isArray(dst_filter) === false) {
27
+ dst_filter = [dst_filter];
28
+ }
29
+ let js_filter = argv['filter'];
30
+ if (js_filter !== undefined) {
31
+ try {
32
+ js_filter = new Function('pgn', `return ${js_filter}`);
33
+ }
34
+ catch (e) {
35
+ console.error(`Invalid filter expression: ${e.message}`);
36
+ process.exit(1);
37
+ }
38
+ }
39
+ return { pgn_filter, manufacturer_filter, src_filter, dst_filter, js_filter };
40
+ };
41
+ exports.setupFilters = setupFilters;
42
+ const filterPGN = (pgn, filter) => {
43
+ if ((filter.pgn_filter === undefined ||
44
+ filter.pgn_filter.find((p) => pgn.pgn === Number(p))) &&
45
+ (filter.src_filter === undefined ||
46
+ filter.src_filter.find((s) => pgn.src === Number(s))) &&
47
+ (filter.dst_filter === undefined ||
48
+ filter.dst_filter.find((d) => pgn.dst === Number(d)))) {
49
+ if (filter.manufacturer_filter !== undefined) {
50
+ const manufacturer = pgn.fields.manufacturerCode ||
51
+ pgn.fields['Manufacturer Code'];
52
+ if (manufacturer !== filter.manufacturer_filter) {
53
+ return false;
54
+ }
55
+ }
56
+ if (filter.js_filter !== undefined) {
57
+ try {
58
+ return filter.js_filter(pgn);
59
+ }
60
+ catch (e) {
61
+ console.error(`Error evaluating filter on PGN ${pgn.pgn}: ${e.message}`);
62
+ return false;
63
+ }
64
+ }
65
+ return true;
66
+ }
67
+ return false;
68
+ };
69
+ exports.filterPGN = filterPGN;
15
70
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/bin/utils.ts"],"names":[],"mappings":";;;;;;AAAA,sEAAoC;AAE7B,MAAM,YAAY,GAAG,CAAC,IAA4B,EAAE,EAAE;IAC3D,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,IAAI,sBAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC,CAAA;AALY,QAAA,YAAY,gBAKxB"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/bin/utils.ts"],"names":[],"mappings":"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"}
package/dist/fromPgn.d.ts CHANGED
@@ -34,6 +34,7 @@ export declare class Parser extends EventEmitter {
34
34
  constructor(opts?: any);
35
35
  _parse(pgn: PGN, bs: BitStream, len: number, coalesced: boolean, cb: FromPgnCallback | undefined, sourceString?: string | undefined): PGN | undefined;
36
36
  setField(res: any, field: Field, value: any): void;
37
+ getField(res: any, field: Field): any;
37
38
  findNonMatchPgn(pgnList: Definition[]): Definition | undefined;
38
39
  findMatchPgn(pgnList: Definition[]): Definition | undefined;
39
40
  parse(data: any, cb?: FromPgnCallback | undefined): PGN | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"fromPgn.d.ts","sourceRoot":"","sources":["../lib/fromPgn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,UAAU,EACV,KAAK,EACL,GAAG,EAUJ,MAAM,kBAAkB,CAAA;AAIzB,QAAA,MAAM,YAAY,KAAoB,CAAA;AAItC,OAAO,EAAE,SAAS,EAAW,MAAM,YAAY,CAAA;AAc/C,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,SAAS,KAAK,IAAI,CAAA;AACtE,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;AAuB7D,qBAAa,MAAO,SAAQ,YAAY;IACtC,OAAO,EAAE,GAAG,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;SAAE,CAAA;KAAE,CAAA;IAClD,WAAW,EAAE,OAAO,CAAA;gBAER,IAAI,GAAE,GAAQ;IA2C1B,MAAM,CACJ,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,SAAS,EACb,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,OAAO,EAClB,EAAE,EAAE,eAAe,GAAG,SAAS,EAC/B,YAAY,GAAE,MAAM,GAAG,SAAqB;IA4V9C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG;IAW3C,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,GAAG,SAAS;IAM9D,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,GAAG,SAAS;IAM3D,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAE,eAAe,GAAG,SAAqB;IAiB5D,YAAY,CACV,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EACvB,SAAS,EAAE,OAAO,EAClB,EAAE,EAAE,eAAe,GAAG,SAAS,EAC/B,YAAY,EAAE,MAAM;IA0BtB,aAAa,CAAC,QAAQ,EAAE,MAAM;IAI9B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe;IA+BtD,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,eAAe;IAuB9C,sBAAsB,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,eAAe;IAsBzD,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,eAAe;IAkC5C,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAE,eAAe,GAAG,SAAqB;IAkCzE,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,eAAe,GAAG,SAAS;CAgC3D;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,4BAuDpE"}
1
+ {"version":3,"file":"fromPgn.d.ts","sourceRoot":"","sources":["../lib/fromPgn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,UAAU,EACV,KAAK,EACL,GAAG,EAUJ,MAAM,kBAAkB,CAAA;AAIzB,QAAA,MAAM,YAAY,KAAoB,CAAA;AAItC,OAAO,EAAE,SAAS,EAAW,MAAM,YAAY,CAAA;AAc/C,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,SAAS,KAAK,IAAI,CAAA;AACtE,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;AAuB7D,qBAAa,MAAO,SAAQ,YAAY;IACtC,OAAO,EAAE,GAAG,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;SAAE,CAAA;KAAE,CAAA;IAClD,WAAW,EAAE,OAAO,CAAA;gBAER,IAAI,GAAE,GAAQ;IA2C1B,MAAM,CACJ,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,SAAS,EACb,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,OAAO,EAClB,EAAE,EAAE,eAAe,GAAG,SAAS,EAC/B,YAAY,GAAE,MAAM,GAAG,SAAqB;IAkX9C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG;IAW3C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK;IAQ/B,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,GAAG,SAAS;IAM9D,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,GAAG,SAAS;IAM3D,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAE,eAAe,GAAG,SAAqB;IAiB5D,YAAY,CACV,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EACvB,SAAS,EAAE,OAAO,EAClB,EAAE,EAAE,eAAe,GAAG,SAAS,EAC/B,YAAY,EAAE,MAAM;IA0BtB,aAAa,CAAC,QAAQ,EAAE,MAAM;IAI9B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe;IA+BtD,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,eAAe;IAuB9C,sBAAsB,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,eAAe;IAsBzD,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,eAAe;IAkC5C,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAE,eAAe,GAAG,SAAqB;IAkCzE,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,eAAe,GAAG,SAAS;CAgC3D;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,4BA0DpE"}