@ham2k/lib-operation-data 0.10.0 → 0.10.2
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/README.md +0 -86
- package/dist/data/bandPlans.json +176 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/bands.d.ts +13 -0
- package/dist/lib/bands.d.ts.map +1 -0
- package/dist/lib/bands.js +303 -0
- package/dist/lib/bands.js.map +1 -0
- package/dist/lib/modes.d.ts +13 -0
- package/dist/lib/modes.d.ts.map +1 -0
- package/dist/lib/modes.js +190 -0
- package/dist/lib/modes.js.map +1 -0
- package/dist/lib/modes.spec.d.ts +2 -0
- package/dist/lib/modes.spec.d.ts.map +1 -0
- package/dist/lib/modes.spec.js +28 -0
- package/dist/lib/modes.spec.js.map +1 -0
- package/dist/types.d.ts +38 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +5 -1
- package/src/lib/bands.ts +42 -1
- package/src/lib/modes.ts +5 -11
- package/jest.config.js +0 -21
- package/tsconfig.json +0 -21
package/README.md
CHANGED
|
@@ -1,89 +1,3 @@
|
|
|
1
1
|
# lib-operation-data
|
|
2
2
|
|
|
3
3
|
Basic data related to Amateur Radio operation, such as bands, modes, etc
|
|
4
|
-
|
|
5
|
-
## Building
|
|
6
|
-
|
|
7
|
-
This module is written in TypeScript and must be compiled before use.
|
|
8
|
-
|
|
9
|
-
### Development
|
|
10
|
-
|
|
11
|
-
To build the module during development:
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
npm run build
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
This will compile TypeScript source files from `src/` to JavaScript in `dist/`, generating:
|
|
18
|
-
- JavaScript files (`.js`)
|
|
19
|
-
- TypeScript declaration files (`.d.ts`)
|
|
20
|
-
- Source maps (`.js.map`, `.d.ts.map`)
|
|
21
|
-
|
|
22
|
-
### Testing
|
|
23
|
-
|
|
24
|
-
Run the test suite:
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
npm test
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## Distribution
|
|
31
|
-
|
|
32
|
-
### Publishing to npm
|
|
33
|
-
|
|
34
|
-
Before publishing, ensure the module is built:
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
npm run build
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
The `prepublishOnly` script will automatically run the build before publishing, so you can also just:
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
npm publish
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
### Package Structure
|
|
47
|
-
|
|
48
|
-
- **Source files**: Located in `src/`
|
|
49
|
-
- **Compiled output**: Generated in `dist/` (excluded from git)
|
|
50
|
-
- **Type definitions**: Automatically generated in `dist/` alongside compiled JavaScript
|
|
51
|
-
|
|
52
|
-
### Module Exports
|
|
53
|
-
|
|
54
|
-
The package exports are configured in `package.json`:
|
|
55
|
-
- **Main entry**: `dist/index.js`
|
|
56
|
-
- **Type definitions**: `dist/index.d.ts`
|
|
57
|
-
- **ESM support**: Configured for ES2020 modules
|
|
58
|
-
|
|
59
|
-
## Usage
|
|
60
|
-
|
|
61
|
-
### Installation
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
npm install @ham2k/lib-operation-data
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### Import
|
|
68
|
-
|
|
69
|
-
```javascript
|
|
70
|
-
import { BANDS, bandForFrequency, modeForFrequency } from '@ham2k/lib-operation-data'
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
### TypeScript
|
|
74
|
-
|
|
75
|
-
Type definitions are included, so TypeScript projects will automatically get type checking and autocomplete:
|
|
76
|
-
|
|
77
|
-
```typescript
|
|
78
|
-
import { BANDS, Band, bandForFrequency } from '@ham2k/lib-operation-data'
|
|
79
|
-
|
|
80
|
-
const band: Band = bandForFrequency(14255) // '20m'
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Development Setup
|
|
84
|
-
|
|
85
|
-
1. Clone the repository
|
|
86
|
-
2. Install dependencies: `npm install`
|
|
87
|
-
3. Make changes in `src/`
|
|
88
|
-
4. Build: `npm run build`
|
|
89
|
-
5. Test: `npm test`
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
{
|
|
2
|
+
"sources": [
|
|
3
|
+
{ "url": "https://www.iaru-r2.org/en/reference/band-plans/" },
|
|
4
|
+
{ "url": "https://www.arrl.org/band-plan" },
|
|
5
|
+
{ "url": "https://www.arrl.org/news/view/updated-arrl-us-amateur-radio-bands-charts-now-available" }
|
|
6
|
+
],
|
|
7
|
+
"bands": {
|
|
8
|
+
"160m": {
|
|
9
|
+
"mhz": [1800, 2000],
|
|
10
|
+
"segments": [
|
|
11
|
+
{ "name": "CW", "mhz": [1800, 1843], "mode": "CW" },
|
|
12
|
+
{ "name": "Data", "mhz": [1800, 1810], "mode": "RTTY" },
|
|
13
|
+
{ "name": "FT8", "mhz": [1840, 1843], "mode": "FT8", "priority": 100 },
|
|
14
|
+
{ "name": "Phone", "mhz": [1843, 2000], "mode": "SSB", "submode": "LSB" },
|
|
15
|
+
{ "name": "Australia", "mhz": [1800, 1875], "mode": null, "countries": ["au"] }
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"80m": {
|
|
19
|
+
"mhz": [3500, 3800],
|
|
20
|
+
"segments": [
|
|
21
|
+
{ "name": "CW", "mhz": [3500, 3600], "mode": "CW" },
|
|
22
|
+
{ "name": "Phone", "mhz": [3535, 3800], "mode": "SSB", "submode": "LSB", "regions": [3] },
|
|
23
|
+
{ "name": "FT8", "mhz": [3568, 3571], "mode": "FT8", "regions": [3], "priority": 100 },
|
|
24
|
+
{ "name": "Data", "mhz": [3570, 3600], "mode": "RTTY" },
|
|
25
|
+
{ "name": "FT8", "mhz": [3573, 3576], "mode": "FT8", "priority": 100 },
|
|
26
|
+
{ "name": "Phone", "mhz": [3600, 4000], "mode": "SSB", "submode": "LSB" },
|
|
27
|
+
{ "name": "Australia", "mhz": [3500, 3800], "mode": null, "countries": ["au"] }
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
"60m": {
|
|
31
|
+
"mhz": [5330.5, 3406.5],
|
|
32
|
+
"segments": [
|
|
33
|
+
{ "name": "60m Channel 1", "mhz": [5330.5, 5333.5] },
|
|
34
|
+
{ "name": "60m Channel 2", "mhz": [5346.5, 5349.5] },
|
|
35
|
+
{ "name": "60m Channel 3", "mhz": [5357, 5360], "mode": "FT8", "priority": 100 },
|
|
36
|
+
{ "name": "60m Channel 4", "mhz": [5371.5, 5373.5] },
|
|
37
|
+
{ "name": "60m Channel 5", "mhz": [5403.5, 5406.5] }
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"40m": {
|
|
41
|
+
"mhz": [7000, 7300],
|
|
42
|
+
"segments": [
|
|
43
|
+
{ "name": "CW", "mhz": [7000, 7060], "mode": "CW" },
|
|
44
|
+
{ "name": "CW", "mhz": [7000, 7125], "mode": "CW", "countries": ["us"] },
|
|
45
|
+
{ "name": "FT4", "mhz": [7047.5, 7050.5], "mode": "FT4", "priority": 100 },
|
|
46
|
+
{ "name": "Phone", "mhz": [7060, 7300], "mode": "SSB", "submode": "LSB" },
|
|
47
|
+
{ "name": "FT8", "mhz": [7074, 7077], "mode": "FT8", "priority": 100 },
|
|
48
|
+
{ "name": "Data", "mhz": [7080, 7125], "mode": "RTTY", "countries": ["us"] },
|
|
49
|
+
{ "name": "Phone", "mhz": [7125, 7300], "mode": "SSB", "submode": "LSB", "countries": ["us"] },
|
|
50
|
+
{ "name": "Australia", "mhz": [7000, 7300], "mode": null, "countries": ["au"] }
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
"30m": {
|
|
54
|
+
"mhz": [10100, 10150],
|
|
55
|
+
"segments": [
|
|
56
|
+
{ "name": "CW", "mhz": [10100, 10150], "mode": "CW" },
|
|
57
|
+
{ "name": "Data", "mhz": [10130, 10140], "mode": "RTTY" },
|
|
58
|
+
{ "name": "FT8", "mhz": [10136, 10139], "mode": "FT8", "priority": 100 },
|
|
59
|
+
{ "name": "FT4", "mhz": [10140, 10143], "mode": "FT4", "priority": 100 },
|
|
60
|
+
{ "name": "Countries with no plan on 30m", "mhz": [10100, 10150], "mode": null, "countries": ["au", "za"] }
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
"20m": {
|
|
64
|
+
"mhz": [14000, 14350],
|
|
65
|
+
"segments": [
|
|
66
|
+
{ "name": "CW", "mhz": [14000, 14150], "mode": "CW" },
|
|
67
|
+
{ "name": "CW", "mhz": [14000, 14070], "mode": "CW", "regions": [1] },
|
|
68
|
+
{ "name": "CW", "mhz": [14000, 14101], "mode": "CW", "regions": [2] },
|
|
69
|
+
{ "name": "Data", "mhz": [14070, 14095], "mode": "RTTY" },
|
|
70
|
+
{ "name": "FT8", "mhz": [14074, 14077], "mode": "FT8", "priority": 100 },
|
|
71
|
+
{ "name": "FT4", "mhz": [14080, 14083], "mode": "FT4", "priority": 100 },
|
|
72
|
+
{ "name": "Phone", "mhz": [14112, 14350], "mode": "SSB", "submode": "USB", "regions": [1, 2] },
|
|
73
|
+
{ "name": "Phone", "mhz": [14150, 14350], "mode": "SSB", "submode": "USB", "countries": ["us"] },
|
|
74
|
+
{ "name": "Australia", "mhz": [14000, 14350], "mode": null, "countries": ["au"] }
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
"17m": {
|
|
78
|
+
"mhz": [18068, 18168],
|
|
79
|
+
"segments": [
|
|
80
|
+
{ "name": "CW", "mhz": [18068, 18110], "mode": "CW" },
|
|
81
|
+
{ "name": "Data", "mhz": [18100, 18105], "mode": "RTTY" },
|
|
82
|
+
{ "name": "FT8", "mhz": [18100, 18103], "mode": "FT8", "priority": 100 },
|
|
83
|
+
{ "name": "FT4", "mhz": [18104, 18107], "mode": "FT4", "priority": 100 },
|
|
84
|
+
{ "name": "Phone", "mhz": [18110, 18168], "mode": "SSB", "submode": "USB" },
|
|
85
|
+
{ "name": "Australia", "mhz": [18068, 18168], "mode": null, "countries": ["au"] }
|
|
86
|
+
]
|
|
87
|
+
},
|
|
88
|
+
"15m": {
|
|
89
|
+
"mhz": [21000, 21450],
|
|
90
|
+
"segments": [
|
|
91
|
+
{ "name": "CW", "mhz": [21000, 21150], "mode": "CW" },
|
|
92
|
+
{ "name": "Data", "mhz": [21070, 21095], "mode": "RTTY" },
|
|
93
|
+
{ "name": "FT8", "mhz": [21074, 21077], "mode": "FT8", "priority": 100 },
|
|
94
|
+
{ "name": "FT4", "mhz": [21140, 21143], "mode": "FT4", "priority": 100 },
|
|
95
|
+
{ "name": "Phone", "mhz": [21150, 21450], "mode": "SSB", "submode": "USB" },
|
|
96
|
+
{ "name": "Australia", "mhz": [21000, 21450], "mode": null, "countries": ["au"] }
|
|
97
|
+
]
|
|
98
|
+
},
|
|
99
|
+
"12m": {
|
|
100
|
+
"mhz": [24890, 24990],
|
|
101
|
+
"segments": [
|
|
102
|
+
{ "name": "CW", "mhz": [24890, 24930], "mode": "CW" },
|
|
103
|
+
{ "name": "FT8", "mhz": [24915, 24918], "mode": "FT8", "priority": 100 },
|
|
104
|
+
{ "name": "FT4", "mhz": [24919, 23922], "mode": "FT4", "priority": 100 },
|
|
105
|
+
{ "name": "Data", "mhz": [24920, 24925], "mode": "RTTY" },
|
|
106
|
+
{ "name": "Phone", "mhz": [24930, 24990], "mode": "SSB", "submode": "USB" },
|
|
107
|
+
{ "name": "Australia", "mhz": [24890, 24990], "mode": null, "countries": ["au"] }
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
"10m": {
|
|
111
|
+
"mhz": [28000, 29700],
|
|
112
|
+
"segments": [
|
|
113
|
+
{ "name": "CW", "mhz": [28000, 28190], "mode": "CW" },
|
|
114
|
+
{ "name": "Data", "mhz": [28070, 28150], "mode": "RTTY" },
|
|
115
|
+
{ "name": "FT8", "mhz": [28074, 28077], "mode": "FT8", "priority": 100 },
|
|
116
|
+
{ "name": "FT4", "mhz": [28180, 28183], "mode": "FT4", "priority": 100 },
|
|
117
|
+
{ "name": "Beacons", "mhz": [28190, 28300] },
|
|
118
|
+
{ "name": "Phone SSB", "mhz": [28300, 29000], "mode": "SSB", "submode": "USB" },
|
|
119
|
+
{ "name": "AM", "mhz": [29000, 29200], "mode": "AM" },
|
|
120
|
+
{ "name": "Satellite", "mhz": [29300, 29520] },
|
|
121
|
+
{ "name": "Repeater Uplinks", "mhz": [29520, 29590] },
|
|
122
|
+
{ "name": "FM", "mhz": [29520, 29700], "mode": "FM" },
|
|
123
|
+
{ "name": "Repeater Downlinks", "mhz": [29620, 29700] },
|
|
124
|
+
{ "name": "Australia", "mhz": [28000, 29700], "mode": null, "countries": ["au"] }
|
|
125
|
+
]
|
|
126
|
+
},
|
|
127
|
+
"6m": {
|
|
128
|
+
"mhz": [50000, 54000],
|
|
129
|
+
"segments": [
|
|
130
|
+
{ "name": "CW", "mhz": [50000, 50100], "mode": "CW" },
|
|
131
|
+
{ "name": "Phone", "mhz": [50150, 50400], "mode": "SSB", "submode": "USB" },
|
|
132
|
+
{ "name": "Phone", "mhz": [51000, 51110], "mode": "SSB", "submode": "USB" },
|
|
133
|
+
{ "name": "FM", "mhz": [51110, 52100], "mode": "FM" },
|
|
134
|
+
{ "name": "FM", "mhz": [51110, 52100], "mode": "FM" },
|
|
135
|
+
{ "name": "FT8", "mhz": [50313, 50316], "mode": "FT8", "priority": 100 },
|
|
136
|
+
{ "name": "FT4", "mhz": [50318, 50321], "mode": "FT4", "priority": 100 },
|
|
137
|
+
{ "name": "FT8", "mhz": [50323, 50326], "mode": "FT8", "priority": 100 },
|
|
138
|
+
{ "name": "Australia", "mhz": [50000, 54000], "mode": null, "countries": ["au"] }
|
|
139
|
+
]
|
|
140
|
+
},
|
|
141
|
+
"2m": {
|
|
142
|
+
"mhz": [144000, 148000],
|
|
143
|
+
"segments": [
|
|
144
|
+
{ "name": "CW", "mhz": [144000, 144100], "mode": "CW" },
|
|
145
|
+
{ "name": "Data", "mhz": [144100, 144200], "mode": "RTTY" },
|
|
146
|
+
{ "name": "FT8", "mhz": [144174, 144177], "mode": "FT8", "priority": 100 },
|
|
147
|
+
{ "name": "FT4", "mhz": [144170, 144173], "mode": "FT4", "priority": 100 },
|
|
148
|
+
{ "name": "Phone", "mhz": [144200, 144275], "mode": "SSB", "submode": "USB" },
|
|
149
|
+
{ "name": "FM", "mhz": [144300, 148000], "mode": "FM" }
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
"1.25m": {
|
|
153
|
+
"mhz": [222000, 225000],
|
|
154
|
+
"segments": [
|
|
155
|
+
{ "name": "CW", "mhz": [222000, 222070], "mode": "CW" },
|
|
156
|
+
{ "name": "Phone", "mhz": [222070, 222150], "mode": "SSB", "submode": "USB" },
|
|
157
|
+
{ "name": "FM", "mhz": [222200, 225000], "mode": "FM" }
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
"70cm": {
|
|
161
|
+
"mhz": [420000, 450000],
|
|
162
|
+
"segments": [
|
|
163
|
+
{ "name": "CW", "mhz": [432000, 432100], "mode": "CW" },
|
|
164
|
+
{ "name": "Phone", "mhz": [432100, 432300], "mode": "SSB", "submode": "USB" },
|
|
165
|
+
{ "name": "Phone", "mhz": [432420, 433000], "mode": "SSB", "submode": "USB" },
|
|
166
|
+
{ "name": "FM", "mhz": [420000, 450000], "mode": "FM" }
|
|
167
|
+
]
|
|
168
|
+
},
|
|
169
|
+
"33cm": {
|
|
170
|
+
"mhz": [902000, 928000],
|
|
171
|
+
"segments": [
|
|
172
|
+
{ "name": "FM", "mhz": [927000, 928000], "mode": "FM" }
|
|
173
|
+
]
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const EXTENDED_BANDS: readonly ["2190m", "630m", "560m", "160m", "80m", "60m", "40m", "30m", "20m", "17m", "15m", "12m", "11m", "10m", "6m", "5m", "4m", "2m", "1.25m", "70cm", "33cm", "23cm", "13cm", "9cm", "6cm", "3cm", "1.25cm", "6mm", "4mm", "2.5mm", "2mm", "1mm", "submm", "other"];
|
|
2
|
+
export declare const BANDS: readonly ["2190m", "630m", "560m", "160m", "80m", "60m", "40m", "30m", "20m", "17m", "15m", "12m", "10m", "6m", "5m", "4m", "2m", "1.25m", "70cm", "33cm", "23cm", "13cm", "9cm", "6cm", "3cm", "1.25cm", "6mm", "4mm", "2.5mm", "2mm", "1mm", "submm", "other"];
|
|
3
|
+
export type Band = typeof EXTENDED_BANDS[number];
|
|
4
|
+
export declare const HF_BANDS: readonly ["160m", "80m", "60m", "40m", "30m", "20m", "17m", "15m", "12m", "10m"];
|
|
5
|
+
export declare const VHF_BANDS: readonly ["6m", "5m", "4m", "2m", "1.25m"];
|
|
6
|
+
export declare const UHF_BANDS: readonly ["70cm", "33cm", "23cm", "13cm"];
|
|
7
|
+
export declare const SHF_BANDS: readonly ["9cm", "6cm", "3cm", "1.25cm"];
|
|
8
|
+
export declare const EHF_BANDS: readonly ["6mm", "4mm", "2mm", "2.5mm", "1mm", "submm"];
|
|
9
|
+
export declare const POPULAR_BANDS: readonly ["160m", "80m", "60m", "40m", "30m", "20m", "17m", "15m", "12m", "10m", "6m", "2m", "70cm"];
|
|
10
|
+
export declare const CONTEST_BANDS: readonly ["160m", "80m", "40m", "20m", "15m", "10m"];
|
|
11
|
+
export declare function bandForFrequency(freq: number): Band;
|
|
12
|
+
export declare function frequencyForBand(band: Band, mode?: string): number | undefined;
|
|
13
|
+
//# sourceMappingURL=bands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bands.d.ts","sourceRoot":"","sources":["../../src/lib/bands.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,yQAmCjB,CAAA;AAEV,eAAO,MAAM,KAAK,kQAkCR,CAAA;AAEV,MAAM,MAAM,IAAI,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAA;AAEhD,eAAO,MAAM,QAAQ,kFAAmF,CAAA;AACxG,eAAO,MAAM,SAAS,4CAA6C,CAAA;AACnE,eAAO,MAAM,SAAS,2CAA4C,CAAA;AAClE,eAAO,MAAM,SAAS,0CAA2C,CAAA;AACjE,eAAO,MAAM,SAAS,yDAA0D,CAAA;AAEhF,eAAO,MAAM,aAAa,sGAAuG,CAAA;AACjI,eAAO,MAAM,aAAa,sDAAuD,CAAA;AAEjF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEnD;AAuCD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAwF9E"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
export const EXTENDED_BANDS = [
|
|
2
|
+
'2190m',
|
|
3
|
+
'630m',
|
|
4
|
+
'560m',
|
|
5
|
+
'160m',
|
|
6
|
+
'80m',
|
|
7
|
+
'60m',
|
|
8
|
+
'40m',
|
|
9
|
+
'30m',
|
|
10
|
+
'20m',
|
|
11
|
+
'17m',
|
|
12
|
+
'15m',
|
|
13
|
+
'12m',
|
|
14
|
+
'11m',
|
|
15
|
+
'10m',
|
|
16
|
+
'6m',
|
|
17
|
+
'5m',
|
|
18
|
+
'4m',
|
|
19
|
+
'2m',
|
|
20
|
+
'1.25m',
|
|
21
|
+
'70cm',
|
|
22
|
+
'33cm',
|
|
23
|
+
'23cm',
|
|
24
|
+
'13cm',
|
|
25
|
+
'9cm',
|
|
26
|
+
'6cm',
|
|
27
|
+
'3cm',
|
|
28
|
+
'1.25cm',
|
|
29
|
+
'6mm',
|
|
30
|
+
'4mm',
|
|
31
|
+
'2.5mm',
|
|
32
|
+
'2mm',
|
|
33
|
+
'1mm',
|
|
34
|
+
'submm',
|
|
35
|
+
'other'
|
|
36
|
+
];
|
|
37
|
+
export const BANDS = [
|
|
38
|
+
'2190m',
|
|
39
|
+
'630m',
|
|
40
|
+
'560m',
|
|
41
|
+
'160m',
|
|
42
|
+
'80m',
|
|
43
|
+
'60m',
|
|
44
|
+
'40m',
|
|
45
|
+
'30m',
|
|
46
|
+
'20m',
|
|
47
|
+
'17m',
|
|
48
|
+
'15m',
|
|
49
|
+
'12m',
|
|
50
|
+
'10m',
|
|
51
|
+
'6m',
|
|
52
|
+
'5m',
|
|
53
|
+
'4m',
|
|
54
|
+
'2m',
|
|
55
|
+
'1.25m',
|
|
56
|
+
'70cm',
|
|
57
|
+
'33cm',
|
|
58
|
+
'23cm',
|
|
59
|
+
'13cm',
|
|
60
|
+
'9cm',
|
|
61
|
+
'6cm',
|
|
62
|
+
'3cm',
|
|
63
|
+
'1.25cm',
|
|
64
|
+
'6mm',
|
|
65
|
+
'4mm',
|
|
66
|
+
'2.5mm',
|
|
67
|
+
'2mm',
|
|
68
|
+
'1mm',
|
|
69
|
+
'submm',
|
|
70
|
+
'other'
|
|
71
|
+
];
|
|
72
|
+
export const HF_BANDS = ['160m', '80m', '60m', '40m', '30m', '20m', '17m', '15m', '12m', '10m'];
|
|
73
|
+
export const VHF_BANDS = ['6m', '5m', '4m', '2m', '1.25m'];
|
|
74
|
+
export const UHF_BANDS = ['70cm', '33cm', '23cm', '13cm'];
|
|
75
|
+
export const SHF_BANDS = ['9cm', '6cm', '3cm', '1.25cm'];
|
|
76
|
+
export const EHF_BANDS = ['6mm', '4mm', '2mm', '2.5mm', '1mm', 'submm'];
|
|
77
|
+
export const POPULAR_BANDS = ['160m', '80m', '60m', '40m', '30m', '20m', '17m', '15m', '12m', '10m', '6m', '2m', '70cm'];
|
|
78
|
+
export const CONTEST_BANDS = ['160m', '80m', '40m', '20m', '15m', '10m'];
|
|
79
|
+
export function bandForFrequency(freq) {
|
|
80
|
+
return bandForExactFrequencyInMHz(freq) ?? bandForExactFrequencyInMHz(freq * 1000) ?? 'other';
|
|
81
|
+
}
|
|
82
|
+
function bandForExactFrequencyInMHz(freq) {
|
|
83
|
+
if (freq >= 130 && freq <= 140)
|
|
84
|
+
return '2190m';
|
|
85
|
+
else if (freq >= 450 && freq <= 499)
|
|
86
|
+
return '630m';
|
|
87
|
+
else if (freq >= 500 && freq <= 505)
|
|
88
|
+
return '560m';
|
|
89
|
+
else if (freq >= 1700 && freq <= 2100)
|
|
90
|
+
return '160m';
|
|
91
|
+
else if (freq >= 3400 && freq <= 4100)
|
|
92
|
+
return '80m';
|
|
93
|
+
else if (freq >= 5300 && freq <= 5500)
|
|
94
|
+
return '60m';
|
|
95
|
+
else if (freq >= 6900 && freq <= 7400)
|
|
96
|
+
return '40m';
|
|
97
|
+
else if (freq >= 10000 && freq <= 10200)
|
|
98
|
+
return '30m';
|
|
99
|
+
else if (freq >= 13900 && freq <= 14400)
|
|
100
|
+
return '20m';
|
|
101
|
+
else if (freq >= 18000 && freq <= 18200)
|
|
102
|
+
return '17m';
|
|
103
|
+
else if (freq >= 20900 && freq <= 21600)
|
|
104
|
+
return '15m';
|
|
105
|
+
else if (freq >= 24500 && freq <= 25200)
|
|
106
|
+
return '12m';
|
|
107
|
+
else if (freq >= 26000 && freq <= 27500)
|
|
108
|
+
return '11m';
|
|
109
|
+
else if (freq >= 27900 && freq <= 30000)
|
|
110
|
+
return '10m';
|
|
111
|
+
else if (freq >= 50000 && freq <= 54000)
|
|
112
|
+
return '6m';
|
|
113
|
+
else if (freq >= 54001 && freq <= 69999)
|
|
114
|
+
return '5m';
|
|
115
|
+
else if (freq >= 70000 && freq <= 71000)
|
|
116
|
+
return '4m';
|
|
117
|
+
else if (freq >= 140000 && freq <= 150000)
|
|
118
|
+
return '2m';
|
|
119
|
+
else if (freq >= 219000 && freq <= 230000)
|
|
120
|
+
return '1.25m';
|
|
121
|
+
else if (freq >= 400000 && freq <= 460000)
|
|
122
|
+
return '70cm';
|
|
123
|
+
else if (freq >= 900000 && freq <= 930000)
|
|
124
|
+
return '33cm';
|
|
125
|
+
else if (freq >= 1180000 && freq <= 1420000)
|
|
126
|
+
return '23cm';
|
|
127
|
+
else if (freq >= 2300000 && freq <= 2450000)
|
|
128
|
+
return '13cm';
|
|
129
|
+
else if (freq >= 3290000 && freq <= 3510000)
|
|
130
|
+
return '9cm';
|
|
131
|
+
else if (freq >= 5640000 && freq <= 5926000)
|
|
132
|
+
return '6cm';
|
|
133
|
+
else if (freq >= 10000000 && freq <= 10500000)
|
|
134
|
+
return '3cm';
|
|
135
|
+
else if (freq >= 24000000 && freq <= 24250000)
|
|
136
|
+
return '1.25cm';
|
|
137
|
+
else if (freq >= 47000000 && freq <= 47200000)
|
|
138
|
+
return '6mm';
|
|
139
|
+
else if (freq >= 75000000 && freq <= 81000000)
|
|
140
|
+
return '4mm';
|
|
141
|
+
else if (freq >= 122250000 && freq <= 123000000)
|
|
142
|
+
return '2.5mm';
|
|
143
|
+
else if (freq >= 134000000 && freq <= 141000000)
|
|
144
|
+
return '2mm';
|
|
145
|
+
else if (freq >= 241000000 && freq <= 250000000)
|
|
146
|
+
return '1mm';
|
|
147
|
+
else if (freq >= 300000000 && freq <= 7500000000)
|
|
148
|
+
return 'submm';
|
|
149
|
+
else
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
export function frequencyForBand(band, mode) {
|
|
153
|
+
if (band === '2190m')
|
|
154
|
+
return 135.7;
|
|
155
|
+
else if (band === '630m')
|
|
156
|
+
return 472;
|
|
157
|
+
else if (band === '560m')
|
|
158
|
+
return 501;
|
|
159
|
+
else if (band === '160m') {
|
|
160
|
+
if (mode === 'FT8' || mode === 'FT4')
|
|
161
|
+
return 1840;
|
|
162
|
+
else
|
|
163
|
+
return 1800;
|
|
164
|
+
}
|
|
165
|
+
else if (band === '80m') {
|
|
166
|
+
if (mode === 'SSB' || mode === 'LSB')
|
|
167
|
+
return 3800;
|
|
168
|
+
else if (mode === 'FT8')
|
|
169
|
+
return 3573;
|
|
170
|
+
else if (mode === 'FT4')
|
|
171
|
+
return 3575;
|
|
172
|
+
else
|
|
173
|
+
return 3000;
|
|
174
|
+
}
|
|
175
|
+
else if (band === '60m') {
|
|
176
|
+
if (mode === 'FT8')
|
|
177
|
+
return 5357;
|
|
178
|
+
else
|
|
179
|
+
return 5330;
|
|
180
|
+
}
|
|
181
|
+
else if (band === '40m') {
|
|
182
|
+
if (mode === 'SSB' || mode === 'LSB')
|
|
183
|
+
return 7175;
|
|
184
|
+
else if (mode === 'FT8')
|
|
185
|
+
return 7074;
|
|
186
|
+
else if (mode === 'FT4')
|
|
187
|
+
return 7047.5;
|
|
188
|
+
else
|
|
189
|
+
return 7000;
|
|
190
|
+
}
|
|
191
|
+
else if (band === '30m') {
|
|
192
|
+
if (mode === 'FT8')
|
|
193
|
+
return 10136;
|
|
194
|
+
else if (mode === 'FT4')
|
|
195
|
+
return 10140;
|
|
196
|
+
else
|
|
197
|
+
return 10100;
|
|
198
|
+
}
|
|
199
|
+
else if (band === '20m') {
|
|
200
|
+
if (mode === 'SSB' || mode === 'USB')
|
|
201
|
+
return 14225;
|
|
202
|
+
else if (mode === 'FT8')
|
|
203
|
+
return 14074;
|
|
204
|
+
else if (mode === 'FT4')
|
|
205
|
+
return 14080;
|
|
206
|
+
else
|
|
207
|
+
return 14000;
|
|
208
|
+
}
|
|
209
|
+
else if (band === '17m') {
|
|
210
|
+
if (mode === 'SSB' || mode === 'USB')
|
|
211
|
+
return 18110;
|
|
212
|
+
else if (mode === 'FT8')
|
|
213
|
+
return 18100;
|
|
214
|
+
else if (mode === 'FT4')
|
|
215
|
+
return 18104;
|
|
216
|
+
else
|
|
217
|
+
return 18068;
|
|
218
|
+
}
|
|
219
|
+
else if (band === '15m') {
|
|
220
|
+
if (mode === 'SSB' || mode === 'USB')
|
|
221
|
+
return 21275;
|
|
222
|
+
else if (mode === 'FT8')
|
|
223
|
+
return 21074;
|
|
224
|
+
else if (mode === 'FT4')
|
|
225
|
+
return 21140;
|
|
226
|
+
else
|
|
227
|
+
return 21000;
|
|
228
|
+
}
|
|
229
|
+
else if (band === '12m') {
|
|
230
|
+
if (mode === 'SSB' || mode === 'USB')
|
|
231
|
+
return 24930;
|
|
232
|
+
else if (mode === 'FT8')
|
|
233
|
+
return 24915;
|
|
234
|
+
else if (mode === 'FT4')
|
|
235
|
+
return 24919;
|
|
236
|
+
else
|
|
237
|
+
return 24890;
|
|
238
|
+
}
|
|
239
|
+
else if (band === '11m') {
|
|
240
|
+
return 26965;
|
|
241
|
+
}
|
|
242
|
+
else if (band === '10m') {
|
|
243
|
+
if (mode === 'SSB' || mode === 'USB')
|
|
244
|
+
return 28300;
|
|
245
|
+
else if (mode === 'FM' || mode === 'AM')
|
|
246
|
+
return 28500;
|
|
247
|
+
else if (mode === 'FT8')
|
|
248
|
+
return 28074;
|
|
249
|
+
else if (mode === 'FT4')
|
|
250
|
+
return 28180;
|
|
251
|
+
else
|
|
252
|
+
return 28000;
|
|
253
|
+
}
|
|
254
|
+
else if (band === '6m') {
|
|
255
|
+
if (mode === 'SSB' || mode === 'USB')
|
|
256
|
+
return 50125;
|
|
257
|
+
else if (mode === 'FT8')
|
|
258
|
+
return 50313;
|
|
259
|
+
else if (mode === 'FT4')
|
|
260
|
+
return 50318;
|
|
261
|
+
else
|
|
262
|
+
return 50000;
|
|
263
|
+
}
|
|
264
|
+
else if (band === '5m')
|
|
265
|
+
return 55000;
|
|
266
|
+
else if (band === '4m')
|
|
267
|
+
return 70090;
|
|
268
|
+
else if (band === '2m')
|
|
269
|
+
return 145400;
|
|
270
|
+
else if (band === '1.25m')
|
|
271
|
+
return 222000;
|
|
272
|
+
else if (band === '70cm')
|
|
273
|
+
return 420000;
|
|
274
|
+
else if (band === '33cm')
|
|
275
|
+
return 902000;
|
|
276
|
+
else if (band === '23cm')
|
|
277
|
+
return 1240000;
|
|
278
|
+
else if (band === '13cm')
|
|
279
|
+
return 2300000;
|
|
280
|
+
else if (band === '9cm')
|
|
281
|
+
return 3300000;
|
|
282
|
+
else if (band === '6cm')
|
|
283
|
+
return 5650000;
|
|
284
|
+
else if (band === '3cm')
|
|
285
|
+
return 10000000;
|
|
286
|
+
else if (band === '1.25cm')
|
|
287
|
+
return 24000000;
|
|
288
|
+
else if (band === '6mm')
|
|
289
|
+
return 47000000;
|
|
290
|
+
else if (band === '4mm')
|
|
291
|
+
return 75500000;
|
|
292
|
+
else if (band === '2.5mm')
|
|
293
|
+
return 122500000;
|
|
294
|
+
else if (band === '2mm')
|
|
295
|
+
return 134000000;
|
|
296
|
+
else if (band === '1mm')
|
|
297
|
+
return 241000000;
|
|
298
|
+
else if (band === 'submm')
|
|
299
|
+
return 300000000;
|
|
300
|
+
else
|
|
301
|
+
return undefined;
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=bands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bands.js","sourceRoot":"","sources":["../../src/lib/bands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ModeForFrequencyOptions } from '../types';
|
|
2
|
+
export declare const SUPER_MODES: readonly string[];
|
|
3
|
+
export type SuperMode = 'CW' | 'PHONE' | 'DATA';
|
|
4
|
+
export declare const MAIN_MODES: readonly string[];
|
|
5
|
+
export declare const POPULAR_MODES: readonly string[];
|
|
6
|
+
export declare const ADIF_MODES: readonly string[];
|
|
7
|
+
export declare const ADIF_SUBMODES: Record<string, readonly string[]>;
|
|
8
|
+
export declare const ADIF_MODE_FOR_SUBMODE: Record<string, string>;
|
|
9
|
+
export declare const ADIF_MODES_AND_SUBMODES: readonly string[];
|
|
10
|
+
export declare function adifModeAndSubmodeForMode(mode: string): string[];
|
|
11
|
+
export declare function superModeForMode(mode: string): SuperMode;
|
|
12
|
+
export declare function modeForFrequency(frequency: number, options?: ModeForFrequencyOptions): string | null | undefined;
|
|
13
|
+
//# sourceMappingURL=modes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modes.d.ts","sourceRoot":"","sources":["../../src/lib/modes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsC,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAE3F,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAI/B,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,CAAA;AAE/C,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EAQ9B,CAAA;AAEV,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EA0BjC,CAAA;AAEV,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EA+C9B,CAAA;AAEV,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAuBlD,CAAA;AAEV,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,CAAA;AAO/D,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAAiF,CAAA;AAEtI,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMhE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAUxD;AA0BD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CA2BpH"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import BandPlans from '../data/bandPlans.json';
|
|
2
|
+
export const SUPER_MODES = [
|
|
3
|
+
'CW',
|
|
4
|
+
'PHONE',
|
|
5
|
+
'DATA'
|
|
6
|
+
];
|
|
7
|
+
export const MAIN_MODES = [
|
|
8
|
+
'CW',
|
|
9
|
+
'SSB',
|
|
10
|
+
'AM',
|
|
11
|
+
'FM',
|
|
12
|
+
'FT8',
|
|
13
|
+
'FT4',
|
|
14
|
+
'RTTY'
|
|
15
|
+
];
|
|
16
|
+
export const POPULAR_MODES = [
|
|
17
|
+
'CW',
|
|
18
|
+
'SSB',
|
|
19
|
+
'USB',
|
|
20
|
+
'LSB',
|
|
21
|
+
'FM',
|
|
22
|
+
'AM',
|
|
23
|
+
'FT8',
|
|
24
|
+
'FT4',
|
|
25
|
+
'RTTY',
|
|
26
|
+
'DIGITALVOICE',
|
|
27
|
+
'C4FM',
|
|
28
|
+
'DMR',
|
|
29
|
+
'DSTAR',
|
|
30
|
+
'FREEDV',
|
|
31
|
+
'M17',
|
|
32
|
+
'DYNAMIC',
|
|
33
|
+
'HELL',
|
|
34
|
+
'JT9',
|
|
35
|
+
'MFSK',
|
|
36
|
+
'MSK144',
|
|
37
|
+
'OLIVIA',
|
|
38
|
+
'PKT',
|
|
39
|
+
'PSK',
|
|
40
|
+
'SSTV',
|
|
41
|
+
'WSPR',
|
|
42
|
+
];
|
|
43
|
+
export const ADIF_MODES = [
|
|
44
|
+
'AM',
|
|
45
|
+
'ARDOP',
|
|
46
|
+
'ATV',
|
|
47
|
+
'CHIP',
|
|
48
|
+
'CLO',
|
|
49
|
+
'CONTESTI',
|
|
50
|
+
'CW',
|
|
51
|
+
'DIGITALVOICE',
|
|
52
|
+
'DOMINO',
|
|
53
|
+
'DYNAMIC',
|
|
54
|
+
'FAX',
|
|
55
|
+
'FM',
|
|
56
|
+
'FSK441',
|
|
57
|
+
'FT8',
|
|
58
|
+
'HELL',
|
|
59
|
+
'ISCAT',
|
|
60
|
+
'JT4',
|
|
61
|
+
'JT6M',
|
|
62
|
+
'JT9',
|
|
63
|
+
'JT44',
|
|
64
|
+
'JT65',
|
|
65
|
+
'MFSK',
|
|
66
|
+
'MSK144',
|
|
67
|
+
'MT63',
|
|
68
|
+
'OLIVIA',
|
|
69
|
+
'OPERA',
|
|
70
|
+
'PAC',
|
|
71
|
+
'PAX',
|
|
72
|
+
'PKT',
|
|
73
|
+
'PSK',
|
|
74
|
+
'PSK2K',
|
|
75
|
+
'Q15',
|
|
76
|
+
'QRA64',
|
|
77
|
+
'ROS',
|
|
78
|
+
'RTTY',
|
|
79
|
+
'RTTYM',
|
|
80
|
+
'SSB',
|
|
81
|
+
'SSTV',
|
|
82
|
+
'T10',
|
|
83
|
+
'THOR',
|
|
84
|
+
'THRB',
|
|
85
|
+
'TOR',
|
|
86
|
+
'V4',
|
|
87
|
+
'VOI',
|
|
88
|
+
'WINMOR',
|
|
89
|
+
'WSPR'
|
|
90
|
+
];
|
|
91
|
+
export const ADIF_SUBMODES = {
|
|
92
|
+
'CHIP': ['CHIP64', 'CHIP128'],
|
|
93
|
+
'DIGITALVOICE': ['C4FM', 'DMR', 'DSTAR', 'FREEDV', 'M17'],
|
|
94
|
+
'DOMINO': ['DOM-M', 'DOM4', 'DOM5', 'DOM8', 'DOM11', 'DOM16', 'DOM22', 'DOM44', 'DOM88', 'DOMINOEX', 'DOMINOF'],
|
|
95
|
+
'DYNAMIC': ['VARA HF', 'VARA SATELLITE', 'VARA FM 1200', 'VARA FM 9600'],
|
|
96
|
+
'HELL': ['FMHELL', 'FSKHELL', 'HELL80', 'HELLX5', 'HELLX9', 'HFSK', 'PSKHELL', 'SLOWHELL'],
|
|
97
|
+
'ISCAT': ['ISCAT-A', 'ISCAT-B'],
|
|
98
|
+
'JT4': ['JT4A', 'JT4B', 'JT4C', 'JT4D', 'JT4E', 'JT4F', 'JT4G'],
|
|
99
|
+
'JT9': ['JT9-1', 'JT9', 'JT9-2', 'JT9-5', 'JT9-10', 'JT9-30', 'JT9A', 'JT9B', 'JT9C', 'JT9D', 'JT9E', 'JT9E FAST', 'JT9F', 'JT9F FAST', 'JT9G', 'JT9G FAST', 'JT9H', 'JT9H FAST'],
|
|
100
|
+
'JT65': ['JT65A', 'JT65B', 'JT65B2', 'JT65C', 'JT65C2'],
|
|
101
|
+
'MFSK': ['FSQCALL', 'FST4', 'FST4W', 'FT4', 'JS8', 'JTMS', 'MFSK4', 'MFSK8', 'MFSK11', 'MFSK16', 'MFSK22', 'MFSK31', 'MFSK32', 'MFSK64', 'MFSK64L', 'MFSK128 MFSK128L', 'Q65'],
|
|
102
|
+
'OLIVIA': ['OLIVIA 4/125', 'OLIVIA 4/250', 'OLIVIA 8/250', 'OLIVIA 8/500', 'OLIVIA 16/500', 'OLIVIA 16/1000', 'OLIVIA 32/1000'],
|
|
103
|
+
'OPERA': ['OPERA-BEACON', 'OPERA-QSO'],
|
|
104
|
+
'PAC': ['PAC2', 'PAC3', 'PAC4'],
|
|
105
|
+
'PAX': ['PAX2'],
|
|
106
|
+
'PSK': ['8PSK125', '8PSK125F', '8PSK125FL', '8PSK250', '8PSK250F', '8PSK250FL', '8PSK500', '8PSK500F', '8PSK1000', '8PSK1000F', '8PSK1200F', 'FSK31', 'PSK10', 'PSK31', 'PSK63', 'PSK63F', 'PSK63RC4', 'PSK63RC5', 'PSK63RC10', 'PSK63RC20', 'PSK63RC32', 'PSK125', 'PSK125C12', 'PSK125R', 'PSK125RC10', 'PSK125RC12', 'PSK125RC16', 'PSK125RC4', 'PSK125RC5', 'PSK250', 'PSK250C6', 'PSK250R', 'PSK250RC2', 'PSK250RC3', 'PSK250RC5', 'PSK250RC6', 'PSK250RC7', 'PSK500', 'PSK500C2', 'PSK500C4', 'PSK500R', 'PSK500RC2', 'PSK500RC3', 'PSK500RC4', 'PSK800C2', 'PSK800RC2', 'PSK1000', 'PSK1000C2', 'PSK1000R', 'PSK1000RC2', 'PSKAM10', 'PSKAM31', 'PSKAM50', 'PSKFEC31', 'QPSK31', 'QPSK63', 'QPSK125', 'QPSK250', 'QPSK500', 'SIM31'],
|
|
107
|
+
'QRA64': ['QRA64A', 'QRA64B', 'QRA64C', 'QRA64D', 'QRA64E'],
|
|
108
|
+
'ROS': ['ROS-EME', 'ROS-HF', 'ROS-MF'],
|
|
109
|
+
'RTTY': ['ASCI'],
|
|
110
|
+
'SSB': ['LSB', 'USB'],
|
|
111
|
+
'THOR': ['THOR-M', 'THOR4', 'THOR5', 'THOR8', 'THOR11', 'THOR16', 'THOR22', 'THOR25X4', 'THOR50X1', 'THOR50X2', 'THOR100'],
|
|
112
|
+
'THRB': ['THRBX', 'THRBX1', 'THRBX2', 'THRBX4', 'THROB1', 'THROB2', 'THROB4'],
|
|
113
|
+
'TOR': ['AMTORFEC', 'GTOR', 'NAVTEX', 'SITORB']
|
|
114
|
+
};
|
|
115
|
+
export const ADIF_MODE_FOR_SUBMODE = {};
|
|
116
|
+
Object.keys(ADIF_SUBMODES).forEach(mode => {
|
|
117
|
+
ADIF_SUBMODES[mode].forEach(submode => {
|
|
118
|
+
ADIF_MODE_FOR_SUBMODE[submode] = mode;
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
export const ADIF_MODES_AND_SUBMODES = [...new Set([...ADIF_MODES, ...Object.values(ADIF_SUBMODES).flat()])].sort();
|
|
122
|
+
export function adifModeAndSubmodeForMode(mode) {
|
|
123
|
+
if (ADIF_MODE_FOR_SUBMODE[mode]) {
|
|
124
|
+
return [ADIF_MODE_FOR_SUBMODE[mode], mode];
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
return [mode];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
export function superModeForMode(mode) {
|
|
131
|
+
if (ADIF_MODE_FOR_SUBMODE[mode])
|
|
132
|
+
mode = ADIF_MODE_FOR_SUBMODE[mode];
|
|
133
|
+
if (mode === 'CW') {
|
|
134
|
+
return 'CW';
|
|
135
|
+
}
|
|
136
|
+
else if (mode === 'SSB' || mode === 'FM' || mode === 'AM' || mode === 'DIGITALVOICE' || mode === 'PHONE') {
|
|
137
|
+
return 'PHONE';
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
return 'DATA';
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const bandPlansData = BandPlans;
|
|
144
|
+
const AllSegments = Object.keys(bandPlansData.bands).reduce((segments, band) => {
|
|
145
|
+
return segments.concat(bandPlansData.bands[band].segments.map(segment => {
|
|
146
|
+
const mhz = Array.isArray(segment.mhz) && segment.mhz.length >= 2
|
|
147
|
+
? [segment.mhz[0], segment.mhz[1]]
|
|
148
|
+
: [0, 0];
|
|
149
|
+
return {
|
|
150
|
+
name: segment.name,
|
|
151
|
+
mode: segment.mode,
|
|
152
|
+
submode: segment.submode,
|
|
153
|
+
priority: segment.priority,
|
|
154
|
+
mhz,
|
|
155
|
+
band,
|
|
156
|
+
width: mhz[1] - mhz[0],
|
|
157
|
+
regions: (segment.regions || []).reduce((regions, region) => { regions[region.toString()] = true; return regions; }, {}),
|
|
158
|
+
entities: (segment.entities || []).reduce((entities, entity) => { entities[entity] = true; return entities; }, {}),
|
|
159
|
+
countries: (segment.countries || []).reduce((countries, country) => { countries[country] = true; return countries; }, {}),
|
|
160
|
+
};
|
|
161
|
+
}));
|
|
162
|
+
}, []);
|
|
163
|
+
export function modeForFrequency(frequency, options = {}) {
|
|
164
|
+
const { ituRegion, countryCode, entityPrefix } = options;
|
|
165
|
+
const segments = AllSegments.filter(segment => ((segment.mhz[0] <= frequency && segment.mhz[1] >= frequency) &&
|
|
166
|
+
(!entityPrefix || Object.keys(segment.entities).length === 0 || segment.entities[entityPrefix]) &&
|
|
167
|
+
(!countryCode || Object.keys(segment.countries).length === 0 || segment.countries[countryCode]) &&
|
|
168
|
+
(!ituRegion || Object.keys(segment.regions).length === 0 || segment.regions[ituRegion.toString()])));
|
|
169
|
+
const sortedSegments = segments.sort((a, b) => {
|
|
170
|
+
if ((a.priority ?? 0) < (b.priority ?? 0))
|
|
171
|
+
return 1;
|
|
172
|
+
if ((a.priority ?? 0) > (b.priority ?? 0))
|
|
173
|
+
return -1;
|
|
174
|
+
if (entityPrefix && !a.entities[entityPrefix] && b.entities[entityPrefix])
|
|
175
|
+
return 1;
|
|
176
|
+
if (entityPrefix && a.entities[entityPrefix] && !b.entities[entityPrefix])
|
|
177
|
+
return -1;
|
|
178
|
+
if (countryCode && !a.countries[countryCode] && b.countries[countryCode])
|
|
179
|
+
return 1;
|
|
180
|
+
if (countryCode && a.countries[countryCode] && !b.countries[countryCode])
|
|
181
|
+
return -1;
|
|
182
|
+
if (ituRegion && !a.regions[ituRegion.toString()] && b.regions[ituRegion.toString()])
|
|
183
|
+
return 1;
|
|
184
|
+
if (ituRegion && a.regions[ituRegion.toString()] && !b.regions[ituRegion.toString()])
|
|
185
|
+
return -1;
|
|
186
|
+
return a.width - b.width;
|
|
187
|
+
});
|
|
188
|
+
return sortedSegments[0]?.mode;
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=modes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modes.js","sourceRoot":"","sources":["../../src/lib/modes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modes.spec.d.ts","sourceRoot":"","sources":["../../src/lib/modes.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { modeForFrequency } from './modes';
|
|
2
|
+
describe('modeForFrequency', () => {
|
|
3
|
+
it('should find the most common mode for a frequency', () => {
|
|
4
|
+
expect(modeForFrequency(14255)).toEqual('SSB');
|
|
5
|
+
expect(modeForFrequency(14107)).toEqual('CW');
|
|
6
|
+
expect(modeForFrequency(14074)).toEqual('FT8');
|
|
7
|
+
});
|
|
8
|
+
it('should handle different bandplans for different regions', () => {
|
|
9
|
+
expect(modeForFrequency(14140)).toEqual('CW');
|
|
10
|
+
expect(modeForFrequency(14140, { ituRegion: 2 })).toEqual('SSB');
|
|
11
|
+
});
|
|
12
|
+
it('should handle different priorities', () => {
|
|
13
|
+
// ituRegion 2 should make CW be the match for 14074, but priority 100 for FT8 should make FT8 the match
|
|
14
|
+
expect(modeForFrequency(14074, { ituRegion: 2 })).toEqual('FT8');
|
|
15
|
+
});
|
|
16
|
+
// The current bandplan data does not have any entity-specific segments
|
|
17
|
+
// TODO: mock data for this test
|
|
18
|
+
// it('should handle different bandplans for different entities', () => {
|
|
19
|
+
// expect(modeForFrequency(14140, { entityPrefix: 'K' })).toEqual('CW')
|
|
20
|
+
// expect(modeForFrequency(14140, { entityPrefix: 'VK' })).toBeNull()
|
|
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();
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=modes.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modes.spec.js","sourceRoot":"","sources":["../../src/lib/modes.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE1C,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC9C,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC7C,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC7C,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,wGAAwG;QACxG,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;IAEF,uEAAuE;IACvE,gCAAgC;IAChC,yEAAyE;IACzE,yEAAyE;IACzE,uEAAuE;IACvE,KAAK;IAEL,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAClE,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACjE,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAClE,CAAC,CAAC,CAAA;AAEJ,CAAC,CAAC,CAAA"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface BandPlanSegment {
|
|
2
|
+
name: string;
|
|
3
|
+
mhz: [number, number] | number[];
|
|
4
|
+
mode?: string | null;
|
|
5
|
+
submode?: string;
|
|
6
|
+
priority?: number;
|
|
7
|
+
regions?: number[];
|
|
8
|
+
entities?: string[];
|
|
9
|
+
countries?: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface BandPlan {
|
|
12
|
+
mhz: [number, number] | number[];
|
|
13
|
+
segments: BandPlanSegment[];
|
|
14
|
+
}
|
|
15
|
+
export interface BandPlansData {
|
|
16
|
+
sources: Array<{
|
|
17
|
+
url: string;
|
|
18
|
+
}>;
|
|
19
|
+
bands: Record<string, BandPlan>;
|
|
20
|
+
}
|
|
21
|
+
export interface SegmentWithMetadata {
|
|
22
|
+
name: string;
|
|
23
|
+
mhz: [number, number];
|
|
24
|
+
mode?: string | null;
|
|
25
|
+
submode?: string;
|
|
26
|
+
priority?: number;
|
|
27
|
+
band: string;
|
|
28
|
+
width: number;
|
|
29
|
+
regions: Record<string, boolean>;
|
|
30
|
+
entities: Record<string, boolean>;
|
|
31
|
+
countries: Record<string, boolean>;
|
|
32
|
+
}
|
|
33
|
+
export interface ModeForFrequencyOptions {
|
|
34
|
+
ituRegion?: number;
|
|
35
|
+
countryCode?: string;
|
|
36
|
+
entityPrefix?: string;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAA;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAA;IAChC,QAAQ,EAAE,eAAe,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ham2k/lib-operation-data",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"src"
|
|
10
|
+
],
|
|
7
11
|
"exports": {
|
|
8
12
|
".": {
|
|
9
13
|
"types": "./dist/index.d.ts",
|
package/src/lib/bands.ts
CHANGED
|
@@ -1,3 +1,40 @@
|
|
|
1
|
+
export const EXTENDED_BANDS = [ // Includes 11m
|
|
2
|
+
'2190m',
|
|
3
|
+
'630m',
|
|
4
|
+
'560m',
|
|
5
|
+
'160m',
|
|
6
|
+
'80m',
|
|
7
|
+
'60m',
|
|
8
|
+
'40m',
|
|
9
|
+
'30m',
|
|
10
|
+
'20m',
|
|
11
|
+
'17m',
|
|
12
|
+
'15m',
|
|
13
|
+
'12m',
|
|
14
|
+
'11m',
|
|
15
|
+
'10m',
|
|
16
|
+
'6m',
|
|
17
|
+
'5m',
|
|
18
|
+
'4m',
|
|
19
|
+
'2m',
|
|
20
|
+
'1.25m',
|
|
21
|
+
'70cm',
|
|
22
|
+
'33cm',
|
|
23
|
+
'23cm',
|
|
24
|
+
'13cm',
|
|
25
|
+
'9cm',
|
|
26
|
+
'6cm',
|
|
27
|
+
'3cm',
|
|
28
|
+
'1.25cm',
|
|
29
|
+
'6mm',
|
|
30
|
+
'4mm',
|
|
31
|
+
'2.5mm',
|
|
32
|
+
'2mm',
|
|
33
|
+
'1mm',
|
|
34
|
+
'submm',
|
|
35
|
+
'other'
|
|
36
|
+
] as const
|
|
37
|
+
|
|
1
38
|
export const BANDS = [
|
|
2
39
|
'2190m',
|
|
3
40
|
'630m',
|
|
@@ -34,7 +71,7 @@ export const BANDS = [
|
|
|
34
71
|
'other'
|
|
35
72
|
] as const
|
|
36
73
|
|
|
37
|
-
export type Band = typeof
|
|
74
|
+
export type Band = typeof EXTENDED_BANDS[number]
|
|
38
75
|
|
|
39
76
|
export const HF_BANDS = ['160m', '80m', '60m', '40m', '30m', '20m', '17m', '15m', '12m', '10m'] as const
|
|
40
77
|
export const VHF_BANDS = ['6m', '5m', '4m', '2m', '1.25m'] as const
|
|
@@ -62,6 +99,7 @@ function bandForExactFrequencyInMHz(freq: number): Band | undefined {
|
|
|
62
99
|
else if (freq >= 18000 && freq <= 18200) return '17m'
|
|
63
100
|
else if (freq >= 20900 && freq <= 21600) return '15m'
|
|
64
101
|
else if (freq >= 24500 && freq <= 25200) return '12m'
|
|
102
|
+
else if (freq >= 26000 && freq <= 27500) return '11m'
|
|
65
103
|
else if (freq >= 27900 && freq <= 30000) return '10m'
|
|
66
104
|
else if (freq >= 50000 && freq <= 54000) return '6m'
|
|
67
105
|
else if (freq >= 54001 && freq <= 69999) return '5m'
|
|
@@ -138,6 +176,9 @@ export function frequencyForBand(band: Band, mode?: string): number | undefined
|
|
|
138
176
|
else if (mode === 'FT4') return 24919
|
|
139
177
|
else return 24890
|
|
140
178
|
}
|
|
179
|
+
else if (band === '11m') {
|
|
180
|
+
return 26965
|
|
181
|
+
}
|
|
141
182
|
else if (band === '10m') {
|
|
142
183
|
if (mode === 'SSB' || mode === 'USB') return 28300
|
|
143
184
|
else if (mode === 'FM' || mode === 'AM') return 28500
|
package/src/lib/modes.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import BandPlans from '../data/bandPlans.json'
|
|
2
2
|
import type { BandPlansData, SegmentWithMetadata, ModeForFrequencyOptions } from '../types'
|
|
3
3
|
|
|
4
|
-
export const SUPER_MODES = [
|
|
4
|
+
export const SUPER_MODES: readonly string[] = [
|
|
5
5
|
'CW',
|
|
6
6
|
'PHONE',
|
|
7
7
|
'DATA'
|
|
8
8
|
] as const
|
|
9
9
|
|
|
10
|
-
export type SuperMode =
|
|
10
|
+
export type SuperMode = 'CW' | 'PHONE' | 'DATA'
|
|
11
11
|
|
|
12
|
-
export const MAIN_MODES = [
|
|
12
|
+
export const MAIN_MODES: readonly string[] = [
|
|
13
13
|
'CW',
|
|
14
14
|
'SSB',
|
|
15
15
|
'AM',
|
|
@@ -19,9 +19,7 @@ export const MAIN_MODES = [
|
|
|
19
19
|
'RTTY'
|
|
20
20
|
] as const
|
|
21
21
|
|
|
22
|
-
export
|
|
23
|
-
|
|
24
|
-
export const POPULAR_MODES = [
|
|
22
|
+
export const POPULAR_MODES: readonly string[] = [
|
|
25
23
|
'CW',
|
|
26
24
|
'SSB',
|
|
27
25
|
'USB',
|
|
@@ -49,9 +47,7 @@ export const POPULAR_MODES = [
|
|
|
49
47
|
'WSPR',
|
|
50
48
|
] as const
|
|
51
49
|
|
|
52
|
-
export
|
|
53
|
-
|
|
54
|
-
export const ADIF_MODES = [
|
|
50
|
+
export const ADIF_MODES: readonly string[] = [
|
|
55
51
|
'AM',
|
|
56
52
|
'ARDOP',
|
|
57
53
|
'ATV',
|
|
@@ -100,8 +96,6 @@ export const ADIF_MODES = [
|
|
|
100
96
|
'WSPR'
|
|
101
97
|
] as const
|
|
102
98
|
|
|
103
|
-
export type AdifMode = typeof ADIF_MODES[number]
|
|
104
|
-
|
|
105
99
|
export const ADIF_SUBMODES: Record<string, readonly string[]> = {
|
|
106
100
|
'CHIP': ['CHIP64', 'CHIP128'],
|
|
107
101
|
'DIGITALVOICE': ['C4FM', 'DMR', 'DSTAR', 'FREEDV', 'M17'],
|
package/jest.config.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export default {
|
|
2
|
-
preset: 'ts-jest/presets/default-esm',
|
|
3
|
-
extensionsToTreatAsEsm: ['.ts'],
|
|
4
|
-
testEnvironment: 'node',
|
|
5
|
-
transform: {
|
|
6
|
-
'^.+\\.ts$': ['ts-jest', {
|
|
7
|
-
useESM: true,
|
|
8
|
-
tsconfig: {
|
|
9
|
-
module: 'ES2020',
|
|
10
|
-
moduleResolution: 'node'
|
|
11
|
-
}
|
|
12
|
-
}]
|
|
13
|
-
},
|
|
14
|
-
moduleNameMapper: {
|
|
15
|
-
'^(\\.{1,2}/.*)\\.js$': '$1',
|
|
16
|
-
'^(\\.{1,2}/.*)\\.json$': '$1'
|
|
17
|
-
},
|
|
18
|
-
testMatch: ['**/*.spec.ts', '**/*.test.ts'],
|
|
19
|
-
transformIgnorePatterns: []
|
|
20
|
-
}
|
|
21
|
-
|
package/tsconfig.json
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2020",
|
|
4
|
-
"module": "ES2020",
|
|
5
|
-
"lib": ["ES2020"],
|
|
6
|
-
"moduleResolution": "node",
|
|
7
|
-
"outDir": "./dist",
|
|
8
|
-
"rootDir": "./src",
|
|
9
|
-
"strict": true,
|
|
10
|
-
"esModuleInterop": true,
|
|
11
|
-
"skipLibCheck": true,
|
|
12
|
-
"forceConsistentCasingInFileNames": true,
|
|
13
|
-
"resolveJsonModule": true,
|
|
14
|
-
"declaration": true,
|
|
15
|
-
"declarationMap": true,
|
|
16
|
-
"sourceMap": true
|
|
17
|
-
},
|
|
18
|
-
"include": ["src/**/*"],
|
|
19
|
-
"exclude": ["node_modules", "dist"]
|
|
20
|
-
}
|
|
21
|
-
|