@rezless/vm 0.7.0 → 0.8.0

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 (235) hide show
  1. package/dist/builtins/agents.d.ts +14 -0
  2. package/dist/builtins/agents.d.ts.map +1 -0
  3. package/dist/builtins/agents.js +117 -0
  4. package/dist/builtins/agents.js.map +1 -0
  5. package/dist/builtins/animation.d.ts +46 -0
  6. package/dist/builtins/animation.d.ts.map +1 -0
  7. package/dist/builtins/animation.js +316 -0
  8. package/dist/builtins/animation.js.map +1 -0
  9. package/dist/builtins/attachments.d.ts +9 -0
  10. package/dist/builtins/attachments.d.ts.map +1 -0
  11. package/dist/builtins/attachments.js +127 -0
  12. package/dist/builtins/attachments.js.map +1 -0
  13. package/dist/builtins/base64.d.ts +8 -0
  14. package/dist/builtins/base64.d.ts.map +1 -1
  15. package/dist/builtins/base64.js +1 -1
  16. package/dist/builtins/base64.js.map +1 -1
  17. package/dist/builtins/camera.d.ts +35 -0
  18. package/dist/builtins/camera.d.ts.map +1 -0
  19. package/dist/builtins/camera.js +104 -0
  20. package/dist/builtins/camera.js.map +1 -0
  21. package/dist/builtins/collision.d.ts +21 -0
  22. package/dist/builtins/collision.d.ts.map +1 -0
  23. package/dist/builtins/collision.js +44 -0
  24. package/dist/builtins/collision.js.map +1 -0
  25. package/dist/builtins/controls.d.ts +19 -0
  26. package/dist/builtins/controls.d.ts.map +1 -0
  27. package/dist/builtins/controls.js +27 -0
  28. package/dist/builtins/controls.js.map +1 -0
  29. package/dist/builtins/damage.d.ts +24 -0
  30. package/dist/builtins/damage.d.ts.map +1 -0
  31. package/dist/builtins/damage.js +166 -0
  32. package/dist/builtins/damage.js.map +1 -0
  33. package/dist/builtins/detected.d.ts +22 -1
  34. package/dist/builtins/detected.d.ts.map +1 -1
  35. package/dist/builtins/detected.js +27 -1
  36. package/dist/builtins/detected.js.map +1 -1
  37. package/dist/builtins/dialog.d.ts +23 -0
  38. package/dist/builtins/dialog.d.ts.map +1 -0
  39. package/dist/builtins/dialog.js +69 -0
  40. package/dist/builtins/dialog.js.map +1 -0
  41. package/dist/builtins/email.d.ts +61 -0
  42. package/dist/builtins/email.d.ts.map +1 -0
  43. package/dist/builtins/email.js +121 -0
  44. package/dist/builtins/email.js.map +1 -0
  45. package/dist/builtins/environment.d.ts +27 -0
  46. package/dist/builtins/environment.d.ts.map +1 -0
  47. package/dist/builtins/environment.js +126 -0
  48. package/dist/builtins/environment.js.map +1 -0
  49. package/dist/builtins/experience.d.ts +51 -0
  50. package/dist/builtins/experience.d.ts.map +1 -0
  51. package/dist/builtins/experience.js +202 -0
  52. package/dist/builtins/experience.js.map +1 -0
  53. package/dist/builtins/game-control.d.ts +17 -0
  54. package/dist/builtins/game-control.d.ts.map +1 -0
  55. package/dist/builtins/game-control.js +21 -0
  56. package/dist/builtins/game-control.js.map +1 -0
  57. package/dist/builtins/give.d.ts +16 -0
  58. package/dist/builtins/give.d.ts.map +1 -0
  59. package/dist/builtins/give.js +137 -0
  60. package/dist/builtins/give.js.map +1 -0
  61. package/dist/builtins/ground.d.ts +18 -0
  62. package/dist/builtins/ground.d.ts.map +1 -0
  63. package/dist/builtins/ground.js +83 -0
  64. package/dist/builtins/ground.js.map +1 -0
  65. package/dist/builtins/http.d.ts +99 -4
  66. package/dist/builtins/http.d.ts.map +1 -1
  67. package/dist/builtins/http.js +216 -6
  68. package/dist/builtins/http.js.map +1 -1
  69. package/dist/builtins/index.d.ts.map +1 -1
  70. package/dist/builtins/index.js +235 -10
  71. package/dist/builtins/index.js.map +1 -1
  72. package/dist/builtins/inventory.d.ts +1 -0
  73. package/dist/builtins/inventory.d.ts.map +1 -1
  74. package/dist/builtins/inventory.js +1 -1
  75. package/dist/builtins/inventory.js.map +1 -1
  76. package/dist/builtins/land.d.ts +29 -0
  77. package/dist/builtins/land.d.ts.map +1 -0
  78. package/dist/builtins/land.js +339 -0
  79. package/dist/builtins/land.js.map +1 -0
  80. package/dist/builtins/links.d.ts +20 -0
  81. package/dist/builtins/links.d.ts.map +1 -0
  82. package/dist/builtins/links.js +53 -0
  83. package/dist/builtins/links.js.map +1 -0
  84. package/dist/builtins/linksetdata.d.ts +5 -0
  85. package/dist/builtins/linksetdata.d.ts.map +1 -1
  86. package/dist/builtins/linksetdata.js +16 -0
  87. package/dist/builtins/linksetdata.js.map +1 -1
  88. package/dist/builtins/lists.d.ts +6 -0
  89. package/dist/builtins/lists.d.ts.map +1 -1
  90. package/dist/builtins/lists.js +19 -6
  91. package/dist/builtins/lists.js.map +1 -1
  92. package/dist/builtins/math.d.ts +16 -0
  93. package/dist/builtins/math.d.ts.map +1 -1
  94. package/dist/builtins/math.js +74 -0
  95. package/dist/builtins/math.js.map +1 -1
  96. package/dist/builtins/media.d.ts +8 -0
  97. package/dist/builtins/media.d.ts.map +1 -0
  98. package/dist/builtins/media.js +167 -0
  99. package/dist/builtins/media.js.map +1 -0
  100. package/dist/builtins/motion.d.ts +79 -0
  101. package/dist/builtins/motion.d.ts.map +1 -0
  102. package/dist/builtins/motion.js +396 -0
  103. package/dist/builtins/motion.js.map +1 -0
  104. package/dist/builtins/notecard-search.d.ts +15 -0
  105. package/dist/builtins/notecard-search.d.ts.map +1 -0
  106. package/dist/builtins/notecard-search.js +374 -0
  107. package/dist/builtins/notecard-search.js.map +1 -0
  108. package/dist/builtins/object-animation.d.ts +21 -0
  109. package/dist/builtins/object-animation.d.ts.map +1 -0
  110. package/dist/builtins/object-animation.js +193 -0
  111. package/dist/builtins/object-animation.js.map +1 -0
  112. package/dist/builtins/object-reads.d.ts +39 -0
  113. package/dist/builtins/object-reads.d.ts.map +1 -0
  114. package/dist/builtins/object-reads.js +332 -0
  115. package/dist/builtins/object-reads.js.map +1 -0
  116. package/dist/builtins/object.d.ts +6 -0
  117. package/dist/builtins/object.d.ts.map +1 -1
  118. package/dist/builtins/object.js +19 -3
  119. package/dist/builtins/object.js.map +1 -1
  120. package/dist/builtins/particles.d.ts +4 -0
  121. package/dist/builtins/particles.d.ts.map +1 -0
  122. package/dist/builtins/particles.js +65 -0
  123. package/dist/builtins/particles.js.map +1 -0
  124. package/dist/builtins/pathfinding.d.ts +39 -0
  125. package/dist/builtins/pathfinding.d.ts.map +1 -0
  126. package/dist/builtins/pathfinding.js +83 -0
  127. package/dist/builtins/pathfinding.js.map +1 -0
  128. package/dist/builtins/permissions.d.ts.map +1 -1
  129. package/dist/builtins/permissions.js +6 -0
  130. package/dist/builtins/permissions.js.map +1 -1
  131. package/dist/builtins/physics.d.ts +49 -0
  132. package/dist/builtins/physics.d.ts.map +1 -0
  133. package/dist/builtins/physics.js +47 -0
  134. package/dist/builtins/physics.js.map +1 -0
  135. package/dist/builtins/prim-accessors.d.ts +3 -0
  136. package/dist/builtins/prim-accessors.d.ts.map +1 -1
  137. package/dist/builtins/prim-accessors.js +27 -7
  138. package/dist/builtins/prim-accessors.js.map +1 -1
  139. package/dist/builtins/raycast.d.ts +3 -0
  140. package/dist/builtins/raycast.d.ts.map +1 -0
  141. package/dist/builtins/raycast.js +65 -0
  142. package/dist/builtins/raycast.js.map +1 -0
  143. package/dist/builtins/region.d.ts +31 -0
  144. package/dist/builtins/region.d.ts.map +1 -0
  145. package/dist/builtins/region.js +125 -0
  146. package/dist/builtins/region.js.map +1 -0
  147. package/dist/builtins/remote-load.d.ts +3 -0
  148. package/dist/builtins/remote-load.d.ts.map +1 -0
  149. package/dist/builtins/remote-load.js +53 -0
  150. package/dist/builtins/remote-load.js.map +1 -0
  151. package/dist/builtins/rez.d.ts +10 -0
  152. package/dist/builtins/rez.d.ts.map +1 -0
  153. package/dist/builtins/rez.js +255 -0
  154. package/dist/builtins/rez.js.map +1 -0
  155. package/dist/builtins/rsa.d.ts +4 -0
  156. package/dist/builtins/rsa.d.ts.map +1 -0
  157. package/dist/builtins/rsa.js +44 -0
  158. package/dist/builtins/rsa.js.map +1 -0
  159. package/dist/builtins/script-control.d.ts +6 -2
  160. package/dist/builtins/script-control.d.ts.map +1 -1
  161. package/dist/builtins/script-control.js +9 -4
  162. package/dist/builtins/script-control.js.map +1 -1
  163. package/dist/builtins/sensor.d.ts +11 -0
  164. package/dist/builtins/sensor.d.ts.map +1 -0
  165. package/dist/builtins/sensor.js +145 -0
  166. package/dist/builtins/sensor.js.map +1 -0
  167. package/dist/builtins/sit.d.ts +23 -0
  168. package/dist/builtins/sit.d.ts.map +1 -0
  169. package/dist/builtins/sit.js +150 -0
  170. package/dist/builtins/sit.js.map +1 -0
  171. package/dist/builtins/sound.d.ts +19 -0
  172. package/dist/builtins/sound.d.ts.map +1 -0
  173. package/dist/builtins/sound.js +113 -0
  174. package/dist/builtins/sound.js.map +1 -0
  175. package/dist/builtins/targets.d.ts +12 -0
  176. package/dist/builtins/targets.d.ts.map +1 -0
  177. package/dist/builtins/targets.js +121 -0
  178. package/dist/builtins/targets.js.map +1 -0
  179. package/dist/builtins/time.d.ts +12 -0
  180. package/dist/builtins/time.d.ts.map +1 -1
  181. package/dist/builtins/time.js +32 -4
  182. package/dist/builtins/time.js.map +1 -1
  183. package/dist/builtins/vehicles.d.ts +22 -0
  184. package/dist/builtins/vehicles.d.ts.map +1 -0
  185. package/dist/builtins/vehicles.js +78 -0
  186. package/dist/builtins/vehicles.js.map +1 -0
  187. package/dist/builtins/viewer.d.ts +39 -0
  188. package/dist/builtins/viewer.d.ts.map +1 -0
  189. package/dist/builtins/viewer.js +74 -0
  190. package/dist/builtins/viewer.js.map +1 -0
  191. package/dist/clock.d.ts +29 -1
  192. package/dist/clock.d.ts.map +1 -1
  193. package/dist/clock.js +89 -5
  194. package/dist/clock.js.map +1 -1
  195. package/dist/experience.d.ts +39 -0
  196. package/dist/experience.d.ts.map +1 -0
  197. package/dist/experience.js +38 -0
  198. package/dist/experience.js.map +1 -0
  199. package/dist/index.d.ts +20 -3
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +1 -0
  202. package/dist/index.js.map +1 -1
  203. package/dist/interpreter.d.ts +0 -1
  204. package/dist/interpreter.d.ts.map +1 -1
  205. package/dist/interpreter.js.map +1 -1
  206. package/dist/inventory.d.ts +2 -0
  207. package/dist/inventory.d.ts.map +1 -1
  208. package/dist/inventory.js +2 -0
  209. package/dist/inventory.js.map +1 -1
  210. package/dist/linkset.d.ts +139 -11
  211. package/dist/linkset.d.ts.map +1 -1
  212. package/dist/linkset.js +376 -24
  213. package/dist/linkset.js.map +1 -1
  214. package/dist/prim-params.d.ts.map +1 -1
  215. package/dist/prim-params.js +11 -3
  216. package/dist/prim-params.js.map +1 -1
  217. package/dist/prim.d.ts +94 -4
  218. package/dist/prim.d.ts.map +1 -1
  219. package/dist/prim.js +94 -5
  220. package/dist/prim.js.map +1 -1
  221. package/dist/runtime.d.ts +41 -0
  222. package/dist/runtime.d.ts.map +1 -1
  223. package/dist/script.d.ts +147 -2
  224. package/dist/script.d.ts.map +1 -1
  225. package/dist/script.js +373 -19
  226. package/dist/script.js.map +1 -1
  227. package/dist/values/ops.d.ts +3 -0
  228. package/dist/values/ops.d.ts.map +1 -1
  229. package/dist/values/ops.js +2 -2
  230. package/dist/values/ops.js.map +1 -1
  231. package/dist/world.d.ts +247 -1
  232. package/dist/world.d.ts.map +1 -1
  233. package/dist/world.js +318 -6
  234. package/dist/world.js.map +1 -1
  235. package/package.json +2 -2
