@atmosx/event-product-parser 3.0.51 → 3.0.53

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 (140) hide show
  1. package/{CODE_OF_CONDUCT.md → .github/CODE_OF_CONDUCT.md} +9 -9
  2. package/{CONTRIBUTING.md → .github/CONTRIBUTING.md} +29 -29
  3. package/{LICENSE → .github/LICENSE} +17 -17
  4. package/{README.md → .github/README.md} +466 -444
  5. package/{SECURITY.md → .github/SECURITY.md} +20 -20
  6. package/{SUPPORTED_EVENTS.md → .github/SUPPORTED_EVENTS.md} +369 -368
  7. package/.vscode/settings.json +3 -3
  8. package/dist/cjs/index.cjs +243 -213
  9. package/dist/esm/index.mjs +242 -212
  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 -55
  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 -69
  19. package/src/@building/building.properties.ts +95 -95
  20. package/src/@building/building.signature.ts +60 -60
  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 -151
  24. package/src/@core/core.clearEvents.ts +30 -30
  25. package/src/@core/core.createListener.ts +23 -23
  26. package/src/@core/core.getEvents.ts +23 -23
  27. package/src/@core/core.getNodes.ts +23 -23
  28. package/src/@core/core.getRandomEvent.ts +23 -23
  29. package/src/@core/core.getVersion.ts +23 -23
  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 -116
  56. package/src/@events/events.text.ts +84 -80
  57. package/src/@events/events.ugc.ts +89 -85
  58. package/src/@events/events.vtec.ts +86 -86
  59. package/src/@manager/manager.mkEvent.ts +97 -93
  60. package/src/@manager/manager.rmEvent.ts +56 -51
  61. package/src/@manager/manager.setHash.ts +35 -35
  62. package/src/@manager/manager.updateEvents.ts +32 -32
  63. package/src/@manager/manager.updateListener.ts +179 -154
  64. package/src/@manager/manager.updateNodes.ts +53 -53
  65. package/src/@modules/@database/database.broadcastify.ts +66 -66
  66. package/src/@modules/@database/database.cache.ts +49 -49
  67. package/src/@modules/@database/database.init.ts +58 -58
  68. package/src/@modules/@database/database.shapefiles.ts +92 -92
  69. package/src/@modules/@database/database.stanza.ts +46 -46
  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 -51
  79. package/src/@modules/@eas/eas.setAsciiToBits.ts +31 -31
  80. package/src/@modules/@eas/eas.setAttentionTone.ts +40 -40
  81. package/src/@modules/@eas/eas.setEasTone.ts +151 -151
  82. package/src/@modules/@eas/eas.setNoise.ts +32 -32
  83. package/src/@modules/@eas/eas.setRadioEffect.ts +50 -50
  84. package/src/@modules/@eas/eas.setSameHeader.ts +44 -44
  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 +83 -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 -33
  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 -38
  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 -62
  100. package/src/@modules/@utilities/utilities.setWarning.ts +34 -34
  101. package/src/@modules/@xmpp/xmpp.xDeploy.ts +57 -57
  102. package/src/@modules/@xmpp/xmpp.xError.ts +26 -26
  103. package/src/@modules/@xmpp/xmpp.xOffline.ts +36 -36
  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 -55
  112. package/src/@parsers/@text/text.getPolygonFromProduct.ts +53 -32
  113. package/src/@parsers/@text/text.getRaw.ts +54 -0
  114. package/src/@parsers/@text/text.getTextFromProduct.ts +42 -42
  115. package/src/@parsers/@text/text.getXML.ts +60 -60
  116. package/src/@parsers/@ugc/ugc.coordinates.ts +110 -110
  117. package/src/@parsers/@ugc/ugc.expiry.ts +31 -31
  118. package/src/@parsers/@ugc/ugc.extract.ts +36 -36
  119. package/src/@parsers/@ugc/ugc.getCache.ts +23 -23
  120. package/src/@parsers/@ugc/ugc.header.ts +29 -29
  121. package/src/@parsers/@ugc/ugc.locations.ts +56 -56
  122. package/src/@parsers/@ugc/ugc.setCache.ts +27 -27
  123. package/src/@parsers/@ugc/ugc.zones.ts +51 -51
  124. package/src/@types/type.attributes.ts +28 -28
  125. package/src/@types/type.compiled.ts +34 -34
  126. package/src/@types/type.event.ts +69 -69
  127. package/src/@types/type.hash.ts +24 -24
  128. package/src/@types/type.hvtec.ts +25 -25
  129. package/src/@types/type.listener.ts +37 -32
  130. package/src/@types/type.properties.ts +77 -77
  131. package/src/@types/type.pvtec.ts +30 -30
  132. package/src/@types/type.settings.ts +93 -84
  133. package/src/@types/type.stanza.ts +37 -37
  134. package/src/@types/type.ugc.ts +24 -24
  135. package/src/bootstrap.ts +124 -115
  136. package/src/index.ts +74 -74
  137. package/{test.js → testing/init.js} +105 -92
  138. package/tsconfig.json +13 -13
  139. package/tsup.config.ts +15 -15
  140. package/src/@core/core.createEvent.ts +0 -82
