@holoscript/core 2.0.1 → 2.1.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.
- package/dist/chunk-2XXE34KS.js +344 -0
- package/dist/chunk-2XXE34KS.js.map +1 -0
- package/dist/chunk-3X2EGU7Z.cjs +52 -0
- package/dist/chunk-3X2EGU7Z.cjs.map +1 -0
- package/dist/chunk-AFFVFO4D.js +1689 -0
- package/dist/chunk-AFFVFO4D.js.map +1 -0
- package/dist/chunk-DGUM43GV.js +10 -0
- package/dist/chunk-DGUM43GV.js.map +1 -0
- package/{src/HoloScriptDebugger.ts → dist/chunk-DOY73HDH.js} +118 -257
- package/dist/chunk-DOY73HDH.js.map +1 -0
- package/dist/chunk-JEQ2X3Z6.cjs +12 -0
- package/dist/chunk-JEQ2X3Z6.cjs.map +1 -0
- package/dist/chunk-L6VLNVKP.cjs +1691 -0
- package/dist/chunk-L6VLNVKP.cjs.map +1 -0
- package/dist/chunk-MFNO57XL.cjs +347 -0
- package/dist/chunk-MFNO57XL.cjs.map +1 -0
- package/dist/chunk-R75MREOS.cjs +424 -0
- package/dist/chunk-R75MREOS.cjs.map +1 -0
- package/dist/chunk-SATNCODL.js +45 -0
- package/dist/chunk-SATNCODL.js.map +1 -0
- package/dist/chunk-T57ZL7KR.cjs +1281 -0
- package/dist/chunk-T57ZL7KR.cjs.map +1 -0
- package/dist/chunk-U72GEJZT.js +1279 -0
- package/dist/chunk-U72GEJZT.js.map +1 -0
- package/dist/debugger.cjs +20 -0
- package/dist/debugger.cjs.map +1 -0
- package/dist/debugger.d.cts +171 -0
- package/dist/debugger.d.ts +171 -0
- package/dist/debugger.js +7 -0
- package/dist/debugger.js.map +1 -0
- package/dist/index.cjs +6803 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +4093 -0
- package/dist/index.d.ts +4093 -0
- package/dist/index.js +6715 -0
- package/dist/index.js.map +1 -0
- package/dist/parser.cjs +14 -0
- package/dist/parser.cjs.map +1 -0
- package/dist/parser.d.cts +172 -0
- package/dist/parser.d.ts +172 -0
- package/dist/parser.js +5 -0
- package/dist/parser.js.map +1 -0
- package/dist/runtime.cjs +14 -0
- package/dist/runtime.cjs.map +1 -0
- package/dist/runtime.d.cts +200 -0
- package/dist/runtime.d.ts +200 -0
- package/dist/runtime.js +5 -0
- package/dist/runtime.js.map +1 -0
- package/dist/type-checker.cjs +17 -0
- package/dist/type-checker.cjs.map +1 -0
- package/dist/type-checker.d.cts +105 -0
- package/dist/type-checker.d.ts +105 -0
- package/dist/type-checker.js +4 -0
- package/dist/type-checker.js.map +1 -0
- package/dist/types-4h8cbtF_.d.cts +329 -0
- package/dist/types-4h8cbtF_.d.ts +329 -0
- package/package.json +17 -13
- package/src/HoloScript2DParser.js +0 -227
- package/src/HoloScript2DParser.ts +0 -261
- package/src/HoloScriptCodeParser.js +0 -1102
- package/src/HoloScriptCodeParser.ts +0 -1188
- package/src/HoloScriptDebugger.js +0 -458
- package/src/HoloScriptParser.js +0 -338
- package/src/HoloScriptParser.ts +0 -397
- package/src/HoloScriptPlusParser.js +0 -371
- package/src/HoloScriptPlusParser.ts +0 -543
- package/src/HoloScriptRuntime.js +0 -1399
- package/src/HoloScriptRuntime.test.js +0 -351
- package/src/HoloScriptRuntime.test.ts +0 -436
- package/src/HoloScriptRuntime.ts +0 -1653
- package/src/HoloScriptTypeChecker.js +0 -356
- package/src/HoloScriptTypeChecker.ts +0 -475
- package/src/__tests__/GraphicsServices.test.js +0 -357
- package/src/__tests__/GraphicsServices.test.ts +0 -427
- package/src/__tests__/HoloScriptPlusParser.test.js +0 -317
- package/src/__tests__/HoloScriptPlusParser.test.ts +0 -392
- package/src/__tests__/integration.test.js +0 -336
- package/src/__tests__/integration.test.ts +0 -416
- package/src/__tests__/performance.bench.js +0 -218
- package/src/__tests__/performance.bench.ts +0 -262
- package/src/__tests__/type-checker.test.js +0 -60
- package/src/__tests__/type-checker.test.ts +0 -73
- package/src/index.js +0 -217
- package/src/index.ts +0 -426
- package/src/interop/Interoperability.js +0 -413
- package/src/interop/Interoperability.ts +0 -494
- package/src/logger.js +0 -42
- package/src/logger.ts +0 -57
- package/src/parser/EnhancedParser.js +0 -205
- package/src/parser/EnhancedParser.ts +0 -251
- package/src/parser/HoloScriptPlusParser.js +0 -928
- package/src/parser/HoloScriptPlusParser.ts +0 -1089
- package/src/runtime/HoloScriptPlusRuntime.js +0 -674
- package/src/runtime/HoloScriptPlusRuntime.ts +0 -861
- package/src/runtime/PerformanceTelemetry.js +0 -323
- package/src/runtime/PerformanceTelemetry.ts +0 -467
- package/src/runtime/RuntimeOptimization.js +0 -361
- package/src/runtime/RuntimeOptimization.ts +0 -416
- package/src/services/HololandGraphicsPipelineService.js +0 -506
- package/src/services/HololandGraphicsPipelineService.ts +0 -662
- package/src/services/PlatformPerformanceOptimizer.js +0 -356
- package/src/services/PlatformPerformanceOptimizer.ts +0 -503
- package/src/state/ReactiveState.js +0 -427
- package/src/state/ReactiveState.ts +0 -572
- package/src/tools/DeveloperExperience.js +0 -376
- package/src/tools/DeveloperExperience.ts +0 -438
- package/src/traits/AIDriverTrait.js +0 -322
- package/src/traits/AIDriverTrait.test.js +0 -329
- package/src/traits/AIDriverTrait.test.ts +0 -357
- package/src/traits/AIDriverTrait.ts +0 -474
- package/src/traits/LightingTrait.js +0 -313
- package/src/traits/LightingTrait.test.js +0 -410
- package/src/traits/LightingTrait.test.ts +0 -462
- package/src/traits/LightingTrait.ts +0 -505
- package/src/traits/MaterialTrait.js +0 -194
- package/src/traits/MaterialTrait.test.js +0 -286
- package/src/traits/MaterialTrait.test.ts +0 -329
- package/src/traits/MaterialTrait.ts +0 -324
- package/src/traits/RenderingTrait.js +0 -356
- package/src/traits/RenderingTrait.test.js +0 -363
- package/src/traits/RenderingTrait.test.ts +0 -427
- package/src/traits/RenderingTrait.ts +0 -555
- package/src/traits/VRTraitSystem.js +0 -740
- package/src/traits/VRTraitSystem.ts +0 -1040
- package/src/traits/VoiceInputTrait.js +0 -284
- package/src/traits/VoiceInputTrait.test.js +0 -226
- package/src/traits/VoiceInputTrait.test.ts +0 -252
- package/src/traits/VoiceInputTrait.ts +0 -401
- package/src/types/AdvancedTypeSystem.js +0 -226
- package/src/types/AdvancedTypeSystem.ts +0 -494
- package/src/types/HoloScriptPlus.d.ts +0 -853
- package/src/types.js +0 -6
- package/src/types.ts +0 -369
- package/tsconfig.json +0 -23
- package/tsup.config.d.ts +0 -2
- package/tsup.config.js +0 -18
- package/tsup.config.ts +0 -19
|
@@ -1,853 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HoloScript+ Type Definitions
|
|
3
|
-
*
|
|
4
|
-
* Enhanced HoloScript with VR interactions, state management, and TypeScript interop.
|
|
5
|
-
* Backward compatible with original HoloScript - new features are opt-in via @ directives.
|
|
6
|
-
*
|
|
7
|
-
* uaa2-service maintains its own evolved implementation for service-level enhancements.
|
|
8
|
-
* Core baseline: @holoscript/core
|
|
9
|
-
*
|
|
10
|
-
* @version 1.0.0
|
|
11
|
-
* @license MIT
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
// =============================================================================
|
|
15
|
-
// CORE TYPES
|
|
16
|
-
// =============================================================================
|
|
17
|
-
|
|
18
|
-
export type Vector3 = [number, number, number];
|
|
19
|
-
export type Vector2 = [number, number];
|
|
20
|
-
export type Color = string; // Hex color like "#ff0000" or named colors
|
|
21
|
-
export type Duration = `${number}${'ms' | 's' | 'm'}`;
|
|
22
|
-
|
|
23
|
-
export interface Transform {
|
|
24
|
-
position: Vector3;
|
|
25
|
-
rotation?: Vector3;
|
|
26
|
-
scale?: Vector3 | number;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// =============================================================================
|
|
30
|
-
// VR INTERACTION TYPES
|
|
31
|
-
// =============================================================================
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Hand reference for VR interactions
|
|
35
|
-
*/
|
|
36
|
-
export interface VRHand {
|
|
37
|
-
id: 'left' | 'right';
|
|
38
|
-
position: Vector3;
|
|
39
|
-
rotation: Vector3;
|
|
40
|
-
velocity: Vector3;
|
|
41
|
-
grip: number; // 0-1 grip strength
|
|
42
|
-
trigger: number; // 0-1 trigger pressure
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Velocity data for throw calculations
|
|
47
|
-
*/
|
|
48
|
-
export interface ThrowVelocity {
|
|
49
|
-
direction: Vector3;
|
|
50
|
-
magnitude: number;
|
|
51
|
-
angularVelocity: Vector3;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Collision event data
|
|
56
|
-
*/
|
|
57
|
-
export interface CollisionEvent {
|
|
58
|
-
target: HSPlusNode;
|
|
59
|
-
point: Vector3;
|
|
60
|
-
normal: Vector3;
|
|
61
|
-
impulse: number;
|
|
62
|
-
relativeVelocity: Vector3;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// =============================================================================
|
|
66
|
-
// VR TRAIT CONFIGURATIONS
|
|
67
|
-
// =============================================================================
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* @grabbable trait configuration
|
|
71
|
-
*/
|
|
72
|
-
export interface GrabbableTrait {
|
|
73
|
-
snap_to_hand?: boolean;
|
|
74
|
-
two_handed?: boolean;
|
|
75
|
-
haptic_on_grab?: number; // 0-1 intensity
|
|
76
|
-
grab_points?: Vector3[]; // Specific grab positions
|
|
77
|
-
preserve_rotation?: boolean;
|
|
78
|
-
distance_grab?: boolean; // Allow grabbing from distance
|
|
79
|
-
max_grab_distance?: number;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* @throwable trait configuration
|
|
84
|
-
*/
|
|
85
|
-
export interface ThrowableTrait {
|
|
86
|
-
velocity_multiplier?: number;
|
|
87
|
-
gravity?: boolean;
|
|
88
|
-
max_velocity?: number;
|
|
89
|
-
spin?: boolean;
|
|
90
|
-
bounce?: boolean;
|
|
91
|
-
bounce_factor?: number; // 0-1
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* @pointable trait configuration
|
|
96
|
-
*/
|
|
97
|
-
export interface PointableTrait {
|
|
98
|
-
highlight_on_point?: boolean;
|
|
99
|
-
highlight_color?: Color;
|
|
100
|
-
cursor_style?: 'default' | 'pointer' | 'grab' | 'crosshair';
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* @hoverable trait configuration
|
|
105
|
-
*/
|
|
106
|
-
export interface HoverableTrait {
|
|
107
|
-
highlight_color?: Color;
|
|
108
|
-
scale_on_hover?: number;
|
|
109
|
-
show_tooltip?: string | boolean;
|
|
110
|
-
tooltip_offset?: Vector3;
|
|
111
|
-
glow?: boolean;
|
|
112
|
-
glow_intensity?: number;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* @scalable trait configuration
|
|
117
|
-
*/
|
|
118
|
-
export interface ScalableTrait {
|
|
119
|
-
min_scale?: number;
|
|
120
|
-
max_scale?: number;
|
|
121
|
-
uniform?: boolean; // Force uniform scaling
|
|
122
|
-
pivot?: Vector3;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* @rotatable trait configuration
|
|
127
|
-
*/
|
|
128
|
-
export interface RotatableTrait {
|
|
129
|
-
axis?: 'x' | 'y' | 'z' | 'all';
|
|
130
|
-
snap_angles?: number[]; // Snap to specific angles
|
|
131
|
-
speed?: number;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* @stackable trait configuration
|
|
136
|
-
*/
|
|
137
|
-
export interface StackableTrait {
|
|
138
|
-
stack_axis?: 'x' | 'y' | 'z';
|
|
139
|
-
stack_offset?: number;
|
|
140
|
-
max_stack?: number;
|
|
141
|
-
snap_distance?: number;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* @snappable trait configuration
|
|
146
|
-
*/
|
|
147
|
-
export interface SnappableTrait {
|
|
148
|
-
snap_points?: Vector3[];
|
|
149
|
-
snap_distance?: number;
|
|
150
|
-
snap_rotation?: boolean;
|
|
151
|
-
magnetic?: boolean;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* @breakable trait configuration
|
|
156
|
-
*/
|
|
157
|
-
export interface BreakableTrait {
|
|
158
|
-
break_velocity?: number;
|
|
159
|
-
fragments?: number;
|
|
160
|
-
fragment_mesh?: string;
|
|
161
|
-
sound_on_break?: string;
|
|
162
|
-
respawn?: boolean;
|
|
163
|
-
respawn_delay?: Duration;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// =============================================================================
|
|
167
|
-
// STATE MANAGEMENT
|
|
168
|
-
// =============================================================================
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Reactive state declaration
|
|
172
|
-
*/
|
|
173
|
-
export interface StateDeclaration {
|
|
174
|
-
[key: string]: unknown;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* State proxy for reactive updates
|
|
179
|
-
*/
|
|
180
|
-
export interface ReactiveState<T extends StateDeclaration> {
|
|
181
|
-
get<K extends keyof T>(key: K): T[K];
|
|
182
|
-
set<K extends keyof T>(key: K, value: T[K]): void;
|
|
183
|
-
subscribe(callback: (state: T) => void): () => void;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// =============================================================================
|
|
187
|
-
// LIFECYCLE HOOKS
|
|
188
|
-
// =============================================================================
|
|
189
|
-
|
|
190
|
-
export type LifecycleHook =
|
|
191
|
-
| 'on_mount'
|
|
192
|
-
| 'on_unmount'
|
|
193
|
-
| 'on_update'
|
|
194
|
-
| 'on_data_update';
|
|
195
|
-
|
|
196
|
-
export type VRLifecycleHook =
|
|
197
|
-
| 'on_grab'
|
|
198
|
-
| 'on_release'
|
|
199
|
-
| 'on_hover_enter'
|
|
200
|
-
| 'on_hover_exit'
|
|
201
|
-
| 'on_point_enter'
|
|
202
|
-
| 'on_point_exit'
|
|
203
|
-
| 'on_collision'
|
|
204
|
-
| 'on_trigger_enter'
|
|
205
|
-
| 'on_trigger_exit'
|
|
206
|
-
| 'on_click'
|
|
207
|
-
| 'on_double_click';
|
|
208
|
-
|
|
209
|
-
export type ControllerHook =
|
|
210
|
-
| 'on_controller_button'
|
|
211
|
-
| 'on_trigger_hold'
|
|
212
|
-
| 'on_trigger_release'
|
|
213
|
-
| 'on_grip_hold'
|
|
214
|
-
| 'on_grip_release';
|
|
215
|
-
|
|
216
|
-
// =============================================================================
|
|
217
|
-
// CONTROL FLOW
|
|
218
|
-
// =============================================================================
|
|
219
|
-
|
|
220
|
-
/**
|
|
221
|
-
* For loop iteration context
|
|
222
|
-
*/
|
|
223
|
-
export interface ForLoopContext<T> {
|
|
224
|
-
item: T;
|
|
225
|
-
index: number;
|
|
226
|
-
first: boolean;
|
|
227
|
-
last: boolean;
|
|
228
|
-
even: boolean;
|
|
229
|
-
odd: boolean;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* Range helper for numeric loops
|
|
234
|
-
*/
|
|
235
|
-
export function range(start: number, end: number, step?: number): number[];
|
|
236
|
-
|
|
237
|
-
// =============================================================================
|
|
238
|
-
// AST NODE TYPES
|
|
239
|
-
// =============================================================================
|
|
240
|
-
|
|
241
|
-
export type HSPlusDirective =
|
|
242
|
-
| { type: 'state'; body: StateDeclaration }
|
|
243
|
-
| { type: 'for'; variable: string; iterable: string; body: HSPlusNode[] }
|
|
244
|
-
| { type: 'if'; condition: string; body: HSPlusNode[]; else?: HSPlusNode[] }
|
|
245
|
-
| { type: 'import'; path: string; alias: string }
|
|
246
|
-
| { type: 'lifecycle'; hook: LifecycleHook | VRLifecycleHook | ControllerHook; params?: string[]; body: string }
|
|
247
|
-
| { type: 'trait'; name: VRTraitName; config: Record<string, unknown> };
|
|
248
|
-
|
|
249
|
-
export type VRTraitName =
|
|
250
|
-
| 'grabbable'
|
|
251
|
-
| 'throwable'
|
|
252
|
-
| 'pointable'
|
|
253
|
-
| 'hoverable'
|
|
254
|
-
| 'scalable'
|
|
255
|
-
| 'rotatable'
|
|
256
|
-
| 'stackable'
|
|
257
|
-
| 'snappable'
|
|
258
|
-
| 'breakable';
|
|
259
|
-
|
|
260
|
-
export interface HSPlusNode {
|
|
261
|
-
type: string;
|
|
262
|
-
id?: string;
|
|
263
|
-
properties: Record<string, unknown>;
|
|
264
|
-
directives: HSPlusDirective[];
|
|
265
|
-
children: HSPlusNode[];
|
|
266
|
-
traits: Map<VRTraitName, unknown>;
|
|
267
|
-
// Source location for debugging
|
|
268
|
-
loc?: {
|
|
269
|
-
start: { line: number; column: number };
|
|
270
|
-
end: { line: number; column: number };
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
export interface HSPlusAST {
|
|
275
|
-
version: '1.0';
|
|
276
|
-
root: HSPlusNode;
|
|
277
|
-
imports: Array<{ path: string; alias: string }>;
|
|
278
|
-
hasState: boolean;
|
|
279
|
-
hasVRTraits: boolean;
|
|
280
|
-
hasControlFlow: boolean;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
// =============================================================================
|
|
284
|
-
// RUNTIME CONTEXT
|
|
285
|
-
// =============================================================================
|
|
286
|
-
|
|
287
|
-
export interface HSPlusRuntimeContext {
|
|
288
|
-
// Data from data_source
|
|
289
|
-
data: unknown;
|
|
290
|
-
|
|
291
|
-
// Reactive state
|
|
292
|
-
state: ReactiveState<StateDeclaration>;
|
|
293
|
-
|
|
294
|
-
// VR context
|
|
295
|
-
vr: {
|
|
296
|
-
hands: { left: VRHand | null; right: VRHand | null };
|
|
297
|
-
headset: { position: Vector3; rotation: Vector3 };
|
|
298
|
-
controllers: { left: unknown; right: unknown };
|
|
299
|
-
};
|
|
300
|
-
|
|
301
|
-
// TypeScript companion functions
|
|
302
|
-
scripts: Record<string, (...args: unknown[]) => unknown>;
|
|
303
|
-
|
|
304
|
-
// Built-in functions
|
|
305
|
-
builtins: HSPlusBuiltins;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
export interface HSPlusBuiltins {
|
|
309
|
-
// Math
|
|
310
|
-
Math: typeof Math;
|
|
311
|
-
|
|
312
|
-
// Array methods
|
|
313
|
-
range: (start: number, end: number, step?: number) => number[];
|
|
314
|
-
|
|
315
|
-
// Color utilities
|
|
316
|
-
interpolate_color: (t: number, from: Color, to: Color) => Color;
|
|
317
|
-
|
|
318
|
-
// Distance/proximity
|
|
319
|
-
distance_to: (point: Vector3) => number;
|
|
320
|
-
distance_to_viewer: () => number;
|
|
321
|
-
|
|
322
|
-
// VR helpers
|
|
323
|
-
hand_position: (handId: string) => Vector3;
|
|
324
|
-
hand_velocity: (handId: string) => Vector3;
|
|
325
|
-
dominant_hand: () => VRHand;
|
|
326
|
-
|
|
327
|
-
// Audio
|
|
328
|
-
play_sound: (source: string, options?: { volume?: number; spatial?: boolean }) => void;
|
|
329
|
-
|
|
330
|
-
// Haptics
|
|
331
|
-
haptic_feedback: (hand: VRHand | string, intensity: number) => void;
|
|
332
|
-
haptic_pulse: (intensity: number) => void;
|
|
333
|
-
|
|
334
|
-
// Physics
|
|
335
|
-
apply_velocity: (node: HSPlusNode, velocity: Vector3) => void;
|
|
336
|
-
|
|
337
|
-
// Spawning
|
|
338
|
-
spawn: (template: string, position: Vector3) => HSPlusNode;
|
|
339
|
-
destroy: (node: HSPlusNode) => void;
|
|
340
|
-
|
|
341
|
-
// API calls
|
|
342
|
-
api_call: (url: string, method: string, body?: unknown) => Promise<unknown>;
|
|
343
|
-
|
|
344
|
-
// Modals
|
|
345
|
-
open_modal: (modalId: string) => void;
|
|
346
|
-
close_modal: (modalId: string) => void;
|
|
347
|
-
|
|
348
|
-
// Timing
|
|
349
|
-
setTimeout: (callback: () => void, delay: number) => number;
|
|
350
|
-
clearTimeout: (id: number) => void;
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
// =============================================================================
|
|
354
|
-
// PARSER OPTIONS
|
|
355
|
-
// =============================================================================
|
|
356
|
-
|
|
357
|
-
export interface HSPlusParserOptions {
|
|
358
|
-
// Enable VR trait parsing
|
|
359
|
-
enableVRTraits?: boolean;
|
|
360
|
-
|
|
361
|
-
// Enable TypeScript companion imports
|
|
362
|
-
enableTypeScriptImports?: boolean;
|
|
363
|
-
|
|
364
|
-
// Strict mode - error on unknown directives
|
|
365
|
-
strict?: boolean;
|
|
366
|
-
|
|
367
|
-
// Source file path for error messages
|
|
368
|
-
sourcePath?: string;
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
// =============================================================================
|
|
372
|
-
// COMPILER OUTPUT
|
|
373
|
-
// =============================================================================
|
|
374
|
-
|
|
375
|
-
export interface HSPlusCompileResult {
|
|
376
|
-
ast: HSPlusAST;
|
|
377
|
-
|
|
378
|
-
// Compiled JavaScript for expressions
|
|
379
|
-
compiledExpressions: Map<string, string>;
|
|
380
|
-
|
|
381
|
-
// Required TypeScript companions
|
|
382
|
-
requiredCompanions: string[];
|
|
383
|
-
|
|
384
|
-
// Feature flags
|
|
385
|
-
features: {
|
|
386
|
-
state: boolean;
|
|
387
|
-
vrTraits: boolean;
|
|
388
|
-
loops: boolean;
|
|
389
|
-
conditionals: boolean;
|
|
390
|
-
lifecycleHooks: boolean;
|
|
391
|
-
};
|
|
392
|
-
|
|
393
|
-
// Warnings
|
|
394
|
-
warnings: Array<{ message: string; line: number; column: number }>;
|
|
395
|
-
|
|
396
|
-
// Errors
|
|
397
|
-
errors: Array<{ message: string; line: number; column: number }>;
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
// =============================================================================
|
|
401
|
-
// EXPORTS
|
|
402
|
-
// =============================================================================
|
|
403
|
-
|
|
404
|
-
export interface HoloScriptPlusModule {
|
|
405
|
-
parse: (source: string, options?: HSPlusParserOptions) => HSPlusCompileResult;
|
|
406
|
-
|
|
407
|
-
createRuntime: (ast: HSPlusAST, context?: Partial<HSPlusRuntimeContext>) => HSPlusRuntime;
|
|
408
|
-
|
|
409
|
-
// Version info
|
|
410
|
-
version: string;
|
|
411
|
-
|
|
412
|
-
// Feature detection
|
|
413
|
-
features: {
|
|
414
|
-
vrTraits: readonly VRTraitName[];
|
|
415
|
-
lifecycleHooks: readonly (LifecycleHook | VRLifecycleHook | ControllerHook)[];
|
|
416
|
-
};
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
export interface HSPlusRuntime {
|
|
420
|
-
// Mount the scene
|
|
421
|
-
mount: (container: unknown) => void;
|
|
422
|
-
|
|
423
|
-
// Unmount and cleanup
|
|
424
|
-
unmount: () => void;
|
|
425
|
-
|
|
426
|
-
// Update with new data
|
|
427
|
-
updateData: (data: unknown) => void;
|
|
428
|
-
|
|
429
|
-
// Get current state
|
|
430
|
-
getState: () => StateDeclaration;
|
|
431
|
-
|
|
432
|
-
// Set state
|
|
433
|
-
setState: (updates: Partial<StateDeclaration>) => void;
|
|
434
|
-
|
|
435
|
-
// Emit event
|
|
436
|
-
emit: (event: string, payload?: unknown) => void;
|
|
437
|
-
|
|
438
|
-
// Subscribe to events
|
|
439
|
-
on: (event: string, handler: (payload: unknown) => void) => () => void;
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
// =============================================================================
|
|
443
|
-
// VR INTERACTION TYPES
|
|
444
|
-
// =============================================================================
|
|
445
|
-
|
|
446
|
-
/**
|
|
447
|
-
* Hand reference for VR interactions
|
|
448
|
-
*/
|
|
449
|
-
export interface VRHand {
|
|
450
|
-
id: 'left' | 'right';
|
|
451
|
-
position: Vector3;
|
|
452
|
-
rotation: Vector3;
|
|
453
|
-
velocity: Vector3;
|
|
454
|
-
grip: number; // 0-1 grip strength
|
|
455
|
-
trigger: number; // 0-1 trigger pressure
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
/**
|
|
459
|
-
* Velocity data for throw calculations
|
|
460
|
-
*/
|
|
461
|
-
export interface ThrowVelocity {
|
|
462
|
-
direction: Vector3;
|
|
463
|
-
magnitude: number;
|
|
464
|
-
angularVelocity: Vector3;
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
/**
|
|
468
|
-
* Collision event data
|
|
469
|
-
*/
|
|
470
|
-
export interface CollisionEvent {
|
|
471
|
-
target: HSPlusNode;
|
|
472
|
-
point: Vector3;
|
|
473
|
-
normal: Vector3;
|
|
474
|
-
impulse: number;
|
|
475
|
-
relativeVelocity: Vector3;
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
// =============================================================================
|
|
479
|
-
// VR TRAIT CONFIGURATIONS
|
|
480
|
-
// =============================================================================
|
|
481
|
-
|
|
482
|
-
/**
|
|
483
|
-
* @grabbable trait configuration
|
|
484
|
-
*/
|
|
485
|
-
export interface GrabbableTrait {
|
|
486
|
-
snap_to_hand?: boolean;
|
|
487
|
-
two_handed?: boolean;
|
|
488
|
-
haptic_on_grab?: number; // 0-1 intensity
|
|
489
|
-
grab_points?: Vector3[]; // Specific grab positions
|
|
490
|
-
preserve_rotation?: boolean;
|
|
491
|
-
distance_grab?: boolean; // Allow grabbing from distance
|
|
492
|
-
max_grab_distance?: number;
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
/**
|
|
496
|
-
* @throwable trait configuration
|
|
497
|
-
*/
|
|
498
|
-
export interface ThrowableTrait {
|
|
499
|
-
velocity_multiplier?: number;
|
|
500
|
-
gravity?: boolean;
|
|
501
|
-
max_velocity?: number;
|
|
502
|
-
spin?: boolean;
|
|
503
|
-
bounce?: boolean;
|
|
504
|
-
bounce_factor?: number; // 0-1
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
/**
|
|
508
|
-
* @pointable trait configuration
|
|
509
|
-
*/
|
|
510
|
-
export interface PointableTrait {
|
|
511
|
-
highlight_on_point?: boolean;
|
|
512
|
-
highlight_color?: Color;
|
|
513
|
-
cursor_style?: 'default' | 'pointer' | 'grab' | 'crosshair';
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
/**
|
|
517
|
-
* @hoverable trait configuration
|
|
518
|
-
*/
|
|
519
|
-
export interface HoverableTrait {
|
|
520
|
-
highlight_color?: Color;
|
|
521
|
-
scale_on_hover?: number;
|
|
522
|
-
show_tooltip?: string | boolean;
|
|
523
|
-
tooltip_offset?: Vector3;
|
|
524
|
-
glow?: boolean;
|
|
525
|
-
glow_intensity?: number;
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
/**
|
|
529
|
-
* @scalable trait configuration
|
|
530
|
-
*/
|
|
531
|
-
export interface ScalableTrait {
|
|
532
|
-
min_scale?: number;
|
|
533
|
-
max_scale?: number;
|
|
534
|
-
uniform?: boolean; // Force uniform scaling
|
|
535
|
-
pivot?: Vector3;
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
/**
|
|
539
|
-
* @rotatable trait configuration
|
|
540
|
-
*/
|
|
541
|
-
export interface RotatableTrait {
|
|
542
|
-
axis?: 'x' | 'y' | 'z' | 'all';
|
|
543
|
-
snap_angles?: number[]; // Snap to specific angles
|
|
544
|
-
speed?: number;
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
/**
|
|
548
|
-
* @stackable trait configuration
|
|
549
|
-
*/
|
|
550
|
-
export interface StackableTrait {
|
|
551
|
-
stack_axis?: 'x' | 'y' | 'z';
|
|
552
|
-
stack_offset?: number;
|
|
553
|
-
max_stack?: number;
|
|
554
|
-
snap_distance?: number;
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
/**
|
|
558
|
-
* @snappable trait configuration
|
|
559
|
-
*/
|
|
560
|
-
export interface SnappableTrait {
|
|
561
|
-
snap_points?: Vector3[];
|
|
562
|
-
snap_distance?: number;
|
|
563
|
-
snap_rotation?: boolean;
|
|
564
|
-
magnetic?: boolean;
|
|
565
|
-
}
|
|
566
|
-
|
|
567
|
-
/**
|
|
568
|
-
* @breakable trait configuration
|
|
569
|
-
*/
|
|
570
|
-
export interface BreakableTrait {
|
|
571
|
-
break_velocity?: number;
|
|
572
|
-
fragments?: number;
|
|
573
|
-
fragment_mesh?: string;
|
|
574
|
-
sound_on_break?: string;
|
|
575
|
-
respawn?: boolean;
|
|
576
|
-
respawn_delay?: Duration;
|
|
577
|
-
}
|
|
578
|
-
|
|
579
|
-
// =============================================================================
|
|
580
|
-
// STATE MANAGEMENT
|
|
581
|
-
// =============================================================================
|
|
582
|
-
|
|
583
|
-
/**
|
|
584
|
-
* Reactive state declaration
|
|
585
|
-
*/
|
|
586
|
-
export interface StateDeclaration {
|
|
587
|
-
[key: string]: unknown;
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
/**
|
|
591
|
-
* State proxy for reactive updates
|
|
592
|
-
*/
|
|
593
|
-
export interface ReactiveState<T extends StateDeclaration> {
|
|
594
|
-
get<K extends keyof T>(key: K): T[K];
|
|
595
|
-
set<K extends keyof T>(key: K, value: T[K]): void;
|
|
596
|
-
subscribe(callback: (state: T) => void): () => void;
|
|
597
|
-
}
|
|
598
|
-
|
|
599
|
-
// =============================================================================
|
|
600
|
-
// LIFECYCLE HOOKS
|
|
601
|
-
// =============================================================================
|
|
602
|
-
|
|
603
|
-
export type LifecycleHook =
|
|
604
|
-
| 'on_mount'
|
|
605
|
-
| 'on_unmount'
|
|
606
|
-
| 'on_update'
|
|
607
|
-
| 'on_data_update';
|
|
608
|
-
|
|
609
|
-
export type VRLifecycleHook =
|
|
610
|
-
| 'on_grab'
|
|
611
|
-
| 'on_release'
|
|
612
|
-
| 'on_hover_enter'
|
|
613
|
-
| 'on_hover_exit'
|
|
614
|
-
| 'on_point_enter'
|
|
615
|
-
| 'on_point_exit'
|
|
616
|
-
| 'on_collision'
|
|
617
|
-
| 'on_trigger_enter'
|
|
618
|
-
| 'on_trigger_exit'
|
|
619
|
-
| 'on_click'
|
|
620
|
-
| 'on_double_click';
|
|
621
|
-
|
|
622
|
-
export type ControllerHook =
|
|
623
|
-
| 'on_controller_button'
|
|
624
|
-
| 'on_trigger_hold'
|
|
625
|
-
| 'on_trigger_release'
|
|
626
|
-
| 'on_grip_hold'
|
|
627
|
-
| 'on_grip_release';
|
|
628
|
-
|
|
629
|
-
// =============================================================================
|
|
630
|
-
// CONTROL FLOW
|
|
631
|
-
// =============================================================================
|
|
632
|
-
|
|
633
|
-
/**
|
|
634
|
-
* For loop iteration context
|
|
635
|
-
*/
|
|
636
|
-
export interface ForLoopContext<T> {
|
|
637
|
-
item: T;
|
|
638
|
-
index: number;
|
|
639
|
-
first: boolean;
|
|
640
|
-
last: boolean;
|
|
641
|
-
even: boolean;
|
|
642
|
-
odd: boolean;
|
|
643
|
-
}
|
|
644
|
-
|
|
645
|
-
/**
|
|
646
|
-
* Range helper for numeric loops
|
|
647
|
-
*/
|
|
648
|
-
export function range(start: number, end: number, step?: number): number[];
|
|
649
|
-
|
|
650
|
-
// =============================================================================
|
|
651
|
-
// AST NODE TYPES
|
|
652
|
-
// =============================================================================
|
|
653
|
-
|
|
654
|
-
export type HSPlusDirective =
|
|
655
|
-
| { type: 'state'; body: StateDeclaration }
|
|
656
|
-
| { type: 'for'; variable: string; iterable: string; body: HSPlusNode[] }
|
|
657
|
-
| { type: 'if'; condition: string; body: HSPlusNode[]; else?: HSPlusNode[] }
|
|
658
|
-
| { type: 'import'; path: string; alias: string }
|
|
659
|
-
| { type: 'lifecycle'; hook: LifecycleHook | VRLifecycleHook | ControllerHook; params?: string[]; body: string }
|
|
660
|
-
| { type: 'trait'; name: VRTraitName; config: Record<string, unknown> };
|
|
661
|
-
|
|
662
|
-
export type VRTraitName =
|
|
663
|
-
| 'grabbable'
|
|
664
|
-
| 'throwable'
|
|
665
|
-
| 'pointable'
|
|
666
|
-
| 'hoverable'
|
|
667
|
-
| 'scalable'
|
|
668
|
-
| 'rotatable'
|
|
669
|
-
| 'stackable'
|
|
670
|
-
| 'snappable'
|
|
671
|
-
| 'breakable';
|
|
672
|
-
|
|
673
|
-
export interface HSPlusNode {
|
|
674
|
-
type: string;
|
|
675
|
-
id?: string;
|
|
676
|
-
properties: Record<string, unknown>;
|
|
677
|
-
directives: HSPlusDirective[];
|
|
678
|
-
children: HSPlusNode[];
|
|
679
|
-
traits: Map<VRTraitName, unknown>;
|
|
680
|
-
// Source location for debugging
|
|
681
|
-
loc?: {
|
|
682
|
-
start: { line: number; column: number };
|
|
683
|
-
end: { line: number; column: number };
|
|
684
|
-
};
|
|
685
|
-
}
|
|
686
|
-
|
|
687
|
-
export interface HSPlusAST {
|
|
688
|
-
version: '1.0';
|
|
689
|
-
root: HSPlusNode;
|
|
690
|
-
imports: Array<{ path: string; alias: string }>;
|
|
691
|
-
hasState: boolean;
|
|
692
|
-
hasVRTraits: boolean;
|
|
693
|
-
hasControlFlow: boolean;
|
|
694
|
-
}
|
|
695
|
-
|
|
696
|
-
// =============================================================================
|
|
697
|
-
// RUNTIME CONTEXT
|
|
698
|
-
// =============================================================================
|
|
699
|
-
|
|
700
|
-
export interface HSPlusRuntimeContext {
|
|
701
|
-
// Data from data_source
|
|
702
|
-
data: unknown;
|
|
703
|
-
|
|
704
|
-
// Reactive state
|
|
705
|
-
state: ReactiveState<StateDeclaration>;
|
|
706
|
-
|
|
707
|
-
// VR context
|
|
708
|
-
vr: {
|
|
709
|
-
hands: { left: VRHand | null; right: VRHand | null };
|
|
710
|
-
headset: { position: Vector3; rotation: Vector3 };
|
|
711
|
-
controllers: { left: unknown; right: unknown };
|
|
712
|
-
};
|
|
713
|
-
|
|
714
|
-
// TypeScript companion functions
|
|
715
|
-
scripts: Record<string, (...args: unknown[]) => unknown>;
|
|
716
|
-
|
|
717
|
-
// Built-in functions
|
|
718
|
-
builtins: HSPlusBuiltins;
|
|
719
|
-
}
|
|
720
|
-
|
|
721
|
-
export interface HSPlusBuiltins {
|
|
722
|
-
// Math
|
|
723
|
-
Math: typeof Math;
|
|
724
|
-
|
|
725
|
-
// Array methods
|
|
726
|
-
range: (start: number, end: number, step?: number) => number[];
|
|
727
|
-
|
|
728
|
-
// Color utilities
|
|
729
|
-
interpolate_color: (t: number, from: Color, to: Color) => Color;
|
|
730
|
-
|
|
731
|
-
// Distance/proximity
|
|
732
|
-
distance_to: (point: Vector3) => number;
|
|
733
|
-
distance_to_viewer: () => number;
|
|
734
|
-
|
|
735
|
-
// VR helpers
|
|
736
|
-
hand_position: (handId: string) => Vector3;
|
|
737
|
-
hand_velocity: (handId: string) => Vector3;
|
|
738
|
-
dominant_hand: () => VRHand;
|
|
739
|
-
|
|
740
|
-
// Audio
|
|
741
|
-
play_sound: (source: string, options?: { volume?: number; spatial?: boolean }) => void;
|
|
742
|
-
|
|
743
|
-
// Haptics
|
|
744
|
-
haptic_feedback: (hand: VRHand | string, intensity: number) => void;
|
|
745
|
-
haptic_pulse: (intensity: number) => void;
|
|
746
|
-
|
|
747
|
-
// Physics
|
|
748
|
-
apply_velocity: (node: HSPlusNode, velocity: Vector3) => void;
|
|
749
|
-
|
|
750
|
-
// Spawning
|
|
751
|
-
spawn: (template: string, position: Vector3) => HSPlusNode;
|
|
752
|
-
destroy: (node: HSPlusNode) => void;
|
|
753
|
-
|
|
754
|
-
// API calls
|
|
755
|
-
api_call: (url: string, method: string, body?: unknown) => Promise<unknown>;
|
|
756
|
-
|
|
757
|
-
// Modals
|
|
758
|
-
open_modal: (modalId: string) => void;
|
|
759
|
-
close_modal: (modalId: string) => void;
|
|
760
|
-
|
|
761
|
-
// Timing
|
|
762
|
-
setTimeout: (callback: () => void, delay: number) => number;
|
|
763
|
-
clearTimeout: (id: number) => void;
|
|
764
|
-
}
|
|
765
|
-
|
|
766
|
-
// =============================================================================
|
|
767
|
-
// PARSER OPTIONS
|
|
768
|
-
// =============================================================================
|
|
769
|
-
|
|
770
|
-
export interface HSPlusParserOptions {
|
|
771
|
-
// Enable VR trait parsing
|
|
772
|
-
enableVRTraits?: boolean;
|
|
773
|
-
|
|
774
|
-
// Enable TypeScript companion imports
|
|
775
|
-
enableTypeScriptImports?: boolean;
|
|
776
|
-
|
|
777
|
-
// Strict mode - error on unknown directives
|
|
778
|
-
strict?: boolean;
|
|
779
|
-
|
|
780
|
-
// Source file path for error messages
|
|
781
|
-
sourcePath?: string;
|
|
782
|
-
}
|
|
783
|
-
|
|
784
|
-
// =============================================================================
|
|
785
|
-
// COMPILER OUTPUT
|
|
786
|
-
// =============================================================================
|
|
787
|
-
|
|
788
|
-
export interface HSPlusCompileResult {
|
|
789
|
-
ast: HSPlusAST;
|
|
790
|
-
|
|
791
|
-
// Compiled JavaScript for expressions
|
|
792
|
-
compiledExpressions: Map<string, string>;
|
|
793
|
-
|
|
794
|
-
// Required TypeScript companions
|
|
795
|
-
requiredCompanions: string[];
|
|
796
|
-
|
|
797
|
-
// Feature flags
|
|
798
|
-
features: {
|
|
799
|
-
state: boolean;
|
|
800
|
-
vrTraits: boolean;
|
|
801
|
-
loops: boolean;
|
|
802
|
-
conditionals: boolean;
|
|
803
|
-
lifecycleHooks: boolean;
|
|
804
|
-
};
|
|
805
|
-
|
|
806
|
-
// Warnings
|
|
807
|
-
warnings: Array<{ message: string; line: number; column: number }>;
|
|
808
|
-
|
|
809
|
-
// Errors
|
|
810
|
-
errors: Array<{ message: string; line: number; column: number }>;
|
|
811
|
-
}
|
|
812
|
-
|
|
813
|
-
// =============================================================================
|
|
814
|
-
// EXPORTS
|
|
815
|
-
// =============================================================================
|
|
816
|
-
|
|
817
|
-
export interface HoloScriptPlusModule {
|
|
818
|
-
parse: (source: string, options?: HSPlusParserOptions) => HSPlusCompileResult;
|
|
819
|
-
|
|
820
|
-
createRuntime: (ast: HSPlusAST, context?: Partial<HSPlusRuntimeContext>) => HSPlusRuntime;
|
|
821
|
-
|
|
822
|
-
// Version info
|
|
823
|
-
version: string;
|
|
824
|
-
|
|
825
|
-
// Feature detection
|
|
826
|
-
features: {
|
|
827
|
-
vrTraits: readonly VRTraitName[];
|
|
828
|
-
lifecycleHooks: readonly (LifecycleHook | VRLifecycleHook | ControllerHook)[];
|
|
829
|
-
};
|
|
830
|
-
}
|
|
831
|
-
|
|
832
|
-
export interface HSPlusRuntime {
|
|
833
|
-
// Mount the scene
|
|
834
|
-
mount: (container: unknown) => void;
|
|
835
|
-
|
|
836
|
-
// Unmount and cleanup
|
|
837
|
-
unmount: () => void;
|
|
838
|
-
|
|
839
|
-
// Update with new data
|
|
840
|
-
updateData: (data: unknown) => void;
|
|
841
|
-
|
|
842
|
-
// Get current state
|
|
843
|
-
getState: () => StateDeclaration;
|
|
844
|
-
|
|
845
|
-
// Set state
|
|
846
|
-
setState: (updates: Partial<StateDeclaration>) => void;
|
|
847
|
-
|
|
848
|
-
// Emit event
|
|
849
|
-
emit: (event: string, payload?: unknown) => void;
|
|
850
|
-
|
|
851
|
-
// Subscribe to events
|
|
852
|
-
on: (event: string, handler: (payload: unknown) => void) => () => void;
|
|
853
|
-
}
|