@atmosx/event-product-parser 3.0.48 → 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.
Files changed (141) hide show
  1. package/.vscode/settings.json +3 -3
  2. package/CODE_OF_CONDUCT.md +9 -9
  3. package/CONTRIBUTING.md +29 -29
  4. package/LICENSE +17 -17
  5. package/README.md +443 -417
  6. package/SECURITY.md +20 -20
  7. package/SUPPORTED_EVENTS.md +369 -368
  8. package/dist/cjs/index.cjs +1925 -1885
  9. package/dist/esm/index.mjs +1927 -1887
  10. package/package.json +52 -52
  11. package/src/@building/building.attachments.ts +82 -82
  12. package/src/@building/building.clean.ts +29 -29
  13. package/src/@building/building.create.ts +55 -41
  14. package/src/@building/building.enhance.ts +59 -59
  15. package/src/@building/building.geometry.ts +47 -47
  16. package/src/@building/building.headers.ts +36 -36
  17. package/src/@building/building.office.ts +42 -42
  18. package/src/@building/building.polygon.ts +69 -70
  19. package/src/@building/building.properties.ts +95 -95
  20. package/src/@building/building.signature.ts +60 -61
  21. package/src/@building/building.tags.ts +23 -23
  22. package/src/@building/building.tracking.ts +67 -67
  23. package/src/@building/building.validate.ts +152 -146
  24. package/src/@core/core.clearEvents.ts +30 -31
  25. package/src/@core/core.createListener.ts +23 -23
  26. package/src/@core/core.getEvents.ts +23 -24
  27. package/src/@core/core.getNodes.ts +23 -24
  28. package/src/@core/core.getRandomEvent.ts +23 -24
  29. package/src/@core/core.getVersion.ts +23 -24
  30. package/src/@core/core.manualEvent.ts +38 -0
  31. package/src/@core/core.query.ts +38 -38
  32. package/src/@core/core.setNode.ts +80 -80
  33. package/src/@core/core.start.ts +60 -60
  34. package/src/@core/core.stop.ts +31 -31
  35. package/src/@dictionaries/dictionaries.actions.ts +27 -27
  36. package/src/@dictionaries/dictionaries.awips.ts +363 -363
  37. package/src/@dictionaries/dictionaries.cancellation.ts +30 -30
  38. package/src/@dictionaries/dictionaries.causes.ts +35 -35
  39. package/src/@dictionaries/dictionaries.correlations.ts +42 -42
  40. package/src/@dictionaries/dictionaries.enhanced.ts +66 -109
  41. package/src/@dictionaries/dictionaries.events.ts +82 -82
  42. package/src/@dictionaries/dictionaries.expressions.ts +28 -28
  43. package/src/@dictionaries/dictionaries.global.ts +24 -0
  44. package/src/@dictionaries/dictionaries.hail.ts +35 -35
  45. package/src/@dictionaries/dictionaries.icao.ts +258 -258
  46. package/src/@dictionaries/dictionaries.matches.ts +54 -35
  47. package/src/@dictionaries/dictionaries.products.ts +24 -24
  48. package/src/@dictionaries/dictionaries.records.ts +25 -25
  49. package/src/@dictionaries/dictionaries.severity.ts +27 -27
  50. package/src/@dictionaries/dictionaries.shapefiles.ts +35 -35
  51. package/src/@dictionaries/dictionaries.states.ts +71 -71
  52. package/src/@dictionaries/dictionaries.status.ts +30 -30
  53. package/src/@dictionaries/dictionaries.tags.ts +92 -92
  54. package/src/@dictionaries/dictionaries.testing.ts +24 -24
  55. package/src/@events/events.api.ts +116 -118
  56. package/src/@events/events.text.ts +84 -81
  57. package/src/@events/events.ugc.ts +89 -85
  58. package/src/@events/events.vtec.ts +86 -87
  59. package/src/@manager/manager.mkEvent.ts +97 -88
  60. package/src/@manager/manager.rmEvent.ts +56 -49
  61. package/src/@manager/manager.setHash.ts +35 -36
  62. package/src/@manager/manager.updateEvents.ts +32 -34
  63. package/src/@manager/manager.updateListener.ts +154 -159
  64. package/src/@manager/manager.updateNodes.ts +53 -54
  65. package/src/@modules/@database/database.broadcastify.ts +66 -66
  66. package/src/@modules/@database/database.cache.ts +49 -47
  67. package/src/@modules/@database/database.init.ts +58 -57
  68. package/src/@modules/@database/database.shapefiles.ts +92 -92
  69. package/src/@modules/@database/database.stanza.ts +46 -47
  70. package/src/@modules/@eas/eas.getCleanDescription.ts +91 -91
  71. package/src/@modules/@eas/eas.getFloatPCM16.ts +29 -29
  72. package/src/@modules/@eas/eas.getMergedPCM16.ts +32 -32
  73. package/src/@modules/@eas/eas.getPCM16.ts +52 -52
  74. package/src/@modules/@eas/eas.getPCMToFloat.ts +26 -26
  75. package/src/@modules/@eas/eas.getSampledPCM16.ts +36 -36
  76. package/src/@modules/@eas/eas.getTTS.ts +54 -54
  77. package/src/@modules/@eas/eas.getWavPCM16.ts +52 -52
  78. package/src/@modules/@eas/eas.setAFSK.ts +51 -52
  79. package/src/@modules/@eas/eas.setAsciiToBits.ts +31 -32
  80. package/src/@modules/@eas/eas.setAttentionTone.ts +40 -40
  81. package/src/@modules/@eas/eas.setEasTone.ts +151 -147
  82. package/src/@modules/@eas/eas.setNoise.ts +32 -31
  83. package/src/@modules/@eas/eas.setRadioEffect.ts +50 -49
  84. package/src/@modules/@eas/eas.setSameHeader.ts +44 -45
  85. package/src/@modules/@stanza/stanza.getAwipsType.ts +45 -45
  86. package/src/@modules/@stanza/stanza.validate.ts +49 -49
  87. package/src/@modules/@utilities/utilities.createHttp.ts +70 -70
  88. package/src/@modules/@utilities/utilities.getFormattedTime.ts +43 -43
  89. package/src/@modules/@utilities/utilities.getLatestIssuance.ts +32 -32
  90. package/src/@modules/@utilities/utilities.getMatched.ts +33 -0
  91. package/src/@modules/@utilities/utilities.getSettings.ts +25 -25
  92. package/src/@modules/@utilities/utilities.getShapeNearestPoint.ts +114 -114
  93. package/src/@modules/@utilities/utilities.setCronSchedule.ts +94 -94
  94. package/src/@modules/@utilities/utilities.setDebug.ts +38 -0
  95. package/src/@modules/@utilities/utilities.setEventEmit.ts +41 -41
  96. package/src/@modules/@utilities/utilities.setListener.ts +30 -30
  97. package/src/@modules/@utilities/utilities.setSettings.ts +42 -42
  98. package/src/@modules/@utilities/utilities.setSleep.ts +33 -33
  99. package/src/@modules/@utilities/utilities.setTimeoutAction.ts +62 -58
  100. package/src/@modules/@utilities/utilities.setWarning.ts +34 -34
  101. package/src/@modules/@xmpp/xmpp.xDeploy.ts +57 -58
  102. package/src/@modules/@xmpp/xmpp.xError.ts +26 -28
  103. package/src/@modules/@xmpp/xmpp.xOffline.ts +36 -37
  104. package/src/@modules/@xmpp/xmpp.xOnline.ts +45 -44
  105. package/src/@modules/@xmpp/xmpp.xReconnect.ts +64 -64
  106. package/src/@modules/@xmpp/xmpp.xStanza.ts +62 -62
  107. package/src/@parsers/@hvtec/hvtec.extract.ts +39 -39
  108. package/src/@parsers/@pvtec/pvtec.expires.ts +25 -25
  109. package/src/@parsers/@pvtec/pvtec.extract.ts +48 -48
  110. package/src/@parsers/@text/text.getDescriptionFromProduct.ts +52 -52
  111. package/src/@parsers/@text/text.getEmbed.ts +55 -57
  112. package/src/@parsers/@text/text.getPolygonFromProduct.ts +53 -32
  113. package/src/@parsers/@text/text.getTextFromProduct.ts +42 -42
  114. package/src/@parsers/@text/text.getXML.ts +60 -60
  115. package/src/@parsers/@ugc/ugc.coordinates.ts +110 -109
  116. package/src/@parsers/@ugc/ugc.expiry.ts +31 -31
  117. package/src/@parsers/@ugc/ugc.extract.ts +36 -36
  118. package/src/@parsers/@ugc/ugc.getCache.ts +24 -0
  119. package/src/@parsers/@ugc/ugc.header.ts +29 -29
  120. package/src/@parsers/@ugc/ugc.locations.ts +57 -29
  121. package/src/@parsers/@ugc/ugc.setCache.ts +28 -0
  122. package/src/@parsers/@ugc/ugc.zones.ts +51 -51
  123. package/src/@types/type.attributes.ts +28 -28
  124. package/src/@types/type.compiled.ts +34 -34
  125. package/src/@types/type.event.ts +69 -69
  126. package/src/@types/type.hash.ts +24 -24
  127. package/src/@types/type.hvtec.ts +25 -25
  128. package/src/@types/type.listener.ts +32 -32
  129. package/src/@types/type.properties.ts +77 -77
  130. package/src/@types/type.pvtec.ts +30 -30
  131. package/src/@types/type.settings.ts +84 -83
  132. package/src/@types/type.stanza.ts +37 -37
  133. package/src/@types/type.ugc.ts +24 -24
  134. package/src/bootstrap.ts +115 -112
  135. package/src/index.ts +74 -74
  136. package/test.js +92 -98
  137. package/tsconfig.json +13 -13
  138. package/tsup.config.ts +15 -15
  139. package/dist/index.d.mts +0 -299
  140. package/dist/index.d.ts +0 -299
  141. package/src/@core/core.createEvent.ts +0 -83
