@holoscript/core 6.0.2 → 6.0.4

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 (229) hide show
  1. package/README.md +38 -38
  2. package/dist/GLTFPipeline-DEN36VNK.js +12 -0
  3. package/dist/GLTFPipeline-YPCAK236.cjs +33 -0
  4. package/dist/{HoloScriptPlusParser-BZR5DELQ.js → HoloScriptPlusParser-BN6KVRCM.js} +5 -5
  5. package/dist/{HoloScriptPlusParser-SBMYDNXO.cjs → HoloScriptPlusParser-NC5FE6AL.cjs} +16 -16
  6. package/dist/{USDZExporter-YA55ZS35.js → USDZExporter-NTMBNTDB.js} +3 -3
  7. package/dist/{USDZExporter-MHEHXZB4.cjs → USDZExporter-UWGWNMMD.cjs} +3 -3
  8. package/dist/{chunk-32TWR3HE.js → chunk-2CWOLHTE.js} +3 -4
  9. package/dist/{chunk-2UX5LRAP.cjs → chunk-33LSUQDD.cjs} +33 -31
  10. package/dist/{chunk-LBPEZQAF.js → chunk-3FJCK5XA.js} +7 -7
  11. package/dist/{chunk-EGIZHYJP.cjs → chunk-3SAK5KFL.cjs} +2 -4
  12. package/dist/{chunk-PJMOXFPR.cjs → chunk-4XSNJCLC.cjs} +25 -27
  13. package/dist/{chunk-HKCVM6OK.cjs → chunk-5BGSECRJ.cjs} +21 -21
  14. package/dist/{chunk-EMO7HAKJ.cjs → chunk-5O6TQC6M.cjs} +26 -30
  15. package/dist/{chunk-XSUZMPVQ.cjs → chunk-5OEOHAAW.cjs} +26 -26
  16. package/dist/{chunk-EJA7G2C4.cjs → chunk-5WUNN6ZN.cjs} +2 -2
  17. package/dist/{chunk-CQDOF3G7.cjs → chunk-6TZPZCOJ.cjs} +18 -18
  18. package/dist/{chunk-NRUB55IT.cjs → chunk-6UEHYZ7V.cjs} +18 -16
  19. package/dist/{chunk-V42NTCFH.js → chunk-6XSERL6L.js} +4230 -2197
  20. package/dist/{chunk-X4YVN7H3.cjs → chunk-72EQECGT.cjs} +37 -17
  21. package/dist/{chunk-4KJ2R7VP.cjs → chunk-7AGYRWKW.cjs} +19 -19
  22. package/dist/{chunk-UQW6SLM5.js → chunk-A7PIMZGU.js} +110 -19
  23. package/dist/{chunk-RT7LJRSF.cjs → chunk-ATSKSYVE.cjs} +1013 -6708
  24. package/dist/{chunk-WN3YF33G.cjs → chunk-B5TCIAPQ.cjs} +9 -10
  25. package/dist/{chunk-AIUXRS74.cjs → chunk-BF2235SI.cjs} +4275 -2242
  26. package/dist/{chunk-DIEDKX5B.cjs → chunk-BND3ST2K.cjs} +18 -16
  27. package/dist/{chunk-EPWRXL6S.js → chunk-BU7VWW2K.js} +29 -29
  28. package/dist/{chunk-6OQBLABR.js → chunk-BWFJEM5A.js} +368 -189
  29. package/dist/{chunk-ARNKA274.cjs → chunk-CAUCGUEA.cjs} +6 -6
  30. package/dist/{chunk-YCMQQQ5U.cjs → chunk-CBJSLA2E.cjs} +398 -219
  31. package/dist/{chunk-BU5ZAFMC.js → chunk-CDPGV4DN.js} +6 -7
  32. package/dist/{chunk-CO2VM2DK.js → chunk-CS2EMTGF.js} +10 -9
  33. package/dist/{chunk-AW7WAELW.js → chunk-DMG7C4H2.js} +4 -4
  34. package/dist/{chunk-XSF76QRU.js → chunk-DXJQDCFL.js} +3 -3
  35. package/dist/{chunk-4FCZDTD5.js → chunk-E3FWRT3Z.js} +7 -9
  36. package/dist/{chunk-KYM4XRFG.js → chunk-E3UALNFA.js} +4 -4
  37. package/dist/{chunk-GC3YU46J.js → chunk-EONILVMF.js} +2 -2
  38. package/dist/{chunk-VJVCD5T5.cjs → chunk-EQV4R3EV.cjs} +22 -22
  39. package/dist/{chunk-FEFHPUEM.cjs → chunk-F3HH56EB.cjs} +74 -658
  40. package/dist/{chunk-WYH4GVZ5.js → chunk-F4IULT7N.js} +2 -2
  41. package/dist/{chunk-XDXZM3ZP.cjs → chunk-FFKU7BTK.cjs} +19 -19
  42. package/dist/{chunk-NKRKT6V2.js → chunk-FHQVYCH2.js} +11 -10
  43. package/dist/{chunk-7H5UNJZD.cjs → chunk-FSF7EQVA.cjs} +11 -10
  44. package/dist/{chunk-KUJRR4FJ.js → chunk-G4VZTCIB.js} +9 -7
  45. package/dist/{chunk-A6GO3DPZ.cjs → chunk-G7CT3EMP.cjs} +4 -4
  46. package/dist/{chunk-EUFLX2PI.js → chunk-GGHSW2NN.js} +989 -6611
  47. package/dist/chunk-GVUR45UF.cjs +777 -0
  48. package/dist/{chunk-ODGMVILH.js → chunk-H5Z7NASB.js} +3 -3
  49. package/dist/{chunk-7KPI4EKH.cjs → chunk-HE7ULERA.cjs} +45 -49
  50. package/dist/{chunk-26TLYBFD.js → chunk-HPS76H7Q.js} +3 -3
  51. package/dist/{chunk-RE3OKSYF.cjs → chunk-HQUEA5R6.cjs} +6 -6
  52. package/dist/{chunk-ZGTGVSTZ.js → chunk-HYNTS5CP.js} +2 -2
  53. package/dist/{chunk-PBA6NXCT.cjs → chunk-IBDG74G2.cjs} +6 -3
  54. package/dist/chunk-IFNQFCTM.js +3098 -0
  55. package/dist/{chunk-ZL6VJ6SN.js → chunk-IWI6J7FX.js} +5 -5
  56. package/dist/{chunk-3KEU5QYY.cjs → chunk-K3JDKWGI.cjs} +118 -23
  57. package/dist/{chunk-NLPSZT4C.js → chunk-K6EKD26I.js} +6 -6
  58. package/dist/chunk-KCQ5NDYC.cjs +3172 -0
  59. package/dist/{chunk-ELLQPFAF.js → chunk-KED34ILP.js} +11 -9
  60. package/dist/{chunk-BY3B7ZYV.cjs → chunk-KSGXLT74.cjs} +3 -3
  61. package/dist/{chunk-65RFOWZI.js → chunk-L4G4RLXX.js} +9 -7
  62. package/dist/{chunk-4SMUJFHL.js → chunk-LDP5OK6G.js} +6 -3
  63. package/dist/{chunk-VZNKJZTT.cjs → chunk-LGGRPKTV.cjs} +82 -96
  64. package/dist/{chunk-C2QHVHZF.js → chunk-LSW7P7ML.js} +23 -414
  65. package/dist/{chunk-HHS6FMOU.cjs → chunk-LXJ4667L.cjs} +83 -22
  66. package/dist/{chunk-H6WMMLQK.cjs → chunk-LZ266PCM.cjs} +20 -13
  67. package/dist/{chunk-V2ILLPHK.cjs → chunk-MD6KDHVE.cjs} +10 -10
  68. package/dist/{chunk-6WNCRE6F.js → chunk-MEASWI2Y.js} +5 -5
  69. package/dist/chunk-MPXBVFHQ.js +768 -0
  70. package/dist/{chunk-WUXIRGZP.cjs → chunk-NCUKG4SK.cjs} +304 -144
  71. package/dist/chunk-NDQNIJEH.js +1715 -0
  72. package/dist/{chunk-Y5MUAYTO.js → chunk-NOZZ46QU.js} +9 -8
  73. package/dist/{chunk-F5LVGHNT.js → chunk-OFKWH2IP.js} +3 -3
  74. package/dist/{chunk-SPDELRRV.cjs → chunk-PMGODDJA.cjs} +12 -12
  75. package/dist/{chunk-I3XGTIHM.cjs → chunk-Q4QX3AET.cjs} +2 -2
  76. package/dist/{chunk-Y7VK5TH3.cjs → chunk-Q5JT3YML.cjs} +10 -10
  77. package/dist/{chunk-TSWTWZ42.cjs → chunk-Q5SJOGHQ.cjs} +247 -205
  78. package/dist/{chunk-M6FU6S22.js → chunk-QGKNANZ3.js} +251 -91
  79. package/dist/{chunk-WFJIDI2N.cjs → chunk-QLEAOI3Q.cjs} +10 -10
  80. package/dist/{chunk-VK5AXKO3.js → chunk-R7MA7QWV.js} +70 -84
  81. package/dist/{chunk-W76ETJTI.js → chunk-RVYPEYPX.js} +6 -6
  82. package/dist/{chunk-MWEFR6YQ.js → chunk-S2N5TNMA.js} +7 -9
  83. package/dist/{chunk-NCUHGRTZ.js → chunk-S565K7NK.js} +7 -7
  84. package/dist/{chunk-AC4BSHFV.js → chunk-SDAMZIRE.js} +5 -5
  85. package/dist/{chunk-HBZYCASG.js → chunk-T36DDXSF.js} +75 -33
  86. package/dist/{chunk-BO2OKHIY.js → chunk-T4NKMBDL.js} +30 -611
  87. package/dist/{chunk-7X2IEJIE.cjs → chunk-T7LEXZUZ.cjs} +29 -29
  88. package/dist/{chunk-HUFNKFA6.js → chunk-TEWCN33Y.js} +8 -12
  89. package/dist/{chunk-L3Z2HIWJ.cjs → chunk-TQSZUOW5.cjs} +2 -2
  90. package/dist/chunk-TSH3MSQU.cjs +129 -0
  91. package/dist/{chunk-PLMYCCA4.js → chunk-UERJ3YJV.js} +6 -6
  92. package/dist/{chunk-7N3JIJMT.js → chunk-UPJBDCVF.js} +6 -6
  93. package/dist/{chunk-CMYAWUX3.js → chunk-V3NN3HPP.js} +12 -5
  94. package/dist/{chunk-SUCBB66F.js → chunk-WB4Z63GG.js} +3 -3
  95. package/dist/{chunk-PPULB4GG.cjs → chunk-WDW67DZB.cjs} +68 -68
  96. package/dist/chunk-WGMEAYBG.js +126 -0
  97. package/dist/{chunk-VSXOIUCF.cjs → chunk-X4ZF6CNE.cjs} +7 -7
  98. package/dist/{chunk-HF4OFY25.cjs → chunk-X6SEAXAX.cjs} +29 -445
  99. package/dist/{chunk-C7BNX4XJ.js → chunk-XCWFGZAA.js} +6 -6
  100. package/dist/{chunk-CNVM7J3M.js → chunk-XD6IYDUX.js} +34 -14
  101. package/dist/chunk-XG23EUQX.cjs +1717 -0
  102. package/dist/{chunk-DN7UFU63.cjs → chunk-XRKWN5PL.cjs} +12 -11
  103. package/dist/{chunk-XNMEH2BI.js → chunk-XUTX5CBW.js} +3 -3
  104. package/dist/{chunk-PQLGZKMC.cjs → chunk-XWPNTWDN.cjs} +26 -26
  105. package/dist/{chunk-NTMZSDXM.cjs → chunk-XXINBTZK.cjs} +43 -43
  106. package/dist/{chunk-74YCHHTE.js → chunk-YCXFCXDS.js} +8 -12
  107. package/dist/{chunk-KDB6BUMB.js → chunk-YQK5JNFK.js} +77 -18
  108. package/dist/{chunk-DH5G2JUA.cjs → chunk-Z34RLXRA.cjs} +44 -46
  109. package/dist/{chunk-XH7SE4HH.cjs → chunk-ZP4D3CSX.cjs} +19 -19
  110. package/dist/cli/holoscript-runner.cjs +33 -32
  111. package/dist/cli/holoscript-runner.js +13 -12
  112. package/dist/codebase/index.cjs +1 -1
  113. package/dist/codebase/index.d.ts +25 -0
  114. package/dist/codebase/index.js +1 -1
  115. package/dist/compiler/agent-inference.cjs +7 -8
  116. package/dist/compiler/agent-inference.js +3 -4
  117. package/dist/compiler/android-xr.cjs +7 -8
  118. package/dist/compiler/android-xr.js +5 -6
  119. package/dist/compiler/android.cjs +8 -9
  120. package/dist/compiler/android.js +6 -7
  121. package/dist/compiler/ar.cjs +6 -7
  122. package/dist/compiler/ar.js +4 -5
  123. package/dist/compiler/babylon.cjs +8 -9
  124. package/dist/compiler/babylon.js +7 -8
  125. package/dist/compiler/coco.cjs +1 -1
  126. package/dist/compiler/coco.js +1 -1
  127. package/dist/compiler/domain-block-utils.cjs +158 -151
  128. package/dist/compiler/domain-block-utils.js +4 -5
  129. package/dist/compiler/dtdl.cjs +7 -8
  130. package/dist/compiler/dtdl.js +4 -5
  131. package/dist/compiler/gltf-pipeline.cjs +9 -9
  132. package/dist/compiler/gltf-pipeline.js +2 -2
  133. package/dist/compiler/godot.cjs +6 -7
  134. package/dist/compiler/godot.js +5 -6
  135. package/dist/compiler/incremental.cjs +7 -8
  136. package/dist/compiler/incremental.js +2 -3
  137. package/dist/compiler/index.cjs +1934 -878
  138. package/dist/compiler/index.js +1904 -842
  139. package/dist/compiler/ios.cjs +8 -9
  140. package/dist/compiler/ios.js +6 -7
  141. package/dist/compiler/multi-layer.cjs +10 -17
  142. package/dist/compiler/multi-layer.js +9 -10
  143. package/dist/compiler/nodetoy.cjs +1 -1
  144. package/dist/compiler/nodetoy.js +1 -1
  145. package/dist/compiler/openxr.cjs +6 -7
  146. package/dist/compiler/openxr.js +5 -6
  147. package/dist/compiler/playcanvas.cjs +7 -8
  148. package/dist/compiler/playcanvas.js +6 -7
  149. package/dist/compiler/r3f.cjs +13 -14
  150. package/dist/compiler/r3f.js +8 -9
  151. package/dist/compiler/remotion.cjs +1 -1
  152. package/dist/compiler/remotion.js +1 -1
  153. package/dist/compiler/reproducibility.cjs +1 -1
  154. package/dist/compiler/reproducibility.js +1 -1
  155. package/dist/compiler/sdf.cjs +7 -8
  156. package/dist/compiler/sdf.js +5 -6
  157. package/dist/compiler/semantic-scene.cjs +7 -7
  158. package/dist/compiler/semantic-scene.js +2 -2
  159. package/dist/compiler/state.cjs +5 -6
  160. package/dist/compiler/state.js +3 -4
  161. package/dist/compiler/trait-composition.cjs +7 -8
  162. package/dist/compiler/trait-composition.js +3 -4
  163. package/dist/compiler/unity.cjs +6 -7
  164. package/dist/compiler/unity.js +5 -6
  165. package/dist/compiler/unreal.cjs +7 -8
  166. package/dist/compiler/unreal.js +5 -6
  167. package/dist/compiler/urdf.cjs +13 -14
  168. package/dist/compiler/urdf.js +5 -6
  169. package/dist/compiler/usd-physics.cjs +7 -8
  170. package/dist/compiler/usd-physics.js +4 -5
  171. package/dist/compiler/visionos.cjs +6 -7
  172. package/dist/compiler/visionos.js +5 -6
  173. package/dist/compiler/vrchat.cjs +7 -8
  174. package/dist/compiler/vrchat.js +5 -6
  175. package/dist/compiler/vrr.cjs +7 -8
  176. package/dist/compiler/vrr.js +5 -6
  177. package/dist/compiler/wasm.cjs +10 -11
  178. package/dist/compiler/wasm.js +5 -6
  179. package/dist/compiler/webgpu.cjs +6 -7
  180. package/dist/compiler/webgpu.js +5 -6
  181. package/dist/constants.d.ts +3 -0
  182. package/dist/debugger.cjs +7 -7
  183. package/dist/debugger.js +5 -5
  184. package/dist/entries/interop.cjs +1 -1
  185. package/dist/entries/interop.d.ts +9 -0
  186. package/dist/entries/interop.js +1 -1
  187. package/dist/entries/scripting.cjs +18 -17
  188. package/dist/entries/scripting.d.ts +7 -0
  189. package/dist/entries/scripting.js +8 -7
  190. package/dist/index.cjs +6773 -27555
  191. package/dist/index.d.ts +19 -0
  192. package/dist/index.js +5212 -26101
  193. package/dist/math/vec3.cjs +1 -1
  194. package/dist/math/vec3.js +1 -1
  195. package/dist/ml-dsa-PHCWUBPX.cjs +1178 -0
  196. package/dist/ml-dsa-WYLJHJO6.js +1178 -0
  197. package/dist/parser.cjs +11 -10
  198. package/dist/parser.js +8 -7
  199. package/dist/{playwright-BIZXMLD2.js → playwright-5OSAPTNH.js} +3 -3
  200. package/dist/{playwright-7DTEQCBD.cjs → playwright-RL6GY4F7.cjs} +1985 -1985
  201. package/dist/runtime.cjs +5 -5
  202. package/dist/runtime.js +4 -4
  203. package/dist/self-improvement/index.d.ts +0 -48
  204. package/dist/storage/index.cjs +1 -1
  205. package/dist/storage/index.d.ts +24 -0
  206. package/dist/storage/index.js +1 -1
  207. package/dist/tools/index.d.ts +12 -0
  208. package/dist/traits/index.cjs +925 -607
  209. package/dist/traits/index.js +137 -20
  210. package/dist/type-checker.cjs +4 -4
  211. package/dist/type-checker.js +2 -2
  212. package/package.json +54 -19
  213. package/LICENSE +0 -21
  214. package/dist/GLTFPipeline-3KLWWUQO.cjs +0 -34
  215. package/dist/GLTFPipeline-LYII2ZVQ.js +0 -13
  216. package/dist/chunk-CN4NOESF.cjs +0 -416
  217. package/dist/chunk-DXVCEFZB.js +0 -2027
  218. package/dist/chunk-ENV7K6XA.js +0 -282
  219. package/dist/chunk-H7XMORZI.js +0 -2731
  220. package/dist/chunk-HAN4V3PF.cjs +0 -2037
  221. package/dist/chunk-LER4WXW5.cjs +0 -286
  222. package/dist/chunk-QHVVVN47.cjs +0 -2033
  223. package/dist/chunk-QWKUKVRE.js +0 -2026
  224. package/dist/chunk-UITWA6DV.cjs +0 -2829
  225. package/dist/chunk-X67XRI2T.js +0 -410
  226. package/dist/post-quantum-JTTAAGO3.cjs +0 -6
  227. package/dist/post-quantum-RVPVDEPI.js +0 -4
  228. package/dist/wot/index.cjs +0 -29
  229. package/dist/wot/index.js +0 -4
