@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.
Files changed (85) hide show
  1. package/README.md +197 -0
  2. package/dist/__tests__/EconomicPrimitives.test.d.ts.map +1 -0
  3. package/dist/__tests__/EconomicTraits.test.d.ts.map +1 -0
  4. package/dist/__tests__/SimulationLabPrimitives.test.d.ts.map +1 -0
  5. package/dist/__tests__/Sprint33.test.d.ts.map +1 -0
  6. package/dist/__tests__/Sprint56.test.d.ts.map +1 -0
  7. package/dist/__tests__/collections.test.d.ts.map +1 -0
  8. package/dist/__tests__/events.test.d.ts.map +1 -0
  9. package/dist/__tests__/materials.test.d.ts.map +1 -0
  10. package/dist/__tests__/math.test.d.ts.map +1 -0
  11. package/dist/__tests__/physics.test.d.ts.map +1 -0
  12. package/dist/__tests__/spatial.test.d.ts.map +1 -0
  13. package/dist/__tests__/string-decoupled.test.d.ts.map +1 -0
  14. package/dist/__tests__/string.test.d.ts.map +1 -0
  15. package/dist/__tests__/time.test.d.ts.map +1 -0
  16. package/dist/collections.d.ts.map +1 -1
  17. package/dist/events.d.ts.map +1 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +42 -9
  20. package/dist/materials.d.ts.map +1 -0
  21. package/dist/math.d.ts.map +1 -1
  22. package/dist/physics.d.ts.map +1 -0
  23. package/dist/spatial.d.ts.map +1 -0
  24. package/dist/string.d.ts.map +1 -1
  25. package/dist/time.d.ts.map +1 -1
  26. package/dist/traits/ARTraits.d.ts.map +1 -0
  27. package/dist/traits/EconomicPrimitives.d.ts.map +1 -0
  28. package/dist/traits/EconomicTraits.d.ts.map +1 -0
  29. package/dist/traits/IoTTraits.d.ts.map +1 -0
  30. package/dist/traits/SimulationLabPrimitives.d.ts.map +1 -0
  31. package/dist/traits/SimulationLabTraits.d.ts.map +1 -0
  32. package/dist/traits/VRRTraits.d.ts.map +1 -0
  33. package/dist/types.d.ts.map +1 -1
  34. package/package.json +17 -6
  35. package/src/__tests__/EconomicPrimitives.test.ts +690 -0
  36. package/src/__tests__/EconomicTraits.test.ts +425 -0
  37. package/src/__tests__/SimulationLabPrimitives.test.ts +415 -0
  38. package/src/__tests__/Sprint33.test.ts +1301 -0
  39. package/src/__tests__/Sprint56.test.ts +1070 -0
  40. package/src/__tests__/collections.test.ts +182 -0
  41. package/src/__tests__/events.test.ts +135 -0
  42. package/src/__tests__/materials.test.ts +84 -0
  43. package/src/__tests__/math.test.ts +246 -0
  44. package/src/__tests__/physics.test.ts +83 -0
  45. package/src/__tests__/spatial.test.ts +333 -0
  46. package/src/__tests__/string-decoupled.test.ts +16 -0
  47. package/src/__tests__/string.test.ts +164 -0
  48. package/src/__tests__/time.test.ts +110 -0
  49. package/src/collections.ts +8 -2
  50. package/src/events.ts +88 -0
  51. package/src/index.ts +161 -11
  52. package/src/materials.ts +109 -0
  53. package/src/math.ts +30 -14
  54. package/src/physics.ts +141 -0
  55. package/src/spatial.ts +320 -0
  56. package/src/string.basic.test.ts +14 -0
  57. package/src/string.test.ts +335 -0
  58. package/src/string.ts +19 -2
  59. package/src/time.ts +9 -10
  60. package/src/traits/ARTraits.ts +103 -0
  61. package/src/traits/EconomicPrimitives.ts +755 -0
  62. package/src/traits/EconomicTraits.ts +552 -0
  63. package/src/traits/IoTTraits.ts +102 -0
  64. package/src/traits/SimulationLabPrimitives.ts +650 -0
  65. package/src/traits/SimulationLabTraits.ts +191 -0
  66. package/src/traits/VRRTraits.ts +326 -0
  67. package/src/types.ts +47 -12
  68. package/vitest.config.ts +10 -0
  69. package/dist/collections.d.ts +0 -177
  70. package/dist/collections.js +0 -720
  71. package/dist/collections.js.map +0 -1
  72. package/dist/index.d.ts +0 -89
  73. package/dist/index.js.map +0 -1
  74. package/dist/math.d.ts +0 -162
  75. package/dist/math.js +0 -539
  76. package/dist/math.js.map +0 -1
  77. package/dist/string.d.ts +0 -208
  78. package/dist/string.js +0 -443
  79. package/dist/string.js.map +0 -1
  80. package/dist/time.d.ts +0 -215
  81. package/dist/time.js +0 -530
  82. package/dist/time.js.map +0 -1
  83. package/dist/types.d.ts +0 -193
  84. package/dist/types.js +0 -198
  85. 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
- lastCall = now();
127
- timeoutId = null;
128
- fn(...args);
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>(fn: () => T | Promise<T>): Promise<{ result: T; duration: number }> {
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 ms = DateTime.diff(new Date(amount), new Date(0), 'ms');
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;