package/package.json CHANGED
@@ -1,52 +1,52 @@
1
- {
2
- "name": "@atmosx/event-product-parser",
3
- "version": "3.0.48",
4
- "description": "NOAA Weather Wire & NWS API Parser - Built for standalone and Project AtmosphericX Integration.",
5
- "main": "dist/cjs/index.cjs",
6
- "module": "dist/esm/index.mjs",
7
- "repository": {
8
- "type": "git",
9
- "url": "git+https://github.com/AtmosphericX/event-product-parser",
10
- "branch": "v3-beta-branch"
11
- },
12
- "scripts": {
13
- "start": "cd ./test && node ./index.js",
14
- "build": "tsup && cd ./test && node ./index.js",
15
- "heap-memory-errors": "node --heap-prof --heap-prof-name=heap-profile-%p.heapsnapshot ./test/index.js",
16
- "publish": "tsup && npm publish --access public",
17
- "publish-beta-branch": "tsup && npm publish --tag v3-beta-branch --access public"
18
- },
19
- "keywords": [
20
- "NWWS",
21
- "NOAA Weather Wire Service",
22
- "TypeScript",
23
- "XMPP",
24
- "Parser",
25
- "JavaScript",
26
- "CommonJS",
27
- "ESM"
28
- ],
29
- "author": "k3yomi, StarflightWx",
30
- "license": "MIT",
31
- "bugs": {
32
- "url": "https://github.com/AtmosphericX/event-product-parser/issues"
33
- },
34
- "homepage": "https://github.com/AtmosphericX/event-product-parser#readme",
35
- "dependencies": {
36
- "@xmpp/client": "0.14.0",
37
- "better-sqlite3": "12.9.0",
38
- "croner": "10.0.1",
39
- "express": "5.2.1",
40
- "express-ws": "5.0.2",
41
- "jszip": "3.10.1",
42
- "polygon-clipping": "0.15.7",
43
- "say": "0.16.0",
44
- "shapefile": "0.6.6",
45
- "typescript": "5.9.3",
46
- "xml2js": "0.6.2"
47
- },
48
- "devDependencies": {
49
- "@types/node": "25.2.0",
50
- "tsup": "8.5.1"
51
- }
52
- }
1
+ {
2
+ "name": "@atmosx/event-product-parser",
3
+ "version": "3.0.52",
4
+ "description": "NOAA Weather Wire & NWS API Parser - Built for standalone and Project AtmosphericX Integration.",
5
+ "main": "dist/cjs/index.cjs",
6
+ "module": "dist/esm/index.mjs",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/AtmosphericX/event-product-parser",
10
+ "branch": "v3-beta-branch"
11
+ },
12
+ "scripts": {
13
+ "start": "cd ./test && node ./index.js",
14
+ "build": "tsup && cd ./test && node ./index.js",
15
+ "publish": "tsup && npm publish --access public",
16
+ "publish-beta-branch": "tsup && npm publish --tag v3-beta-branch --access public"
17
+ },
18
+ "keywords": [
19
+ "NWWS",
20
+ "NOAA Weather Wire Service",
21
+ "TypeScript",
22
+ "XMPP",
23
+ "Parser",
24
+ "JavaScript",
25
+ "CommonJS",
26
+ "ESM"
27
+ ],
28
+ "author": "k3yomi, StarflightWx",
29
+ "license": "MIT",
30
+ "bugs": {
31
+ "url": "https://github.com/AtmosphericX/event-product-parser/issues"
32
+ },
33
+ "homepage": "https://github.com/AtmosphericX/event-product-parser#readme",
34
+ "dependencies": {
35
+ "@xmpp/client": "0.14.0",
36
+ "better-sqlite3": "12.9.0",
37
+ "croner": "10.0.1",
38
+ "express": "5.2.1",
39
+ "express-ws": "5.0.2",
40
+ "jszip": "3.10.1",
41
+ "p-queue": "^9.3.0",
42
+ "polygon-clipping": "0.15.7",
43
+ "say": "0.16.0",
44
+ "shapefile": "0.6.6",
45
+ "typescript": "5.9.3",
46
+ "xml2js": "0.6.2"
47
+ },
48
+ "devDependencies": {
49
+ "@types/node": "25.2.0",
50
+ "tsup": "8.5.1"
51
+ }
52
+ }
@@ -1,83 +1,83 @@
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 { bootstrap } from "../bootstrap"
21
- import { TypeEvent } from "../@types/type.event"
22
- import { getLatestIssuance } from "../@modules/@utilities/utilities.getLatestIssuance";
23
- import { dict_states } from "../@dictionaries/dictionaries.states"
24
- import { dict_expressions } from "../@dictionaries/dictionaries.expressions"
25
-
26
- interface GetEventAttachmentsResponse {
27
- name: string
28
- link: string
29
- }
30
-
31
- type BroadcastifyResponse = {
32
- state: string
33
- county: string
34
- feed: string
35
- type: string
36
- link: string
37
- }
38
-
39
- export const getEventAttachments = (event: TypeEvent): GetEventAttachmentsResponse[] | null => {
40
- let attachments = [];
41
- const issuanceTime = getLatestIssuance();
42
- const spcNumber = event?.properties?.discussion_parameters?.discussion_number;
43
- const watchNumber = event?.properties?.watch_parameters?.watch_number;
44
- const locations = event?.properties?.locations_array;
45
- const events = [
46
- { target: "Day 1", attachment: `https://www.spc.noaa.gov/products/outlook/day1otlk_${issuanceTime}.png` },
47
- { target: "Day 2", attachment: `https://www.spc.noaa.gov/products/outlook/day2otlk.png` },
48
- { target: "Day 3", attachment: `https://www.spc.noaa.gov/products/outlook/day3otlk.png` },
49
- { target: "Mesoscale Discussion", attachment: `https://www.spc.noaa.gov/products/md/mcd${spcNumber}.png` },
50
- { target: "Tornado Watch", attachment: `https://www.spc.noaa.gov/products/watch/ww${watchNumber}_radar_big.gif` },
51
- { target: "PDS Tornado Watch", attachment: `https://www.spc.noaa.gov/products/watch/ww${watchNumber}_radar_big.gif` },
52
- { target: "Severe Thunderstorm Watch", attachment: `https://www.spc.noaa.gov/products/watch/ww${watchNumber}_radar_big.gif` },
53
- { target: "PDS Severe Thunderstorm Watch", attachment: `https://www.spc.noaa.gov/products/watch/ww${watchNumber}_radar_big.gif` }
54
- ]
55
-
56
- if (events.find((e) => e.target === event.properties.event)) {
57
- attachments.push({ name: `Image: Graphic`, link: events.find((e) => e.target === event.properties.event).attachment });
58
- }
59
-
60
- for (const location of locations) {
61
- if (dict_expressions.location.test(location)) {
62
- const lines = [`Northern`, `Southern`, `Eastern`, `Western`, `Inland`, `Costal`, `County`]
63
- const county = location?.split(',')[0]?.trim().replace(new RegExp(`^(${lines.join('|')}) `), '')
64
- const state = dict_states[location?.split(',')[1]?.trim()]
65
- const feeds = bootstrap.database.prepare(`SELECT * FROM broadcastify WHERE state = ? AND county = ?`).all(state, county).sort((a, b) => {
66
- const typeOrder = ['Other', 'Public Safety'];
67
- const indexA = typeOrder.indexOf(a.type);
68
- const indexB = typeOrder.indexOf(b.type);
69
- return indexA - indexB;
70
- });
71
- const tags = bootstrap.settings.BroadcastifySettings.BroadcastifyTags;
72
- const filtered = feeds.filter((feed: BroadcastifyResponse) => tags.includes(feed.type));
73
- if (filtered.length > 0) {
74
- filtered.map((filtered: BroadcastifyResponse) => {
75
- if (!attachments.some((a) => a.link === filtered.link)) {
76
- attachments.push({ name: `${filtered.type}: ${filtered.feed}`, link: filtered.link });
77
- }
78
- });
79
- }
80
- }
81
- }
82
- return attachments;
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 { TypeEvent } from "../@types/type.event"
21
+ import { bootstrap } from "../bootstrap"
22
+ import { dict_states } from "../@dictionaries/dictionaries.states"
23
+ import { dict_expressions } from "../@dictionaries/dictionaries.expressions"
24
+ import { getLatestIssuance } from "../@modules/@utilities/utilities.getLatestIssuance";
25
+
26
+ interface GetEventAttachmentsResponse {
27
+ name: string
28
+ link: string
29
+ }
30
+
31
+ type BroadcastifyResponse = {
32
+ state: string
33
+ county: string
34
+ feed: string
35
+ type: string
36
+ link: string
37
+ }
38
+
39
+ export const getEventAttachments = (event: TypeEvent): GetEventAttachmentsResponse[] | null => {
40
+ let attachments = [];
41
+ const issuanceTime = getLatestIssuance();
42
+ const spcNumber = event?.properties?.discussion_parameters?.discussion_number;
43
+ const watchNumber = event?.properties?.watch_parameters?.watch_number;
44
+ const locations = event?.properties?.locations_array;
45
+ const events = [
46
+ { target: "SPC Day 1 Outlook", attachment: `https://www.spc.noaa.gov/products/outlook/day1otlk_${issuanceTime}.png` },
47
+ { target: "SPC Day 2 Outlook", attachment: `https://www.spc.noaa.gov/products/outlook/day2otlk.png` },
48
+ { target: "SPC Day 3 Outlook", attachment: `https://www.spc.noaa.gov/products/outlook/day3otlk.png` },
49
+ { target: "Mesoscale Discussion", attachment: `https://www.spc.noaa.gov/products/md/mcd${spcNumber}.png` },
50
+ { target: "Tornado Watch", attachment: `https://www.spc.noaa.gov/products/watch/ww${watchNumber}_radar_big.gif` },
51
+ { target: "PDS Tornado Watch", attachment: `https://www.spc.noaa.gov/products/watch/ww${watchNumber}_radar_big.gif` },
52
+ { target: "Severe Thunderstorm Watch", attachment: `https://www.spc.noaa.gov/products/watch/ww${watchNumber}_radar_big.gif` },
53
+ { target: "PDS Severe Thunderstorm Watch", attachment: `https://www.spc.noaa.gov/products/watch/ww${watchNumber}_radar_big.gif` }
54
+ ]
55
+
56
+ if (events.find((e) => e.target === event.properties.event)) {
57
+ attachments.push({ name: `Image: Graphic`, link: events.find((e) => e.target.toLowerCase() === event.properties.event.toLowerCase()).attachment });
58
+ }
59
+
60
+ for (const location of locations) {
61
+ if (dict_expressions.location.test(location)) {
62
+ const lines = [`Northern`, `Southern`, `Eastern`, `Western`, `Inland`, `Costal`, `County`]
63
+ const county = location?.split(',')[0]?.trim().replace(new RegExp(`^(${lines.join('|')}) `), '')
64
+ const state = dict_states[location?.split(',')[1]?.trim()]
65
+ const feeds = bootstrap.database.prepare(`SELECT * FROM broadcastify WHERE state = ? AND county = ?`).all(state, county).sort((a, b) => {
66
+ const typeOrder = ['Other', 'Public Safety'];
67
+ const indexA = typeOrder.indexOf(a.type);
68
+ const indexB = typeOrder.indexOf(b.type);
69
+ return indexA - indexB;
70
+ });
71
+ const tags = bootstrap.settings.BroadcastifySettings.BroadcastifyTags;
72
+ const filtered = feeds.filter((feed: BroadcastifyResponse) => tags.includes(feed.type));
73
+ if (filtered.length > 0) {
74
+ filtered.map((filtered: BroadcastifyResponse) => {
75
+ if (!attachments.some((a) => a.link === filtered.link)) {
76
+ attachments.push({ name: `${filtered.type}: ${filtered.feed}`, link: filtered.link });
77
+ }
78
+ });
79
+ }
80
+ }
81
+ }
82
+ return attachments;
83
83
  }
@@ -1,30 +1,30 @@
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 getCleanedEvent = <T extends Record<string, any>>(event: T): T => {
21
- for (const key of Object.keys(event)) {
22
- const value = event[key];
23
- if (value === null || value === undefined) {
24
- delete event[key];
25
- } else if (typeof value === "object" && value !== null && !Array.isArray(value)) {
26
- (event as Record<string, any>)[key] = getCleanedEvent(value as Record<string, any>) as any;
27
- }
28
- }
29
- return event;
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 getCleanedEvent = <T extends Record<string, any>>(event: T): T => {
21
+ for (const key of Object.keys(event)) {
22
+ const value = event[key];
23
+ if (value === null || value === undefined) {
24
+ delete event[key];
25
+ } else if (typeof value === "object" && value !== null && !Array.isArray(value)) {
26
+ (event as Record<string, any>)[key] = getCleanedEvent(value as Record<string, any>) as any;
27
+ }
28
+ }
29
+ return event;
30
30
  };
@@ -1,42 +1,56 @@
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 { TypeStanzaCompiled } from "../@types/type.compiled"
21
- import { TypeSettings } from "../@types/type.settings"
22
- import { bootstrap } from "../bootstrap"
23
- import { text } from "../@events/events.text"
24
- import { ugc } from "../@events/events.ugc"
25
- import { vtec } from "../@events/events.vtec"
26
- import { api } from "../@events/events.api"
27
-
28
- export const createEvent = async (stanza: TypeStanzaCompiled): Promise<void | string> => {
29
- const settings = bootstrap.settings as TypeSettings
30
- const StanzaSettings = settings.NOAAWeatherWireServiceSettings.StanzaSettings;
31
-
32
- const isVtecEvent = (stanza.isVTEC && stanza.isUGC)
33
- const isUgcEvent = (!stanza.isVTEC && stanza.isUGC)
34
- const isTextEvent = (!stanza.isVTEC && !stanza.isUGC)
35
- const isNWWS = (stanza.isNWWS)
36
-
37
- if (!isNWWS) return await api(stanza)
38
- if (!StanzaSettings.DisableVTEC && isVtecEvent) return await vtec(stanza)
39
- if (!StanzaSettings.DisableUGC && isUgcEvent) return await ugc(stanza);
40
- if (!StanzaSettings.DisableText && isTextEvent) return await text(stanza);
41
- return 'nothing picked';
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 { TypeStanzaCompiled } from "../@types/type.compiled"
21
+ import { TypeSettings } from "../@types/type.settings"
22
+ import { bootstrap } from "../bootstrap"
23
+ import { text } from "../@events/events.text"
24
+ import { ugc } from "../@events/events.ugc"
25
+ import { vtec } from "../@events/events.vtec"
26
+ import { api } from "../@events/events.api"
27
+ import { validateEvents } from "./building.validate"
28
+
29
+ export const createEvent = async (stanza: TypeStanzaCompiled, ignorePushing?: boolean): Promise<void | string> => {
30
+ const settings = bootstrap.settings as TypeSettings
31
+ const StanzaSettings = settings.NOAAWeatherWireServiceSettings.StanzaSettings;
32
+
33
+ const isVtecEvent = (stanza.isVTEC && stanza.isUGC)
34
+ const isUgcEvent = (!stanza.isVTEC && stanza.isUGC)
35
+ const isTextEvent = (!stanza.isVTEC && !stanza.isUGC)
36
+ const isNWWS = (stanza.isNWWS)
37
+
38
+ switch (true) {
39
+ case (!isNWWS):
40
+ await api(stanza)
41
+ break;
42
+ case (isNWWS && !StanzaSettings.DisableVTEC && isVtecEvent):
43
+ await vtec(stanza)
44
+ break;
45
+ case (isNWWS && !StanzaSettings.DisableUGC && isUgcEvent):
46
+ await ugc(stanza)
47
+ break;
48
+ case (isNWWS && !StanzaSettings.DisableText && isTextEvent):
49
+ await text(stanza)
50
+ break;
51
+ }
52
+ if (!ignorePushing) {
53
+ validateEvents(bootstrap.cache.processed)
54
+ }
55
+ return 'nothing picked';
42
56
  }
@@ -1,60 +1,60 @@
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 { TypeEvent } from "../@types/type.event";
21
- import { TypeSettings } from "../@types/type.settings";
22
- import { bootstrap } from "../bootstrap"
23
- import { dict_enhanced } from "../@dictionaries/dictionaries.enhanced"
24
-
25
- export const getEventEnhancedName = (event: TypeEvent): string => {
26
- const configurations = bootstrap.settings as TypeSettings
27
- let name = event?.properties?.event
28
-
29
- if (!configurations?.GlobalSettings?.BetterEventNames) {
30
- return name
31
- }
32
-
33
- const damage = event?.properties?.parameters?.damage_threat
34
- const tornado = event?.properties?.parameters?.tornado_threat;
35
- const pdswatch = event?.properties?.watch_parameters?.pds_watch;
36
- const description = event?.properties?.description?.toLowerCase()
37
- for (const [eventKey, eventConfig] of Object.entries(dict_enhanced)) {
38
- if (eventKey !== name) continue;
39
- for (const [paramKey, paramValue] of Object.entries(eventConfig)) {
40
- let matches = true;
41
- if (paramValue?.description) {
42
- if (!description.includes(paramValue.description.toLowerCase())) matches = false;
43
- }
44
- if (paramValue?.damage) {
45
- if (paramValue.damage !== damage) matches = false;
46
- }
47
- if (paramValue?.tornado) {
48
- if (paramValue.tornado !== tornado) matches = false;
49
- }
50
- if (paramValue?.pdswatch) {
51
- if (paramValue.pdswatch !== pdswatch) matches = false;
52
- }
53
- if (matches) {
54
- name = paramKey;
55
- break;
56
- }
57
- }
58
- }
59
- return name;
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 { TypeEvent } from "../@types/type.event";
21
+ import { TypeSettings } from "../@types/type.settings";
22
+ import { dict_enhanced } from "../@dictionaries/dictionaries.enhanced"
23
+ import { bootstrap } from "../bootstrap"
24
+
25
+ export const getEventEnhancedName = (event: TypeEvent): string => {
26
+ const configurations = bootstrap.settings as TypeSettings
27
+ let name = event?.properties?.event
28
+
29
+ if (!configurations?.GlobalSettings?.BetterEventNames) {
30
+ return name
31
+ }
32
+
33
+ const damage = event?.properties?.parameters?.damage_threat
34
+ const tornado = event?.properties?.parameters?.tornado_threat;
35
+ const pdswatch = event?.properties?.watch_parameters?.pds_watch;
36
+ const description = event?.properties?.description?.toLowerCase()
37
+ for (const [eventKey, eventConfig] of Object.entries(dict_enhanced)) {
38
+ if (eventKey !== name) continue;
39
+ for (const [paramKey, paramValue] of Object.entries(eventConfig)) {
40
+ let matches = true;
41
+ if (paramValue?.description) {
42
+ if (!description.includes(paramValue.description.toLowerCase())) matches = false;
43
+ }
44
+ if (paramValue?.damage) {
45
+ if (paramValue.damage !== damage) matches = false;
46
+ }
47
+ if (paramValue?.tornado) {
48
+ if (paramValue.tornado !== tornado) matches = false;
49
+ }
50
+ if (paramValue?.pdswatch) {
51
+ if (paramValue.pdswatch !== pdswatch) matches = false;
52
+ }
53
+ if (matches) {
54
+ name = paramKey;
55
+ break;
56
+ }
57
+ }
58
+ }
59
+ return name;
60
60
  }