@@ -1,416 +0,0 @@
1
- 'use strict';
2
-
3
- // src/wot/ThingDescriptionGenerator.ts
4
- var ThingDescriptionGenerator = class {
5
- constructor(options = {}) {
6
- this.options = {
7
- baseUrl: options.baseUrl || "",
8
- contentType: options.contentType || "application/json",
9
- defaultObservable: options.defaultObservable ?? true,
10
- securityDefinitions: options.securityDefinitions
11
- };
12
- }
13
- /**
14
- * Generate a Thing Description from a HoloScript node with @wot_thing trait
15
- */
16
- generate(node) {
17
- const wotTrait = this.findWoTTrait(node);
18
- if (!wotTrait) {
19
- return null;
20
- }
21
- const config = this.parseWoTConfig(wotTrait);
22
- const stateProperties = this.extractStateProperties(node);
23
- const actions = this.extractActions(node);
24
- const events = this.extractEvents(node);
25
- const td = {
26
- "@context": "https://www.w3.org/2022/wot/td/v1.1",
27
- id: config.id || `urn:holoscript:${node.name || "thing"}`,
28
- title: config.title || node.name || "Unnamed Thing",
29
- security: "default",
30
- securityDefinitions: this.buildSecurityDefinitions(config.security)
31
- };
32
- if (config.description) {
33
- td.description = config.description;
34
- }
35
- if (config.base || this.options.baseUrl) {
36
- td.base = config.base || this.options.baseUrl;
37
- }
38
- if (config.version) {
39
- td.version = { instance: config.version };
40
- }
41
- if (Object.keys(stateProperties).length > 0) {
42
- td.properties = stateProperties;
43
- }
44
- if (Object.keys(actions).length > 0) {
45
- td.actions = actions;
46
- }
47
- if (Object.keys(events).length > 0) {
48
- td.events = events;
49
- }
50
- return td;
51
- }
52
- /**
53
- * Generate Thing Descriptions for all nodes with @wot_thing trait
54
- */
55
- generateAll(nodes) {
56
- const results = [];
57
- const processNode = (node) => {
58
- const td = this.generate(node);
59
- if (td) {
60
- results.push(td);
61
- }
62
- if (node.children) {
63
- for (const child of node.children) {
64
- processNode(child);
65
- }
66
- }
67
- };
68
- for (const node of nodes) {
69
- processNode(node);
70
- }
71
- return results;
72
- }
73
- /**
74
- * Find @wot_thing directive in node
75
- */
76
- findWoTTrait(node) {
77
- if (!node.directives) {
78
- return null;
79
- }
80
- return node.directives.find(
81
- (d) => d.type === "trait" && d.name === "wot_thing" || d.type === "directive" && d.name === "wot_thing"
82
- ) || null;
83
- }
84
- /**
85
- * Parse @wot_thing config from directive
86
- */
87
- parseWoTConfig(directive) {
88
- const dir = directive;
89
- const args = dir.args || dir.config || {};
90
- return {
91
- title: String(args.title || ""),
92
- description: args.description ? String(args.description) : void 0,
93
- security: args.security || "nosec",
94
- base: args.base ? String(args.base) : void 0,
95
- id: args.id ? String(args.id) : void 0,
96
- version: args.version ? String(args.version) : void 0
97
- };
98
- }
99
- /**
100
- * Extract TD properties from @state block
101
- */
102
- extractStateProperties(node) {
103
- const properties = {};
104
- if (!node.directives) {
105
- return properties;
106
- }
107
- const stateDirective = node.directives.find(
108
- (d) => d.type === "state" || d.type === "directive" && d.name === "state"
109
- );
110
- if (!stateDirective || !stateDirective.body) {
111
- if (node.properties?.state && typeof node.properties.state === "object") {
112
- return this.mapStateToProperties(node.properties.state);
113
- }
114
- return properties;
115
- }
116
- const rawBody = stateDirective.body;
117
- const stateBody = typeof rawBody === "object" && rawBody !== null ? rawBody : {};
118
- return this.mapStateToProperties(stateBody);
119
- }
120
- /**
121
- * Map state object to TD properties
122
- */
123
- mapStateToProperties(state) {
124
- const properties = {};
125
- for (const [key, value] of Object.entries(state)) {
126
- const property = {
127
- type: this.inferType(value),
128
- observable: this.options.defaultObservable,
129
- forms: [
130
- {
131
- href: `${this.options.baseUrl}/properties/${key}`,
132
- contentType: this.options.contentType,
133
- op: ["readproperty", "writeproperty"]
134
- }
135
- ]
136
- };
137
- if (value !== void 0 && value !== null) {
138
- property.default = value;
139
- }
140
- if (typeof value === "number") {
141
- if (Number.isInteger(value)) {
142
- property.type = "integer";
143
- }
144
- }
145
- if (Array.isArray(value)) {
146
- property.type = "array";
147
- if (value.length > 0) {
148
- property.items = { type: this.inferType(value[0]) };
149
- }
150
- }
151
- if (value !== null && typeof value === "object" && !Array.isArray(value)) {
152
- property.type = "object";
153
- property.properties = {};
154
- for (const [subKey, subValue] of Object.entries(value)) {
155
- property.properties[subKey] = { type: this.inferType(subValue) };
156
- }
157
- }
158
- properties[key] = property;
159
- }
160
- return properties;
161
- }
162
- /**
163
- * Extract TD actions from @on_* handlers
164
- */
165
- extractActions(node) {
166
- const actions = {};
167
- if (!node.directives) {
168
- return actions;
169
- }
170
- const actionPatterns = [
171
- /^on_click$/,
172
- /^on_grab$/,
173
- /^on_release$/,
174
- /^on_hover$/,
175
- /^on_action$/,
176
- /^on_command$/,
177
- /^on_invoke$/,
178
- /^on_call$/
179
- ];
180
- for (const directive of node.directives) {
181
- const d = directive;
182
- if (directive.type !== "lifecycle" && d.hook === void 0) {
183
- continue;
184
- }
185
- const hookName = d.hook || d.name;
186
- if (!hookName) continue;
187
- const isAction = actionPatterns.some((pattern) => pattern.test(hookName));
188
- if (!isAction) continue;
189
- const actionName = hookName.replace(/^on_/, "");
190
- actions[actionName] = {
191
- title: this.toTitleCase(actionName),
192
- description: `Invoke ${actionName} action`,
193
- safe: false,
194
- idempotent: false,
195
- forms: [
196
- {
197
- href: `${this.options.baseUrl}/actions/${actionName}`,
198
- contentType: this.options.contentType,
199
- op: "invokeaction"
200
- }
201
- ]
202
- };
203
- if (d.args && typeof d.args === "object") {
204
- actions[actionName].input = {
205
- type: "object",
206
- properties: this.extractInputSchema(d.args)
207
- };
208
- }
209
- }
210
- return actions;
211
- }
212
- /**
213
- * Extract TD events from emit() calls
214
- */
215
- extractEvents(node) {
216
- const events = {};
217
- if (!node.directives) {
218
- return events;
219
- }
220
- const observableDirectives = node.directives.filter(
221
- (d) => d.type === "directive" && (d.name === "observable" || d.name === "event" || d.name === "emit")
222
- );
223
- for (const directive of observableDirectives) {
224
- const dirExt = directive;
225
- const args = dirExt.args || dirExt.config || {};
226
- const eventName = args.name || args.event || "change";
227
- events[String(eventName)] = {
228
- title: this.toTitleCase(String(eventName)),
229
- description: `${eventName} event`,
230
- forms: [
231
- {
232
- href: `${this.options.baseUrl}/events/${eventName}`,
233
- contentType: this.options.contentType,
234
- subprotocol: "sse",
235
- op: "subscribeevent"
236
- }
237
- ]
238
- };
239
- if (args.data && typeof args.data === "object") {
240
- events[String(eventName)].data = {
241
- type: "object",
242
- properties: this.extractInputSchema(args.data)
243
- };
244
- }
245
- }
246
- const emitPattern = /emit\s*\(\s*['"]([^'"]+)['"]/g;
247
- for (const directive of node.directives) {
248
- const dirBody = directive.body;
249
- if (dirBody && typeof dirBody === "string") {
250
- let match;
251
- while ((match = emitPattern.exec(dirBody)) !== null) {
252
- const eventName = match[1];
253
- if (!events[eventName]) {
254
- events[eventName] = {
255
- title: this.toTitleCase(eventName),
256
- description: `${eventName} event`,
257
- forms: [
258
- {
259
- href: `${this.options.baseUrl}/events/${eventName}`,
260
- contentType: this.options.contentType,
261
- subprotocol: "sse",
262
- op: "subscribeevent"
263
- }
264
- ]
265
- };
266
- }
267
- }
268
- }
269
- }
270
- return events;
271
- }
272
- /**
273
- * Build security definitions based on config
274
- */
275
- buildSecurityDefinitions(security) {
276
- if (this.options.securityDefinitions) {
277
- return this.options.securityDefinitions;
278
- }
279
- const definitions = {};
280
- switch (security) {
281
- case "basic":
282
- definitions.default = {
283
- scheme: "basic",
284
- in: "header"
285
- };
286
- break;
287
- case "bearer":
288
- definitions.default = {
289
- scheme: "bearer",
290
- in: "header",
291
- format: "jwt"
292
- };
293
- break;
294
- case "oauth2":
295
- definitions.default = {
296
- scheme: "oauth2",
297
- flow: "code"
298
- };
299
- break;
300
- case "apikey":
301
- definitions.default = {
302
- scheme: "apikey",
303
- in: "header",
304
- name: "X-API-Key"
305
- };
306
- break;
307
- case "nosec":
308
- default:
309
- definitions.default = {
310
- scheme: "nosec"
311
- };
312
- break;
313
- }
314
- return definitions;
315
- }
316
- /**
317
- * Extract input schema from args object
318
- */
319
- extractInputSchema(args) {
320
- const schema = {};
321
- for (const [key, value] of Object.entries(args)) {
322
- schema[key] = { type: this.inferType(value) };
323
- }
324
- return schema;
325
- }
326
- /**
327
- * Infer JSON Schema type from value
328
- */
329
- inferType(value) {
330
- if (value === null) return "null";
331
- if (typeof value === "boolean") return "boolean";
332
- if (typeof value === "number") {
333
- return Number.isInteger(value) ? "integer" : "number";
334
- }
335
- if (typeof value === "string") return "string";
336
- if (Array.isArray(value)) return "array";
337
- if (typeof value === "object") return "object";
338
- return "string";
339
- }
340
- /**
341
- * Convert snake_case or camelCase to Title Case
342
- */
343
- toTitleCase(str) {
344
- return str.replace(/_/g, " ").replace(/([A-Z])/g, " $1").replace(/^\s+/, "").split(" ").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
345
- }
346
- };
347
- function generateThingDescription(node, options) {
348
- const generator = new ThingDescriptionGenerator(options);
349
- return generator.generate(node);
350
- }
351
- function generateAllThingDescriptions(nodes, options) {
352
- const generator = new ThingDescriptionGenerator(options);
353
- return generator.generateAll(nodes);
354
- }
355
- function serializeThingDescription(td, pretty = true) {
356
- return JSON.stringify(td, null, pretty ? 2 : 0);
357
- }
358
- function validateThingDescription(td) {
359
- const errors = [];
360
- if (!td["@context"]) {
361
- errors.push("Missing required field '@context'");
362
- }
363
- if (!td.title) {
364
- errors.push("Missing required field 'title'");
365
- }
366
- if (!td.security) {
367
- errors.push("Missing required field 'security'");
368
- }
369
- if (!td.securityDefinitions) {
370
- errors.push("Missing required field 'securityDefinitions'");
371
- }
372
- if (td.security && td.securityDefinitions) {
373
- const securityNames = Array.isArray(td.security) ? td.security : [td.security];
374
- for (const name of securityNames) {
375
- if (!td.securityDefinitions[name]) {
376
- errors.push(`Security definition '${name}' not found in securityDefinitions`);
377
- }
378
- }
379
- }
380
- const validateForms = (forms) => {
381
- if (forms) {
382
- for (const form of forms) {
383
- if (!form.href) {
384
- errors.push("Form missing required href");
385
- }
386
- }
387
- }
388
- };
389
- if (td.properties) {
390
- for (const prop of Object.values(td.properties)) {
391
- validateForms(prop.forms);
392
- }
393
- }
394
- if (td.actions) {
395
- for (const action of Object.values(td.actions)) {
396
- validateForms(action.forms);
397
- }
398
- }
399
- if (td.events) {
400
- for (const event of Object.values(td.events)) {
401
- validateForms(event.forms);
402
- }
403
- }
404
- return {
405
- valid: errors.length === 0,
406
- errors
407
- };
408
- }
409
-
410
- exports.ThingDescriptionGenerator = ThingDescriptionGenerator;
411
- exports.generateAllThingDescriptions = generateAllThingDescriptions;
412
- exports.generateThingDescription = generateThingDescription;
413
- exports.serializeThingDescription = serializeThingDescription;
414
- exports.validateThingDescription = validateThingDescription;
415
- //# sourceMappingURL=chunk-CN4NOESF.cjs.map
416
- //# sourceMappingURL=chunk-CN4NOESF.cjs.map