@ham2k/lib-operation-data 0.8.3 → 0.8.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ham2k/lib-operation-data",
3
- "version": "0.8.3",
3
+ "version": "0.8.4",
4
4
  "type": "module",
5
5
  "main": "./src/index.js",
6
6
  "exports": {
@@ -11,7 +11,8 @@
11
11
  { "name": "CW", "mhz": [1800, 1843], "mode": "CW" },
12
12
  { "name": "Data", "mhz": [1800, 1810], "mode": "RTTY" },
13
13
  { "name": "FT8", "mhz": [1840, 1843], "mode": "FT8" },
14
- { "name": "Phone", "mhz": [1843, 2000], "mode": "SSB", "submode": "LSB" }
14
+ { "name": "Phone", "mhz": [1843, 2000], "mode": "SSB", "submode": "LSB" },
15
+ { "name": "Australia", "mhz": [1800, 1875], "mode": null, "countries": ["au"] }
15
16
  ]
16
17
  },
17
18
  "80m": {
@@ -22,7 +23,8 @@
22
23
  { "name": "FT8", "mhz": [3568, 3571], "mode": "FT8", "regions": [ 3 ] },
23
24
  { "name": "Data", "mhz": [3570, 3600], "mode": "RTTY" },
24
25
  { "name": "FT8", "mhz": [3573, 3576], "mode": "FT8" },
25
- { "name": "Phone", "mhz": [3600, 4000], "mode": "SSB", "submode": "LSB" }
26
+ { "name": "Phone", "mhz": [3600, 4000], "mode": "SSB", "submode": "LSB" },
27
+ { "name": "Australia", "mhz": [3500, 3800], "mode": null, "countries": ["au"] }
26
28
  ]
27
29
  },
28
30
  "60m": {
@@ -44,7 +46,8 @@
44
46
  { "name": "Phone", "mhz": [7060, 7300], "mode": "SSB", "submode": "LSB" },
45
47
  { "name": "FT8", "mhz": [7074, 7077], "mode": "FT8" },
46
48
  { "name": "Data", "mhz": [7080, 7125], "mode": "RTTY", "countries": [ "us" ] },
47
- { "name": "Phone", "mhz": [7125, 7300], "mode": "SSB", "submode": "LSB", "countries": [ "us" ] }
49
+ { "name": "Phone", "mhz": [7125, 7300], "mode": "SSB", "submode": "LSB", "countries": [ "us" ] },
50
+ { "name": "Australia", "mhz": [7000, 7300], "mode": null, "countries": ["au"] }
48
51
  ]
49
52
  },
50
53
  "30m": {
@@ -54,7 +57,7 @@
54
57
  { "name": "Data", "mhz": [10130, 10140], "mode": "RTTY" },
55
58
  { "name": "FT8", "mhz": [10136, 10139], "mode": "FT8" },
56
59
  { "name": "FT4", "mhz": [10140, 10143], "mode": "FT4" },
57
- { "name": "Australia", "mhz": [10100, 10150], "mode": null, "countries": ["au", "za"] }
60
+ { "name": "Countries with no plan on 30m", "mhz": [10100, 10150], "mode": null, "countries": ["au", "za"] }
58
61
  ]
59
62
  },
60
63
  "20m": {
@@ -67,7 +70,8 @@
67
70
  { "name": "FT8", "mhz": [14074, 14077], "mode": "FT8" },
68
71
  { "name": "FT4", "mhz": [14080, 14083], "mode": "FT4" },
69
72
  { "name": "Phone", "mhz": [14112, 14350], "mode": "SSB", "submode": "USB", "regions": [ 1, 2 ] },
70
- { "name": "Phone", "mhz": [14150, 14350], "mode": "SSB", "submode": "USB", "countries": [ "us" ] }
73
+ { "name": "Phone", "mhz": [14150, 14350], "mode": "SSB", "submode": "USB", "countries": [ "us" ] },
74
+ { "name": "Australia", "mhz": [14000, 14350], "mode": null, "countries": ["au"] }
71
75
  ]
72
76
  },
73
77
  "17m": {
@@ -77,7 +81,8 @@
77
81
  { "name": "Data", "mhz": [18100, 18105], "mode": "RTTY" },
78
82
  { "name": "FT8", "mhz": [18100, 18103], "mode": "FT8" },
79
83
  { "name": "FT4", "mhz": [18104, 18107], "mode": "FT4" },
80
- { "name": "Phone", "mhz": [18110, 18168], "mode": "SSB", "submode": "USB" }
84
+ { "name": "Phone", "mhz": [18110, 18168], "mode": "SSB", "submode": "USB" },
85
+ { "name": "Australia", "mhz": [18068, 18168], "mode": null, "countries": ["au"] }
81
86
  ]
82
87
  },
83
88
  "15m": {
@@ -87,7 +92,8 @@
87
92
  { "name": "Data", "mhz": [21070, 21095], "mode": "RTTY" },
88
93
  { "name": "FT8", "mhz": [21074, 21077], "mode": "FT8" },
89
94
  { "name": "FT4", "mhz": [21140, 21143], "mode": "FT4" },
90
- { "name": "Phone", "mhz": [21150, 21450], "mode": "SSB", "submode": "USB" }
95
+ { "name": "Phone", "mhz": [21150, 21450], "mode": "SSB", "submode": "USB" },
96
+ { "name": "Australia", "mhz": [21000, 21450], "mode": null, "countries": ["au"] }
91
97
  ]
