@atmosx/event-product-parser 3.0.51 → 3.0.52
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/settings.json +3 -3
- package/CODE_OF_CONDUCT.md +9 -9
- package/CONTRIBUTING.md +29 -29
- package/LICENSE +17 -17
- package/README.md +443 -444
- package/SECURITY.md +20 -20
- package/SUPPORTED_EVENTS.md +369 -368
- package/dist/cjs/index.cjs +161 -204
- package/dist/esm/index.mjs +160 -203
- package/package.json +52 -52
- package/src/@building/building.attachments.ts +82 -82
- package/src/@building/building.clean.ts +29 -29
- package/src/@building/building.create.ts +55 -55
- package/src/@building/building.enhance.ts +59 -59
- package/src/@building/building.geometry.ts +47 -47
- package/src/@building/building.headers.ts +36 -36
- package/src/@building/building.office.ts +42 -42
- package/src/@building/building.polygon.ts +69 -69
- package/src/@building/building.properties.ts +95 -95
- package/src/@building/building.signature.ts +60 -60
- package/src/@building/building.tags.ts +23 -23
- package/src/@building/building.tracking.ts +67 -67
- package/src/@building/building.validate.ts +152 -151
- package/src/@core/core.clearEvents.ts +30 -30
- package/src/@core/core.createListener.ts +23 -23
- package/src/@core/core.getEvents.ts +23 -23
- package/src/@core/core.getNodes.ts +23 -23
- package/src/@core/core.getRandomEvent.ts +23 -23
- package/src/@core/core.getVersion.ts +23 -23
- package/src/@core/core.manualEvent.ts +38 -0
- package/src/@core/core.query.ts +38 -38
- package/src/@core/core.setNode.ts +80 -80
- package/src/@core/core.start.ts +60 -60
- package/src/@core/core.stop.ts +31 -31
- package/src/@dictionaries/dictionaries.actions.ts +27 -27
- package/src/@dictionaries/dictionaries.awips.ts +363 -363
- package/src/@dictionaries/dictionaries.cancellation.ts +30 -30
- package/src/@dictionaries/dictionaries.causes.ts +35 -35
- package/src/@dictionaries/dictionaries.correlations.ts +42 -42
- package/src/@dictionaries/dictionaries.enhanced.ts +66 -109
- package/src/@dictionaries/dictionaries.events.ts +82 -82
- package/src/@dictionaries/dictionaries.expressions.ts +28 -28
- package/src/@dictionaries/dictionaries.global.ts +24 -0
- package/src/@dictionaries/dictionaries.hail.ts +35 -35
- package/src/@dictionaries/dictionaries.icao.ts +258 -258
- package/src/@dictionaries/dictionaries.matches.ts +54 -35
- package/src/@dictionaries/dictionaries.products.ts +24 -24
- package/src/@dictionaries/dictionaries.records.ts +25 -25
- package/src/@dictionaries/dictionaries.severity.ts +27 -27
- package/src/@dictionaries/dictionaries.shapefiles.ts +35 -35
- package/src/@dictionaries/dictionaries.states.ts +71 -71
- package/src/@dictionaries/dictionaries.status.ts +30 -30
- package/src/@dictionaries/dictionaries.tags.ts +92 -92
- package/src/@dictionaries/dictionaries.testing.ts +24 -24
- package/src/@events/events.api.ts +116 -116
- package/src/@events/events.text.ts +84 -80
- package/src/@events/events.ugc.ts +89 -85
- package/src/@events/events.vtec.ts +86 -86
- package/src/@manager/manager.mkEvent.ts +97 -93
- package/src/@manager/manager.rmEvent.ts +56 -51
- package/src/@manager/manager.setHash.ts +35 -35
- package/src/@manager/manager.updateEvents.ts +32 -32
- package/src/@manager/manager.updateListener.ts +154 -154
- package/src/@manager/manager.updateNodes.ts +53 -53
- package/src/@modules/@database/database.broadcastify.ts +66 -66
- package/src/@modules/@database/database.cache.ts +49 -49
- package/src/@modules/@database/database.init.ts +58 -58
- package/src/@modules/@database/database.shapefiles.ts +92 -92
- package/src/@modules/@database/database.stanza.ts +46 -46
- package/src/@modules/@eas/eas.getCleanDescription.ts +91 -91
- package/src/@modules/@eas/eas.getFloatPCM16.ts +29 -29
- package/src/@modules/@eas/eas.getMergedPCM16.ts +32 -32
- package/src/@modules/@eas/eas.getPCM16.ts +52 -52
- package/src/@modules/@eas/eas.getPCMToFloat.ts +26 -26
- package/src/@modules/@eas/eas.getSampledPCM16.ts +36 -36
- package/src/@modules/@eas/eas.getTTS.ts +54 -54
- package/src/@modules/@eas/eas.getWavPCM16.ts +52 -52
- package/src/@modules/@eas/eas.setAFSK.ts +51 -51
- package/src/@modules/@eas/eas.setAsciiToBits.ts +31 -31
- package/src/@modules/@eas/eas.setAttentionTone.ts +40 -40
- package/src/@modules/@eas/eas.setEasTone.ts +151 -151
- package/src/@modules/@eas/eas.setNoise.ts +32 -32
- package/src/@modules/@eas/eas.setRadioEffect.ts +50 -50
- package/src/@modules/@eas/eas.setSameHeader.ts +44 -44
- package/src/@modules/@stanza/stanza.getAwipsType.ts +45 -45
- package/src/@modules/@stanza/stanza.validate.ts +49 -49
- package/src/@modules/@utilities/utilities.createHttp.ts +70 -70
- package/src/@modules/@utilities/utilities.getFormattedTime.ts +43 -43
- package/src/@modules/@utilities/utilities.getLatestIssuance.ts +32 -32
- package/src/@modules/@utilities/utilities.getMatched.ts +33 -33
- package/src/@modules/@utilities/utilities.getSettings.ts +25 -25
- package/src/@modules/@utilities/utilities.getShapeNearestPoint.ts +114 -114
- package/src/@modules/@utilities/utilities.setCronSchedule.ts +94 -94
- package/src/@modules/@utilities/utilities.setDebug.ts +38 -38
- package/src/@modules/@utilities/utilities.setEventEmit.ts +41 -41
- package/src/@modules/@utilities/utilities.setListener.ts +30 -30
- package/src/@modules/@utilities/utilities.setSettings.ts +42 -42
- package/src/@modules/@utilities/utilities.setSleep.ts +33 -33
- package/src/@modules/@utilities/utilities.setTimeoutAction.ts +62 -62
- package/src/@modules/@utilities/utilities.setWarning.ts +34 -34
- package/src/@modules/@xmpp/xmpp.xDeploy.ts +57 -57
- package/src/@modules/@xmpp/xmpp.xError.ts +26 -26
- package/src/@modules/@xmpp/xmpp.xOffline.ts +36 -36
- package/src/@modules/@xmpp/xmpp.xOnline.ts +45 -44
- package/src/@modules/@xmpp/xmpp.xReconnect.ts +64 -64
- package/src/@modules/@xmpp/xmpp.xStanza.ts +62 -62
- package/src/@parsers/@hvtec/hvtec.extract.ts +39 -39
- package/src/@parsers/@pvtec/pvtec.expires.ts +25 -25
- package/src/@parsers/@pvtec/pvtec.extract.ts +48 -48
- package/src/@parsers/@text/text.getDescriptionFromProduct.ts +52 -52
- package/src/@parsers/@text/text.getEmbed.ts +55 -55
- package/src/@parsers/@text/text.getPolygonFromProduct.ts +53 -32
- package/src/@parsers/@text/text.getTextFromProduct.ts +42 -42
- package/src/@parsers/@text/text.getXML.ts +60 -60
- package/src/@parsers/@ugc/ugc.coordinates.ts +110 -110
- package/src/@parsers/@ugc/ugc.expiry.ts +31 -31
- package/src/@parsers/@ugc/ugc.extract.ts +36 -36
- package/src/@parsers/@ugc/ugc.getCache.ts +23 -23
- package/src/@parsers/@ugc/ugc.header.ts +29 -29
- package/src/@parsers/@ugc/ugc.locations.ts +56 -56
- package/src/@parsers/@ugc/ugc.setCache.ts +27 -27
- package/src/@parsers/@ugc/ugc.zones.ts +51 -51
- package/src/@types/type.attributes.ts +28 -28
- package/src/@types/type.compiled.ts +34 -34
- package/src/@types/type.event.ts +69 -69
- package/src/@types/type.hash.ts +24 -24
- package/src/@types/type.hvtec.ts +25 -25
- package/src/@types/type.listener.ts +32 -32
- package/src/@types/type.properties.ts +77 -77
- package/src/@types/type.pvtec.ts +30 -30
- package/src/@types/type.settings.ts +84 -84
- package/src/@types/type.stanza.ts +37 -37
- package/src/@types/type.ugc.ts +24 -24
- package/src/bootstrap.ts +115 -115
- package/src/index.ts +74 -74
- package/test.js +92 -92
- package/tsconfig.json +13 -13
- package/tsup.config.ts +15 -15
- package/src/@core/core.createEvent.ts +0 -82
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
/*
|
|
2
|
-
_ _ _ __ __
|
|
3
|
-
/\ | | | | (_) \ \ / /
|
|
4
|
-
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
-
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
-
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
-
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
-
| |
|
|
9
|
-
|_|
|
|
10
|
-
|
|
11
|
-
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
-
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
-
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
-
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
-
|
|
16
|
-
Internal Package: @atmosx/event-product-parser
|
|
17
|
-
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
import { TypeStanza } from "../../@types/type.stanza"
|
|
21
|
-
import { TypeStanzaCompiled } from "../../@types/type.compiled"
|
|
22
|
-
import { dict_expressions } from "../../@dictionaries/dictionaries.expressions"
|
|
23
|
-
import { getAwipsType } from "./stanza.getAwipsType"
|
|
24
|
-
|
|
25
|
-
interface ValidateOptions {
|
|
26
|
-
stanza: TypeStanza
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export const validate = (options: ValidateOptions): TypeStanzaCompiled => {
|
|
30
|
-
if (options.stanza.is(`message`)) {
|
|
31
|
-
const cb = options.stanza.getChild(`x`) as TypeStanza;
|
|
32
|
-
if (cb && cb.children) {
|
|
33
|
-
const message = unescape(cb.children[0]);
|
|
34
|
-
const attributes = cb.attrs;
|
|
35
|
-
if (attributes.awipsid && attributes.awipsid.length > 1) {
|
|
36
|
-
const isCapEvent = message.includes(`<?xml`);
|
|
37
|
-
const isCapAreaDescription = message.includes(`<areaDesc>`)
|
|
38
|
-
const isVTEC = message.match(dict_expressions.pvtec) != null;
|
|
39
|
-
const isUGC = message.match(dict_expressions.ugc1) != null;
|
|
40
|
-
const getType = getAwipsType({ attributes: attributes})
|
|
41
|
-
if (getType.type != null) {
|
|
42
|
-
return {
|
|
43
|
-
message, attributes, isCapEvent, isVTEC, isUGC, isCapAreaDescription, isIgnored: false, isNWWS: true, getType
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return { isIgnored: true}
|
|
1
|
+
/*
|
|
2
|
+
_ _ _ __ __
|
|
3
|
+
/\ | | | | (_) \ \ / /
|
|
4
|
+
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
+
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
+
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
+
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
+
| |
|
|
9
|
+
|_|
|
|
10
|
+
|
|
11
|
+
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
+
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
+
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
+
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
+
|
|
16
|
+
Internal Package: @atmosx/event-product-parser
|
|
17
|
+
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { TypeStanza } from "../../@types/type.stanza"
|
|
21
|
+
import { TypeStanzaCompiled } from "../../@types/type.compiled"
|
|
22
|
+
import { dict_expressions } from "../../@dictionaries/dictionaries.expressions"
|
|
23
|
+
import { getAwipsType } from "./stanza.getAwipsType"
|
|
24
|
+
|
|
25
|
+
interface ValidateOptions {
|
|
26
|
+
stanza: TypeStanza
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const validate = (options: ValidateOptions): TypeStanzaCompiled => {
|
|
30
|
+
if (options.stanza.is(`message`)) {
|
|
31
|
+
const cb = options.stanza.getChild(`x`) as TypeStanza;
|
|
32
|
+
if (cb && cb.children) {
|
|
33
|
+
const message = unescape(cb.children[0]);
|
|
34
|
+
const attributes = cb.attrs;
|
|
35
|
+
if (attributes.awipsid && attributes.awipsid.length > 1) {
|
|
36
|
+
const isCapEvent = message.includes(`<?xml`);
|
|
37
|
+
const isCapAreaDescription = message.includes(`<areaDesc>`)
|
|
38
|
+
const isVTEC = message.match(dict_expressions.pvtec) != null;
|
|
39
|
+
const isUGC = message.match(dict_expressions.ugc1) != null;
|
|
40
|
+
const getType = getAwipsType({ attributes: attributes})
|
|
41
|
+
if (getType.type != null) {
|
|
42
|
+
return {
|
|
43
|
+
message, attributes, isCapEvent, isVTEC, isUGC, isCapAreaDescription, isIgnored: false, isNWWS: true, getType
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return { isIgnored: true}
|
|
50
50
|
}
|
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
/*
|
|
2
|
-
_ _ _ __ __
|
|
3
|
-
/\ | | | | (_) \ \ / /
|
|
4
|
-
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
-
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
-
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
-
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
-
| |
|
|
9
|
-
|_|
|
|
10
|
-
|
|
11
|
-
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
-
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
-
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
-
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
-
|
|
16
|
-
Internal Package: @atmosx/event-product-parser
|
|
17
|
-
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
interface CreateHttpOptions {
|
|
21
|
-
url: string
|
|
22
|
-
headers?: any
|
|
23
|
-
timeout?: number
|
|
24
|
-
method?: `GET` | `POST` | `PUT` | `DELETE`
|
|
25
|
-
body?: any;
|
|
26
|
-
formData?: any;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export const createHttp = async (options: CreateHttpOptions): Promise<any> => {
|
|
30
|
-
const requestOptions: RequestInit = {
|
|
31
|
-
method: options.method ?? "GET",
|
|
32
|
-
headers: options.headers ?? {
|
|
33
|
-
"User-Agent": "AtmosphericX",
|
|
34
|
-
"Accept": "application/geo+json, text/plain, */*; q=0.9",
|
|
35
|
-
"Accept-Language": "en-US,en;q=0.9",
|
|
36
|
-
},
|
|
37
|
-
signal: AbortSignal.timeout(options.timeout ?? 10_000),
|
|
38
|
-
redirect: "follow"
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const returnHttp = function(error: boolean,status: number, message: string) {
|
|
43
|
-
return { error: error, options: requestOptions, status, message };
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
if (options?.formData) {
|
|
47
|
-
requestOptions.body = options.formData;
|
|
48
|
-
} else if (options?.body != undefined) {
|
|
49
|
-
requestOptions.body =
|
|
50
|
-
options.body instanceof FormData
|
|
51
|
-
? options.body
|
|
52
|
-
: typeof options.body === "string"
|
|
53
|
-
? options.body
|
|
54
|
-
: JSON.stringify(options.body);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
try {
|
|
58
|
-
const response = await fetch(
|
|
59
|
-
options?.url ?? `https://api.weather.gov/alerts/active`,
|
|
60
|
-
requestOptions
|
|
61
|
-
)
|
|
62
|
-
const body = await response.text();
|
|
63
|
-
if (!response.ok) {
|
|
64
|
-
return returnHttp(true, response.status, `HTTP Status Code ${response.status} (${response.statusText})`)
|
|
65
|
-
}
|
|
66
|
-
return returnHttp(false, response.status, body)
|
|
67
|
-
} catch (error) {
|
|
68
|
-
return returnHttp(true, 500, `Internal Server Error: ${error}`)
|
|
69
|
-
}
|
|
70
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
_ _ _ __ __
|
|
3
|
+
/\ | | | | (_) \ \ / /
|
|
4
|
+
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
+
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
+
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
+
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
+
| |
|
|
9
|
+
|_|
|
|
10
|
+
|
|
11
|
+
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
+
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
+
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
+
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
+
|
|
16
|
+
Internal Package: @atmosx/event-product-parser
|
|
17
|
+
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
interface CreateHttpOptions {
|
|
21
|
+
url: string
|
|
22
|
+
headers?: any
|
|
23
|
+
timeout?: number
|
|
24
|
+
method?: `GET` | `POST` | `PUT` | `DELETE`
|
|
25
|
+
body?: any;
|
|
26
|
+
formData?: any;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const createHttp = async (options: CreateHttpOptions): Promise<any> => {
|
|
30
|
+
const requestOptions: RequestInit = {
|
|
31
|
+
method: options.method ?? "GET",
|
|
32
|
+
headers: options.headers ?? {
|
|
33
|
+
"User-Agent": "AtmosphericX",
|
|
34
|
+
"Accept": "application/geo+json, text/plain, */*; q=0.9",
|
|
35
|
+
"Accept-Language": "en-US,en;q=0.9",
|
|
36
|
+
},
|
|
37
|
+
signal: AbortSignal.timeout(options.timeout ?? 10_000),
|
|
38
|
+
redirect: "follow"
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
const returnHttp = function(error: boolean,status: number, message: string) {
|
|
43
|
+
return { error: error, options: requestOptions, status, message };
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (options?.formData) {
|
|
47
|
+
requestOptions.body = options.formData;
|
|
48
|
+
} else if (options?.body != undefined) {
|
|
49
|
+
requestOptions.body =
|
|
50
|
+
options.body instanceof FormData
|
|
51
|
+
? options.body
|
|
52
|
+
: typeof options.body === "string"
|
|
53
|
+
? options.body
|
|
54
|
+
: JSON.stringify(options.body);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
try {
|
|
58
|
+
const response = await fetch(
|
|
59
|
+
options?.url ?? `https://api.weather.gov/alerts/active`,
|
|
60
|
+
requestOptions
|
|
61
|
+
)
|
|
62
|
+
const body = await response.text();
|
|
63
|
+
if (!response.ok) {
|
|
64
|
+
return returnHttp(true, response.status, `HTTP Status Code ${response.status} (${response.statusText})`)
|
|
65
|
+
}
|
|
66
|
+
return returnHttp(false, response.status, body)
|
|
67
|
+
} catch (error) {
|
|
68
|
+
return returnHttp(true, 500, `Internal Server Error: ${error}`)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
/*
|
|
2
|
-
_ _ _ __ __
|
|
3
|
-
/\ | | | | (_) \ \ / /
|
|
4
|
-
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
-
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
-
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
-
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
-
| |
|
|
9
|
-
|_|
|
|
10
|
-
|
|
11
|
-
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
-
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
-
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
-
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
-
|
|
16
|
-
Internal Package: @atmosx/event-product-parser
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
export const getFormattedTime = (date: string): string => {
|
|
22
|
-
const now = Date.now();
|
|
23
|
-
const then = typeof date === "number" ? date : new Date(date).getTime()
|
|
24
|
-
const seconds = Math.floor((now - then) / 1000);
|
|
25
|
-
const absSeconds = Math.abs(seconds);
|
|
26
|
-
const isPast = seconds > 0;
|
|
27
|
-
const units: [string, number][] = [
|
|
28
|
-
["year", 31536000], ["month", 2592000],
|
|
29
|
-
["day", 86400], ["hour", 3600],
|
|
30
|
-
["minute", 60], ["second", 1],
|
|
31
|
-
];
|
|
32
|
-
for (const [name, value] of units) {
|
|
33
|
-
const interval = Math.floor(absSeconds / value);
|
|
34
|
-
if (interval >= 1) {
|
|
35
|
-
return isPast
|
|
36
|
-
? `${interval} ${name}${interval > 1 ? "s" : ""} ago`
|
|
37
|
-
: `in ${interval} ${name}${interval > 1 ? "s" : ""}`;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return "just now";
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
1
|
+
/*
|
|
2
|
+
_ _ _ __ __
|
|
3
|
+
/\ | | | | (_) \ \ / /
|
|
4
|
+
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
+
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
+
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
+
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
+
| |
|
|
9
|
+
|_|
|
|
10
|
+
|
|
11
|
+
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
+
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
+
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
+
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
+
|
|
16
|
+
Internal Package: @atmosx/event-product-parser
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
export const getFormattedTime = (date: string): string => {
|
|
22
|
+
const now = Date.now();
|
|
23
|
+
const then = typeof date === "number" ? date : new Date(date).getTime()
|
|
24
|
+
const seconds = Math.floor((now - then) / 1000);
|
|
25
|
+
const absSeconds = Math.abs(seconds);
|
|
26
|
+
const isPast = seconds > 0;
|
|
27
|
+
const units: [string, number][] = [
|
|
28
|
+
["year", 31536000], ["month", 2592000],
|
|
29
|
+
["day", 86400], ["hour", 3600],
|
|
30
|
+
["minute", 60], ["second", 1],
|
|
31
|
+
];
|
|
32
|
+
for (const [name, value] of units) {
|
|
33
|
+
const interval = Math.floor(absSeconds / value);
|
|
34
|
+
if (interval >= 1) {
|
|
35
|
+
return isPast
|
|
36
|
+
? `${interval} ${name}${interval > 1 ? "s" : ""} ago`
|
|
37
|
+
: `in ${interval} ${name}${interval > 1 ? "s" : ""}`;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return "just now";
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
/*
|
|
2
|
-
_ _ _ __ __
|
|
3
|
-
/\ | | | | (_) \ \ / /
|
|
4
|
-
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
-
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
-
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
-
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
-
| |
|
|
9
|
-
|_|
|
|
10
|
-
|
|
11
|
-
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
-
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
-
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
-
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
-
|
|
16
|
-
Internal Package: @atmosx/event-product-parser
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
export const getLatestIssuance = (): string => {
|
|
22
|
-
const now = new Date();
|
|
23
|
-
const current = now.getUTCHours() * 100 + now.getUTCMinutes();
|
|
24
|
-
const issuances = [100, 600, 1300, 1630, 2000];
|
|
25
|
-
let latest = issuances[0];
|
|
26
|
-
for (const issuance of issuances) {
|
|
27
|
-
if (current >= issuance) {
|
|
28
|
-
latest = issuance;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return latest.toString().padStart(4, "0");
|
|
32
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
_ _ _ __ __
|
|
3
|
+
/\ | | | | (_) \ \ / /
|
|
4
|
+
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
+
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
+
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
+
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
+
| |
|
|
9
|
+
|_|
|
|
10
|
+
|
|
11
|
+
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
+
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
+
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
+
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
+
|
|
16
|
+
Internal Package: @atmosx/event-product-parser
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
export const getLatestIssuance = (): string => {
|
|
22
|
+
const now = new Date();
|
|
23
|
+
const current = now.getUTCHours() * 100 + now.getUTCMinutes();
|
|
24
|
+
const issuances = [100, 600, 1300, 1630, 2000];
|
|
25
|
+
let latest = issuances[0];
|
|
26
|
+
for (const issuance of issuances) {
|
|
27
|
+
if (current >= issuance) {
|
|
28
|
+
latest = issuance;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return latest.toString().padStart(4, "0");
|
|
32
|
+
}
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
/*
|
|
2
|
-
_ _ _ __ __
|
|
3
|
-
/\ | | | | (_) \ \ / /
|
|
4
|
-
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
-
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
-
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
-
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
-
| |
|
|
9
|
-
|_|
|
|
10
|
-
|
|
11
|
-
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
-
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
-
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
-
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
-
|
|
16
|
-
Internal Package: @atmosx/event-product-parser
|
|
17
|
-
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
export const getMatched = (strings: string[], string: string): boolean => {
|
|
21
|
-
const isMatched = strings.some(pattern => {
|
|
22
|
-
if (!pattern) return false;
|
|
23
|
-
const lowerP = pattern.toLowerCase();
|
|
24
|
-
const lowerS = string.toLowerCase()
|
|
25
|
-
if (lowerP === "*" || lowerP === lowerS) return true;
|
|
26
|
-
if (lowerP.includes("*")) {
|
|
27
|
-
const regex = "^" + lowerP.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*") + "$";
|
|
28
|
-
return new RegExp(regex).test(lowerS);
|
|
29
|
-
}
|
|
30
|
-
return false;
|
|
31
|
-
});
|
|
32
|
-
return isMatched;
|
|
33
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
_ _ _ __ __
|
|
3
|
+
/\ | | | | (_) \ \ / /
|
|
4
|
+
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
+
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
+
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
+
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
+
| |
|
|
9
|
+
|_|
|
|
10
|
+
|
|
11
|
+
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
+
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
+
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
+
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
+
|
|
16
|
+
Internal Package: @atmosx/event-product-parser
|
|
17
|
+
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
export const getMatched = (strings: string[], string: string): boolean => {
|
|
21
|
+
const isMatched = strings.some(pattern => {
|
|
22
|
+
if (!pattern) return false;
|
|
23
|
+
const lowerP = pattern.toLowerCase();
|
|
24
|
+
const lowerS = string.toLowerCase()
|
|
25
|
+
if (lowerP === "*" || lowerP === lowerS) return true;
|
|
26
|
+
if (lowerP.includes("*")) {
|
|
27
|
+
const regex = "^" + lowerP.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*") + "$";
|
|
28
|
+
return new RegExp(regex).test(lowerS);
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
});
|
|
32
|
+
return isMatched;
|
|
33
|
+
}
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
/*
|
|
2
|
-
_ _ _ __ __
|
|
3
|
-
/\ | | | | (_) \ \ / /
|
|
4
|
-
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
-
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
-
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
-
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
-
| |
|
|
9
|
-
|_|
|
|
10
|
-
|
|
11
|
-
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
-
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
-
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
-
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
-
|
|
16
|
-
Internal Package: @atmosx/event-product-parser
|
|
17
|
-
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
import { TypeSettings } from '../../@types/type.settings'
|
|
21
|
-
import { bootstrap } from "../../bootstrap"
|
|
22
|
-
|
|
23
|
-
export const getSettings = (): TypeSettings => {
|
|
24
|
-
return bootstrap.settings;
|
|
25
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
_ _ _ __ __
|
|
3
|
+
/\ | | | | (_) \ \ / /
|
|
4
|
+
/ \ | |_ _ __ ___ ___ ___ _ __ | |__ ___ _ __ _ ___ \ V /
|
|
5
|
+
/ /\ \| __| '_ ` _ \ / _ \/ __| '_ \| '_ \ / _ \ '__| |/ __| > <
|
|
6
|
+
/ ____ \ |_| | | | | | (_) \__ \ |_) | | | | __/ | | | (__ / . \
|
|
7
|
+
/_/ \_\__|_| |_| |_|\___/|___/ .__/|_| |_|\___|_| |_|\___/_/ \_\
|
|
8
|
+
| |
|
|
9
|
+
|_|
|
|
10
|
+
|
|
11
|
+
Created with ♥ by the AtmosphericX Team (KiyoWx, StarflightWx, & CJ Ziegler)
|
|
12
|
+
Discord: https://atmosphericx-discord.scriptkitty.cafe
|
|
13
|
+
Ko-Fi: https://ko-fi.com/k3yomi
|
|
14
|
+
Documentation: http://localhost/documentation | https://atmosphericx.scriptkitty.cafe/documentation
|
|
15
|
+
|
|
16
|
+
Internal Package: @atmosx/event-product-parser
|
|
17
|
+
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { TypeSettings } from '../../@types/type.settings'
|
|
21
|
+
import { bootstrap } from "../../bootstrap"
|
|
22
|
+
|
|
23
|
+
export const getSettings = (): TypeSettings => {
|
|
24
|
+
return bootstrap.settings;
|
|
25
|
+
}
|