hfbcast 1.0.0 → 1.0.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/.vscode/tasks.json +28 -0
- package/README.md +30 -30
- package/assets/database.sqlite.gz +0 -0
- package/dist/demo.js +28 -60
- package/dist/index.html +12 -12
- package/dist/rfdfhfbroadcast.js +27 -59
- package/package.json +1 -1
- package/release +1 -0
- package/scripts/build.js +19 -0
- package/scripts/cicd/jobs.sh +14 -0
- package/scripts/local/publish.bat +11 -0
- package/sources/shortwave_AOKI.html +10191 -10065
- package/sources/shortwave_EIBI.html +16279 -19087
- package/sources/shortwave_HFCC.html +5594 -5171
- package/sqlite/build.ts +127 -127
- package/sqlite/data-source.ts +17 -17
- package/sqlite/entity/Broadcast.ts +38 -38
- package/sqlite/entity/Site.ts +26 -26
- package/sqlite/package-lock.json +2303 -0
- package/sqlite/package.json +17 -17
- package/src/demo.html +12 -12
- package/src/demo.js +6 -6
- package/src/index.d.ts +33 -33
- package/src/index.js +84 -83
- package/tsconfig.json +14 -14
- package/webpack.config.js +27 -27
- package/dist/database.sqlite.gz +0 -0
package/sqlite/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "sqlite",
|
|
3
|
-
"version": "1.0.1",
|
|
4
|
-
"description": "",
|
|
5
|
-
"dependencies": {
|
|
6
|
-
"@types/node": "^18.13.0",
|
|
7
|
-
"jsdom": "^21.1.0",
|
|
8
|
-
"reflect-metadata": "^0.1.13",
|
|
9
|
-
"sqlite3": "^5.1.4",
|
|
10
|
-
"ts-node": "^10.9.1",
|
|
11
|
-
"typeorm": "^0.3.12",
|
|
12
|
-
"typescript": "^4.9.5"
|
|
13
|
-
},
|
|
14
|
-
"scripts": {
|
|
15
|
-
"build": "ts-node build.ts"
|
|
16
|
-
}
|
|
17
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "sqlite",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "",
|
|
5
|
+
"dependencies": {
|
|
6
|
+
"@types/node": "^18.13.0",
|
|
7
|
+
"jsdom": "^21.1.0",
|
|
8
|
+
"reflect-metadata": "^0.1.13",
|
|
9
|
+
"sqlite3": "^5.1.4",
|
|
10
|
+
"ts-node": "^10.9.1",
|
|
11
|
+
"typeorm": "^0.3.12",
|
|
12
|
+
"typescript": "^4.9.5"
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "ts-node build.ts"
|
|
16
|
+
}
|
|
17
|
+
}
|
package/src/demo.html
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<title>Title</title>
|
|
6
|
-
</head>
|
|
7
|
-
<body style="font-family: monospace">
|
|
8
|
-
database url ......... <input value="http://localhost:3333/database.sqlite.gz" style="width:300px"><br>
|
|
9
|
-
min frequency (kHz) .. <input value="0"><br>
|
|
10
|
-
max frequency (kHz) .. <input value="30000"><br><br>
|
|
11
|
-
<button>get broadcasts</button><br>
|
|
12
|
-
</body>
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<title>Title</title>
|
|
6
|
+
</head>
|
|
7
|
+
<body style="font-family: monospace">
|
|
8
|
+
database url ......... <input value="http://localhost:3333/database.sqlite.gz" style="width:300px"><br>
|
|
9
|
+
min frequency (kHz) .. <input value="0"><br>
|
|
10
|
+
max frequency (kHz) .. <input value="30000"><br><br>
|
|
11
|
+
<button>get broadcasts</button><br>
|
|
12
|
+
</body>
|
|
13
13
|
</html>
|
package/src/demo.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {BroadcastDb} from "
|
|
2
|
-
|
|
3
|
-
(new BroadcastDb(
|
|
4
|
-
const result = db.getBroadcastsBetween(0,30000);
|
|
5
|
-
console.log(result);
|
|
6
|
-
})
|
|
1
|
+
import {BroadcastDb} from "."
|
|
2
|
+
|
|
3
|
+
(new BroadcastDb()).then(db => {
|
|
4
|
+
const result = db.getBroadcastsBetween(0,30000);
|
|
5
|
+
console.log(result);
|
|
6
|
+
})
|
package/src/index.d.ts
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A broadcast database entry
|
|
3
|
-
*/
|
|
4
|
-
declare type broadcastEntry = {
|
|
5
|
-
values: any[],
|
|
6
|
-
columns: any[]
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* A database class for HF broadcasts
|
|
11
|
-
*/
|
|
12
|
-
export declare class BroadcastDb {
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Constructor
|
|
16
|
-
* @param {string} gzUrl URL of a gzipped sqlite3 database file
|
|
17
|
-
*/
|
|
18
|
-
constructor();
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Get broadcasts between two frequencies given in KHz
|
|
22
|
-
* @param {number} minFreqkHz minimum frequency
|
|
23
|
-
* @param {number} maxFreqkHz maximum frequency
|
|
24
|
-
*/
|
|
25
|
-
getBroadcastsBetween(minFreqkHz: number, maxFreqkHz: number): broadcastEntry[];
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Get broadcasts in an interval around at a center frequency in KHz
|
|
29
|
-
* @param {number} frequencykHz center frequency
|
|
30
|
-
* @param {number} intervalkHz frequency interval
|
|
31
|
-
*/
|
|
32
|
-
getBroadcastsAt(frequencyKHz: number, intervalKHz: number): broadcastEntry[];
|
|
33
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* A broadcast database entry
|
|
3
|
+
*/
|
|
4
|
+
declare type broadcastEntry = {
|
|
5
|
+
values: any[],
|
|
6
|
+
columns: any[]
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* A database class for HF broadcasts
|
|
11
|
+
*/
|
|
12
|
+
export declare class BroadcastDb {
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Constructor
|
|
16
|
+
* @param {string} gzUrl URL of a gzipped sqlite3 database file
|
|
17
|
+
*/
|
|
18
|
+
constructor();
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Get broadcasts between two frequencies given in KHz
|
|
22
|
+
* @param {number} minFreqkHz minimum frequency
|
|
23
|
+
* @param {number} maxFreqkHz maximum frequency
|
|
24
|
+
*/
|
|
25
|
+
getBroadcastsBetween(minFreqkHz: number, maxFreqkHz: number): broadcastEntry[];
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Get broadcasts in an interval around at a center frequency in KHz
|
|
29
|
+
* @param {number} frequencykHz center frequency
|
|
30
|
+
* @param {number} intervalkHz frequency interval
|
|
31
|
+
*/
|
|
32
|
+
getBroadcastsAt(frequencyKHz: number, intervalKHz: number): broadcastEntry[];
|
|
33
|
+
}
|
package/src/index.js
CHANGED
|
@@ -1,83 +1,84 @@
|
|
|
1
|
-
import dumm from "sql.js";
|
|
2
|
-
import pako from "pako";
|
|
3
|
-
import sqlwasm from 'url-loader!sql.js/dist/sql-wasm.wasm'
|
|
4
|
-
import gzUrl from
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
broadcast.
|
|
44
|
-
broadcast.frequency
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
broadcast.
|
|
66
|
-
broadcast.frequency
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
1
|
+
import dumm from "sql.js";
|
|
2
|
+
import pako from "pako";
|
|
3
|
+
import sqlwasm from 'url-loader!sql.js/dist/sql-wasm.wasm'
|
|
4
|
+
import gzUrl from 'url-loader!../assets/database.sqlite.gz'
|
|
5
|
+
// import gzUrl from "file-loader?name=database.sqlite.gz!../assets/database.sqlite.gz";
|
|
6
|
+
|
|
7
|
+
async function openDb() {
|
|
8
|
+
return new Promise(resolve => {
|
|
9
|
+
fetch(sqlwasm).then(res => res.blob()).then(async blob => {
|
|
10
|
+
const sqlPromise = dumm({
|
|
11
|
+
locateFile: () => URL.createObjectURL(blob)
|
|
12
|
+
});
|
|
13
|
+
const dataPromise = fetch(gzUrl).then(res => res.arrayBuffer());
|
|
14
|
+
const [SQL, buf] = await Promise.all([sqlPromise, dataPromise])
|
|
15
|
+
const db = new SQL.Database(new Uint8Array(pako.ungzip(buf)));
|
|
16
|
+
resolve(db);
|
|
17
|
+
})
|
|
18
|
+
})
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export class BroadcastDb {
|
|
22
|
+
|
|
23
|
+
constructor() {
|
|
24
|
+
return new Promise(async resolve => {
|
|
25
|
+
this.db = await openDb();
|
|
26
|
+
resolve(this)
|
|
27
|
+
})
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
getBroadcastsBetween(minFreqkHz, maxFreqkHz) {
|
|
31
|
+
|
|
32
|
+
const now = new Date();
|
|
33
|
+
const currentDay = now.getUTCDay();
|
|
34
|
+
const currentHour = now.getUTCHours();
|
|
35
|
+
const currentMinute = now.getUTCMinutes();
|
|
36
|
+
const currentTime = currentMinute + 60*currentHour;
|
|
37
|
+
|
|
38
|
+
const query = `SELECT * FROM broadcast
|
|
39
|
+
JOIN site on broadcast.siteId = site.id
|
|
40
|
+
WHERE broadcast.startTime <= ${currentTime} AND
|
|
41
|
+
broadcast.endTime >= ${currentTime} AND
|
|
42
|
+
NOT (site.lat = 0 AND site.lon = 0) AND
|
|
43
|
+
broadcast.days & (1 << ${currentDay}) != 0 AND
|
|
44
|
+
broadcast.frequency <= ${maxFreqkHz} AND
|
|
45
|
+
broadcast.frequency >= ${minFreqkHz}
|
|
46
|
+
`
|
|
47
|
+
const res = this.db.exec(query);
|
|
48
|
+
|
|
49
|
+
return res[0];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
getBroadcastsAt(frequencyKHz, intervalKHz) {
|
|
53
|
+
|
|
54
|
+
const now = new Date();
|
|
55
|
+
const currentDay = now.getUTCDay();
|
|
56
|
+
const currentHour = now.getUTCHours();
|
|
57
|
+
const currentMinute = now.getUTCMinutes();
|
|
58
|
+
const currentTime = currentMinute + 60*currentHour;
|
|
59
|
+
|
|
60
|
+
const query = `SELECT * FROM broadcast
|
|
61
|
+
JOIN site on broadcast.siteId = site.id
|
|
62
|
+
WHERE broadcast.startTime <= ${currentTime} AND
|
|
63
|
+
broadcast.endTime >= ${currentTime} AND
|
|
64
|
+
NOT (site.lat = 0 AND site.lon = 0) AND
|
|
65
|
+
broadcast.days & (1 << ${currentDay}) != 0 AND
|
|
66
|
+
broadcast.frequency <= ${intervalKHz + frequencyKHz/1000} AND
|
|
67
|
+
broadcast.frequency >= ${-intervalKHz + frequencyKHz/1000}
|
|
68
|
+
`
|
|
69
|
+
|
|
70
|
+
const broadcasts = [];
|
|
71
|
+
const res = this.db.exec(query);
|
|
72
|
+
if (res.length > 0) {
|
|
73
|
+
res[0].values.forEach(c => {
|
|
74
|
+
const broadcast = {};
|
|
75
|
+
c.forEach((colvalue, i) => {
|
|
76
|
+
broadcast[res[0].columns[i]] = colvalue;
|
|
77
|
+
})
|
|
78
|
+
broadcasts.push(broadcast);
|
|
79
|
+
})
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return broadcasts;
|
|
83
|
+
}
|
|
84
|
+
}
|
package/tsconfig.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"lib": [
|
|
4
|
-
"es5",
|
|
5
|
-
"es6"
|
|
6
|
-
],
|
|
7
|
-
"target": "es5",
|
|
8
|
-
"module": "commonjs",
|
|
9
|
-
"moduleResolution": "node",
|
|
10
|
-
"outDir": "./build",
|
|
11
|
-
"emitDecoratorMetadata": true,
|
|
12
|
-
"experimentalDecorators": true,
|
|
13
|
-
"sourceMap": true
|
|
14
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"lib": [
|
|
4
|
+
"es5",
|
|
5
|
+
"es6"
|
|
6
|
+
],
|
|
7
|
+
"target": "es5",
|
|
8
|
+
"module": "commonjs",
|
|
9
|
+
"moduleResolution": "node",
|
|
10
|
+
"outDir": "./build",
|
|
11
|
+
"emitDecoratorMetadata": true,
|
|
12
|
+
"experimentalDecorators": true,
|
|
13
|
+
"sourceMap": true
|
|
14
|
+
}
|
|
15
15
|
}
|
package/webpack.config.js
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
|
2
|
-
|
|
3
|
-
module.exports = {
|
|
4
|
-
mode: 'development',
|
|
5
|
-
entry: {
|
|
6
|
-
rfdfhfbroadcast: './src/index.js',
|
|
7
|
-
demo: './src/demo.js'
|
|
8
|
-
},
|
|
9
|
-
output: {
|
|
10
|
-
filename: '[name].js',
|
|
11
|
-
library: 'rfdfhfbroadcast',
|
|
12
|
-
libraryTarget: 'umd'
|
|
13
|
-
},
|
|
14
|
-
resolve: {
|
|
15
|
-
extensions: ['.tsx', '.ts', '.js'],
|
|
16
|
-
fallback: { crypto: false, path: false, fs: false, util: false }
|
|
17
|
-
},
|
|
18
|
-
devServer: {
|
|
19
|
-
port:
|
|
20
|
-
static: ['assets']
|
|
21
|
-
},
|
|
22
|
-
plugins: [
|
|
23
|
-
new HtmlWebpackPlugin({
|
|
24
|
-
chunks: ['demo'],
|
|
25
|
-
template: "./src/demo.html"
|
|
26
|
-
})
|
|
27
|
-
],
|
|
1
|
+
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
|
2
|
+
|
|
3
|
+
module.exports = {
|
|
4
|
+
mode: 'development',
|
|
5
|
+
entry: {
|
|
6
|
+
rfdfhfbroadcast: './src/index.js',
|
|
7
|
+
demo: './src/demo.js'
|
|
8
|
+
},
|
|
9
|
+
output: {
|
|
10
|
+
filename: '[name].js',
|
|
11
|
+
library: 'rfdfhfbroadcast',
|
|
12
|
+
libraryTarget: 'umd'
|
|
13
|
+
},
|
|
14
|
+
resolve: {
|
|
15
|
+
extensions: ['.tsx', '.ts', '.js'],
|
|
16
|
+
fallback: { crypto: false, path: false, fs: false, util: false }
|
|
17
|
+
},
|
|
18
|
+
devServer: {
|
|
19
|
+
port: 3333,
|
|
20
|
+
static: ['assets']
|
|
21
|
+
},
|
|
22
|
+
plugins: [
|
|
23
|
+
new HtmlWebpackPlugin({
|
|
24
|
+
chunks: ['demo'],
|
|
25
|
+
template: "./src/demo.html"
|
|
26
|
+
})
|
|
27
|
+
],
|
|
28
28
|
}
|
package/dist/database.sqlite.gz
DELETED
|
Binary file
|