92
98
  },
93
99
  "12m": {
@@ -97,7 +103,8 @@
97
103
  { "name": "FT8", "mhz": [24915, 24918], "mode": "FT8" },
98
104
  { "name": "FT4", "mhz": [24919, 23922], "mode": "FT4" },
99
105
  { "name": "Data", "mhz": [24920, 24925], "mode": "RTTY" },
100
- { "name": "Phone", "mhz": [24930, 24990], "mode": "SSB", "submode": "USB" }
106
+ { "name": "Phone", "mhz": [24930, 24990], "mode": "SSB", "submode": "USB" },
107
+ { "name": "Australia", "mhz": [24890, 24990], "mode": null, "countries": ["au"] }
101
108
  ]
102
109
  },
103
110
  "10m": {
@@ -113,7 +120,8 @@
113
120
  { "name": "Satellite", "mhz": [29300, 29520] },
114
121
  { "name": "Repeater Uplinks", "mhz": [29520, 29590] },
115
122
  { "name": "FM", "mhz": [29520, 29700], "mode": "FM" },
116
- { "name": "Repeater Downlinks", "mhz": [29620, 29700] }
123
+ { "name": "Repeater Downlinks", "mhz": [29620, 29700] },
124
+ { "name": "Australia", "mhz": [28000, 29700], "mode": null, "countries": ["au"] }
117
125
  ]
118
126
  },
119
127
  "6m": {
@@ -126,7 +134,8 @@
126
134
  { "name": "FM", "mhz": [51110, 52100], "mode": "FM" },
127
135
  { "name": "FT8", "mhz": [50313, 50316], "mode": "FT8" },
128
136
  { "name": "FT4", "mhz": [50318, 50321], "mode": "FT4" },
129
- { "name": "FT8", "mhz": [50323, 50326], "mode": "FT8" }
137
+ { "name": "FT8", "mhz": [50323, 50326], "mode": "FT8" },
138
+ { "name": "Australia", "mhz": [50000, 54000], "mode": null, "countries": ["au"] }
130
139
  ]
131
140
  },
132
141
  "2m": {
package/src/lib/modes.js CHANGED
@@ -163,7 +163,13 @@ const AllSegments = Object.keys(BandPlans.bands).reduce((segments, band) => {
163
163
  }, [])
164
164
 
165
165
  export function modeForFrequency(frequency, { ituRegion, countryCode, entityPrefix } = {}) {
166
- const segments = AllSegments.filter(segment => segment.mhz[0] <= frequency && segment.mhz[1] >= frequency)
166
+ const segments = AllSegments.filter(segment => (
167
+ (segment.mhz[0] <= frequency && segment.mhz[1] >= frequency) &&
168
+ (!entityPrefix || Object.keys(segment.entities).length === 0 || segment.entities[entityPrefix]) &&
169
+ (!countryCode || Object.keys(segment.countries).length === 0 || segment.countries[countryCode]) &&
170
+ (!ituRegion || Object.keys(segment.regions).length === 0 || segment.regions[ituRegion])
171
+ ))
172
+
167
173
  const sortedSegments = segments.sort((a, b) => {
168
174
  if (entityPrefix && !a.entities[entityPrefix] && b.entities[entityPrefix]) return 1
169
175
  if (entityPrefix && a.entities[entityPrefix] && !b.entities[entityPrefix]) return -1
@@ -176,5 +182,6 @@ export function modeForFrequency(frequency, { ituRegion, countryCode, entityPref
176
182
 
177
183
  return a.width - b.width
178
184
  })
185
+
179
186
  return sortedSegments[0]?.mode
180
187
  }
@@ -5,10 +5,24 @@ describe('modeForFrequency', () => {
5
5
  expect(modeForFrequency(14255)).toEqual('SSB')
6
6
  expect(modeForFrequency(14107)).toEqual('CW')
7
7
  expect(modeForFrequency(14074)).toEqual('FT8')
8
+ })
8
9
 
10
+ it('should handle different bandplans for different regions', () => {
9
11
  expect(modeForFrequency(14140)).toEqual('CW')
10
12
  expect(modeForFrequency(14140, { ituRegion: 2 })).toEqual('SSB')
11
- expect(modeForFrequency(14140, { entityPrefix: 'K' })).toEqual('CW')
13
+ })
12
14
 
15
+ // The current bandplan data does not have any entity-specific segments
16
+ // TODO: mock data for this test
17
+ // it('should handle different bandplans for different entities', () => {
18
+ // expect(modeForFrequency(14140, { entityPrefix: 'K' })).toEqual('CW')
19
+ // expect(modeForFrequency(14140, { entityPrefix: 'VK' })).toBeNull()
20
+ // })
21
+
22
+ it('should handle different bandplans for different countries', () => {
23
+ expect(modeForFrequency(7090, { countryCode: 'us' })).toBe('RTTY')
24
+ expect(modeForFrequency(7090, { countryCode: 've' })).toBe('SSB')
25
+ expect(modeForFrequency(7090, { countryCode: 'au' })).toBeNull()
13
26
  })
27
+
14
28
  })