@@ -1,81 +1,85 @@
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 { TypeAttributes } from "../@types/type.attributes";
21
- import { TypeStanzaCompiled } from "../@types/type.compiled"
22
- import { dict_matches } from "../@dictionaries/dictionaries.matches";
23
- import { bootstrap } from "../bootstrap";
24
- import { properties } from "../@building/building.properties";
25
- import { getEventHeader } from "../@building/building.headers";
26
- import { getEventTracking } from "../@building/building.tracking";
27
- import { setDebug } from "../@modules/@utilities/utilities.setDebug";
28
-
29
- export const text = async (stanza: TypeStanzaCompiled): Promise<void> => {
30
- const getMessages = stanza?.message
31
- ?.split(/(?=\$\$)/g)
32
- ?.map(message => message.trim())
33
- ?.filter(message => message && message !== "$$");
34
- if (!getMessages || getMessages?.length == 0 ) return;
35
- for (const message of getMessages) {
36
- const tick = performance.now();
37
- const attributes = stanza?.attributes as TypeAttributes
38
- const props = properties({ message, attributes })
39
- const header = getEventHeader({properties: props, getType: stanza.getType})
40
- const issued = new Date(attributes.issue)
41
- const expires = new Date(issued.getTime() + 12 * 60 * 60 * 1000)
42
- let event = Object.keys(dict_matches).find(event => message.toLowerCase().includes(event.toLowerCase()));
43
- let isStatement = false;
44
- if (!event) {
45
- event = stanza.getType.type.split(`-`).map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(` `)
46
- isStatement = true;
47
- }
48
- bootstrap.cache.processed.push({
49
- type: `Feature`,
50
- geometry: {
51
- type: `Point`,
52
- coordinates: []
53
- },
54
- properties: {
55
- event: event,
56
- parent: event,
57
- status: isStatement ? `Statement` : `Issued`,
58
- issued: (!isNaN(issued.getTime())) ? issued.toISOString() : new Date().toISOString(),
59
- expires: isStatement ? new Date(issued.getTime() + 120 * 1000).toISOString() : (!isNaN(expires.getTime())) ? expires.toISOString() : new Date(Date.now() + 60 * 60 * 1000).toISOString(),
60
- ...props,
61
- metadata: {
62
- ms: performance.now() - tick,
63
- source: `events.text`,
64
- tracking: getEventTracking({ type: `RAW`, stanza, attributes, properties: props }),
65
- header: header,
66
- vtec: null,
67
- hvtec: null,
68
- raw: message,
69
- history: [
70
- {
71
- description: props.description,
72
- issued: (!isNaN(issued.getTime())) ? issued.toISOString() : new Date().toISOString(),
73
- status: `Issued`,
74
- }
75
- ]
76
- }
77
- }
78
- })
79
- setDebug({ title: `@events.text`, message: `Event process took ${performance.now() - tick} ms` })
80
- }
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 { TypeAttributes } from "../@types/type.attributes";
21
+ import { TypeStanzaCompiled } from "../@types/type.compiled"
22
+ import { dict_matches } from "../@dictionaries/dictionaries.matches";
23
+ import { bootstrap } from "../bootstrap";
24
+ import { properties } from "../@building/building.properties";
25
+ import { getEventHeader } from "../@building/building.headers";
26
+ import { getEventTracking } from "../@building/building.tracking";
27
+ import { setDebug } from "../@modules/@utilities/utilities.setDebug";
28
+
29
+ export const text = async (stanza: TypeStanzaCompiled): Promise<void> => {
30
+ const getMessages = stanza?.message
31
+ ?.split(/(?=\$\$)/g)
32
+ ?.map(message => message.trim())
33
+ ?.filter(message => message && message !== "$$");
34
+ if (!getMessages || getMessages?.length == 0 ) return;
35
+ for (const message of getMessages) {
36
+ const tick = performance.now();
37
+ const attributes = stanza?.attributes as TypeAttributes
38
+ const props = properties({ message, attributes })
39
+ const header = getEventHeader({properties: props, getType: stanza.getType})
40
+ const issued = new Date(attributes.issue)
41
+ const expires = new Date(issued.getTime() + 12 * 60 * 60 * 1000)
42
+ const matches = dict_matches[stanza.getType.prefix]?.find(match => match.match.test(message.toUpperCase()));
43
+
44
+ let event = matches?.label;
45
+ let isStatement = matches?.statement ?? false;
46
+
47
+ if (!event) {
48
+ event = stanza.getType.type.split(`-`).map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(` `)
49
+ isStatement = true;
50
+ }
51
+
52
+ bootstrap.cache.processed.push({
53
+ type: `Feature`,
54
+ geometry: {
55
+ type: `Point`,
56
+ coordinates: []
57
+ },
58
+ properties: {
59
+ event: event,
60
+ parent: event,
61
+ status: isStatement ? `Statement` : `Issued`,
62
+ issued: (!isNaN(issued.getTime())) ? issued.toISOString() : new Date().toISOString(),
63
+ expires: isStatement ? new Date(issued.getTime() + 120 * 1000).toISOString() : (!isNaN(expires.getTime())) ? expires.toISOString() : new Date(Date.now() + 60 * 60 * 1000).toISOString(),
64
+ ...props,
65
+ metadata: {
66
+ ms: performance.now() - tick,
67
+ source: `events.text`,
68
+ tracking: getEventTracking({ type: `RAW`, stanza, attributes, properties: props }),
69
+ header: header,
70
+ vtec: null,
71
+ hvtec: null,
72
+ raw: message,
73
+ history: [
74
+ {
75
+ description: props.description,
76
+ issued: (!isNaN(issued.getTime())) ? issued.toISOString() : new Date().toISOString(),
77
+ status: `Issued`,
78
+ }
79
+ ]
80
+ }
81
+ }
82
+ })
83
+ setDebug({ title: `@events.text`, message: `Event process took ${performance.now() - tick} ms` })
84
+ }
81
85
  }
@@ -1,86 +1,90 @@
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 { TypeAttributes } from "../@types/type.attributes";
21
- import { TypeStanzaCompiled } from "../@types/type.compiled"
22
- import { dict_matches } from "../@dictionaries/dictionaries.matches";
23
- import { bootstrap } from "../bootstrap";
24
- import { ugcExtract } from "../@parsers/@ugc/ugc.extract";
25
- import { properties } from "../@building/building.properties";
26
- import { getEventHeader } from "../@building/building.headers";
27
- import { getEventTracking } from "../@building/building.tracking";
28
- import { setDebug } from "../@modules/@utilities/utilities.setDebug";
29
-
30
- export const ugc = async (stanza: TypeStanzaCompiled): Promise<void> => {
31
- const getMessages = stanza?.message
32
- ?.split(/(?=\$\$)/g)
33
- ?.map(message => message.trim())
34
- ?.filter(message => message && message !== "$$");
35
- if (!getMessages || getMessages?.length == 0 ) return;
36
- for (const message of getMessages) {
37
- const tick = performance.now();
38
- const attributes = stanza?.attributes as TypeAttributes
39
- const ugc = await ugcExtract(message)
40
-
41
- if (ugc != null ) {
42
- const props = properties({ message, attributes, ugc: ugc })
43
- const issued = new Date(attributes.issue)
44
- const expires = new Date(ugc.expires)
45
- const header = getEventHeader({properties: props, getType: stanza.getType })
46
- let event = Object.keys(dict_matches).find(event => message.toLowerCase().includes(event.toLowerCase()));
47
- let isStatement = false;
48
- if (!event) {
49
- event = stanza.getType.type.split(`-`).map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(` `)
50
- isStatement = true;
51
- }
52
- bootstrap.cache.processed.push({
53
- type: `Feature`,
54
- geometry: {
55
- type: `Point`,
56
- coordinates: []
57
- },
58
- properties: {
59
- event: event,
60
- parent: event,
61
- status: isStatement ? `Statement` : `Issued`,
62
- issued: (!isNaN(issued.getTime())) ? issued.toISOString() : new Date().toISOString(),
63
- expires: isStatement ? new Date(issued.getTime() + 120 * 1000).toISOString() : (!isNaN(expires.getTime())) ? expires.toISOString() : new Date(Date.now() + 60 * 60 * 1000).toISOString(),
64
- ...props,
65
- metadata: {
66
- ms: performance.now() - tick,
67
- source: `events.ugc`,
68
- tracking: getEventTracking({ type: `RAW`, stanza, attributes, properties: props }),
69
- header: header,
70
- vtec: null,
71
- hvtec: null,
72
- raw: message,
73
- history: [
74
- {
75
- description: props.description,
76
- issued: (!isNaN(issued.getTime())) ? issued.toISOString() : new Date().toISOString(),
77
- status: `Issued`
78
- }
79
- ]
80
- }
81
- }
82
- })
83
- setDebug({ title: `@events.ugc`, message: `Event process took ${performance.now() - tick} ms` })
84
- }
85
- }
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 { TypeAttributes } from "../@types/type.attributes";
21
+ import { TypeStanzaCompiled } from "../@types/type.compiled"
22
+ import { dict_matches } from "../@dictionaries/dictionaries.matches";
23
+ import { bootstrap } from "../bootstrap";
24
+ import { ugcExtract } from "../@parsers/@ugc/ugc.extract";
25
+ import { properties } from "../@building/building.properties";
26
+ import { getEventHeader } from "../@building/building.headers";
27
+ import { getEventTracking } from "../@building/building.tracking";
28
+ import { setDebug } from "../@modules/@utilities/utilities.setDebug";
29
+
30
+ export const ugc = async (stanza: TypeStanzaCompiled): Promise<void> => {
31
+ const getMessages = stanza?.message
32
+ ?.split(/(?=\$\$)/g)
33
+ ?.map(message => message.trim())
34
+ ?.filter(message => message && message !== "$$");
35
+ if (!getMessages || getMessages?.length == 0 ) return;
36
+ for (const message of getMessages) {
37
+ const tick = performance.now();
38
+ const attributes = stanza?.attributes as TypeAttributes
39
+ const ugc = await ugcExtract(message)
40
+
41
+ if (ugc != null ) {
42
+ const props = properties({ message, attributes, ugc: ugc })
43
+ const issued = new Date(attributes.issue)
44
+ const expires = new Date(ugc.expires)
45
+ const header = getEventHeader({properties: props, getType: stanza.getType })
46
+ const matches = dict_matches[stanza.getType.prefix]?.find(match => match.match.test(message.toUpperCase()));
47
+
48
+ let event = matches?.label;
49
+ let isStatement = matches?.statement ?? false;
50
+
51
+ if (!event) {
52
+ event = stanza.getType.type.split(`-`).map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(` `)
53
+ isStatement = true;
54
+ }
55
+
56
+ bootstrap.cache.processed.push({
57
+ type: `Feature`,
58
+ geometry: {
59
+ type: `Point`,
60
+ coordinates: []
61
+ },
62
+ properties: {
63
+ event: event,
64
+ parent: event,
65
+ status: isStatement ? `Statement` : `Issued`,
66
+ issued: (!isNaN(issued.getTime())) ? issued.toISOString() : new Date().toISOString(),
67
+ expires: isStatement ? new Date(issued.getTime() + 120 * 1000).toISOString() : (!isNaN(expires.getTime())) ? expires.toISOString() : new Date(Date.now() + 60 * 60 * 1000).toISOString(),
68
+ ...props,
69
+ metadata: {
70
+ ms: performance.now() - tick,
71
+ source: `events.ugc`,
72
+ tracking: getEventTracking({ type: `RAW`, stanza, attributes, properties: props }),
73
+ header: header,
74
+ vtec: null,
75
+ hvtec: null,
76
+ raw: message,
77
+ history: [
78
+ {
79
+ description: props.description,
80
+ issued: (!isNaN(issued.getTime())) ? issued.toISOString() : new Date().toISOString(),
81
+ status: `Issued`
82
+ }
83
+ ]
84
+ }
85
+ }
86
+ })
87
+ setDebug({ title: `@events.ugc`, message: `Event process took ${performance.now() - tick} ms` })
88
+ }
89
+ }
86
90
  }
@@ -1,87 +1,87 @@
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 { TypeAttributes } from "../@types/type.attributes";
21
- import { TypeStanzaCompiled } from "../@types/type.compiled"
22
- import { TypePVTEC } from "../@types/type.pvtec";
23
- import { TypeHVTEC } from "../@types/type.hvtec";
24
- import { bootstrap } from "../bootstrap";
25
- import { pvExtract } from "../@parsers/@pvtec/pvtec.extract";
26
- import { hvExtract } from "../@parsers/@hvtec/hvtec.extract";
27
- import { ugcExtract } from "../@parsers/@ugc/ugc.extract";
28
- import { properties } from "../@building/building.properties";
29
- import { getEventHeader } from "../@building/building.headers";
30
- import { getEventTracking } from "../@building/building.tracking";
31
- import { setDebug } from "../@modules/@utilities/utilities.setDebug";
32
-
33
- export const vtec = async (stanza: TypeStanzaCompiled): Promise<void> => {
34
- const getMessages = stanza?.message
35
- ?.split(/(?=\$\$)/g)
36
- ?.map(message => message.trim())
37
- ?.filter(message => message && message !== "$$");
38
- if (!getMessages || getMessages?.length == 0 ) return;
39
- for (const message of getMessages) {
40
- const tick = performance.now();
41
- const attributes = stanza?.attributes as TypeAttributes
42
- const pVtec = pvExtract(message) as TypePVTEC[];
43
- const hVtec = hvExtract(message) as TypeHVTEC[];
44
- const ugc = await ugcExtract(message)
45
- if (pVtec != null && ugc != null ) {
46
- for (const pv of pVtec) {
47
- const vtec = pv;
48
- const props = properties({ message, attributes, ugc, pVtec: vtec })
49
- const header = getEventHeader({properties: props, getType: stanza.getType, vtec: vtec})
50
- const issued = new Date(attributes.issue)?? new Date()
51
- const expires = new Date(vtec.expires)
52
- bootstrap.cache.processed.push({
53
- type: `Feature`,
54
- geometry: {
55
- type: `Point`,
56
- coordinates: []
57
- },
58
- properties: {
59
- event: pv.event,
60
- parent: pv.event,
61
- status: pv.status,
62
- issued: (!isNaN(issued.getTime())) ? issued.toISOString() : new Date().toISOString(),
63
- expires: (!isNaN(expires.getTime())) ? expires.toISOString() : ugc.expires ?? new Date(issued.getTime() + 60 * 60 * 1000).toISOString(),
64
- ...props,
65
- metadata: {
66
- ms: performance.now() - tick,
67
- source: `events.vtec`,
68
- tracking: getEventTracking({ type: `VTEC`, stanza, attributes, properties: props, vtec }),
69
- header: header,
70
- vtec: pv,
71
- hvtec: hVtec,
72
- raw: message,
73
- history: [
74
- {
75
- description: props.description,
76
- issued: (!isNaN(issued.getTime())) ? issued.toISOString() : new Date().toISOString(),
77
- status: pv.status
78
- }
79
- ]
80
- }
81
- }
82
- })
83
- setDebug({ title: `@events.vtec`, message: `Event process took ${performance.now() - tick} ms` })
84
- }
85
- }
86
- }
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 { TypeAttributes } from "../@types/type.attributes";
21
+ import { TypeStanzaCompiled } from "../@types/type.compiled"
22
+ import { TypePVTEC } from "../@types/type.pvtec";
23
+ import { TypeHVTEC } from "../@types/type.hvtec";
24
+ import { bootstrap } from "../bootstrap";
25
+ import { pvExtract } from "../@parsers/@pvtec/pvtec.extract";
26
+ import { hvExtract } from "../@parsers/@hvtec/hvtec.extract";
27
+ import { ugcExtract } from "../@parsers/@ugc/ugc.extract";
28
+ import { properties } from "../@building/building.properties";
29
+ import { getEventHeader } from "../@building/building.headers";
30
+ import { getEventTracking } from "../@building/building.tracking";
31
+ import { setDebug } from "../@modules/@utilities/utilities.setDebug";
32
+
33
+ export const vtec = async (stanza: TypeStanzaCompiled): Promise<void> => {
34
+ const getMessages = stanza?.message
35
+ ?.split(/(?=\$\$)/g)
36
+ ?.map(message => message.trim())
37
+ ?.filter(message => message && message !== "$$");
38
+ if (!getMessages || getMessages?.length == 0 ) return;
39
+ for (const message of getMessages) {
40
+ const tick = performance.now();
41
+ const attributes = stanza?.attributes as TypeAttributes
42
+ const pVtec = pvExtract(message) as TypePVTEC[];
43
+ const hVtec = hvExtract(message) as TypeHVTEC[];
44
+ const ugc = await ugcExtract(message)
45
+ if (pVtec != null && ugc != null ) {
46
+ for (const pv of pVtec) {
47
+ const vtec = pv;
48
+ const props = properties({ message, attributes, ugc, pVtec: vtec })
49
+ const header = getEventHeader({properties: props, getType: stanza.getType, vtec: vtec})
50
+ const issued = new Date(attributes.issue)?? new Date()
51
+ const expires = new Date(vtec.expires)
52
+ bootstrap.cache.processed.push({
53
+ type: `Feature`,
54
+ geometry: {
55
+ type: `Point`,
56
+ coordinates: []
57
+ },
58
+ properties: {
59
+ event: pv.event,
60
+ parent: pv.event,
61
+ status: pv.status,
62
+ issued: (!isNaN(issued.getTime())) ? issued.toISOString() : new Date().toISOString(),
63
+ expires: (!isNaN(expires.getTime())) ? expires.toISOString() : ugc.expires ?? new Date(issued.getTime() + 60 * 60 * 1000).toISOString(),
64
+ ...props,
65
+ metadata: {
66
+ ms: performance.now() - tick,
67
+ source: `events.vtec`,
68
+ tracking: getEventTracking({ type: `VTEC`, stanza, attributes, properties: props, vtec }),
69
+ header: header,
70
+ vtec: pv,
71
+ hvtec: hVtec,
72
+ raw: message,
73
+ history: [
74
+ {
75
+ description: props.description,
76
+ issued: (!isNaN(issued.getTime())) ? issued.toISOString() : new Date().toISOString(),
77
+ status: pv.status
78
+ }
79
+ ]
80
+ }
81
+ }
82
+ })
83
+ setDebug({ title: `@events.vtec`, message: `Event process took ${performance.now() - tick} ms` })
84
+ }
85
+ }
86
+ }
87
87
  }