@@ -0,0 +1,374 @@
1
+ import { nextDataserverKey } from './dataserver.js';
2
+ import { sayError } from './debug.js';
3
+ import { InventoryType } from '../inventory.js';
4
+ import { NULL_KEY } from '../values/types.js';
5
+ import { EOF, NAK } from '../generated/constants.js';
6
+ import { own } from '../own.js';
7
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
8
+ const MAX_DEFAULT_MATCHES = 64;
9
+ /**
10
+ * Find a notecard by name or asset key. A name that isn't a notecard says an error; a key that
11
+ * matches no notecard here is silent, as an uncached notecard is in-world.
12
+ */
13
+ function findNotecard(ctx, name) {
14
+ const inventory = ctx.prim.inventory;
15
+ const byName = inventory.find((it) => it.name === name);
16
+ const item = byName ?? (UUID.test(name) ? inventory.find((it) => it.type === InventoryType.NOTECARD && it.key.toLowerCase() === name.toLowerCase()) : undefined);
17
+ if (item && item.type === InventoryType.NOTECARD && item.notecardLines)
18
+ return { lines: item.notecardLines };
19
+ if (!byName && UUID.test(name))
20
+ return 'unknown-key';
21
+ sayError(ctx, `Could not find notecard '${name}'.`);
22
+ return 'missing';
23
+ }
24
+ class PatternError extends Error {
25
+ reason;
26
+ position;
27
+ constructor(reason, position) {
28
+ super(reason);
29
+ this.reason = reason;
30
+ this.position = position;
31
+ }
32
+ }
33
+ const utf8 = new TextEncoder();
34
+ /** A byte as one UTF-16 unit: ASCII as itself, anything higher in the private use area so no JS class or case fold touches it. */
35
+ const byteChar = (b) => (b < 0x80 ? String.fromCharCode(b) : String.fromCharCode(0xe000 + b));
36
+ const byteSource = (b) => (b < 0x80 ? escapeAscii(b) : `\\u${(0xe000 + b).toString(16)}`);
37
+ function escapeAscii(b) {
38
+ const c = String.fromCharCode(b);
39
+ if (/[A-Za-z0-9 ]/.test(c))
40
+ return c;
41
+ return `\\x${b.toString(16).padStart(2, '0')}`;
42
+ }
43
+ const POSIX_CLASSES = {
44
+ alpha: 'A-Za-z',
45
+ digit: '0-9',
46
+ alnum: 'A-Za-z0-9',
47
+ upper: 'A-Z',
48
+ lower: 'a-z',
49
+ space: '\\t\\n\\v\\f\\r ',
50
+ blank: ' \\t',
51
+ punct: '!-\\/:-@\\[-`{-~',
52
+ xdigit: '0-9A-Fa-f',
53
+ word: '\\w',
54
+ d: '0-9',
55
+ l: 'a-z',
56
+ s: '\\t\\n\\v\\f\\r ',
57
+ u: 'A-Z',
58
+ w: '\\w',
59
+ cntrl: '\\x00-\\x1f\\x7f',
60
+ print: '\\x20-\\x7e',
61
+ graph: '\\x21-\\x7e',
62
+ };
63
+ const CLASS_ESCAPES = {
64
+ d: '\\d',
65
+ D: '\\D',
66
+ w: '\\w',
67
+ W: '\\W',
68
+ s: '\\s',
69
+ S: '\\S',
70
+ l: '[a-z]',
71
+ L: '[^a-z]',
72
+ u: '[A-Z]',
73
+ U: '[^A-Z]',
74
+ };
75
+ const SET_CLASS_ESCAPES = { d: '\\d', D: '\\D', w: '\\w', W: '\\W', s: '\\s', S: '\\S', l: 'a-z', u: 'A-Z' };
76
+ const CONTROL_ESCAPES = { e: '\\x1b', n: '\\n', t: '\\t', r: '\\r', f: '\\f', v: '\\v' };
77
+ const ANCHOR_ESCAPES = {
78
+ A: '(?<![\\s\\S])',
79
+ G: '(?<![\\s\\S])',
80
+ z: '(?![\\s\\S])',
81
+ Z: '(?=\\n?(?![\\s\\S]))',
82
+ b: '\\b',
83
+ B: '\\B',
84
+ '<': '(?<!\\w)(?=\\w)',
85
+ '>': '(?<=\\w)(?!\\w)',
86
+ };
87
+ const isDigit = (c) => c !== undefined && c >= '0' && c <= '9';
88
+ /**
89
+ * Translate a Second Life notecard pattern (a byte-oriented POSIX-extended dialect with Perl escapes,
90
+ * as measured in-world) into the source of a JS RegExp over byteChar text. Throws PatternError with
91
+ * the simulator's message and byte position.
92
+ */
93
+ function translate(p) {
94
+ const s = Array.from(p, (b) => String.fromCharCode(b)).join('');
95
+ let out = '';
96
+ let i = 0;
97
+ let depth = 0;
98
+ let last = 'none';
99
+ const quantifier = (at, text) => {
100
+ if (last === 'quantifier' || last === 'anchor')
101
+ throw new PatternError('Invalid repetition', at + 1);
102
+ if (last === 'none')
103
+ throw new PatternError('Invalid repetition', at);
104
+ out += text;
105
+ last = 'quantifier';
106
+ };
107
+ const emit = (source, kind) => {
108
+ out += source;
109
+ last = kind;
110
+ };
111
+ while (i < s.length) {
112
+ const c = s[i];
113
+ if (c === '\\') {
114
+ const e = s[i + 1];
115
+ if (e === undefined)
116
+ throw new PatternError('Invalid or trailing escape', s.length);
117
+ if (isDigit(e) && e !== '0')
118
+ throw new PatternError('Invalid or trailing escape', i);
119
+ if (e === 'Q') {
120
+ const close = s.indexOf('\\E', i + 2);
121
+ const end = close === -1 ? s.length : close;
122
+ for (let k = i + 2; k < end; k++)
123
+ out += byteSource(p[k]);
124
+ if (end > i + 2)
125
+ last = 'atom';
126
+ else if (last === 'none')
127
+ last = 'anchor';
128
+ i = close === -1 ? end : end + 2;
129
+ continue;
130
+ }
131
+ if (e === 'x') {
132
+ if (s[i + 2] === '{')
133
+ throw new PatternError('Invalid contents of a {...} block', i);
134
+ const hex = /^[0-9a-fA-F]{1,2}/.exec(s.slice(i + 2))?.[0];
135
+ if (!hex)
136
+ throw new PatternError('Invalid or trailing escape', i);
137
+ emit(byteSource(parseInt(hex, 16)), 'atom');
138
+ i += 2 + hex.length;
139
+ continue;
140
+ }
141
+ const anchor = own(ANCHOR_ESCAPES, e);
142
+ if (anchor)
143
+ emit(anchor, 'anchor');
144
+ else
145
+ emit(own(CLASS_ESCAPES, e) ?? own(CONTROL_ESCAPES, e) ?? byteSource(p[i + 1]), 'atom');
146
+ i += 2;
147
+ continue;
148
+ }
149
+ if (c === '[') {
150
+ const [source, end] = translateSet(p, s, i);
151
+ emit(source, 'atom');
152
+ i = end;
153
+ continue;
154
+ }
155
+ if (c === '{') {
156
+ const [text, end] = brace(s, i);
157
+ quantifier(i, text);
158
+ i = end;
159
+ continue;
160
+ }
161
+ if (c === '(') {
162
+ if (s[i + 1] === '?')
163
+ throw new PatternError('Invalid repetition', i + 2);
164
+ depth++;
165
+ emit('(', 'none');
166
+ }
167
+ else if (c === ')') {
168
+ if (depth === 0)
169
+ throw new PatternError("Mismatched '(' and ')'", i);
170
+ depth--;
171
+ emit(')', 'atom');
172
+ }
173
+ else if (c === '|')
174
+ emit('|', 'none');
175
+ else if (c === '^' || c === '$')
176
+ emit(c, 'anchor');
177
+ else if (c === '.')
178
+ emit('[\\s\\S]', 'atom');
179
+ else if (c === '*' || c === '+' || c === '?')
180
+ quantifier(i, c);
181
+ else
182
+ emit(byteSource(p[i]), 'atom');
183
+ i++;
184
+ }
185
+ if (depth > 0)
186
+ throw new PatternError("Mismatched '(' and ')'", s.length);
187
+ return out;
188
+ }
189
+ /** Read the {n}, {n,} or {n,m} repeat at `start`; returns its text and the index after it. */
190
+ function brace(s, start) {
191
+ const m = /^\{(\d+)(?:,(\d*))?/.exec(s.slice(start));
192
+ if (!m)
193
+ throw new PatternError("Mismatched '{' and '}'", start + 1);
194
+ const end = start + m[0].length;
195
+ if (s[end] !== '}')
196
+ throw new PatternError("Mismatched '{' and '}'", end);
197
+ if (m[2] && Number(m[2]) < Number(m[1])) {
198
+ throw new PatternError('Invalid contents of a {...} block', start + 2 + m[1].length);
199
+ }
200
+ return [m[0] + '}', end + 1];
201
+ }
202
+ const BAD_CLASS = 'Invalid character class name was specified in a [[:name:]] block';
203
+ /**
204
+ * Translate the bracket expression at `start`; returns its JS source and the index after it. A
205
+ * backslash in a set is literal unless it starts a class escape such as \\d.
206
+ */
207
+ function translateSet(p, s, start) {
208
+ let i = start + 1;
209
+ let out = '[';
210
+ if (s[i] === '^') {
211
+ out += '^';
212
+ i++;
213
+ }
214
+ const setStart = i;
215
+ let posix = false;
216
+ while (i < s.length) {
217
+ const c = s[i];
218
+ if (c === ']' && i > setStart)
219
+ return [out + ']', i + 1];
220
+ const close = c === '[' && s[i + 1] === ':' ? s.indexOf(':]', i + 2) : -1;
221
+ if (close !== -1) {
222
+ const name = s.slice(i + 2, close);
223
+ const members = own(POSIX_CLASSES, name);
224
+ if (members === undefined)
225
+ throw new PatternError(BAD_CLASS, i + 2);
226
+ out += members;
227
+ posix = true;
228
+ i = close + 2;
229
+ continue;
230
+ }
231
+ const setClass = c === '\\' ? own(SET_CLASS_ESCAPES, s[i + 1] ?? '') : undefined;
232
+ if (setClass) {
233
+ out += setClass;
234
+ i += 2;
235
+ continue;
236
+ }
237
+ if (s[i + 1] === '-' && i + 2 < s.length && s[i + 2] !== ']') {
238
+ const close = s.indexOf(']', i + 3);
239
+ if (p[i + 2] < p[i])
240
+ throw new PatternError(BAD_CLASS, close === -1 ? s.length : close + 1);
241
+ out += `${byteSource(p[i])}-${byteSource(p[i + 2])}`;
242
+ i += 3;
243
+ continue;
244
+ }
245
+ out += byteSource(p[i]);
246
+ i++;
247
+ }
248
+ throw new PatternError(posix ? "Mismatched '(' and ')'" : 'Invalid character set [...]', s.length);
249
+ }
250
+ /** Compile `pattern` against the notecard, or say the regex error and return undefined. */
251
+ function compile(ctx, lines, pattern) {
252
+ const caseless = pattern.startsWith('(?i)');
253
+ const body = utf8.encode(caseless ? pattern.slice(4) : pattern);
254
+ let source;
255
+ try {
256
+ source = translate(body);
257
+ }
258
+ catch (err) {
259
+ if (!(err instanceof PatternError))
260
+ throw err;
261
+ const shown = Array.from(body, (b) => (b < 0x80 ? String.fromCharCode(b) : '?')).join('');
262
+ sayError(ctx, `Regex error: ${err.reason} in "${shown}" at position ${err.position}`);
263
+ return undefined;
264
+ }
265
+ const bytes = utf8.encode(lines.join('\n'));
266
+ const text = Array.from(bytes, byteChar).join('');
267
+ return { text, bytes, source, flags: caseless ? 'mi' : 'm' };
268
+ }
269
+ /**
270
+ * Every match as [byte index, byte length]. The simulator takes the longest match at each start, where
271
+ * JS alternation takes the first branch that matches, so a pattern with alternatives retries each match
272
+ * for a longer end.
273
+ */
274
+ function* matches(search) {
275
+ const regex = new RegExp(search.source, `g${search.flags}`);
276
+ const alternation = search.source.includes('|');
277
+ for (let m = regex.exec(search.text); m; m = regex.exec(search.text)) {
278
+ const length = alternation ? longest(search, m.index, m[0].length) : m[0].length;
279
+ yield [m.index, length];
280
+ regex.lastIndex = m.index + Math.max(length, 1);
281
+ }
282
+ }
283
+ function longest(search, index, length) {
284
+ // One character of context keeps ^, \b and \A right at the start; the lookbehind requires a longer end.
285
+ const offset = index > 0 ? 1 : 0;
286
+ const tail = search.text.slice(index - offset);
287
+ for (;;) {
288
+ const longer = new RegExp(`(?:${search.source})(?<=(?<![\\s\\S])[\\s\\S]{${offset + length + 1},})`, `y${search.flags}`);
289
+ longer.lastIndex = offset;
290
+ const m = longer.exec(tail);
291
+ if (!m)
292
+ return length;
293
+ length = m[0].length;
294
+ }
295
+ }
296
+ const isContinuation = (b) => (b & 0xc0) === 0x80;
297
+ /**
298
+ * Returns [line, column, length] for a byte range, counting columns and length in characters as the simulator
299
+ * does: a character cut off at either end of the range still counts as one.
300
+ */
301
+ function locator(bytes) {
302
+ const leads = new Int32Array(bytes.length + 1);
303
+ const lines = new Int32Array(bytes.length + 1);
304
+ const lineStarts = new Int32Array(bytes.length + 1);
305
+ for (let k = 0; k < bytes.length; k++) {
306
+ const b = bytes[k];
307
+ leads[k + 1] = leads[k] + (isContinuation(b) ? 0 : 1);
308
+ lines[k + 1] = lines[k] + (b === 0x0a ? 1 : 0);
309
+ lineStarts[k + 1] = b === 0x0a ? k + 1 : lineStarts[k];
310
+ }
311
+ return (index, length) => {
312
+ const end = index + length;
313
+ let cut = 0;
314
+ while (index + cut < end && isContinuation(bytes[index + cut]))
315
+ cut++;
316
+ return [lines[index], leads[index] - leads[lineStarts[index]], leads[end] - leads[index] + cut];
317
+ };
318
+ }
319
+ /**
320
+ * llFindNotecardTextSync(string name, string pattern, integer start, integer count, list options) —
321
+ * [line, column, length] for each match after the first `start`. A count of 0 returns up to 64
322
+ * matches, a negative count one. Returns [NAK] for a notecard that isn't here, and [] for an invalid
323
+ * pattern. Notecards are always cached here. Options are ignored.
324
+ */
325
+ export const llFindNotecardTextSync = (ctx, args) => {
326
+ const name = args[0] ?? '';
327
+ const pattern = args[1] ?? '';
328
+ const start = Math.max(0, args[2] ?? 0);
329
+ const count = args[3] ?? 0;
330
+ const notecard = findNotecard(ctx, name);
331
+ if (typeof notecard === 'string')
332
+ return [NAK];
333
+ const search = compile(ctx, notecard.lines, pattern);
334
+ if (!search)
335
+ return [];
336
+ const limit = count === 0 ? MAX_DEFAULT_MATCHES : count < 0 ? 1 : count;
337
+ const locate = locator(search.bytes);
338
+ const out = [];
339
+ let seen = 0;
340
+ for (const [index, length] of matches(search)) {
341
+ if (seen++ < start)
342
+ continue;
343
+ out.push(...locate(index, length));
344
+ if (out.length / 3 >= limit)
345
+ break;
346
+ }
347
+ return out;
348
+ };
349
+ /**
350
+ * llFindNotecardTextCount(string name, string pattern, list options) — raise dataserver with the
351
+ * number of matches. Returns NULL_KEY with no event for a missing notecard or an invalid pattern; a key
352
+ * that matches no notecard here delivers EOF.
353
+ */
354
+ export const llFindNotecardTextCount = (ctx, args) => {
355
+ const name = args[0] ?? '';
356
+ const pattern = args[1] ?? '';
357
+ const notecard = findNotecard(ctx, name);
358
+ if (notecard === 'missing')
359
+ return NULL_KEY;
360
+ let data = EOF;
361
+ if (notecard !== 'unknown-key') {
362
+ const search = compile(ctx, notecard.lines, pattern);
363
+ if (!search)
364
+ return NULL_KEY;
365
+ data = String(Array.from(matches(search)).length);
366
+ }
367
+ const key = nextDataserverKey(ctx);
368
+ ctx.state.dataserverRequests.push({ key, source: 'notecard_text_count', args: [name, pattern], fulfilled: true });
369
+ const at = ctx.state.clock.now + (ctx.spec?.delay ?? 0) * 1000;
370
+ for (const s of ctx.prim.scripts)
371
+ ctx.state.clock.scheduleOn(s, at, 'dataserver', { queryid: key, data });
372
+ return key;
373
+ };
374
+ //# sourceMappingURL=notecard-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notecard-search.js","sourceRoot":"","sources":["../../src/builtins/notecard-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { BuiltinImpl } from '../runtime.js';
2
+ /**
3
+ * llStartObjectAnimation(string anim) — play `anim` on this prim of an
4
+ * animated object. `anim` is an inventory animation's name or a built-in
5
+ * animation's name; a UUID is not accepted. A name it can't find says an
6
+ * error on DEBUG_CHANNEL. In an object that isn't animated nothing plays.
7
+ */
8
+ export declare const llStartObjectAnimation: BuiltinImpl;
9
+ /**
10
+ * llStopObjectAnimation(string anim) — stop `anim`, given as a name (as for
11
+ * llStartObjectAnimation) or the animation's UUID. Stopping one that isn't
12
+ * playing does nothing; a name it can't find says an error.
13
+ */
14
+ export declare const llStopObjectAnimation: BuiltinImpl;
15
+ /**
16
+ * llGetObjectAnimationNames() — the animations this prim plays, ordered by
17
+ * UUID. Each reads as the name of the first inventory animation with that
18
+ * UUID, or as the UUID.
19
+ */
20
+ export declare const llGetObjectAnimationNames: BuiltinImpl;
21
+ //# sourceMappingURL=object-animation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-animation.d.ts","sourceRoot":"","sources":["../../src/builtins/object-animation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,eAAe,CAAA;AA+J7D;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAMpC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAOnC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAE,WAGvC,CAAA"}
@@ -0,0 +1,193 @@
1
+ import { InventoryType } from '../inventory.js';
2
+ import { NULL_KEY } from '../values/types.js';
3
+ import { compareNames } from './inventory.js';
4
+ import { sayError } from './debug.js';
5
+ const KEY_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
6
+ /** The simulator's built-in animations, by name. */
7
+ const BUILTIN_ANIMATIONS = new Map(Object.entries({
8
+ aim_l_bow: '46bb4359-de38-4ed8-6a22-f1f52fe8f506',
9
+ aim_r_bazooka: 'b5b4a67d-0aee-30d2-72cd-77b333e932ef',
10
+ aim_r_handgun: '3147d815-6338-b932-f011-16b56d9ac18b',
11
+ aim_r_rifle: 'ea633413-8006-180a-c3ba-96dd1d756720',
12
+ angry_fingerwag: 'c1bc7f36-3ba0-d844-f93c-93be945d644f',
13
+ angry_tantrum: '11000694-3f41-adc2-606b-eee1d66f3724',
14
+ away: 'fd037134-85d4-f241-72c6-4f42164fedee',
15
+ backflip: 'c4ca6188-9127-4f31-0158-23c4e2f93304',
16
+ blowkiss: 'db84829b-462c-ee83-1e27-9bbee66bd624',
17
+ bow: '82e99230-c906-1403-4d9c-3889dd98daba',
18
+ brush: '349a3801-54f9-bf2c-3bd0-1ac89772af01',
19
+ busy: 'efcf670c-2d18-8128-973a-034ebc806b67',
20
+ clap: '9b0c1c4e-8ac7-7969-1494-28c874c4f668',
21
+ courtbow: '9ba1c942-08be-e43a-fb29-16ad440efc50',
22
+ crouch: '201f3fdf-cb1f-dbec-201f-7333e328ae7c',
23
+ crouchwalk: '47f5f6fb-22e5-ae44-f871-73aaaf4a6022',
24
+ dance1: 'b68a3d7c-de9e-fc87-eec8-543d787e5b0d',
25
+ dance2: '928cae18-e31d-76fd-9cc9-2f55160ff818',
26
+ dance3: '30047778-10ea-1af7-6881-4db7a3a5a114',
27
+ dance4: '951469f4-c7b2-c818-9dee-ad7eea8c30b7',
28
+ dance5: '4bd69a1d-1114-a0b4-625f-84e0a5237155',
29
+ dance6: 'cd28b69b-9c95-bb78-3f94-8d605ff1bb12',
30
+ dance7: 'a54d8ee2-28bb-80a9-7f0c-7afbbe24a5d6',
31
+ dance8: 'b0dc417c-1f11-af36-2e80-7e7489fa7cdc',
32
+ dead: '57abaae6-1d17-7b1b-5f98-6d11a6411276',
33
+ drink: '0f86e355-dd31-a61c-fdb0-3a96b9aad05f',
34
+ express_afraid: '6b61c8e8-4747-0d75-12d7-e49ff207a4ca',
35
+ express_afraid_emote: 'aa2df84d-cf8f-7218-527b-424a52de766e',
36
+ express_anger: '5747a48e-073e-c331-f6f3-7c2149613d3e',
37
+ express_anger_emote: '1a03b575-9634-b62a-5767-3a679e81f4de',
38
+ express_bored: 'b906c4ba-703b-1940-32a3-0c7f7d791510',
39
+ express_bored_emote: '214aa6c1-ba6a-4578-f27c-ce7688f61d0d',
40
+ express_cry: '92624d3e-1068-f1aa-a5ec-8244585193ed',
41
+ express_cry_emote: 'd535471b-85bf-3b4d-a542-93bea4f59d33',
42
+ express_disdain: 'd4416ff1-09d3-300f-4183-1b68a19b9fc1',
43
+ express_embarrased: '514af488-9051-044a-b3fc-d4dbf76377c6',
44
+ express_embarrassed_emote: '0b8c8211-d78c-33e8-fa28-c51a9594e424',
45
+ express_frown: 'fee3df48-fa3d-1015-1e26-a205810e3001',
46
+ express_kiss: '1e8d90cc-a84e-e135-884c-7c82c8b03a14',
47
+ express_laugh: '18b3a4b5-b463-bd48-e4b6-71eaac76c515',
48
+ express_laugh_emote: '62570842-0950-96f8-341c-809e65110823',
49
+ express_open_mouth: 'd63bc1f9-fc81-9625-a0c6-007176d82eb7',
50
+ express_repulsed: '36f81a92-f076-5893-dc4b-7c3795e487cf',
51
+ express_repulsed_emote: 'f76cda94-41d4-a229-2872-e0296e58afe1',
52
+ express_sad: '0eb702e2-cc5a-9a88-56a5-661a55c0676a',
53
+ express_sad_emote: 'eb6ebfb2-a4b3-a19c-d388-4dd5c03823f7',
54
+ express_shrug: '70ea714f-3a97-d742-1b01-590a8fcd1db5',
55
+ express_shrug_emote: 'a351b1bc-cc94-aac2-7bea-a7e6ebad15ef',
56
+ express_smile: 'b7c7c833-e3d3-c4e3-9fc0-131237446312',
57
+ express_surprise: '313b9881-4302-73c0-c7d0-0e7a36b6c224',
58
+ express_surprise_emote: '728646d9-cc79-08b2-32d6-937f0a835c24',
59
+ express_tongue_out: '835965c6-7f2f-bda2-5deb-2478737f91bf',
60
+ express_toothsmile: 'b92ec1a5-e7ce-a76b-2b05-bcdb9311417e',
61
+ express_wink: '869ecdad-a44b-671e-3266-56aef2e3ac2e',
62
+ express_wink_emote: 'da020525-4d94-59d6-23d7-81fdebf33148',
63
+ express_worry: '9f496bd2-589a-709f-16cc-69bf7df1d36c',
64
+ express_worry_emote: '9c05e5c7-6f07-6ca4-ed5a-b230390c3950',
65
+ falldown: '666307d9-a860-572d-6fd4-c3ab8865c094',
66
+ female_run_new: '85995026-eade-5d78-d364-94a64512cb66',
67
+ female_walk: 'f5fc7433-043d-e819-8298-f519a119b688',
68
+ female_walk_new: 'd60c41d2-7c24-7074-d3fa-6101cea22a51',
69
+ fist_pump: '7db00ccd-f380-f3ee-439d-61968ec69c8a',
70
+ fly: 'aec4610c-757f-bc4e-c092-c6e9caf18daf',
71
+ flyslow: '2b5a38b2-5e00-3a97-a495-4c826bc443e6',
72
+ hello: '9b29cd61-c45b-5689-ded2-91756b8d76a9',
73
+ hold_l_bow: '8b102617-bcba-037b-86c1-b76219f90c88',
74
+ hold_r_bazooka: 'ef62d355-c815-4816-2474-b1acc21094a6',
75
+ hold_r_handgun: 'efdc1727-8b8a-c800-4077-975fc27ee2f2',
76
+ hold_r_rifle: '3d94bad0-c55b-7dcc-8763-033c59405d33',
77
+ hold_throw_r: '7570c7b5-1f22-56dd-56ef-a9168241bbb6',
78
+ hover: '4ae8016b-31b9-03bb-c401-b1ea941db41d',
79
+ hover_down: '20f063ea-8306-2562-0b07-5c853b37b31e',
80
+ hover_up: '62c5de58-cb33-5743-3d07-9e4cd4352864',
81
+ impatient: '5ea3991f-c293-392e-6860-91dfa01278a3',
82
+ jump: '2305bd75-1ca9-b03b-1faa-b176b8a8c49e',
83
+ jumpforjoy: '709ea28e-1573-c023-8bf8-520c8bc637fa',
84
+ kick_roundhouse_r: '49aea43b-5ac3-8a44-b595-96100af0beda',
85
+ kissmybutt: '19999406-3a3a-d58c-a2ac-d72e555dcf51',
86
+ land: '7a17b059-12b2-41b1-570a-186368b6aa6f',
87
+ laugh_short: 'ca5b3f14-3194-7a2b-c894-aa699b718d1f',
88
+ motorcycle_sit: '08464f78-3a8e-2944-cba5-0c94aff3af29',
89
+ musclebeach: '315c3a41-a5f3-0ba4-27da-f893f769e69b',
90
+ no_head: '5a977ed9-7f72-44e9-4c4c-6e913df8ae74',
91
+ no_unhappy: 'd83fa0e5-97ed-7eb2-e798-7bd006215cb4',
92
+ nyanya: 'f061723d-0a18-754f-66ee-29a44795a32f',
93
+ peace: 'b312b10e-65ab-a0a4-8b3c-1326ea8e3ed9',
94
+ point_me: '17c024cc-eef2-f6a0-3527-9869876d7752',
95
+ point_you: 'ec952cca-61ef-aa3b-2789-4d1344f016de',
96
+ prejump: '7a4e87fe-de39-6fcb-6223-024b00893244',
97
+ punch_l: 'f3300ad9-3462-1d07-2044-0fef80062da0',
98
+ punch_onetwo: 'eefc79be-daae-a239-8c04-890f5d23654a',
99
+ punch_r: 'c8e42d32-7310-6906-c903-cab5d4a34656',
100
+ rps_countdown: '35db4f7e-28c2-6679-cea9-3ee108f7fc7f',
101
+ rps_paper: '0836b67f-7f7b-f37b-c00a-460dc1521f5a',
102
+ rps_rock: '42dd95d5-0bc6-6392-f650-777304946c0f',
103
+ rps_scissors: '16803a9f-5140-e042-4d7b-d28ba247c325',
104
+ run: '05ddbff8-aaa9-92a1-2b74-8fe77a29b445',
105
+ run_new: '1ab1b236-cd08-21e6-0cbc-0d923fc6eca2',
106
+ salute: 'cd7668a6-7011-d7e2-ead8-fc69eff1a104',
107
+ shoot_l_bow: 'e04d450d-fdb5-0432-fd68-818aaf5935f8',
108
+ shout: '6bd01860-4ebd-127a-bb3d-d1427e8e0c42',
109
+ sit: '1a5fe8ac-a804-8a5d-7cbd-56bd83184568',
110
+ sit_female: 'b1709c8d-ecd3-54a1-4f28-d55ac0840782',
111
+ sit_generic: '245f3c54-f1c0-bf2e-811f-46d8eeb386e7',
112
+ sit_ground: '1c7600d6-661f-b87b-efe2-d7421eb93c86',
113
+ sit_ground_constrained: '1a2bd58e-87ff-0df8-0b4c-53e047b0bb6e',
114
+ sit_to_stand: 'a8dee56f-2eae-9e7a-05a2-6fb92b97e21e',
115
+ sleep: 'f2bed5f9-9d44-39af-b0cd-257b2a17fe40',
116
+ smoke_idle: 'd2f2ee58-8ad1-06c9-d8d3-3827ba31567a',
117
+ smoke_inhale: '6802d553-49da-0778-9f85-1599a2266526',
118
+ smoke_throw_down: '0a9fb970-8b44-9114-d3a9-bf69cfe804d6',
119
+ snapshot: 'eae8905b-271a-99e2-4c0e-31106afd100c',
120
+ soft_land: 'f4f00d6e-b9fe-9292-f4cb-0ae06ea58d57',
121
+ stand_1: '15468e00-3400-bb66-cecc-646d7c14458e',
122
+ stand_2: '370f3a20-6ca6-9971-848c-9a01bc42ae3c',
123
+ stand: '2408fe9e-df1d-1d7d-f4ff-1384fa7b350f',
124
+ stand_3: '42b46214-4b44-79ae-deb8-0df61424ff4b',
125
+ stand_4: 'f22fed8b-a5ed-2c93-64d5-bdd8b93c889f',
126
+ standup: '3da1d753-028a-5446-24f3-9c9b856d9422',
127
+ stretch: '80700431-74ec-a008-14f8-77575e73693f',
128
+ stride: '1cb562b0-ba21-2202-efb3-30f82cdf9595',
129
+ surf: '41426836-7437-7e89-025d-0aa4d10f1d69',
130
+ sword_strike_r: '85428680-6bf9-3e64-b489-6f81087c24bd',
131
+ talk: '5c682a95-6da4-a463-0bf6-0f5b7be129d1',
132
+ throw_r: 'aa134404-7dac-7aca-2cba-435f9db875ca',
133
+ tryon_shirt: '83ff59fe-2346-f236-9009-4e3608af64c1',
134
+ turn_180: '038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53',
135
+ turnback_180: '6883a61a-b27b-5914-a61e-dda118a9ee2c',
136
+ turnleft: '56e0ba0d-4a9f-7f27-6117-32f2ebbf6135',
137
+ turnright: '2d6daa51-3192-6794-8e2e-a15f8338ec30',
138
+ type: 'c541c47f-e0c0-058b-ad1a-d6ae3a4584d9',
139
+ walk: '6ed24bd8-91aa-4b12-ccc7-c97c857ab4e0',
140
+ walk_new: '33339176-7ddc-9397-94a4-bf3403cbc8f5',
141
+ whisper: '7693f268-06c7-ea71-fa21-2b30d6533f8f',
142
+ whistle: 'b1ed7982-c68e-a982-7561-52a88a5298c0',
143
+ wink_hollywood: 'c0c4030f-c02b-49de-24ba-2331f43fe41c',
144
+ yes_happy: 'b8c8b2a3-9008-1771-3bfc-90924955ab2d',
145
+ yes_head: '15dd911d-be82-2856-26db-27659b142875',
146
+ yoga_float: '42ecd00b-9947-a97c-400a-bbc9174c7aeb',
147
+ }));
148
+ const animations = (ctx) => ctx.prim.inventory.filter((it) => it.type === InventoryType.ANIMATION).sort((a, b) => compareNames(a.name, b.name));
149
+ /** An inventory animation by exact name first, then a built-in name in any case. */
150
+ function lookup(ctx, name) {
151
+ return (animations(ctx).find((it) => it.name === name)?.key ?? BUILTIN_ANIMATIONS.get(name.toLowerCase()))?.toLowerCase();
152
+ }
153
+ /**
154
+ * llStartObjectAnimation(string anim) — play `anim` on this prim of an
155
+ * animated object. `anim` is an inventory animation's name or a built-in
156
+ * animation's name; a UUID is not accepted. A name it can't find says an
157
+ * error on DEBUG_CHANNEL. In an object that isn't animated nothing plays.
158
+ */
159
+ export const llStartObjectAnimation = (ctx, args) => {
160
+ const name = args[0] ?? '';
161
+ const id = lookup(ctx, name);
162
+ if (id === undefined)
163
+ sayError(ctx, `Could not find animation '${name}'`);
164
+ else if (ctx.linkset.animesh)
165
+ ctx.prim.objectAnimations.add(id);
166
+ return undefined;
167
+ };
168
+ /**
169
+ * llStopObjectAnimation(string anim) — stop `anim`, given as a name (as for
170
+ * llStartObjectAnimation) or the animation's UUID. Stopping one that isn't
171
+ * playing does nothing; a name it can't find says an error.
172
+ */
173
+ export const llStopObjectAnimation = (ctx, args) => {
174
+ const name = args[0] ?? '';
175
+ let id = lookup(ctx, name);
176
+ if (id === undefined && KEY_PATTERN.test(name) && name !== NULL_KEY)
177
+ id = name.toLowerCase();
178
+ if (id === undefined)
179
+ sayError(ctx, `Could not find animation '${name}'.`);
180
+ else
181
+ ctx.prim.objectAnimations.delete(id);
182
+ return undefined;
183
+ };
184
+ /**
185
+ * llGetObjectAnimationNames() — the animations this prim plays, ordered by
186
+ * UUID. Each reads as the name of the first inventory animation with that
187
+ * UUID, or as the UUID.
188
+ */
189
+ export const llGetObjectAnimationNames = (ctx) => {
190
+ const inventory = animations(ctx);
191
+ return [...ctx.prim.objectAnimations].sort().map((id) => inventory.find((it) => it.key.toLowerCase() === id)?.name ?? id);
192
+ };
193
+ //# sourceMappingURL=object-animation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-animation.js","sourceRoot":"","sources":["../../src/builtins/object-animation.ts"],"names":[],"mappings":"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"}