@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
@@ -1,82 +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 { TypeEvent } from "../@types/type.event";
23
- import { properties } from "../@building/building.properties";
24
- import { getEventHeader } from "../@building/building.headers";
25
- import { dict_matches } from "../@dictionaries/dictionaries.matches";
26
- import { getEventTracking } from "../@building/building.tracking";
27
- import { validateEvents } from "../@building/building.validate";
28
-
29
- export const text = async (stanza: TypeStanzaCompiled): Promise<void> => {
30
- let processed: TypeEvent[] = [];
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 props = properties({ message, attributes })
40
- const header = getEventHeader({properties: props, getType: stanza.getType})
41
- const issued = new Date(attributes.issue)
42
- const expires = new Date(issued.getTime() + 12 * 60 * 60 * 1000)
43
- let event = Object.keys(dict_matches).find(event => message.toLowerCase().includes(event.toLowerCase()));
44
- let isStatement = false;
45
- if (!event) {
46
- event = stanza.getType.type.split(`-`).map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(` `)
47
- isStatement = true;
48
- }
49
- processed.push({
50
- type: `Feature`,
51
- geometry: {
52
- type: `Point`,
53
- coordinates: []
54
- },
55
- properties: {
56
- event: event,
57
- parent: event,
58
- status: isStatement ? `Statement` : `Issued`,
59
- issued: (!isNaN(issued.getTime())) ? issued.toISOString() : new Date().toISOString(),
60
- expires: isStatement ? new Date(issued.getTime() + 120 * 1000).toISOString() : (!isNaN(expires.getTime())) ? expires.toISOString() : new Date(Date.now() + 60 * 60 * 1000).toISOString(),
61
- ...props,
62
- metadata: {
63
- ms: performance.now() - tick,
64
- source: `events.text`,
65
- tracking: getEventTracking({ type: `RAW`, stanza, attributes, properties: props }),
66
- header: header,
67
- vtec: null,
68
- hvtec: null,
69
- raw: message,
70
- history: [
71
- {
72
- description: props.description,
73
- issued: (!isNaN(issued.getTime())) ? issued.toISOString() : new Date().toISOString(),
74
- status: `Issued`,
75
- }
76
- ]
77
- }
78
- }
79
- })
80
- }
81
- validateEvents(processed)
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
+ }
82
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 { TypeEvent } from "../@types/type.event";
23
- import { dict_matches } from "../@dictionaries/dictionaries.matches";
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 { validateEvents } from "../@building/building.validate";
29
-
30
- export const ugc = async (stanza: TypeStanzaCompiled): Promise<void> => {
31
- let processed: TypeEvent[] = [];
32
- const getMessages = stanza?.message
33
- ?.split(/(?=\$\$)/g)
34
- ?.map(message => message.trim())
35
- ?.filter(message => message && message !== "$$");
36
- if (!getMessages || getMessages?.length == 0 ) return;
37
- for (const message of getMessages) {
38
- const tick = performance.now();
39
- const attributes = stanza?.attributes as TypeAttributes
40
- const ugc = await ugcExtract(message)
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
- 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
- }
84
- }
85
- validateEvents(processed)
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,88 +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 { TypeEvent } from "../@types/type.event";
23
- import { TypePVTEC } from "../@types/type.pvtec";
24
- import { TypeHVTEC } from "../@types/type.hvtec";
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 { validateEvents } from "../@building/building.validate";
32
-
33
- export const vtec = async (stanza: TypeStanzaCompiled): Promise<void> => {
34
- let processed: TypeEvent[] = [];
35
- const getMessages = stanza?.message
36
- ?.split(/(?=\$\$)/g)
37
- ?.map(message => message.trim())
38
- ?.filter(message => message && message !== "$$");
39
- if (!getMessages || getMessages?.length == 0 ) return;
40
- for (const message of getMessages) {
41
- const tick = performance.now();
42
- const attributes = stanza?.attributes as TypeAttributes
43
- const pVtec = pvExtract(message) as TypePVTEC[];
44
- const hVtec = hvExtract(message) as TypeHVTEC[];
45
- const ugc = await ugcExtract(message)
46
- if (pVtec != null && ugc != null ) {
47
- for (const pv of pVtec) {
48
- const vtec = pv;
49
- const props = properties({ message, attributes, ugc, pVtec: vtec })
50
- const header = getEventHeader({properties: props, getType: stanza.getType, vtec: vtec})
51
- const issued = new Date(attributes.issue)?? new Date()
52
- const expires = new Date(vtec.expires)
53
- processed.push({
54
- type: `Feature`,
55
- geometry: {
56
- type: `Point`,
57
- coordinates: []
58
- },
59
- properties: {
60
- event: pv.event,
61
- parent: pv.event,
62
- status: pv.status,
63
- issued: (!isNaN(issued.getTime())) ? issued.toISOString() : new Date().toISOString(),
64
- expires: (!isNaN(expires.getTime())) ? expires.toISOString() : ugc.expires ?? new Date(issued.getTime() + 60 * 60 * 1000).toISOString(),
65
- ...props,
66
- metadata: {
67
- ms: performance.now() - tick,
68
- source: `events.vtec`,
69
- tracking: getEventTracking({ type: `VTEC`, stanza, attributes, properties: props, vtec }),
70
- header: header,
71
- vtec: pv,
72
- hvtec: hVtec,
73
- raw: message,
74
- history: [
75
- {
76
- description: props.description,
77
- issued: (!isNaN(issued.getTime())) ? issued.toISOString() : new Date().toISOString(),
78
- status: pv.status
79
- }
80
- ]
81
- }
82
- }
83
- })
84
- }
85
- }
86
- }
87
- validateEvents(processed)
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
+ }
88
87
  }