@holoscript/std 3.1.1 → 7.0.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/LICENSE +21 -0
- package/dist/__tests__/EconomicPrimitives.test.d.ts +2 -0
- package/dist/__tests__/EconomicTraits.test.d.ts +2 -0
- package/dist/__tests__/SimulationLabPrimitives.test.d.ts +2 -0
- package/dist/__tests__/collections.test.d.ts +2 -0
- package/dist/__tests__/events.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts.map +1 -0
- package/dist/__tests__/materials.test.d.ts +2 -0
- package/dist/__tests__/math.test.d.ts +2 -0
- package/dist/__tests__/physics.test.d.ts +2 -0
- package/dist/__tests__/spatial.test.d.ts +2 -0
- package/dist/__tests__/standard-library-fundamentals.test.d.ts +2 -0
- package/dist/__tests__/standard-library-fundamentals.test.d.ts.map +1 -0
- package/dist/__tests__/string-and-time-utilities.test.d.ts +2 -0
- package/dist/__tests__/string-and-time-utilities.test.d.ts.map +1 -0
- package/dist/__tests__/string-decoupled.test.d.ts +2 -0
- package/dist/__tests__/string.test.d.ts +2 -0
- package/dist/__tests__/time.test.d.ts +2 -0
- package/dist/chunk-DZHAVOCH.js +686 -0
- package/dist/chunk-DZHAVOCH.js.map +1 -0
- package/dist/chunk-P4O3WNG2.js +287 -0
- package/dist/chunk-P4O3WNG2.js.map +1 -0
- package/dist/chunk-PFX2JM4X.js +683 -0
- package/dist/chunk-PFX2JM4X.js.map +1 -0
- package/dist/chunk-PR4QN5HX.js +43 -0
- package/dist/chunk-PR4QN5HX.js.map +1 -0
- package/dist/chunk-WS6W35YC.js +443 -0
- package/dist/chunk-WS6W35YC.js.map +1 -0
- package/dist/chunk-XBA4ARST.js +9313 -0
- package/dist/chunk-XBA4ARST.js.map +1 -0
- package/dist/chunk-XJIFG7G3.js +348 -0
- package/dist/chunk-XJIFG7G3.js.map +1 -0
- package/dist/chunk-ZXVZAQCZ.js +470 -0
- package/dist/chunk-ZXVZAQCZ.js.map +1 -0
- package/dist/collections.cjs +715 -0
- package/dist/collections.cjs.map +1 -0
- package/dist/collections.d.ts +177 -0
- package/dist/collections.js +18 -0
- package/dist/collections.js.map +1 -0
- package/dist/events.d.ts +32 -0
- package/dist/fs/__tests__/file-watch-system.test.d.ts +2 -0
- package/dist/fs/__tests__/file-watch-system.test.d.ts.map +1 -0
- package/dist/fs/__tests__/path-utilities.test.d.ts +2 -0
- package/dist/fs/__tests__/path-utilities.test.d.ts.map +1 -0
- package/dist/fs/__tests__/path.test.d.ts +2 -0
- package/dist/fs/__tests__/path.test.d.ts.map +1 -0
- package/dist/fs/fs.d.ts +288 -0
- package/dist/fs/fs.d.ts.map +1 -0
- package/dist/fs/index.cjs +9338 -0
- package/dist/fs/index.cjs.map +1 -0
- package/dist/fs/index.d.ts +51 -0
- package/dist/fs/index.d.ts.map +1 -0
- package/dist/fs/index.js +204 -0
- package/dist/fs/index.js.map +1 -0
- package/dist/fs/path.d.ts +135 -0
- package/dist/fs/path.d.ts.map +1 -0
- package/dist/fs/watch.d.ts +133 -0
- package/dist/fs/watch.d.ts.map +1 -0
- package/dist/index.cjs +13326 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +102 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1275 -190
- package/dist/index.js.map +1 -0
- package/dist/materials.d.ts +50 -0
- package/dist/math.cjs +595 -0
- package/dist/math.cjs.map +1 -0
- package/dist/math.d.ts +162 -0
- package/dist/math.js +54 -0
- package/dist/math.js.map +1 -0
- package/dist/physics.d.ts +59 -0
- package/dist/spatial.d.ts +82 -0
- package/dist/string.basic.test.d.ts +5 -0
- package/dist/string.basic.test.d.ts.map +1 -0
- package/dist/string.cjs +422 -0
- package/dist/string.cjs.map +1 -0
- package/dist/string.d.ts +212 -0
- package/dist/string.d.ts.map +1 -1
- package/dist/string.js +108 -0
- package/dist/string.js.map +1 -0
- package/dist/string.test.d.ts +5 -0
- package/dist/string.test.d.ts.map +1 -0
- package/dist/time.cjs +512 -0
- package/dist/time.cjs.map +1 -0
- package/dist/time.d.ts +215 -0
- package/dist/time.js +44 -0
- package/dist/time.js.map +1 -0
- package/dist/traits/ARTraits.d.ts +14 -0
- package/dist/traits/EconomicPrimitives.cjs +335 -0
- package/dist/traits/EconomicPrimitives.cjs.map +1 -0
- package/dist/traits/EconomicPrimitives.d.ts +345 -0
- package/dist/traits/EconomicPrimitives.js +56 -0
- package/dist/traits/EconomicPrimitives.js.map +1 -0
- package/dist/traits/EconomicTraits.cjs +471 -0
- package/dist/traits/EconomicTraits.cjs.map +1 -0
- package/dist/traits/EconomicTraits.d.ts +71 -0
- package/dist/traits/EconomicTraits.js +18 -0
- package/dist/traits/EconomicTraits.js.map +1 -0
- package/dist/traits/IoTTraits.d.ts +14 -0
- package/dist/traits/SimulationLabPrimitives.d.ts +187 -0
- package/dist/traits/SimulationLabTraits.d.ts +42 -0
- package/dist/traits/VRRTraits.d.ts +150 -0
- package/dist/traits/__tests__/ARTraits.test.d.ts +2 -0
- package/dist/traits/__tests__/ARTraits.test.d.ts.map +1 -0
- package/dist/traits/__tests__/EconomicPrimitives.test.d.ts +2 -0
- package/dist/traits/__tests__/EconomicPrimitives.test.d.ts.map +1 -0
- package/dist/traits/__tests__/EconomicTraits.test.d.ts +2 -0
- package/dist/traits/__tests__/EconomicTraits.test.d.ts.map +1 -0
- package/dist/types.d.ts +202 -0
- package/dist/types.d.ts.map +1 -1
- package/error-utf8.log +6 -0
- package/error.log +0 -0
- package/package.json +35 -18
- package/src/__tests__/index.test.ts +14 -0
- package/src/__tests__/{Sprint33.test.ts → standard-library-fundamentals.test.ts} +91 -74
- package/src/__tests__/{Sprint56.test.ts → string-and-time-utilities.test.ts} +64 -64
- package/src/__tests__/string-decoupled.test.ts +6 -9
- package/src/fs/__tests__/file-watch-system.test.ts +675 -0
- package/src/fs/__tests__/path-utilities.test.ts +375 -0
- package/src/fs/__tests__/path.test.ts +287 -0
- package/src/fs/fs.ts +692 -0
- package/src/fs/index.ts +194 -0
- package/src/fs/path.ts +310 -0
- package/src/fs/watch.ts +413 -0
- package/src/index.ts +3 -1
- package/src/math.ts +1 -1
- package/src/string.basic.test.ts +1 -1
- package/src/string.test.ts +4 -4
- package/src/string.ts +32 -17
- package/src/time.ts +1 -1
- package/src/traits/ARTraits.ts +2 -2
- package/src/traits/IoTTraits.ts +2 -2
- package/src/traits/VRRTraits.ts +2 -2
- package/src/traits/__tests__/ARTraits.test.ts +8 -0
- package/src/traits/__tests__/EconomicPrimitives.test.ts +14 -0
- package/src/traits/__tests__/EconomicTraits.test.ts +16 -0
- package/src/types.ts +10 -3
- package/std_error.log +5 -0
- package/tsup.config.ts +20 -0
- package/dist/__tests__/Sprint33.test.d.ts.map +0 -1
- package/dist/__tests__/Sprint56.test.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/time.ts"],"sourcesContent":["/**\n * @holoscript/std - Time Module\n *\n * Time, timer, and scheduling utilities for HoloScript Plus programs.\n */\n\n/**\n * Get current timestamp in milliseconds\n */\nexport function now(): number {\n return Date.now();\n}\n\n/**\n * Get high-resolution timestamp (for performance measurement)\n */\nexport function hrTime(): number {\n if (typeof performance !== 'undefined') {\n return performance.now();\n }\n return Date.now();\n}\n\n/**\n * Sleep for a specified number of milliseconds\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Wait until a condition is true\n */\nexport async function waitUntil(\n condition: () => boolean | Promise<boolean>,\n options: { timeout?: number; interval?: number } = {}\n): Promise<void> {\n const { timeout = 30000, interval = 100 } = options;\n const startTime = now();\n\n while (true) {\n if (await condition()) return;\n if (now() - startTime > timeout) {\n throw new Error('waitUntil timeout');\n }\n await sleep(interval);\n }\n}\n\n/**\n * Execute a function with timeout\n */\nexport async function withTimeout<T>(fn: () => Promise<T>, ms: number): Promise<T> {\n return Promise.race([\n fn(),\n new Promise<T>((_, reject) => setTimeout(() => reject(new Error('Timeout')), ms)),\n ]);\n}\n\n/**\n * Retry a function with exponential backoff\n */\nexport async function retry<T>(\n fn: () => Promise<T>,\n options: {\n maxAttempts?: number;\n initialDelay?: number;\n maxDelay?: number;\n factor?: number;\n onRetry?: (error: Error, attempt: number) => void;\n } = {}\n): Promise<T> {\n const { maxAttempts = 3, initialDelay = 1000, maxDelay = 30000, factor = 2, onRetry } = options;\n\n let lastError: Error;\n let delay = initialDelay;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n if (attempt === maxAttempts) break;\n\n onRetry?.(lastError, attempt);\n await sleep(delay);\n delay = Math.min(delay * factor, maxDelay);\n }\n }\n\n throw lastError!;\n}\n\n/**\n * Debounce a function\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(fn: T, ms: number): T {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n return ((...args: unknown[]) => {\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n timeoutId = null;\n fn(...args);\n }, ms);\n }) as T;\n}\n\n/**\n * Throttle a function\n */\nexport function throttle<T extends (...args: unknown[]) => unknown>(fn: T, ms: number): T {\n let lastCall = 0;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n return ((...args: unknown[]) => {\n const elapsed = now() - lastCall;\n\n if (elapsed >= ms) {\n lastCall = now();\n fn(...args);\n } else if (!timeoutId) {\n timeoutId = setTimeout(() => {\n lastCall = now();\n timeoutId = null;\n fn(...args);\n }, ms - elapsed);\n }\n }) as T;\n}\n\n/**\n * Measure execution time of a function\n */\nexport async function measure<T>(\n fn: () => T | Promise<T>\n): Promise<{ result: T; duration: number }> {\n const start = hrTime();\n const result = await fn();\n const duration = hrTime() - start;\n return { result, duration };\n}\n\n/**\n * Measure execution time and log it\n */\nexport async function timed<T>(label: string, fn: () => T | Promise<T>): Promise<T> {\n const start = hrTime();\n try {\n return await fn();\n } finally {\n const duration = hrTime() - start;\n void duration; // timing available for callers via return value\n }\n}\n\n/**\n * Simple stopwatch for measuring elapsed time\n */\nexport class Stopwatch {\n private startTime: number = 0;\n private pausedTime: number = 0;\n private running: boolean = false;\n\n start(): this {\n if (!this.running) {\n this.startTime = hrTime() - this.pausedTime;\n this.running = true;\n }\n return this;\n }\n\n stop(): number {\n if (this.running) {\n this.pausedTime = hrTime() - this.startTime;\n this.running = false;\n }\n return this.pausedTime;\n }\n\n reset(): this {\n this.startTime = 0;\n this.pausedTime = 0;\n this.running = false;\n return this;\n }\n\n restart(): this {\n return this.reset().start();\n }\n\n get elapsed(): number {\n if (this.running) {\n return hrTime() - this.startTime;\n }\n return this.pausedTime;\n }\n\n get isRunning(): boolean {\n return this.running;\n }\n\n lap(): number {\n const elapsed = this.elapsed;\n this.restart();\n return elapsed;\n }\n}\n\n/**\n * Interval timer with pause/resume support\n */\nexport class IntervalTimer {\n private intervalId: ReturnType<typeof setInterval> | null = null;\n private callback: () => void;\n private intervalMs: number;\n private isPaused: boolean = false;\n\n constructor(callback: () => void, intervalMs: number) {\n this.callback = callback;\n this.intervalMs = intervalMs;\n }\n\n start(): this {\n if (!this.intervalId && !this.isPaused) {\n this.intervalId = setInterval(this.callback, this.intervalMs);\n }\n return this;\n }\n\n stop(): this {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n this.isPaused = false;\n return this;\n }\n\n pause(): this {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n this.isPaused = true;\n }\n return this;\n }\n\n resume(): this {\n if (this.isPaused) {\n this.isPaused = false;\n this.intervalId = setInterval(this.callback, this.intervalMs);\n }\n return this;\n }\n\n get running(): boolean {\n return this.intervalId !== null;\n }\n\n get paused(): boolean {\n return this.isPaused;\n }\n}\n\n/**\n * Countdown timer\n */\nexport class CountdownTimer {\n private remainingMs: number;\n private startTime: number = 0;\n private running: boolean = false;\n private onTick?: (remaining: number) => void;\n private onComplete?: () => void;\n private tickIntervalId: ReturnType<typeof setInterval> | null = null;\n\n constructor(\n durationMs: number,\n options: {\n onTick?: (remaining: number) => void;\n onComplete?: () => void;\n tickInterval?: number;\n } = {}\n ) {\n this.remainingMs = durationMs;\n this.onTick = options.onTick;\n this.onComplete = options.onComplete;\n\n if (options.onTick && options.tickInterval) {\n this.tickIntervalId = setInterval(() => {\n if (this.running) {\n this.onTick?.(this.remaining);\n }\n }, options.tickInterval);\n }\n }\n\n start(): this {\n if (!this.running && this.remainingMs > 0) {\n this.startTime = hrTime();\n this.running = true;\n this.scheduleCompletion();\n }\n return this;\n }\n\n pause(): this {\n if (this.running) {\n this.remainingMs = Math.max(0, this.remainingMs - (hrTime() - this.startTime));\n this.running = false;\n }\n return this;\n }\n\n resume(): this {\n return this.start();\n }\n\n reset(durationMs?: number): this {\n this.running = false;\n this.remainingMs = durationMs ?? this.remainingMs;\n return this;\n }\n\n stop(): this {\n this.running = false;\n if (this.tickIntervalId) {\n clearInterval(this.tickIntervalId);\n this.tickIntervalId = null;\n }\n return this;\n }\n\n get remaining(): number {\n if (this.running) {\n return Math.max(0, this.remainingMs - (hrTime() - this.startTime));\n }\n return this.remainingMs;\n }\n\n get isRunning(): boolean {\n return this.running;\n }\n\n get isComplete(): boolean {\n return this.remaining <= 0;\n }\n\n private scheduleCompletion(): void {\n setTimeout(() => {\n if (this.running && this.remaining <= 0) {\n this.running = false;\n this.onComplete?.();\n }\n }, this.remainingMs);\n }\n}\n\n/**\n * Frame-based timer for game loops\n */\nexport class FrameTimer {\n private lastFrameTime: number = 0;\n private deltaTime: number = 0;\n private frameCount: number = 0;\n private fps: number = 0;\n private fpsUpdateInterval: number = 1000;\n private lastFpsUpdate: number = 0;\n private framesSinceLastFpsUpdate: number = 0;\n\n /**\n * Call at the start of each frame\n */\n update(): void {\n const currentTime = hrTime();\n\n if (this.lastFrameTime > 0) {\n this.deltaTime = (currentTime - this.lastFrameTime) / 1000; // Convert to seconds\n }\n\n this.lastFrameTime = currentTime;\n this.frameCount++;\n this.framesSinceLastFpsUpdate++;\n\n // Update FPS calculation\n if (currentTime - this.lastFpsUpdate >= this.fpsUpdateInterval) {\n this.fps = (this.framesSinceLastFpsUpdate * 1000) / (currentTime - this.lastFpsUpdate);\n this.lastFpsUpdate = currentTime;\n this.framesSinceLastFpsUpdate = 0;\n }\n }\n\n /**\n * Get delta time in seconds since last frame\n */\n get delta(): number {\n return this.deltaTime;\n }\n\n /**\n * Get delta time in milliseconds since last frame\n */\n get deltaMs(): number {\n return this.deltaTime * 1000;\n }\n\n /**\n * Get total frame count\n */\n get frames(): number {\n return this.frameCount;\n }\n\n /**\n * Get current FPS (frames per second)\n */\n get currentFps(): number {\n return this.fps;\n }\n\n /**\n * Get total elapsed time in seconds\n */\n get totalTime(): number {\n return this.lastFrameTime / 1000;\n }\n\n /**\n * Reset the timer\n */\n reset(): void {\n this.lastFrameTime = 0;\n this.deltaTime = 0;\n this.frameCount = 0;\n this.fps = 0;\n this.lastFpsUpdate = 0;\n this.framesSinceLastFpsUpdate = 0;\n }\n}\n\n/**\n * Schedule a callback to run after a delay\n */\nexport function schedule(callback: () => void, delayMs: number): () => void {\n const timeoutId = setTimeout(callback, delayMs);\n return () => clearTimeout(timeoutId);\n}\n\n/**\n * Schedule a callback to run at regular intervals\n */\nexport function scheduleInterval(callback: () => void, intervalMs: number): () => void {\n const intervalId = setInterval(callback, intervalMs);\n return () => clearInterval(intervalId);\n}\n\n/**\n * Schedule a callback to run on the next animation frame (browser only)\n */\nexport function scheduleFrame(callback: (timestamp: number) => void): () => void {\n if (typeof requestAnimationFrame !== 'undefined') {\n const id = requestAnimationFrame(callback);\n return () => cancelAnimationFrame(id);\n }\n // Fallback for non-browser environments\n const id = setTimeout(() => callback(hrTime()), 16);\n return () => clearTimeout(id);\n}\n\n/**\n * Create a ticker that calls a callback at a target frame rate\n */\nexport function createTicker(\n callback: (delta: number) => void,\n targetFps: number = 60\n): { start: () => void; stop: () => void } {\n const frameTime = 1000 / targetFps;\n let lastTime = 0;\n let running = false;\n let animationId: number | ReturnType<typeof setTimeout>;\n\n const tick = (currentTime: number) => {\n if (!running) return;\n\n if (lastTime > 0) {\n const delta = (currentTime - lastTime) / 1000;\n callback(delta);\n }\n lastTime = currentTime;\n\n if (typeof requestAnimationFrame !== 'undefined') {\n animationId = requestAnimationFrame(tick);\n } else {\n animationId = setTimeout(() => tick(hrTime()), frameTime);\n }\n };\n\n return {\n start: () => {\n if (!running) {\n running = true;\n lastTime = 0;\n if (typeof requestAnimationFrame !== 'undefined') {\n animationId = requestAnimationFrame(tick);\n } else {\n tick(hrTime());\n }\n }\n },\n stop: () => {\n running = false;\n if (typeof cancelAnimationFrame !== 'undefined') {\n cancelAnimationFrame(animationId as number);\n } else {\n clearTimeout(animationId as ReturnType<typeof setTimeout>);\n }\n },\n };\n}\n\n/**\n * Date/time formatting utilities\n */\nexport const DateTime = {\n /**\n * Format a date as ISO string\n */\n toISO(date: Date = new Date()): string {\n return date.toISOString();\n },\n\n /**\n * Format a date as local string\n */\n toLocal(date: Date = new Date()): string {\n return date.toLocaleString();\n },\n\n /**\n * Format a date using a pattern\n * Supports: YYYY, MM, DD, HH, mm, ss, SSS\n */\n format(date: Date, pattern: string): string {\n const pad = (n: number, width: number) => String(n).padStart(width, '0');\n\n return pattern\n .replace('YYYY', String(date.getFullYear()))\n .replace('MM', pad(date.getMonth() + 1, 2))\n .replace('DD', pad(date.getDate(), 2))\n .replace('HH', pad(date.getHours(), 2))\n .replace('mm', pad(date.getMinutes(), 2))\n .replace('ss', pad(date.getSeconds(), 2))\n .replace('SSS', pad(date.getMilliseconds(), 3));\n },\n\n /**\n * Parse a date string\n */\n parse(dateString: string): Date {\n return new Date(dateString);\n },\n\n /**\n * Get difference between two dates in various units\n */\n diff(date1: Date, date2: Date, unit: 'ms' | 's' | 'm' | 'h' | 'd' = 'ms'): number {\n const diffMs = date1.getTime() - date2.getTime();\n switch (unit) {\n case 'ms':\n return diffMs;\n case 's':\n return diffMs / 1000;\n case 'm':\n return diffMs / 60000;\n case 'h':\n return diffMs / 3600000;\n case 'd':\n return diffMs / 86400000;\n }\n },\n\n /**\n * Add time to a date\n */\n add(date: Date, amount: number, unit: 'ms' | 's' | 'm' | 'h' | 'd'): Date {\n const _ms = DateTime.diff(new Date(amount), new Date(0), 'ms');\n const multipliers = { ms: 1, s: 1000, m: 60000, h: 3600000, d: 86400000 };\n return new Date(date.getTime() + amount * multipliers[unit]);\n },\n\n /**\n * Check if a date is today\n */\n isToday(date: Date): boolean {\n const today = new Date();\n return (\n date.getDate() === today.getDate() &&\n date.getMonth() === today.getMonth() &&\n date.getFullYear() === today.getFullYear()\n );\n },\n\n /**\n * Get start of day\n */\n startOfDay(date: Date = new Date()): Date {\n const result = new Date(date);\n result.setHours(0, 0, 0, 0);\n return result;\n },\n\n /**\n * Get end of day\n */\n endOfDay(date: Date = new Date()): Date {\n const result = new Date(date);\n result.setHours(23, 59, 59, 999);\n return result;\n },\n};\n"],"mappings":"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","names":["id"]}
|
package/dist/time.d.ts
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @holoscript/std - Time Module
|
|
3
|
+
*
|
|
4
|
+
* Time, timer, and scheduling utilities for HoloScript Plus programs.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Get current timestamp in milliseconds
|
|
8
|
+
*/
|
|
9
|
+
export declare function now(): number;
|
|
10
|
+
/**
|
|
11
|
+
* Get high-resolution timestamp (for performance measurement)
|
|
12
|
+
*/
|
|
13
|
+
export declare function hrTime(): number;
|
|
14
|
+
/**
|
|
15
|
+
* Sleep for a specified number of milliseconds
|
|
16
|
+
*/
|
|
17
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Wait until a condition is true
|
|
20
|
+
*/
|
|
21
|
+
export declare function waitUntil(condition: () => boolean | Promise<boolean>, options?: {
|
|
22
|
+
timeout?: number;
|
|
23
|
+
interval?: number;
|
|
24
|
+
}): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Execute a function with timeout
|
|
27
|
+
*/
|
|
28
|
+
export declare function withTimeout<T>(fn: () => Promise<T>, ms: number): Promise<T>;
|
|
29
|
+
/**
|
|
30
|
+
* Retry a function with exponential backoff
|
|
31
|
+
*/
|
|
32
|
+
export declare function retry<T>(fn: () => Promise<T>, options?: {
|
|
33
|
+
maxAttempts?: number;
|
|
34
|
+
initialDelay?: number;
|
|
35
|
+
maxDelay?: number;
|
|
36
|
+
factor?: number;
|
|
37
|
+
onRetry?: (error: Error, attempt: number) => void;
|
|
38
|
+
}): Promise<T>;
|
|
39
|
+
/**
|
|
40
|
+
* Debounce a function
|
|
41
|
+
*/
|
|
42
|
+
export declare function debounce<T extends (...args: unknown[]) => unknown>(fn: T, ms: number): T;
|
|
43
|
+
/**
|
|
44
|
+
* Throttle a function
|
|
45
|
+
*/
|
|
46
|
+
export declare function throttle<T extends (...args: unknown[]) => unknown>(fn: T, ms: number): T;
|
|
47
|
+
/**
|
|
48
|
+
* Measure execution time of a function
|
|
49
|
+
*/
|
|
50
|
+
export declare function measure<T>(fn: () => T | Promise<T>): Promise<{
|
|
51
|
+
result: T;
|
|
52
|
+
duration: number;
|
|
53
|
+
}>;
|
|
54
|
+
/**
|
|
55
|
+
* Measure execution time and log it
|
|
56
|
+
*/
|
|
57
|
+
export declare function timed<T>(label: string, fn: () => T | Promise<T>): Promise<T>;
|
|
58
|
+
/**
|
|
59
|
+
* Simple stopwatch for measuring elapsed time
|
|
60
|
+
*/
|
|
61
|
+
export declare class Stopwatch {
|
|
62
|
+
private startTime;
|
|
63
|
+
private pausedTime;
|
|
64
|
+
private running;
|
|
65
|
+
start(): this;
|
|
66
|
+
stop(): number;
|
|
67
|
+
reset(): this;
|
|
68
|
+
restart(): this;
|
|
69
|
+
get elapsed(): number;
|
|
70
|
+
get isRunning(): boolean;
|
|
71
|
+
lap(): number;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Interval timer with pause/resume support
|
|
75
|
+
*/
|
|
76
|
+
export declare class IntervalTimer {
|
|
77
|
+
private intervalId;
|
|
78
|
+
private callback;
|
|
79
|
+
private intervalMs;
|
|
80
|
+
private isPaused;
|
|
81
|
+
constructor(callback: () => void, intervalMs: number);
|
|
82
|
+
start(): this;
|
|
83
|
+
stop(): this;
|
|
84
|
+
pause(): this;
|
|
85
|
+
resume(): this;
|
|
86
|
+
get running(): boolean;
|
|
87
|
+
get paused(): boolean;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Countdown timer
|
|
91
|
+
*/
|
|
92
|
+
export declare class CountdownTimer {
|
|
93
|
+
private remainingMs;
|
|
94
|
+
private startTime;
|
|
95
|
+
private running;
|
|
96
|
+
private onTick?;
|
|
97
|
+
private onComplete?;
|
|
98
|
+
private tickIntervalId;
|
|
99
|
+
constructor(durationMs: number, options?: {
|
|
100
|
+
onTick?: (remaining: number) => void;
|
|
101
|
+
onComplete?: () => void;
|
|
102
|
+
tickInterval?: number;
|
|
103
|
+
});
|
|
104
|
+
start(): this;
|
|
105
|
+
pause(): this;
|
|
106
|
+
resume(): this;
|
|
107
|
+
reset(durationMs?: number): this;
|
|
108
|
+
stop(): this;
|
|
109
|
+
get remaining(): number;
|
|
110
|
+
get isRunning(): boolean;
|
|
111
|
+
get isComplete(): boolean;
|
|
112
|
+
private scheduleCompletion;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Frame-based timer for game loops
|
|
116
|
+
*/
|
|
117
|
+
export declare class FrameTimer {
|
|
118
|
+
private lastFrameTime;
|
|
119
|
+
private deltaTime;
|
|
120
|
+
private frameCount;
|
|
121
|
+
private fps;
|
|
122
|
+
private fpsUpdateInterval;
|
|
123
|
+
private lastFpsUpdate;
|
|
124
|
+
private framesSinceLastFpsUpdate;
|
|
125
|
+
/**
|
|
126
|
+
* Call at the start of each frame
|
|
127
|
+
*/
|
|
128
|
+
update(): void;
|
|
129
|
+
/**
|
|
130
|
+
* Get delta time in seconds since last frame
|
|
131
|
+
*/
|
|
132
|
+
get delta(): number;
|
|
133
|
+
/**
|
|
134
|
+
* Get delta time in milliseconds since last frame
|
|
135
|
+
*/
|
|
136
|
+
get deltaMs(): number;
|
|
137
|
+
/**
|
|
138
|
+
* Get total frame count
|
|
139
|
+
*/
|
|
140
|
+
get frames(): number;
|
|
141
|
+
/**
|
|
142
|
+
* Get current FPS (frames per second)
|
|
143
|
+
*/
|
|
144
|
+
get currentFps(): number;
|
|
145
|
+
/**
|
|
146
|
+
* Get total elapsed time in seconds
|
|
147
|
+
*/
|
|
148
|
+
get totalTime(): number;
|
|
149
|
+
/**
|
|
150
|
+
* Reset the timer
|
|
151
|
+
*/
|
|
152
|
+
reset(): void;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Schedule a callback to run after a delay
|
|
156
|
+
*/
|
|
157
|
+
export declare function schedule(callback: () => void, delayMs: number): () => void;
|
|
158
|
+
/**
|
|
159
|
+
* Schedule a callback to run at regular intervals
|
|
160
|
+
*/
|
|
161
|
+
export declare function scheduleInterval(callback: () => void, intervalMs: number): () => void;
|
|
162
|
+
/**
|
|
163
|
+
* Schedule a callback to run on the next animation frame (browser only)
|
|
164
|
+
*/
|
|
165
|
+
export declare function scheduleFrame(callback: (timestamp: number) => void): () => void;
|
|
166
|
+
/**
|
|
167
|
+
* Create a ticker that calls a callback at a target frame rate
|
|
168
|
+
*/
|
|
169
|
+
export declare function createTicker(callback: (delta: number) => void, targetFps?: number): {
|
|
170
|
+
start: () => void;
|
|
171
|
+
stop: () => void;
|
|
172
|
+
};
|
|
173
|
+
/**
|
|
174
|
+
* Date/time formatting utilities
|
|
175
|
+
*/
|
|
176
|
+
export declare const DateTime: {
|
|
177
|
+
/**
|
|
178
|
+
* Format a date as ISO string
|
|
179
|
+
*/
|
|
180
|
+
toISO(date?: Date): string;
|
|
181
|
+
/**
|
|
182
|
+
* Format a date as local string
|
|
183
|
+
*/
|
|
184
|
+
toLocal(date?: Date): string;
|
|
185
|
+
/**
|
|
186
|
+
* Format a date using a pattern
|
|
187
|
+
* Supports: YYYY, MM, DD, HH, mm, ss, SSS
|
|
188
|
+
*/
|
|
189
|
+
format(date: Date, pattern: string): string;
|
|
190
|
+
/**
|
|
191
|
+
* Parse a date string
|
|
192
|
+
*/
|
|
193
|
+
parse(dateString: string): Date;
|
|
194
|
+
/**
|
|
195
|
+
* Get difference between two dates in various units
|
|
196
|
+
*/
|
|
197
|
+
diff(date1: Date, date2: Date, unit?: "ms" | "s" | "m" | "h" | "d"): number;
|
|
198
|
+
/**
|
|
199
|
+
* Add time to a date
|
|
200
|
+
*/
|
|
201
|
+
add(date: Date, amount: number, unit: "ms" | "s" | "m" | "h" | "d"): Date;
|
|
202
|
+
/**
|
|
203
|
+
* Check if a date is today
|
|
204
|
+
*/
|
|
205
|
+
isToday(date: Date): boolean;
|
|
206
|
+
/**
|
|
207
|
+
* Get start of day
|
|
208
|
+
*/
|
|
209
|
+
startOfDay(date?: Date): Date;
|
|
210
|
+
/**
|
|
211
|
+
* Get end of day
|
|
212
|
+
*/
|
|
213
|
+
endOfDay(date?: Date): Date;
|
|
214
|
+
};
|
|
215
|
+
//# sourceMappingURL=time.d.ts.map
|
package/dist/time.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CountdownTimer,
|
|
3
|
+
DateTime,
|
|
4
|
+
FrameTimer,
|
|
5
|
+
IntervalTimer,
|
|
6
|
+
Stopwatch,
|
|
7
|
+
createTicker,
|
|
8
|
+
debounce,
|
|
9
|
+
hrTime,
|
|
10
|
+
measure,
|
|
11
|
+
now,
|
|
12
|
+
retry,
|
|
13
|
+
schedule,
|
|
14
|
+
scheduleFrame,
|
|
15
|
+
scheduleInterval,
|
|
16
|
+
sleep,
|
|
17
|
+
throttle,
|
|
18
|
+
timed,
|
|
19
|
+
waitUntil,
|
|
20
|
+
withTimeout
|
|
21
|
+
} from "./chunk-ZXVZAQCZ.js";
|
|
22
|
+
import "./chunk-PR4QN5HX.js";
|
|
23
|
+
export {
|
|
24
|
+
CountdownTimer,
|
|
25
|
+
DateTime,
|
|
26
|
+
FrameTimer,
|
|
27
|
+
IntervalTimer,
|
|
28
|
+
Stopwatch,
|
|
29
|
+
createTicker,
|
|
30
|
+
debounce,
|
|
31
|
+
hrTime,
|
|
32
|
+
measure,
|
|
33
|
+
now,
|
|
34
|
+
retry,
|
|
35
|
+
schedule,
|
|
36
|
+
scheduleFrame,
|
|
37
|
+
scheduleInterval,
|
|
38
|
+
sleep,
|
|
39
|
+
throttle,
|
|
40
|
+
timed,
|
|
41
|
+
waitUntil,
|
|
42
|
+
withTimeout
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=time.js.map
|
package/dist/time.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
+
import type { TraitDefinition } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Standard AR traits included in HoloScript's base functionality
|
|
11
|
+
*/
|
|
12
|
+
export declare const ARTraits: TraitDefinition[];
|
|
13
|
+
export default ARTraits;
|
|
14
|
+
//# sourceMappingURL=ARTraits.d.ts.map
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/traits/EconomicPrimitives.ts
|
|
21
|
+
var EconomicPrimitives_exports = {};
|
|
22
|
+
__export(EconomicPrimitives_exports, {
|
|
23
|
+
DEFAULT_BONDING_CURVE: () => DEFAULT_BONDING_CURVE,
|
|
24
|
+
DEFAULT_DEPRECIATION: () => DEFAULT_DEPRECIATION,
|
|
25
|
+
DEFAULT_PID: () => DEFAULT_PID,
|
|
26
|
+
DEFAULT_WEALTH_TAX: () => DEFAULT_WEALTH_TAX,
|
|
27
|
+
bondingCurveBuyCost: () => bondingCurveBuyCost,
|
|
28
|
+
bondingCurvePrice: () => bondingCurvePrice,
|
|
29
|
+
bondingCurveSellRefund: () => bondingCurveSellRefund,
|
|
30
|
+
calculateDepreciation: () => calculateDepreciation,
|
|
31
|
+
calculateRedistribution: () => calculateRedistribution,
|
|
32
|
+
calculateRepairCost: () => calculateRepairCost,
|
|
33
|
+
calculateTaxAmount: () => calculateTaxAmount,
|
|
34
|
+
calculateTaxRate: () => calculateTaxRate,
|
|
35
|
+
createDualLoopPIDState: () => createDualLoopPIDState,
|
|
36
|
+
createFaucetSinkMetrics: () => createFaucetSinkMetrics,
|
|
37
|
+
createPIDState: () => createPIDState,
|
|
38
|
+
depreciatedValue: () => depreciatedValue,
|
|
39
|
+
executeTrade: () => executeTrade,
|
|
40
|
+
generateTxHash: () => generateTxHash,
|
|
41
|
+
isDestroyed: () => isDestroyed,
|
|
42
|
+
recordFaucet: () => recordFaucet,
|
|
43
|
+
recordSink: () => recordSink,
|
|
44
|
+
resetMetricsPeriod: () => resetMetricsPeriod,
|
|
45
|
+
spatialPrice: () => spatialPrice,
|
|
46
|
+
updateDualLoopPID: () => updateDualLoopPID,
|
|
47
|
+
updatePID: () => updatePID
|
|
48
|
+
});
|
|
49
|
+
module.exports = __toCommonJS(EconomicPrimitives_exports);
|
|
50
|
+
function generateTxHash(from, to, price, timestamp) {
|
|
51
|
+
let hash = 2166136261;
|
|
52
|
+
const input = `${from}:${to}:${price}:${timestamp}`;
|
|
53
|
+
for (let i = 0; i < input.length; i++) {
|
|
54
|
+
hash ^= input.charCodeAt(i);
|
|
55
|
+
hash = Math.imul(hash, 16777619);
|
|
56
|
+
}
|
|
57
|
+
return (hash >>> 0).toString(16).padStart(8, "0");
|
|
58
|
+
}
|
|
59
|
+
function executeTrade(record, buyer, price, timestamp) {
|
|
60
|
+
if (record.locked) {
|
|
61
|
+
return { ok: false, error: "TRANSFER_BLOCKED" };
|
|
62
|
+
}
|
|
63
|
+
if (price < 0) {
|
|
64
|
+
return { ok: false, error: "INVALID_AMOUNT" };
|
|
65
|
+
}
|
|
66
|
+
const txHash = generateTxHash(record.owner, buyer, price, timestamp);
|
|
67
|
+
const transfer = {
|
|
68
|
+
from: record.owner,
|
|
69
|
+
to: buyer,
|
|
70
|
+
price,
|
|
71
|
+
timestamp,
|
|
72
|
+
txHash
|
|
73
|
+
};
|
|
74
|
+
const history = [transfer, ...record.history].slice(0, 50);
|
|
75
|
+
return {
|
|
76
|
+
ok: true,
|
|
77
|
+
value: {
|
|
78
|
+
owner: buyer,
|
|
79
|
+
history,
|
|
80
|
+
locked: false
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
var DEFAULT_DEPRECIATION = {
|
|
85
|
+
decayRate: 1e-4,
|
|
86
|
+
// 0.01% per second (~36% per hour)
|
|
87
|
+
condition: 1,
|
|
88
|
+
destroyThreshold: 0.01,
|
|
89
|
+
repairable: true,
|
|
90
|
+
repairCostMultiplier: 0.5
|
|
91
|
+
};
|
|
92
|
+
function calculateDepreciation(initialCondition, decayRate, elapsedSeconds) {
|
|
93
|
+
if (decayRate <= 0) return initialCondition;
|
|
94
|
+
if (elapsedSeconds <= 0) return initialCondition;
|
|
95
|
+
return initialCondition * Math.exp(-decayRate * elapsedSeconds);
|
|
96
|
+
}
|
|
97
|
+
function depreciatedValue(baseValue, condition) {
|
|
98
|
+
return baseValue * Math.max(0, Math.min(1, condition));
|
|
99
|
+
}
|
|
100
|
+
function isDestroyed(condition, threshold) {
|
|
101
|
+
return condition <= threshold;
|
|
102
|
+
}
|
|
103
|
+
function calculateRepairCost(baseValue, currentCondition, repairCostMultiplier) {
|
|
104
|
+
const conditionDeficit = 1 - Math.max(0, Math.min(1, currentCondition));
|
|
105
|
+
return baseValue * conditionDeficit * repairCostMultiplier;
|
|
106
|
+
}
|
|
107
|
+
var DEFAULT_BONDING_CURVE = {
|
|
108
|
+
curveType: "exponential",
|
|
109
|
+
reserveRatio: 1,
|
|
110
|
+
curveSteepness: 2,
|
|
111
|
+
currentSupply: 0,
|
|
112
|
+
reserveBalance: 0,
|
|
113
|
+
transactionFee: 0.02,
|
|
114
|
+
// 2% hard sink
|
|
115
|
+
sigmoidK: 100,
|
|
116
|
+
spatialDistanceFactor: 0
|
|
117
|
+
};
|
|
118
|
+
function bondingCurvePrice(supply, reserveRatio, curveSteepness, curveType = "exponential", sigmoidK = 100) {
|
|
119
|
+
if (supply <= 0) return 0;
|
|
120
|
+
if (reserveRatio <= 0) return 0;
|
|
121
|
+
switch (curveType) {
|
|
122
|
+
case "linear":
|
|
123
|
+
return reserveRatio * supply;
|
|
124
|
+
case "exponential":
|
|
125
|
+
return reserveRatio * Math.pow(supply, 1 / curveSteepness);
|
|
126
|
+
case "logarithmic":
|
|
127
|
+
return reserveRatio * Math.log(supply + 1);
|
|
128
|
+
case "sigmoid": {
|
|
129
|
+
const sn = Math.pow(supply, curveSteepness);
|
|
130
|
+
const kn = Math.pow(sigmoidK, curveSteepness);
|
|
131
|
+
return reserveRatio * (sn / (kn + sn));
|
|
132
|
+
}
|
|
133
|
+
default:
|
|
134
|
+
return reserveRatio * Math.pow(supply, 1 / curveSteepness);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function bondingCurveBuyCost(config, amount) {
|
|
138
|
+
if (amount <= 0) return 0;
|
|
139
|
+
const n = Math.max(10, Math.ceil(amount));
|
|
140
|
+
const h = amount / n;
|
|
141
|
+
let sum = 0;
|
|
142
|
+
const s0 = config.currentSupply;
|
|
143
|
+
for (let i = 0; i <= n; i++) {
|
|
144
|
+
const s = s0 + i * h;
|
|
145
|
+
const p = bondingCurvePrice(
|
|
146
|
+
s,
|
|
147
|
+
config.reserveRatio,
|
|
148
|
+
config.curveSteepness,
|
|
149
|
+
config.curveType,
|
|
150
|
+
config.sigmoidK
|
|
151
|
+
);
|
|
152
|
+
if (i === 0 || i === n) {
|
|
153
|
+
sum += p;
|
|
154
|
+
} else if (i % 2 === 1) {
|
|
155
|
+
sum += 4 * p;
|
|
156
|
+
} else {
|
|
157
|
+
sum += 2 * p;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
const cost = h / 3 * sum;
|
|
161
|
+
return cost * (1 + config.transactionFee);
|
|
162
|
+
}
|
|
163
|
+
function bondingCurveSellRefund(config, amount) {
|
|
164
|
+
if (amount <= 0) return 0;
|
|
165
|
+
if (amount > config.currentSupply) return 0;
|
|
166
|
+
const n = Math.max(10, Math.ceil(amount));
|
|
167
|
+
const h = amount / n;
|
|
168
|
+
let sum = 0;
|
|
169
|
+
const s0 = config.currentSupply - amount;
|
|
170
|
+
for (let i = 0; i <= n; i++) {
|
|
171
|
+
const s = s0 + i * h;
|
|
172
|
+
const p = bondingCurvePrice(
|
|
173
|
+
s,
|
|
174
|
+
config.reserveRatio,
|
|
175
|
+
config.curveSteepness,
|
|
176
|
+
config.curveType,
|
|
177
|
+
config.sigmoidK
|
|
178
|
+
);
|
|
179
|
+
if (i === 0 || i === n) {
|
|
180
|
+
sum += p;
|
|
181
|
+
} else if (i % 2 === 1) {
|
|
182
|
+
sum += 4 * p;
|
|
183
|
+
} else {
|
|
184
|
+
sum += 2 * p;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
const refund = h / 3 * sum;
|
|
188
|
+
return refund * (1 - config.transactionFee);
|
|
189
|
+
}
|
|
190
|
+
function spatialPrice(basePrice, distanceToHub, distanceFactor) {
|
|
191
|
+
if (distanceFactor <= 0 || distanceToHub <= 0) return basePrice;
|
|
192
|
+
return basePrice * (1 + distanceFactor * distanceToHub);
|
|
193
|
+
}
|
|
194
|
+
var DEFAULT_WEALTH_TAX = {
|
|
195
|
+
threshold: 1e4,
|
|
196
|
+
baseRate: 0.01,
|
|
197
|
+
// 1% base
|
|
198
|
+
maxEffectiveRate: 0.05,
|
|
199
|
+
// 5% cap
|
|
200
|
+
collectionInterval: "daily",
|
|
201
|
+
enableRedistribution: true,
|
|
202
|
+
redistributionFraction: 0.7
|
|
203
|
+
// 70% redistributed, 30% burned as hard sink
|
|
204
|
+
};
|
|
205
|
+
function calculateTaxRate(wealth, threshold, baseRate, maxEffectiveRate) {
|
|
206
|
+
if (wealth <= threshold) return 0;
|
|
207
|
+
if (threshold <= 0) return 0;
|
|
208
|
+
const rate = Math.log(wealth / threshold) * baseRate;
|
|
209
|
+
return Math.min(rate, maxEffectiveRate);
|
|
210
|
+
}
|
|
211
|
+
function calculateTaxAmount(wealth, config) {
|
|
212
|
+
const rate = calculateTaxRate(wealth, config.threshold, config.baseRate, config.maxEffectiveRate);
|
|
213
|
+
return wealth * rate;
|
|
214
|
+
}
|
|
215
|
+
function calculateRedistribution(totalTaxCollected, recipientCount, redistributionFraction) {
|
|
216
|
+
if (recipientCount <= 0 || totalTaxCollected <= 0) {
|
|
217
|
+
return { perRecipient: 0, burned: totalTaxCollected };
|
|
218
|
+
}
|
|
219
|
+
const redistributed = totalTaxCollected * redistributionFraction;
|
|
220
|
+
const burned = totalTaxCollected - redistributed;
|
|
221
|
+
const perRecipient = redistributed / recipientCount;
|
|
222
|
+
return { perRecipient, burned };
|
|
223
|
+
}
|
|
224
|
+
var DEFAULT_PID = {
|
|
225
|
+
kp: 0.5,
|
|
226
|
+
ki: 0.01,
|
|
227
|
+
kd: 0.1,
|
|
228
|
+
setpoint: 0,
|
|
229
|
+
outputMin: -1,
|
|
230
|
+
outputMax: 1,
|
|
231
|
+
integralLimit: 10
|
|
232
|
+
};
|
|
233
|
+
function createPIDState() {
|
|
234
|
+
return {
|
|
235
|
+
previousError: 0,
|
|
236
|
+
integral: 0,
|
|
237
|
+
lastOutput: 0,
|
|
238
|
+
initialized: false
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
function updatePID(config, state, measurement, dt) {
|
|
242
|
+
if (dt <= 0) return state.lastOutput;
|
|
243
|
+
const error = config.setpoint - measurement;
|
|
244
|
+
const p = config.kp * error;
|
|
245
|
+
state.integral += error * dt;
|
|
246
|
+
state.integral = Math.max(-config.integralLimit, Math.min(config.integralLimit, state.integral));
|
|
247
|
+
const i = config.ki * state.integral;
|
|
248
|
+
let d = 0;
|
|
249
|
+
if (state.initialized) {
|
|
250
|
+
d = config.kd * ((error - state.previousError) / dt);
|
|
251
|
+
}
|
|
252
|
+
let output = p + i + d;
|
|
253
|
+
output = Math.max(config.outputMin, Math.min(config.outputMax, output));
|
|
254
|
+
state.previousError = error;
|
|
255
|
+
state.lastOutput = output;
|
|
256
|
+
state.initialized = true;
|
|
257
|
+
return output;
|
|
258
|
+
}
|
|
259
|
+
function createDualLoopPIDState() {
|
|
260
|
+
return {
|
|
261
|
+
innerState: createPIDState(),
|
|
262
|
+
outerState: createPIDState(),
|
|
263
|
+
faucetMultiplier: 1
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
function updateDualLoopPID(config, state, totalMoneySupply, currentFaucetRate, dt) {
|
|
267
|
+
const targetSupply = config.perCapitaTarget * config.activePlayerCount;
|
|
268
|
+
const outerConfig = { ...config.outerLoop, setpoint: targetSupply };
|
|
269
|
+
const outerOutput = updatePID(outerConfig, state.outerState, totalMoneySupply, dt);
|
|
270
|
+
const desiredFaucetRate = currentFaucetRate * (1 + outerOutput * 0.1);
|
|
271
|
+
const innerConfig = { ...config.innerLoop, setpoint: desiredFaucetRate };
|
|
272
|
+
const innerOutput = updatePID(innerConfig, state.innerState, currentFaucetRate, dt);
|
|
273
|
+
state.faucetMultiplier = Math.max(0, Math.min(2, 1 + innerOutput));
|
|
274
|
+
return state.faucetMultiplier;
|
|
275
|
+
}
|
|
276
|
+
function createFaucetSinkMetrics(timestamp) {
|
|
277
|
+
return {
|
|
278
|
+
totalFaucet: 0,
|
|
279
|
+
totalSink: 0,
|
|
280
|
+
ratio: 1,
|
|
281
|
+
velocity: 0,
|
|
282
|
+
periodStart: timestamp,
|
|
283
|
+
ratioHistory: []
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
function recordFaucet(metrics, amount) {
|
|
287
|
+
metrics.totalFaucet += amount;
|
|
288
|
+
metrics.ratio = metrics.totalSink > 0 ? metrics.totalFaucet / metrics.totalSink : metrics.totalFaucet > 0 ? Infinity : 1;
|
|
289
|
+
}
|
|
290
|
+
function recordSink(metrics, amount) {
|
|
291
|
+
metrics.totalSink += amount;
|
|
292
|
+
metrics.ratio = metrics.totalSink > 0 ? metrics.totalFaucet / metrics.totalSink : metrics.totalFaucet > 0 ? Infinity : 1;
|
|
293
|
+
}
|
|
294
|
+
function resetMetricsPeriod(metrics, timestamp) {
|
|
295
|
+
if (metrics.totalFaucet > 0 || metrics.totalSink > 0) {
|
|
296
|
+
metrics.ratioHistory.push(metrics.ratio);
|
|
297
|
+
if (metrics.ratioHistory.length > 100) {
|
|
298
|
+
metrics.ratioHistory.shift();
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
metrics.totalFaucet = 0;
|
|
302
|
+
metrics.totalSink = 0;
|
|
303
|
+
metrics.ratio = 1;
|
|
304
|
+
metrics.velocity = 0;
|
|
305
|
+
metrics.periodStart = timestamp;
|
|
306
|
+
}
|
|
307
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
308
|
+
0 && (module.exports = {
|
|
309
|
+
DEFAULT_BONDING_CURVE,
|
|
310
|
+
DEFAULT_DEPRECIATION,
|
|
311
|
+
DEFAULT_PID,
|
|
312
|
+
DEFAULT_WEALTH_TAX,
|
|
313
|
+
bondingCurveBuyCost,
|
|
314
|
+
bondingCurvePrice,
|
|
315
|
+
bondingCurveSellRefund,
|
|
316
|
+
calculateDepreciation,
|
|
317
|
+
calculateRedistribution,
|
|
318
|
+
calculateRepairCost,
|
|
319
|
+
calculateTaxAmount,
|
|
320
|
+
calculateTaxRate,
|
|
321
|
+
createDualLoopPIDState,
|
|
322
|
+
createFaucetSinkMetrics,
|
|
323
|
+
createPIDState,
|
|
324
|
+
depreciatedValue,
|
|
325
|
+
executeTrade,
|
|
326
|
+
generateTxHash,
|
|
327
|
+
isDestroyed,
|
|
328
|
+
recordFaucet,
|
|
329
|
+
recordSink,
|
|
330
|
+
resetMetricsPeriod,
|
|
331
|
+
spatialPrice,
|
|
332
|
+
updateDualLoopPID,
|
|
333
|
+
updatePID
|
|
334
|
+
});
|
|
335
|
+
//# sourceMappingURL=EconomicPrimitives.cjs.map
|