@holoscript/std 2.1.0 → 3.1.1
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/README.md +197 -0
- package/dist/__tests__/EconomicPrimitives.test.d.ts.map +1 -0
- package/dist/__tests__/EconomicTraits.test.d.ts.map +1 -0
- package/dist/__tests__/SimulationLabPrimitives.test.d.ts.map +1 -0
- package/dist/__tests__/Sprint33.test.d.ts.map +1 -0
- package/dist/__tests__/Sprint56.test.d.ts.map +1 -0
- package/dist/__tests__/collections.test.d.ts.map +1 -0
- package/dist/__tests__/events.test.d.ts.map +1 -0
- package/dist/__tests__/materials.test.d.ts.map +1 -0
- package/dist/__tests__/math.test.d.ts.map +1 -0
- package/dist/__tests__/physics.test.d.ts.map +1 -0
- package/dist/__tests__/spatial.test.d.ts.map +1 -0
- package/dist/__tests__/string-decoupled.test.d.ts.map +1 -0
- package/dist/__tests__/string.test.d.ts.map +1 -0
- package/dist/__tests__/time.test.d.ts.map +1 -0
- package/dist/collections.d.ts.map +1 -1
- package/dist/events.d.ts.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -9
- package/dist/materials.d.ts.map +1 -0
- package/dist/math.d.ts.map +1 -1
- package/dist/physics.d.ts.map +1 -0
- package/dist/spatial.d.ts.map +1 -0
- package/dist/string.d.ts.map +1 -1
- package/dist/time.d.ts.map +1 -1
- package/dist/traits/ARTraits.d.ts.map +1 -0
- package/dist/traits/EconomicPrimitives.d.ts.map +1 -0
- package/dist/traits/EconomicTraits.d.ts.map +1 -0
- package/dist/traits/IoTTraits.d.ts.map +1 -0
- package/dist/traits/SimulationLabPrimitives.d.ts.map +1 -0
- package/dist/traits/SimulationLabTraits.d.ts.map +1 -0
- package/dist/traits/VRRTraits.d.ts.map +1 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +17 -6
- package/src/__tests__/EconomicPrimitives.test.ts +690 -0
- package/src/__tests__/EconomicTraits.test.ts +425 -0
- package/src/__tests__/SimulationLabPrimitives.test.ts +415 -0
- package/src/__tests__/Sprint33.test.ts +1301 -0
- package/src/__tests__/Sprint56.test.ts +1070 -0
- package/src/__tests__/collections.test.ts +182 -0
- package/src/__tests__/events.test.ts +135 -0
- package/src/__tests__/materials.test.ts +84 -0
- package/src/__tests__/math.test.ts +246 -0
- package/src/__tests__/physics.test.ts +83 -0
- package/src/__tests__/spatial.test.ts +333 -0
- package/src/__tests__/string-decoupled.test.ts +16 -0
- package/src/__tests__/string.test.ts +164 -0
- package/src/__tests__/time.test.ts +110 -0
- package/src/collections.ts +8 -2
- package/src/events.ts +88 -0
- package/src/index.ts +161 -11
- package/src/materials.ts +109 -0
- package/src/math.ts +30 -14
- package/src/physics.ts +141 -0
- package/src/spatial.ts +320 -0
- package/src/string.basic.test.ts +14 -0
- package/src/string.test.ts +335 -0
- package/src/string.ts +19 -2
- package/src/time.ts +9 -10
- package/src/traits/ARTraits.ts +103 -0
- package/src/traits/EconomicPrimitives.ts +755 -0
- package/src/traits/EconomicTraits.ts +552 -0
- package/src/traits/IoTTraits.ts +102 -0
- package/src/traits/SimulationLabPrimitives.ts +650 -0
- package/src/traits/SimulationLabTraits.ts +191 -0
- package/src/traits/VRRTraits.ts +326 -0
- package/src/types.ts +47 -12
- package/vitest.config.ts +10 -0
- package/dist/collections.d.ts +0 -177
- package/dist/collections.js +0 -720
- package/dist/collections.js.map +0 -1
- package/dist/index.d.ts +0 -89
- package/dist/index.js.map +0 -1
- package/dist/math.d.ts +0 -162
- package/dist/math.js +0 -539
- package/dist/math.js.map +0 -1
- package/dist/string.d.ts +0 -208
- package/dist/string.js +0 -443
- package/dist/string.js.map +0 -1
- package/dist/time.d.ts +0 -215
- package/dist/time.js +0 -530
- package/dist/time.js.map +0 -1
- package/dist/types.d.ts +0 -193
- package/dist/types.js +0 -198
- package/dist/types.js.map +0 -1
package/src/time.ts
CHANGED
|
@@ -121,14 +121,11 @@ export function throttle<T extends (...args: unknown[]) => unknown>(fn: T, ms: n
|
|
|
121
121
|
lastCall = now();
|
|
122
122
|
fn(...args);
|
|
123
123
|
} else if (!timeoutId) {
|
|
124
|
-
timeoutId = setTimeout(
|
|
125
|
-
()
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
},
|
|
130
|
-
ms - elapsed
|
|
131
|
-
);
|
|
124
|
+
timeoutId = setTimeout(() => {
|
|
125
|
+
lastCall = now();
|
|
126
|
+
timeoutId = null;
|
|
127
|
+
fn(...args);
|
|
128
|
+
}, ms - elapsed);
|
|
132
129
|
}
|
|
133
130
|
}) as T;
|
|
134
131
|
}
|
|
@@ -136,7 +133,9 @@ export function throttle<T extends (...args: unknown[]) => unknown>(fn: T, ms: n
|
|
|
136
133
|
/**
|
|
137
134
|
* Measure execution time of a function
|
|
138
135
|
*/
|
|
139
|
-
export async function measure<T>(
|
|
136
|
+
export async function measure<T>(
|
|
137
|
+
fn: () => T | Promise<T>
|
|
138
|
+
): Promise<{ result: T; duration: number }> {
|
|
140
139
|
const start = hrTime();
|
|
141
140
|
const result = await fn();
|
|
142
141
|
const duration = hrTime() - start;
|
|
@@ -585,7 +584,7 @@ export const DateTime = {
|
|
|
585
584
|
* Add time to a date
|
|
586
585
|
*/
|
|
587
586
|
add(date: Date, amount: number, unit: 'ms' | 's' | 'm' | 'h' | 'd'): Date {
|
|
588
|
-
const
|
|
587
|
+
const _ms = DateTime.diff(new Date(amount), new Date(0), 'ms');
|
|
589
588
|
const multipliers = { ms: 1, s: 1000, m: 60000, h: 3600000, d: 86400000 };
|
|
590
589
|
return new Date(date.getTime() + amount * multipliers[unit]);
|
|
591
590
|
},
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview AR Traits (Augmented Reality)
|
|
3
|
+
* @module @holoscript/std/traits
|
|
4
|
+
*
|
|
5
|
+
* Defines the AST traits required for augmented reality overlays
|
|
6
|
+
* and real-world physical anchoring.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { TraitDefinition } from '../types.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Standard AR traits included in HoloScript's base functionality
|
|
13
|
+
*/
|
|
14
|
+
export const ARTraits: TraitDefinition[] = [
|
|
15
|
+
{
|
|
16
|
+
name: '@ar_beacon',
|
|
17
|
+
type: 'marker',
|
|
18
|
+
description:
|
|
19
|
+
'Binds a UI or 3D overlay to a physical reality marker (QR code, NFC, BLE beacon, or visual image).',
|
|
20
|
+
parameters: [
|
|
21
|
+
{
|
|
22
|
+
name: 'type',
|
|
23
|
+
type: 'string',
|
|
24
|
+
required: true,
|
|
25
|
+
validation: (val: any) => ['qr', 'image', 'nfc', 'ble', 'gps'].includes(val),
|
|
26
|
+
description: 'The type of physical beacon (qr, image, nfc, ble, gps)',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'id',
|
|
30
|
+
type: 'string',
|
|
31
|
+
required: true,
|
|
32
|
+
description: 'The unique identifier data the beacon broadcasts or visually represents',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'physical_size',
|
|
36
|
+
type: 'number',
|
|
37
|
+
required: false,
|
|
38
|
+
description:
|
|
39
|
+
'The expected physical size of the image/marker in meters (for image/qr types)',
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
validation: (node: any) => {
|
|
43
|
+
return { valid: true }; // Allowed on any Node (Zones, Objects, UI)
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: '@overlay',
|
|
48
|
+
type: 'behavior',
|
|
49
|
+
description:
|
|
50
|
+
'Marks a HoloUI panel or 3D object to act as a pass-through overlay locked to the viewport or surface.',
|
|
51
|
+
parameters: [
|
|
52
|
+
{
|
|
53
|
+
name: 'anchor',
|
|
54
|
+
type: 'string',
|
|
55
|
+
required: false,
|
|
56
|
+
defaultValue: 'viewport',
|
|
57
|
+
validation: (val: any) => ['viewport', 'surface', 'plane', 'face', 'hand'].includes(val),
|
|
58
|
+
description: 'How the overlay anchors to the AR pass-through feed.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'occlusion',
|
|
62
|
+
type: 'boolean',
|
|
63
|
+
required: false,
|
|
64
|
+
defaultValue: true,
|
|
65
|
+
description: 'Whether physical real-world objects occlude this virtual overlay.',
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
validation: (node: any) => {
|
|
69
|
+
// Typically used on UI or SpatialGroups
|
|
70
|
+
if (node.type !== 'HoloUI' && node.type !== 'SpatialGroup') {
|
|
71
|
+
return { valid: false, message: '@overlay must be attached to HoloUI or SpatialGroup.' };
|
|
72
|
+
}
|
|
73
|
+
return { valid: true };
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: '@layer_shift',
|
|
78
|
+
type: 'behavior',
|
|
79
|
+
description:
|
|
80
|
+
'Controls the automatic transition between physical reality (AR) and digital twin reality (VR/VRR) boundaries.',
|
|
81
|
+
parameters: [
|
|
82
|
+
{
|
|
83
|
+
name: 'trigger',
|
|
84
|
+
type: 'string',
|
|
85
|
+
required: true,
|
|
86
|
+
validation: (val: any) => ['proximity', 'scan', 'payment', 'quest_step'].includes(val),
|
|
87
|
+
description: 'What triggers the reality shift.',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: 'to_layer',
|
|
91
|
+
type: 'string',
|
|
92
|
+
required: true,
|
|
93
|
+
validation: (val: any) => ['vr', 'vrr', 'ar'].includes(val),
|
|
94
|
+
description: 'Which layer the user shifts into.',
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
validation: (node: any) => {
|
|
98
|
+
return { valid: true };
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
];
|
|
102
|
+
|
|
103
|
+
export default ARTraits;
|