@jucie.io/engine 1.1.39

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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../services/storage/src/providers/common/BaseProvider.js", "../../services/storage/src/providers/indexedDb/IndexedDbProvider.js", "../../services/storage/src/providers/firebase/FirebaseProvider.js", "../../services/storage/src/providers/local/LocalProvider.js", "../../services/storage/src/providers/minio/MinioProvider.js", "../../services/storage/src/providers/s3/S3Provider.js", "../../src/lib/relay/src/Relay.js", "../../src/utils/typeChecker.js", "../../src/definitions/createDefinition.js", "../../src/utils/asserts.js", "../../src/definitions/defaults.js", "../../src/definitions/DefinitionBuilder.js", "../../src/ServiceProvider.js", "../../src/global.js", "../../../node_modules/nanoid/index.js", "../../../node_modules/nanoid/url-alphabet/index.js", "../../services/storage/src/utils/generateAccessKey.js", "../../services/storage/src/meta/createMetaType.js", "../../../reactive/src/utils/nextIdleTick.js", "../../../reactive/src/ComputationManager.js", "../../../reactive/src/Reactive.js", "../../../reactive/src/utils/isAsync.js", "../../../reactive/src/Computed.js", "../../../reactive/src/Subscriber.js", "../../../reactive/src/Surface.js", "../../../state/src/lib/TOKENS.js", "../../../state/src/lib/pathEncoder.js", "../../../state/src/lib/marker.js", "../../../state/src/Plugin.js", "../../../state/src/utils/nextIdleTick.js", "../../../reactive/extensions/JucieState.js", "../../../state/src/lib/tree/traverse.js", "../../../state/src/lib/tree/mutate.js", "../../../state/src/utils/isPrimitive.js", "../../../state/src/utils/clone.js", "../../../state/src/lib/gsru.js", "../../../state/src/admin/buffer.js", "../../../state/src/admin/binary.js", "../../../state/src/admin/pack.js", "../../../state/src/admin/unpack.js", "../../../state/src/lib/tree/seek.js", "../../../state/src/lib/change.js", "../../../state/src/State.js", "../../../state/src/utils/defer.js", "../../../state/plugins/history/src/HistoryManager.js", "../../services/storage/src/utils/throttle.js", "../../services/storage/src/utils/createFileList.js", "../../services/storage/src/meta/createIndex.js", "../../services/storage/src/StorageInstance.js", "../../services/storage/src/Storage.js", "../../services/storage/src/StorageClient.js", "../../services/storage/src/StorageServer.js"],
4
+ "sourcesContent": ["export class BaseProvider {\n static metaFile = 'index.state';\n initialized = false;\n\n constructor(config = {}) {\n this.config = config;\n }\n \n static async create(config) {\n const provider = new this(config);\n await provider.initialize(config);\n return provider;\n }\n\n async initialize() {\n this.initialized = true;\n }\n\n async cleanup() {\n this.initialized = false;\n }\n\n /**\n * @param {string} fileName - Path to the file to read\n * @returns {Promise<any>} The parsed contents of the file\n */\n async read(fileName) {\n throw new Error('read() not implemented');\n }\n\n /**\n * @param {string} fileName - Path to write the file to\n * @param {any} data - Data to write to the file\n * @returns {Promise<boolean>} Success status\n */\n async write(fileName, data) {\n throw new Error('write() not implemented');\n }\n\n /**\n * @param {string} fileName - Path to the file to delete\n * @returns {Promise<boolean>} Success status\n */\n async delete(fileName) {\n throw new Error('delete() not implemented');\n }\n\n /**\n * @param {string} fileName - Path to check existence of\n * @returns {Promise<boolean>} Whether the file exists\n */\n async exists(fileName) {\n throw new Error('exists() not implemented');\n }\n\n async hasIndex() {\n return await this.exists(BaseProvider.metaFile);\n }\n\n async getIndex() {\n return await this.read(BaseProvider.metaFile);\n }\n\n async setIndex(index) {\n return this.write(BaseProvider.metaFile, index);\n }\n\n getEncodingFromMimeType(mimeType) {\n if (!mimeType) {\n return 'utf-8';\n }\n if (mimeType.startsWith('text/') || mimeType === 'application/json') {\n return 'utf-8';\n }\n return 'binary';\n }\n}\n", "// src/providers/indexeddb/IndexedDBProvider.js\nimport { BaseProvider } from '../common/BaseProvider.js';\n\nexport class IndexedDBProvider extends BaseProvider {\n constructor(config = {}) {\n // Set defaults before calling super\n config.dbName = config.dbName || 'jucie-storage';\n config.storeName = config.storeName || 'files';\n super(config);\n this.db = null;\n }\n\n async initialize(config) {\n if (this.initialized) return this;\n\n try {\n this.db = await new Promise((resolve, reject) => {\n const request = indexedDB.open(this.config.dbName, 1);\n \n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve(request.result);\n \n request.onupgradeneeded = (event) => {\n const db = event.target.result;\n if (!db.objectStoreNames.contains(this.config.storeName)) {\n db.createObjectStore(this.config.storeName);\n }\n };\n });\n\n this.initialized = true;\n return this;\n } catch (error) {\n throw new Error(`Failed to actions IndexedDB: ${error.message}`);\n }\n }\n\n async destroy() {\n if (this.db) {\n this.db.close();\n \n // Delete the entire database\n await new Promise((resolve, reject) => {\n const request = indexedDB.deleteDatabase(this.config.dbName);\n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve();\n });\n \n this.db = null;\n this.initialized = false;\n }\n }\n\n async cleanup() {\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n this.initialized = false;\n }\n\n async read(fileName) {\n try {\n const result = await new Promise((resolve, reject) => {\n const transaction = this.db.transaction(this.config.storeName, 'readonly');\n const store = transaction.objectStore(this.config.storeName);\n const request = store.get(fileName);\n \n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve(request.result);\n });\n\n if (!result) {\n throw new Error(`File not found: ${fileName}`);\n }\n\n return result;\n } catch (error) {\n throw new Error(`Failed to read file ${fileName}: ${error.message}`);\n }\n }\n\n async write(fileName, data) {\n try {\n await new Promise((resolve, reject) => {\n const transaction = this.db.transaction(this.config.storeName, 'readwrite');\n const store = transaction.objectStore(this.config.storeName);\n const request = store.put(data, fileName);\n \n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve();\n });\n return true;\n } catch (error) {\n throw new Error(`Failed to write file ${fileName}: ${error.message}`);\n }\n }\n\n async delete(fileName) {\n try {\n await new Promise((resolve, reject) => {\n const transaction = this.db.transaction(this.config.storeName, 'readwrite');\n const store = transaction.objectStore(this.config.storeName);\n const request = store.delete(fileName);\n \n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve();\n });\n return true;\n } catch (error) {\n throw new Error(`Failed to delete file ${fileName}: ${error.message}`);\n }\n }\n\n async exists(fileName) {\n try {\n const result = await new Promise((resolve, reject) => {\n const transaction = this.db.transaction(this.config.storeName, 'readonly');\n const store = transaction.objectStore(this.config.storeName);\n const request = store.count(fileName);\n \n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve(request.result);\n });\n return result > 0;\n } catch (error) {\n throw new Error(`Failed to check if file exists ${fileName}: ${error.message}`);\n }\n }\n}\n\nexport default IndexedDBProvider;", "import { BaseProvider } from '../common/BaseProvider.js';\nimport admin from 'firebase-admin';\n\nexport class FirebaseProvider extends BaseProvider {\n constructor(config = {}) {\n super(config);\n }\n\n async initialize(config) {\n if (this.initialized) return this;\n \n // Try to get existing app\n try {\n this.app = admin.app();\n this.storage = this.app.storage();\n } catch (error) {\n // No existing app, actions new one\n this.app = admin.initializeApp({\n credential: admin.credential.cert(config.credentials),\n storageBucket: config.storageBucket\n });\n this.storage = this.app.storage();\n }\n\n this.initialized = true;\n return this;\n }\n\n async cleanup() {\n if (this.app) {\n await this.app.delete();\n this.app = null;\n this.storage = null;\n }\n }\n\n resolveFile(fileName) {\n const bucket = this.storage.bucket(this.config.bucket);\n return bucket.file(fileName);\n }\n\n async read(fileName) {\n const file = this.resolveFile(fileName);\n \n try {\n const [exists] = await file.exists();\n if (!exists) {\n throw new Error(`File not found: ${fileName}`);\n }\n \n const [content] = await file.download();\n return content.toString();\n } catch (error) {\n if (error.message.includes('File not found')) {\n throw error;\n }\n throw new Error(`Failed to read file ${fileName}: ${error.message}`);\n }\n }\n \n async exists(fileName) {\n const file = this.resolveFile(fileName);\n try {\n const [exists] = await file.exists();\n return exists;\n } catch (error) {\n throw new Error(`Failed to check if file exists ${fileName}: ${error.message}`);\n }\n }\n\n async write(fileName, data) {\n const file = this.resolveFile(fileName);\n \n try {\n const content = JSON.stringify(data, null, 2);\n await file.save(content, {\n metadata: {\n contentType: 'application/json'\n }\n });\n return true;\n } catch (error) {\n throw new Error(`Failed to write file ${fileName}: ${error.message}`);\n }\n }\n\n async delete(fileName) {\n const file = this.resolveFile(fileName);\n \n try {\n await file.delete();\n return true;\n } catch (error) {\n throw new Error(`Failed to delete file ${fileName}: ${error.message}`);\n }\n }\n}\n\nexport default FirebaseProvider;", "import { BaseProvider } from '../common/BaseProvider.js';\nimport { promises as fs } from 'fs';\nimport { dirname, resolve } from 'path';\n\nexport class LocalProvider extends BaseProvider {\n constructor(config = {}) {\n config.root = config.root || process.cwd();\n super(config);\n }\n\n async initialize(config) {\n await fs.mkdir(config.root, { recursive: true });\n this.initialized = true;\n return this;\n }\n\n async cleanup() {\n // Nothing to clean up for local filesystem\n this.initialized = false;\n }\n\n async exists(fileName) {\n const resolvedPath = this.resolvePath(fileName);\n try {\n await fs.access(resolvedPath);\n return true;\n } catch (error) {\n if (error.code === 'ENOENT') {\n return false;\n }\n throw new Error(`Failed to check file existence: ${error.message}`);\n }\n }\n\n async read(fileName, meta) {\n const resolvedPath = this.resolvePath(fileName);\n const encoding = this.getEncodingFromMimeType(meta?.mimeType);\n \n try {\n const content = await fs.readFile(resolvedPath, encoding);\n return content;\n } catch (error) {\n if (error.code === 'ENOENT') {\n throw new Error(`File not found: ${resolvedPath}`);\n }\n throw new Error(`Failed to read file ${fileName}: ${error.message}`);\n }\n }\n\n async write(fileName, data) {\n const resolvedPath = this.resolvePath(fileName);\n const dir = dirname(resolvedPath);\n \n try { \n // Ensure directory exists\n await fs.mkdir(dir, { recursive: true });\n \n // Write file\n await fs.writeFile(resolvedPath, JSON.stringify(data, null, 2), 'utf-8');\n return true;\n } catch (error) {\n throw new Error(`Failed to write file: ${error.message}`);\n }\n }\n\n async delete(fileName) {\n const resolvedPath = this.resolvePath(fileName);\n \n try {\n await fs.unlink(resolvedPath);\n return true;\n } catch (error) {\n if (error.code === 'ENOENT') {\n throw new Error(`File not found: ${resolvedPath}`);\n }\n throw new Error(`Failed to delete file: ${error.message}`);\n }\n }\n\n resolvePath(fileName) {\n if (!fileName) {\n return this.config.root\n }\n return resolve(this.config.root, fileName);\n }\n} \n\nexport default LocalProvider;", "import { BaseProvider } from '../common/BaseProvider.js';\nimport { S3Client, GetObjectCommand, PutObjectCommand, DeleteObjectCommand, HeadObjectCommand, CreateBucketCommand } from '@aws-sdk/client-s3';\n\nexport class MinioProvider extends BaseProvider {\n constructor(config = {}) {\n super(config);\n }\n\n async initialize(config) {\n if (this.initialized) return this;\n \n this.client = new S3Client({\n endpoint: config.endpoint || 'http://localhost:9000',\n region: config.region || 'us-east-1',\n credentials: {\n accessKeyId: config.accessKeyId || 'minioadmin',\n secretAccessKey: config.secretAccessKey || 'minioadmin'\n },\n forcePathStyle: true // Required for Minio\n });\n\n this.bucket = config.bucket;\n\n // Ensure bucket exists\n try {\n await this.client.send(new CreateBucketCommand({\n Bucket: this.bucket\n }));\n } catch (error) {\n // Both these errors mean the bucket exists and we can use it\n if (error.name !== 'BucketAlreadyExists' && \n error.Code !== 'BucketAlreadyOwnedByYou') {\n throw new Error(`Failed to actions storage: ${error.message}`);\n }\n }\n\n this.initialized = true;\n return this;\n }\n\n async cleanup() {\n this.client.destroy();\n this.client = null;\n }\n\n async read(fileName) {\n try {\n const command = new GetObjectCommand({\n Bucket: this.bucket,\n Key: fileName\n });\n \n const response = await this.client.send(command);\n const content = await response.Body.transformToString();\n return content;\n } catch (error) {\n if (error.name === 'NoSuchKey') {\n throw new Error(`File not found: ${fileName}`);\n }\n throw new Error(`Failed to read file ${fileName}: ${error.message}`);\n }\n }\n\n async exists(fileName) {\n try {\n const command = new HeadObjectCommand({\n Bucket: this.bucket,\n Key: fileName\n });\n await this.client.send(command);\n return true;\n } catch (error) {\n if (error.name === 'NotFound') {\n return false;\n }\n throw new Error(`Failed to check if file exists ${fileName}: ${error.message}`);\n }\n }\n\n async write(fileName, data) {\n try {\n const command = new PutObjectCommand({\n Bucket: this.bucket,\n Key: fileName,\n Body: JSON.stringify(data, null, 2),\n ContentType: 'application/json'\n });\n \n await this.client.send(command);\n return true;\n } catch (error) {\n throw new Error(`Failed to write file ${fileName}: ${error.message}`);\n }\n }\n\n async delete(fileName) {\n try {\n const command = new DeleteObjectCommand({\n Bucket: this.bucket,\n Key: fileName\n });\n \n await this.client.send(command);\n return true;\n } catch (error) {\n if (error.name === 'NoSuchKey') {\n throw new Error(`File not found: ${fileName}`);\n }\n throw new Error(`Failed to delete file ${fileName}: ${error.message}`);\n }\n }\n}\n\nexport default MinioProvider;", "import { BaseProvider } from '../common/BaseProvider.js';\nimport { \n S3Client, \n GetObjectCommand, \n PutObjectCommand, \n DeleteObjectCommand, \n HeadObjectCommand,\n HeadBucketCommand,\n CreateBucketCommand\n} from '@aws-sdk/client-s3';\n\nexport class S3Provider extends BaseProvider {\n constructor(config = {}) {\n super(config);\n this.client = null;\n }\n\n async initialize(config) {\n if (this.initialized) return this;\n\n this.client = new S3Client({\n region: config.region || 'us-east-1',\n endpoint: config.endpoint, // For LocalStack testing\n credentials: config.credentials || {\n accessKeyId: config.accessKeyId,\n secretAccessKey: config.secretAccessKey\n },\n forcePathStyle: true // Required for LocalStack\n });\n\n this.bucket = config.bucket;\n\n // Ensure bucket exists\n try {\n await this.client.send(new CreateBucketCommand({\n Bucket: this.bucket\n }));\n } catch (error) {\n // Both these errors mean the bucket exists and we can use it\n if (error.name !== 'BucketAlreadyExists' && \n error.Code !== 'BucketAlreadyOwnedByYou') {\n throw new Error(`Failed to actions storage: ${error.message}`);\n }\n }\n\n this.initialized = true;\n return this;\n }\n\n async cleanup() {\n this.client.destroy();\n this.client = null;\n }\n\n async read(fileName) {\n try {\n const command = new GetObjectCommand({\n Bucket: this.bucket,\n Key: fileName\n });\n \n const response = await this.client.send(command);\n const content = await response.Body.transformToString();\n return content;\n } catch (error) {\n if (error.name === 'NoSuchKey') {\n throw new Error(`File not found: ${fileName}`);\n }\n throw new Error(`Failed to read file ${fileName}: ${error.message}`);\n }\n }\n\n async exists(fileName) {\n try {\n const command = new HeadObjectCommand({\n Bucket: this.bucket,\n Key: fileName\n });\n await this.client.send(command);\n return true;\n } catch (error) {\n if (error.name === 'NotFound') {\n return false;\n }\n throw new Error(`Failed to check if file exists ${fileName}: ${error.message}`);\n }\n }\n\n async write(fileName, data) {\n try {\n const command = new PutObjectCommand({\n Bucket: this.bucket,\n Key: fileName,\n Body: JSON.stringify(data, null, 2),\n ContentType: 'application/json'\n });\n \n await this.client.send(command);\n return true;\n } catch (error) {\n throw new Error(`Failed to write file ${fileName}: ${error.message}`);\n }\n }\n\n async delete(fileName) {\n try {\n const command = new DeleteObjectCommand({\n Bucket: this.bucket,\n Key: fileName\n });\n \n await this.client.send(command);\n return true;\n } catch (error) {\n if (error.name === 'NoSuchKey') {\n throw new Error(`File not found: ${fileName}`);\n }\n throw new Error(`Failed to delete file ${fileName}: ${error.message}`);\n }\n }\n}\n\nexport default S3Provider;", "// Simple, readable relay with wildcard matching and no indexing\n\nconst GLOBAL_NS_OBJ = Object.freeze(Object.create(null));\n\nfunction queueMicrotask(fn) {\n if (globalThis.queueMicrotask && typeof globalThis.queueMicrotask === 'function') {\n globalThis.queueMicrotask(fn);\n return;\n }\n setTimeout(fn, 0);\n}\n\nclass Channel {\n #nsObj; #relay;\n constructor(nsObj, relay) { this.#nsObj = nsObj; this.#relay = relay; }\n\n // Any source -> me\n on(event, handler) {\n return this.#relay.subscribe(event, GLOBAL_NS_OBJ, this.#nsObj, handler);\n }\n\n once(event, handler) {\n return this.#relay.once(event, GLOBAL_NS_OBJ, this.#nsObj, handler);\n }\n\n // Me -> everyone (sender never hears itself)\n broadcast(event, ...payload) {\n this.#relay.publish(event, this.#nsObj, GLOBAL_NS_OBJ, payload);\n }\n\n // Specific source -> me\n from(fromNs) {\n return {\n subscribe: (event, handler) => this.#relay.subscribe(event, fromNs, this.#nsObj, handler),\n once: (event, handler) => this.#relay.once(event, fromNs, this.#nsObj, handler),\n };\n }\n\n // Me -> specific target\n to(toNs) {\n return {\n publish: (event, ...payload) => this.#relay.publish(event, this.#nsObj, toNs, payload),\n publishAsync: (event, ...payload) => this.#relay.publishAsync(event, this.#nsObj, toNs, payload),\n };\n }\n}\n\nexport class Relay {\n #channels = new WeakMap(); // nsObj -> Channel\n #events = new Map(); // eventName -> Set<Listener>\n #onError = null;\n\n static create(config = {}) {\n return new Relay(config);\n }\n\n constructor({ onError = null } = {}) {\n this.#onError = onError;\n this.createChannel(GLOBAL_NS_OBJ);\n }\n\n // Public convenience\n channel(nsObj) { return this.createChannel(nsObj); }\n createChannel(nsObj) {\n if (this.#channels.has(nsObj)) return this.#channels.get(nsObj);\n const ch = new Channel(nsObj, this);\n this.#channels.set(nsObj, ch);\n return ch;\n }\n\n // Internal helpers\n #listeners(event) {\n let set = this.#events.get(event);\n if (!set) { set = new Set(); this.#events.set(event, set); }\n return set;\n }\n\n // Wildcard matcher:\n // - If published `from` is GLOBAL, it matches every listener.from\n // - If listener.from is GLOBAL, it matches every published from\n // Same for `to`. This makes broadcast (to = GLOBAL) hit specific targets too.\n static #matchSide(published, constraint) {\n return published === GLOBAL_NS_OBJ || constraint === GLOBAL_NS_OBJ || published === constraint;\n }\n\n static #matches(publishedFrom, publishedTo, listenerFrom, listenerTo) {\n return Relay.#matchSide(publishedFrom, listenerFrom)\n && Relay.#matchSide(publishedTo, listenerTo);\n }\n\n subscribe(event, from, to, handler) {\n const listener = { from, to, handler };\n this.#listeners(event).add(listener);\n return () => {\n const set = this.#events.get(event);\n if (set) set.delete(listener);\n };\n }\n\n once(event, from, to, handler) {\n let off = null;\n const wrapped = (payload) => {\n try { handler(payload); } finally { off && off(); }\n };\n off = this.subscribe(event, from, to, wrapped);\n return off;\n }\n\n offAllFor(nsObj) {\n for (const set of this.#events.values()) {\n for (const l of Array.from(set)) {\n if (l.from === nsObj || l.to === nsObj) set.delete(l);\n }\n }\n }\n\n listenerCount(event) {\n const set = this.#events.get(event);\n return set ? set.size : 0;\n }\n\n #deliver(event, from, to, payload) {\n const set = this.#events.get(event);\n if (!set || set.size === 0) return;\n\n for (const l of set) {\n // Always skip self-delivery\n if (l.to === from) continue;\n\n if (Relay.#matches(from, to, l.from, l.to)) {\n try { l.handler(...payload); }\n catch (err) { if (this.#onError) this.#onError(err, { event, from, to, listener: l }); }\n }\n }\n }\n\n publish(event, from, to, payload) {\n this.#deliver(event, from, to, payload);\n }\n\n publishAsync(event, from, to, payload) {\n queueMicrotask(() => this.#deliver(event, from, to, payload));\n }\n\n broadcast(event, from, payload) {\n this.publish(event, from, GLOBAL_NS_OBJ, payload);\n }\n}\n", "/**\n * Type Checker Utility\n * \n * Supports syntax like:\n * - createDefinition('action', [Array, Function]) // Array or Function\n * - createDefinition('name', String) // Must be String\n * - createDefinition('items', Array) // Must be Array\n * - createDefinition('callback', Function) // Must be Function\n * - createDefinition('value', [String, Number]) // String or Number\n */\n\n/**\n * Type definitions mapping constructor names to actual constructors\n */\nconst TYPE_MAP = {\n String,\n Number,\n Boolean,\n Array,\n Object,\n Function,\n Date,\n RegExp,\n Promise,\n Map,\n Set,\n WeakMap,\n WeakSet,\n Symbol,\n BigInt,\n Error,\n TypeError,\n RangeError,\n ReferenceError,\n SyntaxError,\n EvalError,\n URIError\n};\n\n/**\n * Checks if a value matches the expected type(s)\n * @param {*} value - The value to check\n * @param {Function|Array<Function>} expectedType - Single type or array of possible types\n * @param {string} name - Name of the parameter for error messages\n * @returns {boolean} - True if value matches expected type(s)\n */\nexport function checkType(value, expectedType, name = 'value') {\n // Handle array of possible types\n if (Array.isArray(expectedType)) {\n for (const type of expectedType) {\n if (matchesType(value, type)) {\n return true;\n }\n }\n \n const typeNames = expectedType.map(getTypeName).join(' | ');\n throw new TypeError(`${name} must be one of: ${typeNames}. Got ${getTypeName(value)}`);\n }\n \n // Handle single type\n if (!matchesType(value, expectedType)) {\n throw new TypeError(`${name} must be ${getTypeName(expectedType)}. Got ${getTypeName(value)}`);\n }\n \n return true;\n}\n\n/**\n * Checks if a value matches a specific type\n * @param {*} value - The value to check\n * @param {Function} type - The expected constructor/type\n * @returns {boolean} - True if value matches the type\n */\nfunction matchesType(value, type) {\n // Handle primitive constructors\n if (type === String) {\n return typeof value === 'string';\n }\n if (type === Number) {\n return typeof value === 'number' && !isNaN(value);\n }\n if (type === Boolean) {\n return typeof value === 'boolean';\n }\n if (type === Symbol) {\n return typeof value === 'symbol';\n }\n if (type === BigInt) {\n return typeof value === 'bigint';\n }\n if (type === Function) {\n return typeof value === 'function';\n }\n \n // Handle object constructors (including Array, Object, Date, etc.)\n if (type === Array) {\n return Array.isArray(value);\n }\n if (type === Object) {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n }\n \n // Handle other constructors (Date, RegExp, Map, Set, etc.)\n return value instanceof type;\n}\n\n/**\n * Gets a human-readable name for a type\n * @param {*} value - The value or constructor to get name for\n * @returns {string} - Human-readable type name\n */\nfunction getTypeName(value) {\n if (value === String) return 'String';\n if (value === Number) return 'Number';\n if (value === Boolean) return 'Boolean';\n if (value === Array) return 'Array';\n if (value === Object) return 'Object';\n if (value === Function) return 'Function';\n if (value === Date) return 'Date';\n if (value === RegExp) return 'RegExp';\n if (value === Promise) return 'Promise';\n if (value === Map) return 'Map';\n if (value === Set) return 'Set';\n if (value === WeakMap) return 'WeakMap';\n if (value === WeakSet) return 'WeakSet';\n if (value === Symbol) return 'Symbol';\n if (value === BigInt) return 'BigInt';\n if (value === Error) return 'Error';\n \n if (typeof value === 'string') return 'string';\n if (typeof value === 'number') return 'number';\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'symbol') return 'symbol';\n if (typeof value === 'bigint') return 'bigint';\n if (typeof value === 'function') return 'function';\n if (Array.isArray(value)) return 'Array';\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'object') {\n return value.constructor?.name || 'Object';\n }\n \n return 'unknown';\n}\n\n/**\n * Creates a type checker function for a specific parameter\n * @param {Function|Array<Function>} expectedType - Expected type(s)\n * @param {string} name - Parameter name\n * @returns {Function} - Type checker function\n */\nexport function createTypeChecker(expectedType, name = 'value') {\n return (value) => checkType(value, expectedType, name);\n}\n\n/**\n * Validates an object against a schema\n * @param {Object} obj - Object to validate\n * @param {Object} schema - Schema definition { prop: Type, prop2: [Type1, Type2] }\n * @param {string} objName - Name of the object for error messages\n */\nexport function validateObject(obj, schema, objName = 'object') {\n if (!obj || typeof obj !== 'object') {\n throw new TypeError(`${objName} must be an object`);\n }\n \n for (const [prop, expectedType] of Object.entries(schema)) {\n if (prop in obj) {\n checkType(obj[prop], expectedType, `${objName}.${prop}`);\n }\n }\n}\n\n/**\n * Creates a validator function for an object schema\n * @param {Object} schema - Schema definition\n * @param {string} objName - Name of the object\n * @returns {Function} - Validator function\n */\nexport function createObjectValidator(schema, objName = 'object') {\n return (obj) => validateObject(obj, schema, objName);\n}\n\n// Export the type map for advanced usage\nexport { TYPE_MAP };\n", "const DefinitionTypes = new Map();\nconst Definitions = new WeakMap();\nimport { createTypeChecker } from '../utils/typeChecker.js';\n\n/**\n * Creates a definition type with return type validation\n * @param {string} type - The definition type name\n * @param {Function|Array<Function>} returnTypes - Expected return type(s)\n * @returns {Function} - Definition creator function\n */\n\n\nexport const definitionType = (definition) => {\n if (Definitions.has(definition)) {\n return Definitions.get(definition);\n }\n return undefined;\n}\n\nexport const createDefinition = (type, returnTypes = []) => { \n // Create type checker for return values if returnTypes specified\n const returnTypeChecker = returnTypes.length > 0 ? createTypeChecker(returnTypes, 'return value') : null;\n \n if (DefinitionTypes.has(type)) {\n console.warn(`Definition type \"${type}\" already exists`);\n return DefinitionTypes.get(type);\n }\n\n const definitionType = (name, factory, ...defaultArgs) => {\n // Validate inputs using type checker\n createTypeChecker(String, 'name')(name);\n createTypeChecker(Function, 'factory')(factory);\n\n const definition = (...args) => {\n try {\n const combinedArgs = [...args, ...defaultArgs];\n const res = factory(...combinedArgs);\n \n if (returnTypeChecker && res === undefined) {\n throw new Error(`Factory ${type} must return a value for ${name}`);\n }\n\n // Use type checker to validate return value\n if (returnTypeChecker) {\n returnTypeChecker(res);\n }\n\n return res\n } catch (error) {\n console.error(`Error creating definition \"${name}\"`, error);\n throw error;\n }\n }\n\n Object.defineProperty(definition, '_name', {\n value: name,\n enumerable: false,\n configurable: false\n });\n\n Definitions.set(definition, type);\n\n return definition;\n }\n\n DefinitionTypes.set(type, definitionType);\n\n return definitionType;\n}; ", "// utils/asserts.js\n\nconst BAD_KEYS = new Set(['__proto__', 'prototype', 'constructor']);\nconst RESERVED_NAMESPACES = new Set(['use', 'install', 'uninstall', 'relay', 'state', 'debug']);\n\nconst MAX_NAME_LENGTH = 64;\nconst VALID_NAME = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/**\n * Throw if key is unsafe (__proto__, constructor, etc.)\n */\nexport function assertSafeKey(key, where = 'key') {\n if (BAD_KEYS.has(key)) {\n throw new Error(`Illegal key \"${key}\" in ${where}`);\n }\n}\n\n/**\n * Validate a namespace string: format, length, reserved words, proto poisoning.\n */\nexport function assertNamespace(ns) {\n assertSafeKey(ns, 'namespace');\n if (typeof ns !== 'string') {\n throw new Error(`Namespace must be a string, got ${typeof ns}`);\n }\n if (!VALID_NAME.test(ns)) {\n throw new Error(`Invalid namespace \"${ns}\". Must be a valid JS identifier`);\n }\n if (ns.length > MAX_NAME_LENGTH) {\n throw new Error(`Namespace \"${ns}\" too long (max ${MAX_NAME_LENGTH} chars)`);\n }\n if (RESERVED_NAMESPACES.has(ns)) {\n throw new Error(`Namespace \"${ns}\" is reserved`);\n }\n return ns;\n}\n\n/**\n * Validate an action or getter name within a namespace.\n */\nexport function assertMemberName(name, namespace, kind = 'member') {\n assertSafeKey(name, `${kind}:${namespace}`);\n if (typeof name !== 'string') {\n throw new Error(`${kind} name in ${namespace} must be a string`);\n }\n if (!VALID_NAME.test(name)) {\n throw new Error(`Invalid ${kind} name \"${name}\" in ${namespace}`);\n }\n if (name.length > MAX_NAME_LENGTH) {\n throw new Error(\n `${kind} name \"${name}\" in ${namespace} too long (max ${MAX_NAME_LENGTH})`\n );\n }\n return name;\n}\n", "import { createDefinition, definitionType } from './createDefinition.js';\nexport const defineMiddleware = createDefinition('MIDDLEWARE', [Function, Array]);\nexport const defineActions = createDefinition('ACTIONS', [Object]);\nexport const defineUninstall = createDefinition('UNINSTALL');\nexport const defineInitialize = createDefinition('INITIALIZE');\nexport const defineGetters = createDefinition('GETTERS', [Object]);\nexport { createDefinition, definitionType };", "// DefinitionBuilder.js\nimport { defineActions, defineGetters, defineMiddleware, defineInitialize, defineUninstall } from './defaults.js';\n\nexport class DefinitionBuilder {\n static create(namespace) {\n return new DefinitionBuilder(namespace);\n }\n\n #ns; #args;\n #slots = { MIDDLEWARE:null, GETTERS:null, ACTIONS:null, INITIALIZE:null, UNINSTALL:null };\n constructor(namespace) { this.#ns = namespace }\n\n #set(type, factory, creator) {\n if (this.#slots[type]) throw new Error(`${type} already defined for ${this.#ns}`);\n this.#slots[type] = creator(this.#ns, factory);\n }\n\n defineMiddleware = (factory) => this.#set('MIDDLEWARE', factory, defineMiddleware);\n defineGetters = (factory) => this.#set('GETTERS', factory, defineGetters);\n defineActions = (factory) => this.#set('ACTIONS', factory, defineActions);\n defineInitialize = (factory) => this.#set('INITIALIZE', factory, defineInitialize);\n defineUninstall = (factory) => this.#set('UNINSTALL', factory, defineUninstall);\n\n _toArray() {\n return [\n this.#slots.MIDDLEWARE,\n this.#slots.GETTERS,\n this.#slots.ACTIONS,\n this.#slots.INITIALIZE,\n this.#slots.UNINSTALL\n ].filter(Boolean);\n }\n}\n\n", "import { assertNamespace } from './utils/asserts.js';\nimport { DefinitionBuilder } from './definitions/DefinitionBuilder.js';\n\n\nexport class ServiceProvider {\n static #services = new Set();\n\n static manifest = {\n name: 'base',\n dependencies: [],\n version: '1.0.0',\n description: 'Base extension template',\n };\n\n static config = null;\n\n static unique = false;\n\n static configure(options = {}) {\n return {\n install: (useContext, config) => this.install(useContext, config),\n manifest: this.manifest,\n config: { ...(this.config || this.manifest.defaults || {}), ...options },\n unique: true,\n configured: true\n };\n }\n\n static install(useContext, config) { \n try {\n const {namespace} = this.manifest;\n assertNamespace(namespace);\n\n // instantiate\n const instance = new this();\n ServiceProvider.#services.add(instance);\n\n // bind context/config\n // bind config (frozen to avoid accidental mutation)\n Object.defineProperty(instance, 'config', {\n value: Object.freeze({ ...config }),\n writable: false,\n configurable: false,\n enumerable: false,\n });\n\n // expose both a live context getter AND the keyed accessor\n Object.defineProperty(instance, 'context', {\n get: () => useContext(), // always fresh, via your proxy\n configurable: false,\n enumerable: false,\n });\n \n Object.defineProperty(instance, 'useContext', {\n value: (...keys) => useContext(...keys),\n writable: false,\n configurable: false,\n enumerable: false,\n });\n\n const builder = DefinitionBuilder.create(namespace);\n\n if (instance.setup) {\n // Create properly bound context for setup pattern\n const setupContext = {\n defineActions: (factory) => builder.defineActions(() => factory(useContext, config)),\n defineMiddleware: (factory) => builder.defineMiddleware(() => factory(useContext, config)),\n defineGetters: (factory) => builder.defineGetters(() => factory(useContext, config)),\n defineInitialize: (factory) => builder.defineInitialize(() => factory(useContext, config)),\n defineUninstall: (factory) => builder.defineUninstall(() => factory(useContext, config))\n };\n const maybe = instance.setup(setupContext);\n return maybe?.then ? maybe.then(() => builder._toArray()) : builder._toArray();\n }\n\n if (instance.middleware) builder.defineMiddleware(() => instance.middleware(useContext, config));\n if (instance.getters) builder.defineGetters (() => instance.getters(useContext, config));\n if (instance.actions) builder.defineActions (() => instance.actions(useContext, config));\n if (instance.initialize) builder.defineInitialize(() => instance.initialize(useContext, config));\n if (instance.uninstall) builder.defineUninstall (() => instance.uninstall(useContext, config));\n\n return builder._toArray();\n } catch (error) {\n throw error;\n }\n }\n}", "const ENGINE_CONTEXT = Symbol('jucie.engine');\n\n/**\n * Registers the engine globally, but only if no engine has already been set.\n * @param {object} engine \n */\n\nexport function provideEngine(engine) {\n if (!globalThis[ENGINE_CONTEXT]) {\n globalThis[ENGINE_CONTEXT] = engine;\n }\n}\n\nexport function hasEngine() {\n return globalThis[ENGINE_CONTEXT] !== undefined;\n}\n\n/**\n * Forcefully override the engine in the global context.\n * Useful for testing or resetting.\n */\nexport function forceEngine(engine) {\n globalThis[ENGINE_CONTEXT] = engine;\n}\n\n/**\n * Retrieves the globally registered engine.\n */\nexport function getEngine() {\n return globalThis[ENGINE_CONTEXT] || null;\n}\n\n/**\n * Retrieves the globally registered engine.\n */\nexport function useEngine() {\n return getEngine();\n}", "import crypto from 'crypto'\nimport { urlAlphabet } from './url-alphabet/index.js'\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\nlet fillPool = bytes => {\n if (!pool || pool.length < bytes) {\n pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n crypto.randomFillSync(pool)\n poolOffset = 0\n } else if (poolOffset + bytes > pool.length) {\n crypto.randomFillSync(pool)\n poolOffset = 0\n }\n poolOffset += bytes\n}\nlet random = bytes => {\n fillPool((bytes |= 0))\n return pool.subarray(poolOffset - bytes, poolOffset)\n}\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1\n let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let i = step\n while (i--) {\n id += alphabet[bytes[i] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) => {\n fillPool((size |= 0))\n let id = ''\n for (let i = poolOffset - size; i < poolOffset; i++) {\n id += urlAlphabet[pool[i] & 63]\n }\n return id\n}\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n", "let urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nexport { urlAlphabet }\n", "// Types of access keys\nexport const KEY_TYPES = {\n DIRECTORY: 'directory',\n FILE: 'file',\n LOCAL: 'local',\n INDEX: 'index'\n};\n\n// Prefixes for different key types\nconst KEY_PREFIXES = {\n [KEY_TYPES.FILE]: 'uk_',\n [KEY_TYPES.DIRECTORY]: 'dk_',\n [KEY_TYPES.LOCAL]: 'lk_',\n [KEY_TYPES.INDEX]: 'ik_'\n};\n\n/**\n * Calculates a checksum for a string\n * @param {string} data - The data to calculate checksum for\n * @returns {string} Two-digit checksum\n */\nconst calculateChecksum = (data) => {\n const sum = data.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0);\n return (sum % 100).toString().padStart(2, '0');\n};\n\n/**\n * Generates a cryptographically secure random key\n * @param {number} length - Length in bytes (default: 32)\n * @returns {string} Base64URL encoded random bytes\n */\n async function generateRandomBytes(length = 32) {\n let bytes;\n\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n // Browser or Web Worker\n bytes = new Uint8Array(length);\n crypto.getRandomValues(bytes);\n } else {\n // Node.js (ESM)\n const { randomBytes } = await import('node:crypto');\n bytes = new Uint8Array(randomBytes(length));\n }\n\n // Encode to base64url\n const str = String.fromCharCode(...bytes);\n const base64 = btoa(str)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, ''); // trim padding\n\n return base64;\n}\n\n\n/**\n * Generates an access key of the specified type\n * @param {string} type - Type of key (user or project)\n * @param {number} length - Length in bytes (default: 32 for project, 16 for user)\n * @returns {string} Prefixed access key with checksum\n */\nexport const generateAccessKey = async (type = KEY_TYPES.PROJECT, length = null) => {\n // Set default lengths based on type\n const defaultLength = type === KEY_TYPES.PROJECT || type === KEY_TYPES.LOCAL ? 30 : 14; // Reduced by 2 bytes for checksum\n const keyLength = length ? length - 2 : defaultLength;\n \n // Generate the random bytes\n const randomKey = await generateRandomBytes(keyLength);\n \n // Calculate and add checksum\n const checksum = calculateChecksum(randomKey);\n const keyWithChecksum = randomKey + checksum;\n \n // Add the appropriate prefix\n return `${KEY_PREFIXES[type]}${keyWithChecksum}`;\n};\n\n/**\n * Validates if a string is a valid access key of the specified type\n * @param {string} key - The key to validate\n * @param {string} type - Expected type of key\n * @returns {boolean} Whether the key is valid\n */\nexport const isValidAccessKey = (key, type) => {\n if (!key || typeof key !== 'string') return false;\n \n // Check prefix\n const prefix = KEY_PREFIXES[type];\n if (!key.startsWith(prefix)) return false;\n \n // Remove prefix and check remaining length\n const keyWithoutPrefix = key.slice(prefix.length);\n const expectedLength = type === KEY_TYPES.PROJECT ? 45 : 24; // Increased by 2 for checksum\n \n if (keyWithoutPrefix.length !== expectedLength) return false;\n \n // Extract and validate checksum\n const data = keyWithoutPrefix.slice(0, -2);\n const checksum = keyWithoutPrefix.slice(-2);\n const expectedChecksum = calculateChecksum(data);\n \n return checksum === expectedChecksum;\n};\n\n/**\n * Validates an access key and returns detailed validation results\n * @param {string} key - The key to validate\n * @param {string} type - Expected type of key\n * @returns {Object} Validation result with details\n */\nexport const validateAccessKey = (key, type) => {\n const result = {\n isValid: false,\n errors: []\n };\n\n // Check if key exists and is a string\n if (!key) {\n result.errors.push('Key is required');\n return result;\n }\n if (typeof key !== 'string') {\n result.errors.push('Key must be a string');\n return result;\n }\n\n // Check if type is valid\n if (!KEY_TYPES[type.toUpperCase()]) {\n result.errors.push(`Invalid key type: ${type}`);\n return result;\n }\n\n // Check prefix\n const prefix = KEY_PREFIXES[type];\n if (!key.startsWith(prefix)) {\n result.errors.push(`Key must start with ${prefix}`);\n return result;\n }\n\n // Check key format\n const keyWithoutPrefix = key.slice(prefix.length);\n const expectedLength = type === KEY_TYPES.PROJECT ? 45 : 24; // Increased by 2 for checksum\n \n if (keyWithoutPrefix.length !== expectedLength) {\n result.errors.push(`Key length must be ${expectedLength} characters (excluding prefix)`);\n return result;\n }\n\n // Check if key contains only valid base64url characters\n const base64urlRegex = /^[A-Za-z0-9_-]+$/;\n if (!base64urlRegex.test(keyWithoutPrefix)) {\n result.errors.push('Key contains invalid characters');\n return result;\n }\n\n // Validate checksum\n const data = keyWithoutPrefix.slice(0, -2);\n const checksum = keyWithoutPrefix.slice(-2);\n const expectedChecksum = calculateChecksum(data);\n \n if (checksum !== expectedChecksum) {\n result.errors.push('Invalid checksum');\n return result;\n }\n\n // If we got here, the key is valid\n result.isValid = true;\n return result;\n}; ", "import { generateAccessKey, KEY_TYPES } from '../utils/generateAccessKey.js';\n\nexport const createMetaType = async (type, id, meta = {}) => {\n const created = new Date().toISOString();\n const updated = new Date().toISOString();\n\n switch (type) {\n case 'file':\n return {\n type,\n id,\n version: 0,\n created,\n updated,\n meta,\n accessKey: await generateAccessKey(KEY_TYPES.FILE),\n dependencies: [],\n access: {\n granted: {},\n denied: {}\n },\n }\n case 'directory':\n return {\n type,\n id,\n children: [],\n created,\n updated,\n meta,\n accessKey: await generateAccessKey(KEY_TYPES.DIRECTORY),\n access: {\n granted: {},\n denied: {}\n },\n }\n \n }\n};", "export function nextIdleTick(callback) {\n if (typeof window !== 'undefined' && window.requestIdleCallback) {\n return window.requestIdleCallback(callback, { timeout: 100 });\n }\n\n // Fallback for browsers without requestIdleCallback (Safari/WebKit)\n if (typeof window !== 'undefined') {\n // Use requestAnimationFrame + setTimeout for better idle approximation\n if (window.requestAnimationFrame) {\n return window.requestAnimationFrame(() => {\n setTimeout(callback, 0);\n });\n }\n // Final fallback to setTimeout\n return setTimeout(callback, 0);\n }\n\n // Server-side or no window object - execute immediately\n if (typeof callback === 'function') {\n callback();\n }\n return null;\n}\n", "import { nextIdleTick } from './utils/nextIdleTick.js';\n\nexport class ComputationManager {\n constructor() {\n this.roots = new Map();\n this.pending = new Set();\n this.onCompleteCallbacks = new Set();\n this.onNextIdle = new Set();\n this.idleScheduled = false;\n }\n\n markAsDirty(reactive) {\n if (!reactive.isDirty) {\n reactive.isDirty = true;\n \n if (reactive.isAsync || reactive.immediate || (reactive.effects && reactive.effects.size > 0)) {\n this.scheduleRecomputation(reactive);\n } else {\n this.onNextIdle.add(reactive);\n\n if (!this.idleScheduled) {\n this.idleScheduled = true;\n nextIdleTick(() => {\n for (const reactive of this.onNextIdle) {\n this.pending.add(reactive);\n }\n this.flush(null);\n this.onNextIdle.clear();\n this.idleScheduled = false; // \u2190 Reset flag\n });\n }\n }\n if (reactive.dependants && reactive.dependants.size > 0) {\n // Process WeakRefs and rebuild ID set with only alive IDs\n const deadRefs = [];\n const ids = new Set();\n reactive.dependants.forEach(weakRef => {\n const dependant = weakRef.deref();\n if (dependant) {\n this.markAsDirty(dependant);\n ids.add(dependant._id);\n } else {\n deadRefs.push(weakRef);\n }\n });\n // Clean up dead WeakRefs and sync IDs\n deadRefs.forEach(ref => reactive.dependants.delete(ref));\n reactive.dependantIds = ids;\n }\n }\n }\n\n scheduleRecomputation(reactive) {\n if (!reactive.debounce) {\n return this.recompute(reactive);\n }\n\n // Check if we can recompute (either first time or cooldown expired)\n const now = Date.now();\n const timeElapsed = reactive._lastComputeTime ? now - reactive._lastComputeTime : Infinity;\n const canRecompute = !reactive._hasPendingDebounce || timeElapsed >= reactive.debounce;\n\n if (canRecompute) {\n // Clear any existing timer and set up new cooldown period\n clearTimeout(reactive._debounceTimer);\n reactive._hasPendingDebounce = true;\n reactive._lastComputeTime = now;\n \n reactive._debounceTimer = setTimeout(() => {\n reactive._hasPendingDebounce = false;\n reactive._debounceTimer = null;\n }, reactive.debounce);\n \n return this.recompute(reactive);\n }\n\n // Still in cooldown period, return cached value\n return reactive.cachedValue;\n }\n\n removeReactive(reactive) {\n this.pending.delete(reactive);\n this.onNextIdle.delete(reactive);\n }\n\n recompute(reactive) {\n this.pending.add(reactive);\n return this.flush(reactive);\n }\n\n flush(reactive) {\n const reactives = Array.from(this.pending);\n this.pending.clear();\n\n // Sort by dependencies\n const sortedReactives = this.sortByDependencies(reactives);\n \n // Process in reverse order (dependencies first)\n for (const reactive of sortedReactives) {\n this.onNextIdle.delete(reactive);\n reactive.compute()\n }\n\n // Notify completion callbacks\n for (const callback of this.onCompleteCallbacks) {\n try {\n callback();\n } catch (error) {\n console.error('Error in batch completion callback:', error);\n }\n }\n\n // If we have a target ID, ensure it's computed and return its value\n if (reactive) {\n // Make sure the target computed is evaluated if it wasn't in the batch\n if (!sortedReactives.includes(reactive)) {\n reactive.compute();\n }\n return reactive.cachedValue;\n }\n \n return undefined;\n }\n\n sortByDependencies(reactives) {\n const sorted = [];\n const visited = new Set();\n const visiting = new Set();\n\n const visit = (reactive) => {\n if (visiting.has(reactive)) return;\n if (visited.has(reactive)) return;\n\n visiting.add(reactive);\n\n // Get dependant computed values (handle WeakRefs)\n const dependants = reactive.dependants;\n if (dependants && dependants.size > 0) {\n dependants.forEach(weakRef => {\n const dependant = weakRef.deref();\n if (dependant && reactives.includes(dependant)) {\n visit(dependant); // Visit dependants first\n }\n });\n }\n\n visiting.delete(reactive);\n visited.add(reactive);\n sorted.unshift(reactive); // Add to start of array instead of end\n };\n\n // Process all nodes\n for (const reactive of reactives) {\n if (!visited.has(reactive)) {\n visit(reactive);\n }\n }\n\n return sorted;\n }\n}", "import { ComputationManager } from './ComputationManager.js';\n\nexport class Reactive {\n static computationManager = new ComputationManager();\n static awaitingRecomputation = new Set();\n static reactives = new WeakMap();\n static currentlyComputing = null;\n static computationStack = [];\n static currentDepth = 0;\n static effectsCache = new Set();\n static processingEffects = false;\n static _nextId = 1; // Counter for unique reactive IDs\n static config = {\n maxDepth: 2000,\n }\n static ctx = {};\n \n static nextId() {\n return Reactive._nextId++;\n }\n\n static addContext(key, value) {\n if (!key || typeof key !== 'string') {\n throw new Error('Invalid context key');\n }\n \n if (typeof value === 'undefined') {\n throw new Error('Invalid context value');\n }\n \n if (key in Reactive.ctx) {\n throw new Error('Context key already exists');\n }\n \n Reactive.ctx[key] = value;\n }\n\n static useContext(keys) { \n if (!keys || keys.length === 0) return Reactive.ctx;\n if (keys.length === 1) return Reactive.ctx[keys[0]];\n\n const out = new Array(keys.length);\n for (let i = 0; i < keys.length; i++) {\n out[i] = Reactive.ctx[keys[i]];\n }\n return out;\n }\n\n static hasContext(keys) {\n if (!keys || keys.length === 0) return Object.keys(Reactive.ctx).length > 0;\n if (keys.length === 1) return keys[0] in Reactive.ctx;\n for (const key of keys) {\n if (!(key in Reactive.ctx)) return false;\n }\n return true;\n }\n\n static clearContext() {\n Reactive.ctx = {};\n }\n\n static begin(reactive) {\n if (Reactive.awaitingRecomputation.has(reactive)) {\n Reactive.awaitingRecomputation.delete(reactive);\n }\n\n const reactorIndex = Reactive.computationStack.indexOf(reactive);\n\n if (reactorIndex !== -1) {\n if (reactive.isAsync) {\n Reactive.computationStack.splice(reactorIndex, 1);\n Reactive.computationStack.push(reactive);\n Reactive.currentlyComputing = reactive;\n return;\n } \n const cycle = Reactive.computationStack.slice(reactorIndex).concat(reactive);\n const error = new Error(`Circular dependency detected: ${cycle.map(r => r).join(' -> ')}`);\n error.name = 'CircularDependencyError';\n error.displayed = false;\n throw error;\n }\n \n if (Reactive.currentDepth >= Reactive.config.maxDepth) {\n throw new Error(`Maximum reactive depth of ${Reactive.config.maxDepth} exceeded`);\n }\n \n Reactive.computationStack.push(reactive);\n Reactive.currentlyComputing = reactive;\n Reactive.currentDepth++;\n }\n \n static end(reactive) {\n if (reactive.isAsync) {\n Reactive.computationStack.splice(Reactive.computationStack.indexOf(reactive), 1);\n Reactive.currentlyComputing = Reactive.computationStack[Reactive.computationStack.length - 1] || null;\n Reactive.currentDepth--;\n return;\n }\n Reactive.computationStack.pop();\n Reactive.currentlyComputing = Reactive.computationStack[Reactive.computationStack.length - 1] || null;\n Reactive.currentDepth--;\n }\n\n static addEffect(getter, effect) {\n const reactive = Reactive.reactives.get(getter);\n \n // Compute if needed and notify with current value\n if (reactive.isDirty) {\n Reactive.computationManager.scheduleRecomputation(reactive);\n }\n \n if (!reactive.effects) {\n reactive.effects = new Set();\n }\n \n // Store the WeakRef instead of the raw effect\n reactive.effects.add(effect);\n \n // Return unsubscribe function\n return () => Reactive.removeEffect(getter, effect);\n }\n\n static removeEffect(getter, effect) {\n const reactive = Reactive.reactives.get(getter);\n if (reactive.effects) {\n reactive.effects.delete(effect);\n }\n }\n\n static recompute(reactive) {\n if (!Reactive.awaitingRecomputation.has(reactive)) {\n Reactive.awaitingRecomputation.add(reactive);\n }\n\n \n return Reactive.computationManager.scheduleRecomputation(reactive);\n }\n\n static callEffects(reactive) { \n Reactive.effectsCache.add(reactive);\n \n // Use a single setTimeout for batching\n if (!Reactive.processingEffects) {\n Reactive.processingEffects = true;\n setTimeout(() => {\n Reactive.processEffectsCache();\n Reactive.processingEffects = false;\n }, 0);\n }\n }\n\n static processEffectsCache() {\n const reactives = new Set(Reactive.effectsCache);\n Reactive.effectsCache.clear();\n \n for (const reactive of reactives) {\n try {\n // Process effects using WeakRefs\n const effects = reactive.effects || new Set();\n effects.forEach(effect => {\n if (effect) {\n effect(reactive.cachedValue);\n }\n });\n } catch (error) {\n console.error(`Error in reactive ${reactive._id} effect:`, error);\n }\n }\n \n // If new effects were added during processing, schedule another batch\n if (Reactive.effectsCache.size > 0) {\n setTimeout(() => {\n Reactive.processEffectsCache();\n }, 0);\n }\n }\n\n static markAsDirty(reactive) {\n if (!reactive.isDirty) {\n reactive.isDirty = true;\n \n if (reactive.immediate || (reactive.effects && reactive.effects.size > 0)) {\n Reactive.computationManager.scheduleRecomputation(reactive);\n }\n \n // Process WeakRefs and clean up dead ones\n const deadRefs = [];\n const ids = new Set();\n reactive.dependants.forEach(weakRef => {\n const dependant = weakRef.deref();\n if (dependant) {\n Reactive.markAsDirty(dependant);\n ids.add(dependant._id);\n } else {\n deadRefs.push(weakRef);\n }\n });\n // Clean up dead WeakRefs and sync IDs\n deadRefs.forEach(ref => reactive.dependants.delete(ref));\n reactive.dependantIds = ids;\n }\n }\n\n static destroy(getter) {\n const reactive = Reactive.reactives.get(getter);\n Reactive.computationManager.removeReactive(reactive);\n Reactive.reactives.delete(getter);\n }\n}\n\nexport const markAsDirty = (reactive) => {\n if (isReactive(reactive)) {\n const reactiveInstance = Reactive.reactives.get(reactive);\n if (reactiveInstance) {\n return Reactive.markAsDirty(reactiveInstance);\n }\n }\n}\n\nexport const isReactive = (getter) => {\n return Reactive.reactives.has(getter);\n}\n\nexport const addEffect = (getter, effect) => {\n if (!isReactive(getter)) {\n throw new Error('Invalid effect getter');\n \n }\n\n if (!effect || typeof effect !== 'function') {\n throw new Error('Invalid effect function');\n }\n\n return Reactive.addEffect(getter, effect);\n}\n\nexport const removeEffect = (getter, effect) => {\n if (isReactive(getter)) {\n return Reactive.removeEffect(getter, effect);\n }\n}\n\nexport const destroyReactive = (getter) => {\n if (isReactive(getter)) {\n return Reactive.destroy(getter);\n }\n}\n\nexport const addContext = (key, value) => Reactive.addContext(key, value)\n\nexport const useContext = (...keys) => {\n if (keys.length === 0) return Reactive.ctx;\n if (keys.length === 1) return Reactive.ctx[keys[0]];\n return keys.map(key => Reactive.ctx[key]);\n}\n\nexport const hasContext = (...keys) => Reactive.hasContext(keys)\n\nexport const createAdapter = (getter, path = []) => {\n if (!isReactive(getter)) {\n throw new Error('Invalid adapter getter');\n }\n\n let snapshotCache = undefined;\n let unsubscribeAll = null;\n const subscribers = new Set();\n\n const getSnapshot = () => {\n if (snapshotCache !== undefined) {\n return snapshotCache;\n }\n\n const value = path && path.length > 0 ? traverse(getter(), path) : getter();\n\n if (Array.isArray(value)) {\n snapshotCache = value.slice();\n } else if (typeof value === 'object' && value !== null) {\n const clone = Object.create(Object.getPrototypeOf(value));\n Object.defineProperties(clone, Object.getOwnPropertyDescriptors(value));\n snapshotCache = Object.freeze(clone);\n } else {\n snapshotCache = value;\n }\n \n return snapshotCache;\n };\n\n const subscribe = (listener) => {\n if (!unsubscribeAll) {\n unsubscribeAll = addEffect(getter, () => {\n snapshotCache = undefined;\n for (const subscriber of subscribers) {\n subscriber(getSnapshot);\n }\n });\n }\n \n subscribers.add(listener);\n return () => {\n subscribers.delete(listener);\n if (subscribers.size === 0) {\n unsubscribeAll();\n unsubscribeAll = null;\n }\n };\n };\n\n return [getSnapshot, subscribe];\n}", "export const isAsyncFunction = fn =>\n typeof fn === 'function' &&\n (fn.constructor.name === 'AsyncFunction' ||\n fn.constructor.name === 'AsyncGeneratorFunction');\n", "import { Reactive } from './Reactive.js';\nimport { isAsyncFunction } from './utils/isAsync.js';\n\nexport class Computed {\n static create(fn, config = {}) {\n const computed = new Computed(fn, config);\n Reactive.reactives.set(computed.getter, computed);\n return computed.getter;\n }\n\n constructor(fn, config = {}) {\n this.fn = fn;\n this.isAsync = isAsyncFunction(fn);\n this.pendingResolve = undefined;\n this.roots = new Set();\n this.dependants = new Set();\n this.dependantIds = new Set();\n this.effects = new Set(Array.isArray(config.effects) ? config.effects : []);\n this.cachedValue = config.initialValue || undefined;\n this.isDirty = true;\n this.debounce = config.debounce || 0;\n this.onAccess = config.onAccess || undefined;\n this.detatched = config.detatched || false;\n this.immediate = config.immediate || false;\n this.context = config.context || undefined;\n this.useContext = () => this.context ? this.context : Reactive.hasContext() ? Reactive.useContext() : undefined;\n this.resolvers = [];\n this.rejectors = [];\n this._id = Reactive.nextId();\n this._lastComputeTime = undefined;\n this._hasPendingDebounce = false;\n this._debounceTimer = undefined;\n this._computationId = 0; // Track computation version\n this.getter = this.#getter.bind(this);\n \n\n if (this.immediate) {\n this.compute();\n }\n }\n\n compute() {\n Reactive.begin(this);\n try { \n if (!this.isAsync) {\n this.cachedValue = this.fn(this.useContext(), this.cachedValue);\n this.isDirty = false;\n return this.cachedValue;\n }\n\n // Track this specific computation\n this._computationId = (this._computationId || 0) + 1;\n const computationId = this._computationId;\n\n this.pendingResolve = this.fn(this.useContext(), this.cachedValue);\n this.pendingResolve.then(value => {\n // Only update if this is still the latest computation\n if (this._computationId === computationId) {\n this.resolvers.forEach(resolve => resolve(value));\n this.resolvers = [];\n this.cachedValue = value;\n this.isDirty = false;\n }\n return value;\n }).catch(error => {\n if (this._computationId === computationId) {\n this.rejectors.forEach(reject => reject(error));\n this.rejectors = [];\n }\n }).finally(() => {\n this.pendingResolve = null; // Always clear pending promise\n // Only call end/effects if this is still the latest computation\n if (this._computationId === computationId) {\n Reactive.end(this);\n Reactive.callEffects(this);\n }\n });\n\n this.cachedValue = new Promise((resolve, reject) => {\n this.resolvers.push(resolve);\n this.rejectors.push(reject);\n });\n \n return this.cachedValue;\n } finally {\n if (!this.isAsync) {\n Reactive.end(this);\n Reactive.callEffects(this);\n }\n }\n }\n\n #getter() {\n try {\n if (!this.detatched && Reactive.currentlyComputing && Reactive.currentlyComputing !== this && !this.dependantIds.has(Reactive.currentlyComputing._id)) {\n this.dependantIds.add(Reactive.currentlyComputing._id);\n this.dependants.add(new WeakRef(Reactive.currentlyComputing));\n }\n \n if (!this.isDirty) {\n if (this.isAsync) {\n return Promise.resolve(this.cachedValue);\n }\n\n return this.cachedValue;\n }\n\n // If dirty, always start new computation (even if previous pending)\n return Reactive.recompute(this);\n } catch (error) {\n throw error;\n } finally {\n if (this.onAccess) {\n this.onAccess(this.cachedValue);\n }\n }\n }\n}\n\nexport const createComputed = (fn, config = {}) => Computed.create(fn, config);\n\nexport const destroyComputed = (target) => {\n if (isComputed(target)) {\n Reactive.destroy(target);\n }\n}\n\nexport const isComputed = (getter) => {\n const computed = Reactive.reactives.get(getter);\n if (!computed) {\n return false;\n }\n\n return computed instanceof Computed;\n}\n\nexport const isDirtyComputed = (getter) => {\n const computed = Reactive.reactives.get(getter);\n if (!computed) {\n return false;\n }\n\n return computed.isDirty;\n}\n", "import { Reactive } from './Reactive.js';\n\nexport class Subscriber {\n static create(getter, fn, config = {}) {\n const subscriber = new Subscriber(getter, fn, config);\n Reactive.reactives.set(subscriber.getter, subscriber);\n return () => Reactive.destroy(subscriber.getter);\n }\n\n constructor(getter, subscriber, config = {}) {\n this._id = Reactive.nextId();\n this.getter = getter;\n this.isDirty = false;\n this.subscriber = subscriber;\n this.debounce = config.debounce || 0;\n this.onAccess = config.onAccess || null;\n this.immediate = true;\n this._hasPendingDebounce = false;\n this._lastComputeTime = null;\n this._debounceTimer = null;\n this.dependants = new Set();\n this.dependantIds = new Set();\n this.unsubscribe = () => Reactive.computationManager.removeReactive(this);\n Reactive.begin(this);\n this.cachedValue = this.getter();\n this.subscriber(this.cachedValue); // Call subscriber with initial value\n Reactive.end(this);\n }\n\n compute() {\n try {\n this.cachedValue = this.getter();\n this.subscriber(this.cachedValue);\n this.isDirty = false;\n } catch (error) {\n throw error;\n }\n }\n}\n\nexport const createSubscriber = (getter, fn, config = {}) => Subscriber.create(getter, fn, config);\n\nexport const destroySubscriber = (getter) => {\n if (isSubscriber(getter)) {\n Reactive.destroy(getter);\n }\n}\n\nexport const isSubscriber = (getter) => {\n const subscriber = Reactive.reactives.get(getter);\n if (!subscriber) {\n return false;\n }\n\n return subscriber instanceof Subscriber;\n}", "// Surface.js\nimport { createComputed, destroyComputed } from './Computed.js';\nimport { addEffect } from './Reactive.js';\nimport { createSignal } from './Signal.js';\nimport { traverse } from './lib/traverse.js';\n\nconst EMPTY_CACHE = Symbol();\n\nexport class Surface {\n static surfaces = new WeakMap();\n static plugins = new Map();\n\n static registerPlugin(name, plugin) {\n if (Surface.plugins.has(name)) {\n throw new Error(`Plugin \"${name}\" already registered`);\n }\n Surface.plugins.set(name, plugin());\n }\n\n static resetPlugins() {\n Surface.plugins.clear();\n }\n\n static create(setupFn, options = {}) {\n const instance = new Surface(options);\n const useSurface = instance.setup(setupFn);\n Surface.surfaces.set(useSurface, instance);\n return useSurface;\n }\n\n static createPlugin(name, fn, options = {}) {\n const plugin = Surface.create(fn, options);\n Surface.registerPlugin(name, plugin);\n return plugin;\n }\n\n constructor(options = {}) {\n this.options = options;\n this.setupFn = null;\n this.subscribers = new Set();\n this.subscribersQueued = false;\n this.destroyCallback = null;\n\n // Values, computeds, actions, and extensions that are pending to be bound to the surface\n this.values = new Set();\n this.computeds = new Set();\n this.actions = new Set();\n this.extensions = new Set();\n\n this.snapshotCache = EMPTY_CACHE;\n this.surface = this.#createSurface();\n this.useSurface = () => this.surface;\n }\n\n setup(setupFn) {\n if (!setupFn) {\n return null;\n }\n\n this.setupFn = setupFn;\n this.reset();\n\n const pendingReactives = new Set();\n\n try {\n let result;\n \n if (typeof setupFn === 'function') {\n result = this.#setupFromFunction(setupFn, pendingReactives);\n } else if (typeof setupFn === 'object' && setupFn !== null) {\n result = this.#setupFromObject(setupFn, pendingReactives);\n } else {\n throw new Error('setupFn must be a function or object configuration');\n }\n \n this.#bindSurface(result);\n pendingReactives.forEach(reactive => addEffect(reactive, () => this.#queueSubscribers()));\n this.#queueSubscribers(); \n return this.useSurface;\n } catch (error) {\n console.error('Error in setup function', error);\n throw error;\n }\n }\n\n reset() {\n this.subscribers.clear();\n this.subscribersQueued = false;\n this.values.clear();\n this.computeds.clear();\n this.actions.clear();\n this.extensions.clear();\n this.snapshotCache = EMPTY_CACHE;\n this.surface = this.#createSurface();\n }\n\n createValue(initial = undefined, cb) {\n const signal = createSignal(initial);\n const value = Object.create(null);\n Object.defineProperty(value, 'value', {\n get: () => signal(),\n set: (newValue) => signal(newValue),\n enumerable: true,\n });\n this.values.add(value);\n cb?.(signal);\n return value;\n }\n\n createComputed(fn, cb) {\n const computed = createComputed(fn, { context: this.surface });\n const computedValue = Object.create(null);\n Object.defineProperty(computedValue, 'value', {\n get: () => computed(),\n enumerable: true,\n });\n this.computeds.add(computedValue);\n cb?.(computed);\n return computedValue;\n }\n\n createAction(fn) {\n const action = fn.bind(this.surface, this.surface)\n this.actions.add(action);\n return action;\n }\n\n extend(useSurface) {\n \n if (!useSurface) throw new Error('No source surface provided');\n \n if (!isSurface(useSurface)) {\n throw new Error('Cannot extend non-surface');\n }\n const surface = useSurface();\n this.extensions.add(surface);\n return surface;\n }\n\n #setupFromFunction(setupFn, pendingReactives) {\n return setupFn({\n value: (initial = undefined) => this.createValue(initial, (signal) => pendingReactives.add(signal)),\n computed: (fn = () => {}) => this.createComputed(fn, (reactor) => pendingReactives.add(reactor)),\n action: (fn = () => {}) => this.createAction(fn),\n extend: (useSurface) => this.extend(useSurface),\n destroy: () => this.#destroy(),\n ...Object.fromEntries(Surface.plugins.entries())\n }) || {};\n }\n\n #processStateValue(stateConfig, isDev, key) {\n // Support shorthand: state: { count: 0 } instead of { count: { default: 0 } }\n if (typeof stateConfig !== 'object' || stateConfig === null) {\n return typeof stateConfig === 'function' ? stateConfig() : stateConfig;\n }\n \n // If it's an object but doesn't have 'default', treat as shorthand\n if (!('default' in stateConfig)) {\n // Validate state config in dev mode\n if (isDev && 'dummy' in stateConfig) {\n console.warn(`State \"${key}\" has dummy value but no default value`);\n }\n return typeof stateConfig === 'function' ? stateConfig() : stateConfig;\n }\n \n // Full config with default/dummy\n let value = isDev && 'dummy' in stateConfig ? stateConfig.dummy : stateConfig.default;\n return typeof value === 'function' ? value() : value;\n }\n\n #setupFromObject(config, pendingReactives) {\n const result = {};\n const isDev = this.options.mode === 'development' || this.options.mode === 'dev';\n\n // 1. Process extend array first (so extended properties are available)\n if (config.extend && Array.isArray(config.extend)) {\n for (const useSurface of config.extend) {\n this.extend(useSurface);\n }\n }\n\n // 2. Process plugins (if specified) - handled in #bindSurface via Surface.plugins\n // Note: Plugins are automatically added to all surfaces, so we don't need to add them to result\n // If you want selective plugin inclusion, you'd need to modify #bindSurface\n\n // 3. Process state definitions\n if (config.state && typeof config.state === 'object') {\n for (const [key, stateConfig] of Object.entries(config.state)) {\n const initialValue = this.#processStateValue(stateConfig, isDev, key);\n result[key] = this.createValue(initialValue, (signal) => pendingReactives.add(signal));\n }\n }\n\n // 4. Process computed properties\n if (config.computed && typeof config.computed === 'object') {\n for (const [key, fn] of Object.entries(config.computed)) {\n if (typeof fn === 'function') {\n result[key] = this.createComputed(fn, (reactor) => pendingReactives.add(reactor));\n }\n }\n }\n\n // 5. Process actions\n if (config.actions && typeof config.actions === 'object') {\n for (const [key, fn] of Object.entries(config.actions)) {\n if (typeof fn === 'function') {\n result[key] = this.createAction(fn);\n }\n }\n }\n\n // 6. Handle lifecycle hooks\n if (config.onInit && typeof config.onInit === 'function') {\n // Execute after setup is complete\n Promise.resolve().then(() => {\n try {\n config.onInit(this.surface);\n } catch (error) {\n console.error('Error in onInit callback', error);\n }\n });\n }\n\n if (config.onDestroy && typeof config.onDestroy === 'function') {\n // Store for later execution\n this.destroyCallback = config.onDestroy;\n }\n\n return result;\n }\n\n #createAdapter () { \n return [() => this.#getSnapshot(), (subscriber) => this.#subscribe(subscriber)];\n }\n\n #getSnapshot() {\n if (this.snapshotCache !== EMPTY_CACHE) {\n return this.snapshotCache;\n }\n\n const clone = Object.create(Object.getPrototypeOf(this.surface));\n Object.defineProperties(clone, Object.getOwnPropertyDescriptors(this.surface));\n this.snapshotCache = Object.freeze(clone);\n \n return this.snapshotCache;\n };\n\n #subscribe(listener) {\n this.subscribers.add(listener);\n return () => this.subscribers.delete(listener);\n }\n\n #callSubscribers(snapshot) {\n for (const subscriber of this.subscribers) {\n subscriber(snapshot);\n }\n }\n\n #queueSubscribers() {\n if (this.subscribers.size === 0 || this.subscribersQueued) return;\n this.subscribersQueued = true;\n Promise.resolve().then(() => {\n this.subscribersQueued = false;\n this.snapshotCache = EMPTY_CACHE;\n this.#callSubscribers(this.#getSnapshot());\n });\n }\n\n #createSurface(surface = Object.create(null)) {\n Object.defineProperty(surface, '$get', {\n value: (path) => this.#get(path),\n writable: false,\n enumerable: false,\n configurable: false\n });\n \n Object.defineProperty(surface, '$set', {\n value: (path, newValue) => this.#set(path, newValue),\n writable: false,\n enumerable: false,\n configurable: false\n });\n \n Object.defineProperty(surface, '$dispatch', {\n value: (name) => this.#dispatch(name),\n writable: false,\n enumerable: false,\n configurable: false\n });\n \n Object.defineProperty(surface, '$inject', {\n value: (overrides) => Object.assign({}, this.surface, overrides),\n writable: false,\n enumerable: false,\n configurable: false\n });\n\n Object.defineProperty(surface, '$snapshot', {\n value: () => this.#getSnapshot(),\n writable: false,\n enumerable: false,\n configurable: false\n });\n\n Object.defineProperty(surface, '$subscribe', {\n value: (listener) => this.#subscribe(listener),\n writable: false,\n enumerable: false,\n configurable: false\n });\n \n Object.defineProperty(surface, '$adapter', {\n value: () => this.#createAdapter(),\n writable: false,\n enumerable: false,\n configurable: false\n });\n\n Object.defineProperty(surface, '$destroy', {\n value: () => this.#destroy(),\n writable: false,\n enumerable: false,\n configurable: false\n });\n return surface;\n }\n\n #destroy() {\n // Call onDestroy callback if defined\n if (this.destroyCallback && typeof this.destroyCallback === 'function') {\n try {\n this.destroyCallback(this.surface);\n } catch (error) {\n console.error('Error in onDestroy callback', error);\n }\n }\n \n const surfaceComputed = this.surfaceComputed;\n this.surfaceComputed = null;\n Surface.surfaces.delete(surfaceComputed);\n destroyComputed(surfaceComputed);\n }\n\n #get(path = []) {\n return traverse(this.surface, path);\n }\n\n #set(name, newValue) {\n const value = this.values?.get?.(name);\n value.value = newValue;\n return this.surface;\n }\n\n #dispatch(name, ...args) {\n const action = this.actions.has(name)\n ? this.actions.get(name)\n : this.surface[name];\n\n if (typeof action === 'function') {\n return action(...args);\n }\n return this.surfaceComputed();\n }\n\n #bindSurface(result = {}) {\n const oldKeys = Object.keys(this.surface);\n\n while (oldKeys.length > 0) {\n const key = oldKeys.shift();\n if (key in this.surface) {\n delete this.surface[key];\n }\n }\n\n for (const [key, plugin] of Surface.plugins) {\n Object.defineProperty(this.surface, key, {\n value: plugin\n });\n }\n\n for (const extension of this.extensions) {\n const descriptors = Object.getOwnPropertyDescriptors(extension);\n // Filter out the special $ methods if you don't want to inherit those\n const filteredDescriptors = Object.fromEntries(\n Object.entries(descriptors).filter(([key]) => !key.startsWith('$'))\n );\n Object.defineProperties(this.surface, filteredDescriptors);\n }\n\n const entries = Object.entries(result);\n \n for (const [key, value] of entries) {\n if (this.values.has(value)) {\n Object.defineProperty(this.surface, key, {\n get: () => value.value,\n set: (newValue) => value.value = newValue\n });\n\n continue;\n }\n\n if (this.computeds.has(value)) {\n Object.defineProperty(this.surface, key, {\n get: () => value.value\n });\n continue;\n }\n \n if (this.actions.has(value)) {\n Object.defineProperty(this.surface, key, { value });\n continue;\n }\n\n this.surface[key] = value;\n }\n\n return this.surface;\n }\n}\n\nexport const defineSurface = (...args) => Surface.create(...args);\nexport const refreshSurface = (surfaceComputed) => {\n if (isSurface(surfaceComputed)) {\n const surfaceInstance = Surface.surfaces.get(surfaceComputed);\n if (surfaceInstance) {\n surfaceInstance.setup();\n }\n }\n}\nexport const definePlugin = (...args) => Surface.createPlugin(...args);\nexport const isSurface = (surfaceComputed) => Surface.surfaces.has(surfaceComputed);\n\nexport const destroySurface = (surfaceComputed) => {\n if (isSurface(surfaceComputed)) {\n Surface.surfaces.delete(surfaceComputed);\n }\n}\n", "export const GLOBAL_TAG = '*';\nexport const STATE_CONTEXT = Symbol('STATE_CONTEXT');\nexport const MATCHER = Symbol('MATCHER');\nexport const CREATED = 'CREATED';\nexport const DELETED = 'DELETED';\nexport const UPDATED = 'UPDATED';\n\n// Marker type bitflags\nexport const MARKER_GLOBAL = 1; // 0b001\nexport const MARKER_SINGLE = 2; // 0b010\nexport const MARKER_MANY = 4; // 0b100\nexport const MARKER_EPHEMERAL = 8; // 0b1000\n\n// Comparison result constants\nexport const MATCH_EXACT = 0; // Markers are identical\nexport const MATCH_PARENT = 1; // controlMarker is child of comparedMarker (parent changed)\nexport const MATCH_CHILD = 2; // comparedMarker is child of controlMarker (child changed)\nexport const MATCH_NONE = -1; // No relationship", "import { GLOBAL_TAG } from './TOKENS.js';\n\n// Fast helpers\nfunction escapeStr(str) {\n // Order matters: escape ~ first, then .\n let out = \"\";\n for (let i = 0; i < str.length; i++) {\n const ch = str[i];\n if (ch === \"~\") out += \"~~\";\n else if (ch === \".\") out += \"~d\";\n else out += ch;\n }\n // Represent empty strings as ~e to avoid trailing-dot filenames\n return out.length === 0 ? \"~e\" : out;\n}\n\nfunction unescapeStr(str) {\n let out = \"\";\n for (let i = 0; i < str.length; i++) {\n const ch = str[i];\n if (ch === \"~\") {\n const next = str[++i];\n if (next === \"~\") out += \"~\";\n else if (next === \"d\") out += \".\";\n else if (next === \"e\") out += \"\"; // empty string marker\n else {\n // Unknown escape: treat as literal (robustness)\n out += \"~\" + (next ?? \"\");\n }\n } else {\n out += ch;\n }\n }\n return out;\n}\n\nexport function encodePath(segments) {\n // segments: array of strings or integers\n // Produces: filename/URL-safe string like \"sfoo.n0.sbaz\"\n const parts = new Array(segments.length);\n for (let i = 0; i < segments.length; i++) {\n const v = segments[i];\n if (typeof v === \"number\" && Number.isInteger(v)) {\n // 'n' tag\n parts[i] = \"n\" + String(v); // decimal; includes \"-\" if negative\n } else if (typeof v === \"string\") {\n // 's' tag\n parts[i] = \"s\" + escapeStr(v);\n } else {\n // If you need more types, add here (e.g., booleans 'b', floats 'f').\n throw new TypeError(`Unsupported segment type at index ${i}: ${v}`);\n }\n }\n // Use '.' as separator (safe in URLs and filenames; we avoid trailing '.')\n return parts.join(\".\");\n}\n\nexport function decodeAddress(address) {\n if (address === GLOBAL_TAG) return GLOBAL_TAG;\n if (address.length === 0) return [];\n const raw = address.split(\".\");\n const out = new Array(raw.length);\n for (let i = 0; i < raw.length; i++) {\n const token = raw[i];\n if (token.length === 0) {\n // Disallow empty tokens (would imply trailing or double dots)\n throw new Error(\"Invalid address: empty token\");\n }\n const tag = token[0];\n const body = token.slice(1);\n if (tag === \"n\") {\n // Fast parse (no regex)\n if (body.length === 0 || !/^[-]?\\d+$/.test(body)) {\n throw new Error(`Invalid numeric token: \"${token}\"`);\n }\n const num = Number(body);\n // Ensure it was an integer\n if (!Number.isInteger(num)) {\n throw new Error(`Non-integer numeric token: \"${token}\"`);\n }\n out[i] = num;\n } else if (tag === \"s\") {\n out[i] = unescapeStr(body);\n } else {\n throw new Error(`Unknown type tag \"${tag}\" in token \"${token}\"`);\n }\n }\n return out;\n}\n", "import { encodePath } from './pathEncoder.js';\nimport { GLOBAL_TAG } from './TOKENS.js';\nimport {\n MARKER_GLOBAL,\n MARKER_SINGLE,\n MARKER_MANY,\n MARKER_EPHEMERAL,\n MATCH_EXACT,\n MATCH_PARENT,\n MATCH_CHILD,\n MATCH_NONE \n} from './TOKENS.js';\n\n// Marker type bitflags\n\n// Helper functions to check marker type\nexport function isGlobalMarker(marker) {\n return (marker.type & MARKER_GLOBAL) === MARKER_GLOBAL;\n}\n\nexport function isPathMarker(marker) {\n return (marker.type & MARKER_SINGLE) === MARKER_SINGLE;\n}\n\nexport function isMarkers(marker) {\n return (marker.type & MARKER_MANY) === MARKER_MANY;\n}\n\nexport function isEphemeralMarker(marker) {\n return (marker.type & MARKER_EPHEMERAL) === MARKER_EPHEMERAL;\n}\n\nexport function isGlobalPath(path) {\n return !path || path.length === 0 || path === GLOBAL_TAG || path[0] === GLOBAL_TAG;\n}\n\nexport function normalizePaths(args = []) { \n const len = args.length;\n if (len === 0) return [0, [] ];\n if (len === 1 && args[0] === GLOBAL_TAG) return [0, [] ];\n \n if (Array.isArray(args[0])) {\n return len === 1 \n ? [1, [args[0]] ]\n : [len, args ];\n }\n \n return [1, [[...args]] ];\n}\n\nfunction pathHasEphemeral(path) {\n if (!Array.isArray(path)) {\n return false;\n }\n\n for (let i = 0; i < path.length; i++) {\n const segment = path[i];\n if (typeof segment === 'string' && segment.charCodeAt(0) === 46) { // '.'\n return true;\n }\n }\n\n return false;\n}\n\n// Marker factory\nexport function createMarker(paths = []) {\n if (isGlobalPath(paths)) {\n return {\n address: GLOBAL_TAG,\n isMarker: true,\n length: 0,\n path: [],\n children: null,\n type: MARKER_GLOBAL\n };\n }\n \n const [length, normalizedPaths] = normalizePaths(paths);\n const type = length === 1 ? MARKER_SINGLE : MARKER_MANY;\n const path = length === 1 ? normalizedPaths[0] : normalizedPaths;\n const children = length > 1 ? normalizedPaths.map(path => createMarker(path)) : null;\n const isEphemeral = type === MARKER_SINGLE\n ? pathHasEphemeral(path)\n : children.some(child => isEphemeralMarker(child));\n\n let markerType = type;\n if (isEphemeral) {\n markerType |= MARKER_EPHEMERAL;\n }\n\n return {\n address: type === MARKER_SINGLE ? encodePath(path) : null,\n isMarker: true,\n length,\n path,\n children,\n type: markerType\n };\n}\n\nexport function createChildMarker(parentMarker, childPaths) {\n if (childPaths.length === 0) {\n return parentMarker;\n }\n // Normalize the child paths\n const [childLength, normalizedChildPaths] = normalizePaths(childPaths);\n \n // Handle global marker - just return marker with child paths\n if (isGlobalMarker(parentMarker)) {\n return createMarker(normalizedChildPaths, parentMarker.state);\n }\n \n // Handle single path marker\n if (isPathMarker(parentMarker)) {\n if (childLength === 0) {\n // No child paths, return parent as-is\n return parentMarker;\n }\n \n if (childLength === 1) {\n // Single child path - append to parent path\n const newPath = [...parentMarker.path, ...normalizedChildPaths[0]];\n return createMarker(newPath, parentMarker.state);\n } else {\n // Multiple child paths - create many markers\n const newPaths = normalizedChildPaths.map(childPath => \n [...parentMarker.path, ...childPath]\n );\n return createMarker(newPaths, parentMarker.state);\n }\n }\n \n // Handle many markers - recursively create child markers for each\n if (isMarkers(parentMarker)) {\n const newMarkers = new Array(parentMarker.length);\n let i = 0;\n while (i < parentMarker.length) {\n newMarkers[i] = createChildMarker(parentMarker.children[i], childPaths);\n i++;\n }\n \n // Collect all paths from the new markers\n const allPaths = [];\n i = 0;\n while (i < newMarkers.length) {\n const marker = newMarkers[i];\n if (isPathMarker(marker)) {\n allPaths.push(marker.path);\n } else if (isMarkers(marker)) {\n let j = 0;\n while (j < marker.length) {\n allPaths.push(marker.children[j].path);\n j++;\n }\n }\n i++;\n }\n \n return createMarker(allPaths, parentMarker.state);\n }\n \n // Fallback - shouldn't reach here\n return parentMarker;\n}\n\nexport function dispatch(marker, { global, path, ephemeral, error }) {\n try {\n if (!marker.isMarker) return undefined;\n if (isGlobalMarker(marker)) return global ? global(marker) : undefined;\n if (isEphemeralMarker(marker)) return ephemeral ? ephemeral(marker) : path ? path(marker) : undefined;\n if (isPathMarker(marker)) return path ? path(marker) : undefined;\n if (isMarkers(marker)) {\n const results = new Array(marker.length);\n let i = 0;\n while (i < marker.length) {\n const nestedMarker = marker.children[i];\n results[i] = dispatch(nestedMarker, { global, path, ephemeral, error });\n i++;\n }\n return results;\n }\n \n return undefined;\n } catch (err) {\n return error ? error(err.message) : undefined;\n }\n}\n\nexport function compareMarkers(controlMarker, comparedMarker) {\n // Both are global markers or exact address match\n if (isGlobalMarker(controlMarker) && isGlobalMarker(comparedMarker)) {\n return MATCH_EXACT;\n }\n\n // If comparedMarker is global, it's always a parent\n if (isGlobalMarker(comparedMarker)) {\n return MATCH_PARENT;\n }\n \n // Need addresses to compare\n if (!controlMarker.address || !comparedMarker.address) {\n return MATCH_NONE;\n }\n \n // Exact match\n if (controlMarker.address === comparedMarker.address) {\n return MATCH_EXACT;\n }\n \n // controlMarker is more nested (child) - parent changed\n if (controlMarker.address.startsWith(comparedMarker.address + '.')) {\n return MATCH_PARENT;\n }\n \n // comparedMarker is more nested (child) - child changed\n if (comparedMarker.address.startsWith(controlMarker.address + '.')) {\n return MATCH_CHILD;\n }\n \n return MATCH_NONE;\n}\n\nexport const Marker = {\n compare: compareMarkers,\n create: createMarker,\n createChild: createChildMarker,\n dispatch: dispatch,\n isGlobal: isGlobalMarker,\n isSingle: isPathMarker,\n isMarkers: isMarkers,\n isEphemeral: isEphemeralMarker\n};", "export class Plugin {\n\n static name = null;\n static options = {};\n\n static configure(options) {\n options = {...this.options, ...options};\n return {\n install: (state) => this.install(state, options),\n name: this.name,\n options\n }\n }\n\n static install(state, options) {\n options = {...this.options, ...options};\n const pluginInstance = new this(state, options);\n\n Object.defineProperty(pluginInstance, 'state', {\n value: state,\n writable: false,\n configurable: false\n });\n \n Object.defineProperty(pluginInstance, 'options', {\n value: options,\n writable: false,\n configurable: false\n });\n\n \n return pluginInstance;\n }\n}\n\nexport default Plugin;", "export function nextIdleTick(callback) {\n if (typeof window !== 'undefined' && window.requestIdleCallback) {\n return window.requestIdleCallback(callback, { timeout: 100 });\n }\n\n // Fallback for browsers without requestIdleCallback (Safari/WebKit)\n if (typeof window !== 'undefined') {\n // Use requestAnimationFrame + setTimeout for better idle approximation\n if (window.requestAnimationFrame) {\n return window.requestAnimationFrame(() => {\n setTimeout(callback, 0);\n });\n }\n // Final fallback to setTimeout\n return setTimeout(callback, 0);\n }\n\n // Server-side or no window object - execute immediately\n if (typeof callback === 'function') {\n callback();\n }\n return null;\n}\n", "import { dispatch } from '../../state/src/lib/marker.js';\nimport { Plugin } from '../../state/src/Plugin.js';\nimport { Reactive, createComputed, createSubscriber } from '@jucie.io/reactive';\nimport { nextIdleTick } from '../../state/src/utils/nextIdleTick.js';\n\nclass Node {\n static create() {\n return new Node();\n }\n\n constructor() {\n this.reactives = new Set();\n this.reactiveIds = new Set();\n this.childReactives = new Set();\n this.childReactiveIds = new Set();\n this.children = new Map();\n this.hasChildReactives = false;\n }\n}\n\nexport class JucieState extends Plugin {\n static name = 'reactive';\n static roots = new WeakMap();\n static states = new Set();\n\n #batching = false;\n #markers = new Set();\n\n initialize(state) {\n JucieState.states.add(new WeakRef(state));\n JucieState.roots.set(state, Node.create());\n }\n\n actions(state) {\n return {\n createComputed: (fn, config = {}) => {\n return createComputed(fn, { ...config, context: state });\n },\n createSubscriber: (getter, callback, config = {}) => {\n return createSubscriber(() => getter(state), callback, config);\n }\n }\n }\n\n onBatchStart() {\n this.#batching = true;\n }\n\n onBatchEnd() {\n this.#batching = false;\n // Propagate all accumulated markers\n this.#markers.forEach(marker => {\n this.propagateChange(this.state, marker);\n });\n this.#markers.clear();\n }\n\n onStateChange(marker) {\n if (!this.#batching) {\n this.propagateChange(this.state, marker);\n return;\n }\n this.#markers.add(marker);\n }\n\n onStateAccess(marker) {\n dispatch(marker, {\n global: () => {\n this.addReactive(this.state, null);\n },\n path: ({ path }) => {\n this.addReactive(this.state, path);\n }\n });\n }\n\n propagateChange(stateInstance, marker) {\n dispatch(marker, {\n global: () => {\n this.walkMarkerPath(this.getRoot(stateInstance), null);\n },\n path: ({ path }) => {\n this.walkMarkerPath(this.getRoot(stateInstance), path);\n }\n });\n }\n\n walkMarkerPath(node, path, visitedReactives = new Set()) {\n this.processReactives(node.reactives, node.reactiveIds, visitedReactives);\n\n // Global update?\n if (!path || path === '*') {\n this.processReactives(node.childReactives, node.childReactiveIds, visitedReactives);\n return visitedReactives;\n }\n \n // Path update\n const lastIndex = path.length - 1;\n let i = 0;\n\n while (i <= lastIndex) {\n const segment = path[i];\n if (!node.children.has(segment)) break;\n \n node = node.children.get(segment);\n \n // Get reactives\n this.processReactives(node.reactives, node.reactiveIds, visitedReactives);\n\n // Last node? Get childReactives\n if (i === lastIndex) {\n this.processReactives(node.childReactives, node.childReactiveIds, visitedReactives);\n }\n \n i++;\n }\n\n return visitedReactives;\n }\n\n processReactives(reactiveSet, idSet, visitedReactives) {\n const deadRefs = [];\n const ids = new Set();\n reactiveSet.forEach(weakRef => {\n const reactive = weakRef.deref();\n if (reactive) {\n if (!visitedReactives.has(reactive)) {\n visitedReactives.add(reactive);\n Reactive.markAsDirty(reactive);\n }\n ids.add(reactive._id);\n } else {\n deadRefs.push(weakRef);\n }\n });\n deadRefs.forEach(ref => reactiveSet.delete(ref));\n if (idSet) {\n idSet.clear();\n ids.forEach(id => idSet.add(id));\n }\n }\n\n addWeakRefIfNotExists(weakRefSet, idSet, reactive) {\n if (!idSet.has(reactive._id)) {\n idSet.add(reactive._id);\n weakRefSet.add(new WeakRef(reactive));\n }\n }\n\n addReactive(stateInstance, path) {\n const reactive = Reactive.currentlyComputing;\n if (!reactive) return;\n \n const root = this.getRoot(stateInstance);\n let node = root;\n \n // Normalize path\n const normalizedPath = Array.isArray(path) ? path : [];\n \n // Add computed to root level (using WeakRef)\n if (normalizedPath.length === 0 || path === '*' || !path) {\n this.addWeakRefIfNotExists(node.reactives, node.reactiveIds, reactive);\n }\n\n this.addWeakRefIfNotExists(node.childReactives, node.childReactiveIds, reactive);\n \n // Add computed at each level as we move down\n const length = normalizedPath.length;\n for (let i = 0; i < length; i++) {\n const segment = normalizedPath[i];\n if (!node.children.has(segment)) {\n node.children.set(segment, Node.create());\n }\n node = node.children.get(segment);\n if (i !== length - 1) {\n this.addWeakRefIfNotExists(node.childReactives, node.childReactiveIds, reactive);\n } else {\n this.addWeakRefIfNotExists(node.reactives, node.reactiveIds, reactive);\n }\n }\n \n this.updateHasChildReactives(root, normalizedPath);\n }\n\n removeReactive(reactive) {\n JucieState.states.forEach(state => {\n const root = this.getRoot(state.deref());\n if (!root) return;\n this.removeReactiveFromNode(root, reactive);\n });\n \n nextIdleTick(() => {\n JucieState.states.forEach(state => {\n const root = this.getRoot(state.deref());\n if (!root) return;\n this.cleanupEmptyNodes(root);\n this.updateHasChildReactives(root);\n });\n });\n }\n\n removeReactiveFromNode(node, reactive) {\n // Need to find and remove the WeakRef that points to this reactive\n const removeFromSet = (set) => {\n const toDelete = [];\n set.forEach(weakRef => {\n const ref = weakRef.deref();\n if (ref === reactive || !ref) {\n toDelete.push(weakRef);\n }\n });\n toDelete.forEach(ref => set.delete(ref));\n };\n\n removeFromSet(node.reactives);\n removeFromSet(node.childReactives);\n\n if (node.children.size > 0) {\n for (const child of node.children.values()) {\n this.removeReactiveFromNode(child, reactive);\n }\n }\n }\n\n getRoot(stateInstance) {\n let root = JucieState.roots.get(stateInstance);\n if (!root) {\n root = Node.create();\n JucieState.roots.set(stateInstance, root);\n }\n return root;\n }\n\n cleanupEmptyNodes(node) {\n // Helper to count alive WeakRefs\n const countAlive = (set) => {\n let count = 0;\n const deadRefs = [];\n set.forEach(weakRef => {\n if (weakRef.deref()) {\n count++;\n } else {\n deadRefs.push(weakRef);\n }\n });\n deadRefs.forEach(ref => set.delete(ref));\n return count;\n };\n\n // Clean up empty child nodes\n for (const [segment, child] of node.children) {\n this.cleanupEmptyNodes(child);\n \n // If child has no live reactors and no children, remove it\n const hasReactives = countAlive(child.reactives) > 0;\n const hasChildReactives = countAlive(child.childReactives) > 0;\n \n if (!hasReactives && !hasChildReactives && child.children.size === 0) {\n node.children.delete(segment);\n }\n }\n }\n\n updateHasChildReactives(node, path = null) {\n // Helper to check if set has any alive WeakRefs\n const hasAlive = (set) => {\n for (const weakRef of set) {\n if (weakRef.deref()) return true;\n }\n return false;\n };\n\n // If no path provided, update entire trie\n if (!path) {\n const updateNode = (node) => {\n node.hasChildReactives = Array.from(node.children.values()).some(child => \n hasAlive(child.reactives) || \n hasAlive(child.childReactives) || \n child.hasChildReactives\n );\n \n for (const child of node.children.values()) {\n updateNode(child);\n }\n };\n return updateNode(node);\n }\n\n // If path provided, only update that path\n const visited = [];\n\n // Walk down and collect nodes\n for (const segment of path) {\n if (!node.children.has(segment)) return;\n visited.push(node);\n node = node.children.get(segment);\n }\n\n // Walk up and update flags only if needed\n for (let i = visited.length - 1; i >= 0; i--) {\n const parent = visited[i];\n const newValue = Array.from(parent.children.values()).some(child =>\n hasAlive(child.reactives) || \n hasAlive(child.childReactives) || \n child.hasChildReactives\n );\n\n if (parent.hasChildReactives !== newValue) {\n parent.hasChildReactives = newValue;\n } else {\n break; // Early exit if no change\n }\n }\n }\n}\n", "const traversalFunctions = [\n null, // index 0 (unused)\n null, // index 1 (single property access doesn't need optimization)\n (obj, path) => obj?.[path[0]]?.[path[1]],\n (obj, path) => obj?.[path[0]]?.[path[1]]?.[path[2]],\n (obj, path) => obj?.[path[0]]?.[path[1]]?.[path[2]]?.[path[3]],\n (obj, path) => obj?.[path[0]]?.[path[1]]?.[path[2]]?.[path[3]]?.[path[4]],\n (obj, path) => obj?.[path[0]]?.[path[1]]?.[path[2]]?.[path[3]]?.[path[4]]?.[path[5]],\n (obj, path) => obj?.[path[0]]?.[path[1]]?.[path[2]]?.[path[3]]?.[path[4]]?.[path[5]]?.[path[6]],\n (obj, path) => obj?.[path[0]]?.[path[1]]?.[path[2]]?.[path[3]]?.[path[4]]?.[path[5]]?.[path[6]]?.[path[7]]\n]\n\nfunction createTraversalFunction(length) {\n const accessors = Array.from({ length }, (_, i) => `?.[path[${i}]]`);\n const expr = \"obj\" + accessors.join(\"\");\n const fn = new Function(\"obj\", \"path\", `return ${expr}`);\n traversalFunctions[length] = fn;\n return fn;\n}\n\nexport function traverse(state, path) {\n const len = path.length;\n if (len === 0) return state;\n if (len === 1) return state[path[0]];\n \n // Use existing function if available\n if (len < traversalFunctions.length && traversalFunctions[len]) {\n return traversalFunctions[len](state, path);\n }\n \n // Create and cache new function if needed\n if (!traversalFunctions[len]) {\n return createTraversalFunction(len)(state, path);\n }\n \n return traversalFunctions[len](state, path);\n}\n\n", "import { traverse } from './traverse.js';\n\n// Helper function to create appropriate container type\nfunction createNodeType (a) {\n return typeof a === 'number' ? [] : {};\n}\n\n\nconst graftFunctions = [\n null, // index 0\n null, // index 1\n (state, path, value) => {\n const [a, b] = path;\n state[a] = a in state ? state[a] : createNodeType(b);\n state[a][b] = value;\n return value;\n },\n (state, path, value) => {\n const [a, b, c] = path;\n state[a] = a in state ? state[a] : createNodeType(b);\n state[a][b] = b in state[a] ? state[a][b] : createNodeType(c);\n state[a][b][c] = value;\n return value;\n },\n (state, path, value) => {\n const [a, b, c, d] = path;\n state[a] = a in state ? state[a] : createNodeType(b);\n state[a][b] = b in state[a] ? state[a][b] : createNodeType(c);\n state[a][b][c] = c in state[a][b] ? state[a][b][c] : createNodeType(d);\n state[a][b][c][d] = value;\n return value;\n },\n (state, path, value) => {\n const [a, b, c, d, e] = path;\n state[a] = a in state ? state[a] : createNodeType(b);\n state[a][b] = b in state[a] ? state[a][b] : createNodeType(c);\n state[a][b][c] = c in state[a][b] ? state[a][b][c] : createNodeType(d);\n state[a][b][c][d] = d in state[a][b][c] ? state[a][b][c][d] : createNodeType(e);\n state[a][b][c][d][e] = value;\n return value;\n },\n (state, path, value) => {\n const [a, b, c, d, e, f] = path;\n state[a] = a in state ? state[a] : createNodeType(b);\n state[a][b] = b in state[a] ? state[a][b] : createNodeType(c);\n state[a][b][c] = c in state[a][b] ? state[a][b][c] : createNodeType(d);\n state[a][b][c][d] = d in state[a][b][c] ? state[a][b][c][d] : createNodeType(e);\n state[a][b][c][d][e] = e in state[a][b][c][d] ? state[a][b][c][d][e] : createNodeType(f);\n state[a][b][c][d][e][f] = value;\n return value;\n },\n (state, path, value) => {\n const [a, b, c, d, e, f, g] = path;\n state[a] = a in state ? state[a] : createNodeType(b);\n state[a][b] = b in state[a] ? state[a][b] : createNodeType(c);\n state[a][b][c] = c in state[a][b] ? state[a][b][c] : createNodeType(d);\n state[a][b][c][d] = d in state[a][b][c] ? state[a][b][c][d] : createNodeType(e);\n state[a][b][c][d][e] = e in state[a][b][c][d] ? state[a][b][c][d][e] : createNodeType(f);\n state[a][b][c][d][e][f] = f in state[a][b][c][d][e] ? state[a][b][c][d][e][f] : createNodeType(g);\n state[a][b][c][d][e][f][g] = value;\n return value;\n },\n (state, path, value) => {\n const [a, b, c, d, e, f, g, h] = path;\n state[a] = a in state ? state[a] : createNodeType(b);\n state[a][b] = b in state[a] ? state[a][b] : createNodeType(c);\n state[a][b][c] = c in state[a][b] ? state[a][b][c] : createNodeType(d);\n state[a][b][c][d] = d in state[a][b][c] ? state[a][b][c][d] : createNodeType(e);\n state[a][b][c][d][e] = e in state[a][b][c][d] ? state[a][b][c][d][e] : createNodeType(f);\n state[a][b][c][d][e][f] = f in state[a][b][c][d][e] ? state[a][b][c][d][e][f] : createNodeType(g);\n state[a][b][c][d][e][f][g] = g in state[a][b][c][d][e][f] ? state[a][b][c][d][e][f][g] : createNodeType(h);\n state[a][b][c][d][e][f][g][h] = value;\n return value;\n }\n];\n\nfunction createGraftFunction(depth) {\n // Instead of alphabet, use numbered variables\n const names = Array.from({ length: depth }, (_, i) => `v${i}`);\n const args = names.join(', ');\n let body = `const [${args}] = path;\\n`;\n\n let pathSoFar = 'state';\n for (let i = 0; i < depth - 1; i++) {\n const current = names[i];\n const next = names[i + 1];\n body += `${pathSoFar}[${current}] = (${pathSoFar}[${current}] !== undefined && typeof ${pathSoFar}[${current}] === 'object') ? ${pathSoFar}[${current}] : createNodeType(${next});\\n`;\n pathSoFar += `[${current}]`;\n }\n\n body += `${pathSoFar}[${names[depth - 1]}] = value;\\nreturn state;`;\n\n const fn = new Function('state', 'path', 'value', 'createNodeType', body);\n graftFunctions[depth] = (state, path, value) => fn(state, path, value, createNodeType);\n return graftFunctions[depth];\n}\n\nexport function graft(state, path, value) {\n const len = path.length;\n\n if (len === 0) {\n return Object.assign(state, value);\n }\n\n if (len === 1) {\n return state[path[0]] = value;\n }\n \n // Use or create cached function\n if (!graftFunctions[len]) {\n return createGraftFunction(len)(state, path, value);\n }\n \n return graftFunctions[len](state, path, value);\n}\n\nexport function detach(state, path) {\n const len = path.length;\n \n if (len === 0) {\n return undefined;\n }\n\n if (len === 1) {\n const value = state[path[0]];\n if (Array.isArray(state)) {\n state.splice(path[0], 1);\n } else {\n delete state[path[0]];\n }\n return value;\n }\n\n const parentPath = path.slice(0, -1);\n const last = path[len - 1];\n const parent = traverse(state, parentPath);\n \n if (!parent) return undefined;\n \n const value = parent[last];\n if (Array.isArray(parent)) {\n parent.splice(last, 1);\n } else {\n delete parent[last];\n }\n return value;\n}\n\n// tree/mutate.js\nexport function replace(oldState, newState) {\n // Get all existing keys\n const oldKeys = Object.keys(oldState);\n let i = 0;\n \n // Clear existing properties\n while (i < oldKeys.length) {\n delete oldState[oldKeys[i]];\n i++;\n }\n\n // Get all new keys\n const newKeys = Object.keys(newState);\n i = 0;\n\n // Deep merge new properties\n while (i < newKeys.length) {\n const key = newKeys[i];\n const value = newState[key];\n \n if (value && typeof value === 'object' && !Array.isArray(value)) {\n oldState[key] = oldState[key] || {};\n replace(oldState[key], value);\n } else {\n oldState[key] = value;\n }\n \n i++;\n }\n\n return oldState;\n}\n\nexport function clear(state) {\n const keys = Object.keys(state);\n for (const key of keys) {\n delete state[key];\n }\n return state;\n}\n\nexport function fuse(oldState, newState) {\n return Object.assign(oldState, newState);\n}", "export function isPrimitive(value) {\n // Fast type check for primitives\n const type = typeof value;\n return value === null || \n value === undefined || \n type === 'string' || \n type === 'number' || \n type === 'boolean' || \n type === 'bigint' || \n type === 'symbol' || \n type === 'function';\n}", "export const clone = (value) => {\n if (structuredClone) {\n return structuredClone(value);\n } else {\n return JSON.parse(JSON.stringify(value));\n }\n}\n", "import { isGlobalPath, dispatch } from './marker.js';\nimport { traverse } from './tree/traverse.js';\nimport { graft, detach, replace } from './tree/mutate.js';\nimport { isPrimitive } from '../utils/isPrimitive.js';\nimport { clone } from '../utils/clone.js';\n\nfunction spread(value) {\n if (Array.isArray(value)) {\n return [...value];\n }\n if (typeof value === 'object' && value !== null) {\n return {...value};\n }\n return value;\n}\n\nexport function get(state, marker, cb) {\n let shouldCallCallback = false;\n try {\n return dispatch(marker, {\n global: () => {\n shouldCallCallback = true;\n return state;\n },\n path: ({path}) => {\n shouldCallCallback = true;\n return traverse(state, path);\n }\n });\n } catch (error) {\n console.error(error);\n return undefined;\n } finally {\n if (shouldCallCallback && cb) {\n cb(marker);\n }\n }\n}\n\nexport function set(state, marker, value, method, cb) {\n let from;\n let shouldCallCallback = false;\n \n try {\n return dispatch(marker, {\n global: () => {\n from = {...state};\n state = replace(state, value);\n shouldCallCallback = true;\n return value;\n },\n path: ({path}) => {\n from = spread(traverse(state, path));\n graft(state, path, value);\n shouldCallCallback = true;\n return value;\n }\n });\n } catch (error) {\n console.error(error);\n return undefined;\n } finally {\n if (shouldCallCallback && cb) {\n cb(marker, method, value, from);\n }\n }\n}\n\nexport function remove(state, marker, method, cb) {\n let from;\n let shouldCallCallback = false;\n try {\n return dispatch(marker, {\n global: () => {\n from = state;\n state = replace(state, {});\n shouldCallCallback = true;\n return from;\n },\n path: ({path}) => { \n from = detach(state, path);\n shouldCallCallback = true;\n return from;\n }\n });\n } catch (error) {\n console.error(error);\n return undefined;\n } finally {\n if (cb) {\n cb(marker, method, undefined, from);\n }\n }\n}\n\nexport function update(state, marker, fn, method, cb) {\n let from, to;\n let shouldCallCallback = false;\n try {\n return dispatch(marker, {\n global: () => {\n from = state;\n to = fn(state);\n state = replace(state, to);\n shouldCallCallback = true;\n return to;\n },\n path: ({ path }) => {\n from = isGlobalPath(path) ? state : traverse(state, path);\n const clonePrev = isPrimitive(from) ? from : clone(from);\n to = fn(clonePrev);\n graft(state, path, to);\n shouldCallCallback = true;\n return to;\n }\n });\n } catch (error) {\n console.error(error);\n return undefined;\n } finally {\n if (shouldCallCallback && cb) {\n cb(marker, method, to, from);\n }\n }\n}", "export function isBrowser() {\n return typeof window !== \"undefined\" && typeof window.crypto !== \"undefined\" && !!window.crypto.subtle;\n}\n\nexport function getSubtle() {\n if (typeof crypto !== \"undefined\" && crypto.subtle) return crypto.subtle;\n // Node.js\n const { webcrypto } = require(\"node:crypto\");\n return webcrypto.subtle;\n}\n\n// base64url encode/decode for both envs\nexport function base64urlEncode(bytes) {\n if (typeof Buffer !== \"undefined\" && Buffer.from) {\n // Node\n return Buffer.from(bytes).toString(\"base64\")\n .replace(/=/g, \"\")\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\");\n } else {\n // Browser\n // Convert bytes -> binary string -> base64 -> base64url\n let bin = \"\";\n for (let i = 0; i < bytes.length; i++) bin += String.fromCharCode(bytes[i]);\n const b64 = btoa(bin);\n return b64.replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n }\n}\n\nexport function base64urlDecode(str) {\n // restore padding\n const pad = str.length % 4 === 2 ? \"==\"\n : str.length % 4 === 3 ? \"=\"\n : str.length % 4 === 0 ? \"\"\n : \"=\".repeat(4 - (str.length % 4));\n const b64 = str.replace(/-/g, \"+\").replace(/_/g, \"/\") + pad;\n\n if (typeof Buffer !== \"undefined\" && Buffer.from) {\n const buf = Buffer.from(b64, \"base64\");\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n } else {\n // Browser\n const bin = atob(b64);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n return out;\n }\n}\n\n// Canonical JSON (stable ordering) to avoid hash drift due to key order\nexport function stableStringify(value) {\n if (value === null || typeof value !== \"object\") {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n const items = value.map(v => stableStringify(v)).join(\",\");\n return `[${items}]`;\n }\n const keys = Object.keys(value).sort();\n const props = keys.map(k => `${JSON.stringify(k)}:${stableStringify(value[k])}`).join(\",\");\n return `{${props}}`;\n}\n\n// Optional replacer to omit ephemeral keys\nexport function defaultReplacer(key, value) {\n // drop keys starting with '.' or exactly 'ephemeral'\n if (key && key[0] === \".\") return undefined;\n return value;\n}\n\nexport function applyReplacerDeep(input, replacer = defaultReplacer, parentKey = \"\") {\n if (input === null || typeof input !== \"object\") return input;\n\n if (Array.isArray(input)) {\n return input.map(v => applyReplacerDeep(v, replacer));\n }\n\n const out = {};\n for (const k of Object.keys(input)) {\n const v = replacer(k, input[k]);\n if (typeof v !== \"undefined\") {\n out[k] = applyReplacerDeep(v, replacer, k);\n }\n }\n return out;\n}\n\n// Convert path IDs with null chars to arrays for JSON serialization\nexport function pathIdsToArrays(input) {\n if (input === null || typeof input !== \"object\") return input;\n\n if (Array.isArray(input)) {\n return input.map(v => {\n // Check if array element is a string with null character (path ID)\n if (typeof v === 'string' && v.includes('\\0')) {\n const pathArray = v.split('\\0').map(segment => {\n const [type, value] = segment.split(':');\n return type === 'n' ? parseInt(value) : value;\n });\n return `__pathArray:${JSON.stringify(pathArray)}`;\n }\n return pathIdsToArrays(v);\n });\n }\n\n const out = {};\n for (const k of Object.keys(input)) {\n const v = input[k];\n // Check if key contains null character (path ID)\n if (typeof k === 'string' && k.includes('\\0')) {\n // Convert path ID to array format\n const pathArray = k.split('\\0').map(segment => {\n const [type, value] = segment.split(':');\n return type === 'n' ? parseInt(value) : value;\n });\n out[`__pathArray:${JSON.stringify(pathArray)}`] = pathIdsToArrays(v);\n } else {\n out[k] = pathIdsToArrays(v);\n }\n }\n return out;\n}\n\n// Convert arrays back to path IDs with null chars after JSON parsing\nexport function arraysToPathIds(input) {\n if (input === null || typeof input !== \"object\") return input;\n\n if (Array.isArray(input)) {\n return input.map(v => {\n // Check if array element is a path array\n if (typeof v === 'string' && v.startsWith('__pathArray:')) {\n const pathArray = JSON.parse(v.substring(12)); // Remove '__pathArray:' prefix\n // Convert array back to path ID with null chars\n const pathId = pathArray.map(segment => {\n const type = typeof segment === 'number' ? 'n' : 's';\n return `${type}:${segment}`;\n }).join('\\0');\n return pathId;\n }\n return arraysToPathIds(v);\n });\n }\n\n const out = {};\n for (const k of Object.keys(input)) {\n const v = input[k];\n // Check if key is a path array\n if (typeof k === 'string' && k.startsWith('__pathArray:')) {\n const pathArray = JSON.parse(k.substring(12)); // Remove '__pathArray:' prefix\n // Convert array back to path ID with null chars\n const pathId = pathArray.map(segment => {\n const type = typeof segment === 'number' ? 'n' : 's';\n return `${type}:${segment}`;\n }).join('\\0');\n out[pathId] = arraysToPathIds(v);\n } else {\n out[k] = arraysToPathIds(v);\n }\n }\n return out;\n}\n\nexport async function sha256(bytes) {\n const subtle = getSubtle();\n const digest = await subtle.digest(\"SHA-256\", bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength));\n return new Uint8Array(digest);\n}\n\nexport function constantTimeEqual(a, b) {\n if (a.length !== b.length) return false;\n let acc = 0;\n for (let i = 0; i < a.length; i++) acc |= (a[i] ^ b[i]);\n return acc === 0;\n}", "import { encode, decode } from 'cbor-x';\n\n// Magic header for binary capsules\nexport const MAGIC = new Uint8Array([0x4A, 0x53, 0x43, 0x32]); // \"JSC2\" (Object Capsule v2)\nexport const VERSION = 2;\n\n// Base64url encoding/decoding utilities\nexport function base64urlEncode(buffer) {\n // Process in chunks to avoid call stack overflow for large buffers\n const chunkSize = 8192; // Process 8KB at a time\n let binaryString = '';\n \n for (let i = 0; i < buffer.length; i += chunkSize) {\n const chunk = buffer.slice(i, i + chunkSize);\n binaryString += String.fromCharCode(...chunk);\n }\n \n return btoa(binaryString)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n}\n\nexport function base64urlDecode(str) {\n const base64 = str\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n \n // Add padding if needed\n const padded = base64 + '='.repeat((4 - base64.length % 4) % 4);\n const binaryString = atob(padded);\n \n // Convert to Uint8Array efficiently for large strings\n const result = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n result[i] = binaryString.charCodeAt(i);\n }\n return result;\n}\n\n// Simple checksum calculation\nexport function calculateChecksum(buffer) {\n let checksum = 0;\n for (let i = 0; i < buffer.length; i++) {\n checksum = ((checksum << 5) - checksum + buffer[i]) >>> 0; // Ensure positive 32-bit\n }\n return checksum;\n}\n\n// Binary encoding utilities for capsule header\nexport function writeUint32(value, buffer, offset = 0) {\n const view = new DataView(buffer.buffer, buffer.byteOffset + offset, 4);\n view.setUint32(0, value, true); // little-endian\n return offset + 4;\n}\n\nexport function readUint32(buffer, offset = 0) {\n const view = new DataView(buffer.buffer, buffer.byteOffset + offset, 4);\n return view.getUint32(0, true); // little-endian\n}\n\nexport function writeUint16(value, buffer, offset = 0) {\n const view = new DataView(buffer.buffer, buffer.byteOffset + offset, 2);\n view.setUint16(0, value, true); // little-endian\n return offset + 2;\n}\n\nexport function readUint16(buffer, offset = 0) {\n const view = new DataView(buffer.buffer, buffer.byteOffset + offset, 2);\n return view.getUint16(0, true); // little-endian\n}\n\nexport function writeUint8(value, buffer, offset = 0) {\n buffer[offset] = value;\n return offset + 1;\n}\n\nexport function readUint8(buffer, offset = 0) {\n return buffer[offset];\n}\n\n// Object encoding using cbor-x\nexport function encodeObject(obj) {\n return encode(obj);\n}\n\nexport function decodeObject(buffer) {\n const obj = decode(buffer);\n return [obj, buffer.length];\n}", "import { defaultReplacer, applyReplacerDeep } from './buffer.js';\nimport { \n MAGIC, VERSION, \n writeUint32, writeUint16, writeUint8,\n encodeObject,\n calculateChecksum, base64urlEncode\n} from './binary.js';\n\n// ---------- Binary Capsule Format ----------\n// [ 0..3 ] Magic \"JSC2\" (Jucie State Capsule v2)\n// [ 4..5 ] u16 version (big-endian) = 2\n// [ 6 ] u8 flags (reserved for future use)\n// [ 7..10 ] u32 checksum (simple checksum)\n// [11..14 ] u32 payloadLength (big-endian)\n// [15.. ] payload bytes (binary encoded data)\n\n// ---------- Public API ----------\n\n/**\n * Export any data object as a resilient binary capsule string (base64url).\n * Reciprocal with importState.\n * @param {Object} data - The data object to export\n * @param {Object} options - Export options\n */\nexport async function pack(data, { replacer = defaultReplacer } = {}) {\n // 1) Clean ephemeral/transient fields\n const clean = applyReplacerDeep(data, replacer);\n\n // 2) Encode data to binary\n const dataBuffer = encodeObject(clean);\n\n // 3) Create payload: [dataLength:4][data:varies]\n const payloadLength = 4 + dataBuffer.length;\n const payload = new Uint8Array(payloadLength);\n \n let offset = 0;\n offset = writeUint32(dataBuffer.length, payload, offset);\n payload.set(dataBuffer, offset);\n\n // 4) Calculate checksum\n const checksum = calculateChecksum(payload);\n\n // 5) Build capsule\n const headerLen = 4 + 2 + 1 + 4 + 4; // 15 bytes\n const capsule = new Uint8Array(headerLen + payload.length);\n\n // Magic\n capsule.set(MAGIC, 0);\n\n // Version u16 LE\n writeUint16(VERSION, capsule, 4);\n\n // Flags u8\n writeUint8(0, capsule, 6);\n\n // Checksum u32 LE\n writeUint32(checksum, capsule, 7);\n\n // Payload length u32 LE\n writeUint32(payload.length, capsule, 11);\n\n // Payload\n capsule.set(payload, 15);\n\n // 6) Base64url encode (single portable string)\n return base64urlEncode(capsule);\n}", "import { \n MAGIC, VERSION, \n decodeObject,\n calculateChecksum, base64urlDecode,\n readUint16, readUint8, readUint32\n} from './binary.js';\n\n// ---------- Binary Capsule Format ----------\n// [ 0..3 ] Magic \"JSC2\" (Jucie State Capsule v2)\n// [ 4..5 ] u16 version (big-endian) = 2\n// [ 6 ] u8 flags (reserved for future use)\n// [ 7..10 ] u32 checksum (simple checksum)\n// [11..14 ] u32 payloadLength (big-endian)\n// [15.. ] payload bytes (binary encoded data)\n\n// ---------- Public API ----------\n\n/**\n * Import a binary capsule string created by exportState.\n * Returns decoded data object with metadata.\n * @param {String} capsuleString - Base64url encoded capsule\n * @param {Function} [cb] - Optional callback(data)\n */\nexport async function unpack(capsuleString, cb) {\n // 1) Decode\n const capsule = base64urlDecode(capsuleString);\n\n // 2) Sanity checks\n if (capsule.length < 15) {\n throw new Error(\"Invalid capsule: too short\");\n }\n\n // Magic\n for (let i = 0; i < 4; i++) {\n if (capsule[i] !== MAGIC[i]) throw new Error(\"Invalid capsule: bad magic\");\n }\n\n // Version\n const version = readUint16(capsule, 4);\n if (version !== VERSION) {\n throw new Error(`Unsupported capsule version: ${version}`);\n }\n\n // Flags (reserved)\n const flags = readUint8(capsule, 6);\n\n // Checksum\n const storedChecksum = readUint32(capsule, 7);\n\n // Payload length\n const payloadLength = readUint32(capsule, 11);\n if (payloadLength < 0) throw new Error(\"Invalid capsule: negative payload length\");\n if (capsule.length !== 15 + payloadLength) throw new Error(\"Invalid capsule: length mismatch\");\n\n const payload = capsule.slice(15);\n\n // 3) Verify checksum\n const actualChecksum = calculateChecksum(payload);\n if (storedChecksum !== actualChecksum) {\n throw new Error(\"Integrity check failed: checksum mismatch\");\n }\n\n // 4) Decode payload\n let offset = 0;\n \n // Decode data\n const dataLength = readUint32(payload, offset);\n offset += 4;\n \n if (offset + dataLength > payload.length) {\n throw new Error(`Data length ${dataLength} exceeds payload bounds at offset ${offset}`);\n }\n \n const [data] = decodeObject(payload.slice(offset, offset + dataLength));\n\n // 5) Call callback if provided\n if (cb) cb(data);\n\n return {\n data, // Add 'data' key for generic usage\n meta: {\n version,\n flags,\n bytes: capsule.length,\n checksum: actualChecksum.toString(16),\n },\n };\n}", "// Internal matcher logic\nfunction match(value, matcher, testValue) {\n switch (matcher) {\n case 'is':\n case '===':\n case '==': return value === testValue;\n case 'not':\n case '!==':\n case '!=': return value !== testValue;\n case 'includes': return Array.isArray(value) && value.includes(testValue);\n case 'has': return typeof value === 'object' && value !== null && Object.values(value).includes(testValue);\n case 'in': return typeof value === 'object' && value !== null && testValue in value;\n case 'gt':\n case '>': return value > testValue;\n case 'lt':\n case '<': return value < testValue;\n case 'gte':\n case '>=': return value >= testValue;\n case 'lte':\n case '<=': return value <= testValue;\n default: throw new Error(`Unknown matcher: ${matcher}`);\n }\n}\n\nexport function seek(obj, targetKey, matcher, testValue, currentPath = [], findAll = false) {\n const results = [];\n\n if (obj === null || typeof obj !== 'object') return results;\n\n for (const [key, value] of Object.entries(obj)) {\n // \u2705 Check the key directly\n if (key === targetKey && match(value, matcher, testValue)) {\n results.push([...currentPath, key]);\n if (!findAll) return results;\n }\n\n // \u2705 Recurse if object/array\n if (typeof value === 'object' && value !== null) {\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n if (item && typeof item === 'object') {\n const nested = seek(item, targetKey, matcher, testValue, [...currentPath, key, i], findAll);\n results.push(...nested);\n if (!findAll && results.length > 0) return results;\n }\n }\n } else {\n const nested = seek(value, targetKey, matcher, testValue, [...currentPath, key], findAll);\n results.push(...nested);\n if (!findAll && results.length > 0) return results;\n }\n }\n }\n\n return results;\n}\n\n// Helper functions for common search patterns\nexport function findFirstNode(obj, key, matcher = 'is', value) {\n return seek(obj, key, matcher, value, [], false)?.[0];\n}\n\nexport function findAllNodes(obj, key, matcher = 'is', value) {\n return seek(obj, key, matcher, value, [], true);\n}", "import { GLOBAL_TAG, CREATED, DELETED, UPDATED } from './TOKENS.js';\nimport { dispatch } from './marker.js';\n\nexport const OPERATION_INVERSES = {\n [CREATED]: DELETED,\n [DELETED]: CREATED,\n [UPDATED]: UPDATED,\n}\n\n/**\n * Determines the operation type based on from/to values\n * \n * @private\n * @param {*} from - Previous value\n * @param {*} to - New value\n * @returns {'created'|'deleted'|'updated'} Operation type\n */\nfunction determineOperation(to, from) {\n if (from === undefined) return CREATED;\n if (to === undefined) return DELETED;\n return UPDATED;\n}\n\n/**\n * Creates a change object with the given parameters\n * \n * @param {string} method - Method that triggered the change\n * @param {*} from - Previous value\n * @param {*} to - New value\n * @returns {Object} Change object\n * @example\n * createChange('set', undefined, 'new value') \n * // => { method: 'set', operation: 'created', from: undefined, to: 'new value' }\n */\nexport function createChange(marker, method, to, from) {\n return dispatch(marker, {\n global: () => ({\n path: GLOBAL_TAG,\n method,\n operation: determineOperation(to, from),\n from,\n to\n }),\n path: (marker) => ({\n path: marker.path,\n method,\n operation: determineOperation(to, from),\n from,\n to\n }),\n });\n}\n\n/**\n * Inverts a change object for undo operations\n * \n * @param {Object} change - Change object to invert\n * @param {string} change.method - Original method\n * @param {string} change.operation - Original operation\n * @param {*} change.from - Original from value\n * @param {*} change.to - Original to value\n * @returns {Object} Inverted change object\n * @example\n * invertChange({ method: 'set', operation: 'created', from: undefined, to: 'value' })\n * // => { method: 'set', operation: 'deleted', from: 'value', to: undefined }\n */\nexport function invertChange(change) {\n const {address, path, method, from, to, operation } = change;\n return {\n address,\n path,\n method,\n to: from,\n from: to,\n operation: invertOperation(operation),\n }\n}\n\nexport function invertOperation(operation) {\n return OPERATION_INVERSES[operation];\n}\n\n/**\n * Checks if a change needs to be inverted based on the method\n * \n * @param {string} method - Method to check\n * @returns {boolean} True if the change should be inverted\n * @example\n * shouldInvertChange('undo') // => true\n * shouldInvertChange('set') // => false\n */\nexport function shouldInvertChange(method) {\n return ['undo', 'redo', 'stepBackward', 'stepForward'].includes(method);\n}", "import { get, set, remove, update } from './lib/gsru.js';\nimport { createMarker, createChildMarker, dispatch } from './lib/marker.js';\nimport { pack } from './admin/pack.js';\nimport { unpack } from './admin/unpack.js';\nimport { clear } from './lib/tree/mutate.js';\nimport { findFirstNode, findAllNodes } from './lib/tree/seek.js';\nimport { CREATED, DELETED, UPDATED } from './lib/TOKENS.js';\nimport { createChange } from './lib/change.js';\n\nexport class State {\n #state;\n #marker;\n #batchDepth = 0;\n #changeHandler;\n #accessHandler;\n #plugins = new Map();\n\n static create (state = {}) {\n const instance = new State(state);\n\n return instance;\n }\n\n constructor(state, marker = null, changeHandler = null, accessHandler = null) {\n this.#state = state;\n this.#changeHandler = changeHandler || this.#createChangeHandler();\n this.#accessHandler = accessHandler || this.#createAccessHandler();\n this.#marker = marker || createMarker();\n this.#batchDepth = 0;\n }\n\n install(...plugins) {\n const initializeFunctions = new Map();\n\n for (const plugin of plugins) {\n if (this.#plugins.has(plugin.name)) {\n console.warn(`Plugin \"${plugin.name}\" already installed`);\n continue;\n }\n\n if (!plugin.install) {\n console.warn(`Plugin \"${plugin.name}\" does not have an install function`);\n continue;\n }\n\n const pluginInstance = plugin.install(this);\n this.#plugins.set(plugin.name, pluginInstance);\n\n if (pluginInstance.initialize) {\n initializeFunctions.set(plugin.name, () => pluginInstance.initialize(this, pluginInstance.options));\n }\n\n if (pluginInstance.actions) {\n const actions = pluginInstance.actions(this, pluginInstance.options);\n Object.defineProperty(this, plugin.name, {\n value: actions,\n writable: false,\n enumerable: true,\n configurable: false\n });\n }\n }\n\n initializeFunctions.forEach(initialize => initialize());\n return this;\n }\n\n get batching() {\n return this.#batchDepth > 0;\n }\n\n // Core State Accessors\n get(...args) {\n return get(this.#state, createChildMarker(this.#marker, args), this.#accessHandler);\n }\n\n has(...args) {\n const marker = createChildMarker(this.#marker, args);\n return dispatch(marker, {\n global: () => undefined,\n path: (marker) => get(this.#state, marker, this.#accessHandler) !== undefined,\n });\n }\n\n keys(...args) {\n const marker = createChildMarker(this.#marker, args);\n return dispatch(marker, {\n global: () => Object.keys(this.#state),\n path: (marker) => Object.keys(get(this.#state, marker, this.#accessHandler) || {}),\n });\n }\n\n typeof(...args) {\n const marker = createChildMarker(this.#marker, args);\n const value = dispatch(marker, {\n global: () => undefined,\n path: ({ path }) => typeof get(this.#state, path, this.#accessHandler),\n });\n return value;\n }\n\n // Queries\n findWhere(key, matcher = 'is', value) {\n const state = get(this.#state, this.#marker, this.#accessHandler);\n return findFirstNode(state, key, matcher, value);\n }\n\n findAllWhere(key, matcher = 'is', value) {\n const state = get(this.#state, this.#marker, this.#accessHandler);\n return findAllNodes(state, key, matcher, value);\n }\n\n // Mutations\n set(...args) {\n const value = args.pop(); \n const marker = createChildMarker(this.#marker, args);\n // No sync tombstone check - let async processing handle conflicts\n return set(this.#state, marker, value, 'set', this.#changeHandler);\n }\n\n update(...args) {\n const fn = args.pop();\n const marker = createChildMarker(this.#marker, args);\n \n // No sync tombstone check - let async processing handle conflicts \n return update(this.#state, marker, fn, 'update', this.#changeHandler);\n }\n\n apply(changeEntries) {\n for (const changeEntry of changeEntries) {\n const { path, operation, to } = changeEntry;\n\n const marker = createChildMarker(this.#marker, path);\n switch (operation) {\n case CREATED:\n case UPDATED:\n set(this.#state, marker, to, 'apply', this.#changeHandler);\n break;\n case DELETED:\n remove(this.#state, marker, 'apply', this.#changeHandler);\n break;\n }\n }\n }\n\n load(value) {\n set(this.#state, this.#marker, value, 'load', this.#changeHandler);\n return this;\n }\n\n remove(...args) {\n const marker = createChildMarker(this.#marker, args);\n return remove(this.#state, marker, 'remove', this.#changeHandler);\n }\n\n // Lifecycle / Admin\n async export(...args) {\n try {\n const marker = createChildMarker(this.#marker, args);\n const promises = dispatch(marker, {\n global: async () => await pack(this.#state),\n path: async (path) => await pack(get(this.#state, path, this.#accessHandler)),\n });\n if (!Array.isArray(promises)) {\n return await promises;\n }\n return await Promise.all(promises);\n } catch (err) {\n console.trace(`Failed to export state: ${err.message}`);\n throw err\n }\n }\n\n async import(exportedData) {\n try {\n const { data } = await unpack(exportedData);\n this.load(data);\n return this;\n } catch (err) {\n console.trace(`Failed to import state: ${err.message}`);\n throw err\n }\n }\n\n reset() {\n clear(this.#state);\n for (const plugin of this.#plugins.values()) {\n if (plugin.reset) {\n plugin.reset();\n }\n }\n this.#changeHandler = this.#createChangeHandler();\n this.#marker = createMarker([], this);\n this.#batchDepth = 0;\n }\n\n\n // Reactivity Utilities\n ref(...path) {\n const marker = createChildMarker(this.#marker, path);\n return new State(this.#state, marker, this.#changeHandler, this.#accessHandler);\n }\n\n batch(fn) {\n this.#batchDepth++;\n this.#notifyPlugins('onBatchStart', this.batching);\n if (fn) {\n fn(this);\n return this.endBatch();\n }\n return () => this.endBatch();\n }\n\n endBatch() {\n this.#batchDepth--;\n if (this.#batchDepth === 0) {\n this.#notifyPlugins('onBatchEnd');\n }\n return this;\n }\n\n // Private change handler\n #createChangeHandler() {\n return (marker, method, to = undefined, from = undefined) => {\n this.#notifyPlugins('onStateChange', marker, createChange(marker, method, to, from), this.batching);\n }\n }\n\n #createAccessHandler() {\n return (marker) => this.#notifyPlugins('onStateAccess', marker);\n }\n\n #notifyPlugins(event, ...args) {\n for (const plugin of this.#plugins.values()) {\n if (typeof plugin[event] === 'function') {\n plugin[event](...args);\n }\n }\n }\n}\n\nexport const createState = (...args) => State.create(...args);\nexport const isState = (target) => target instanceof State;", "export function defer(arg1, arg2) {\n let callback = null;\n let delay = 0;\n\n if (typeof arg1 === 'function') {\n callback = arg1;\n if (typeof arg2 === 'number') {\n delay = arg2;\n }\n } else if (typeof arg1 === 'number') {\n delay = arg1;\n }\n \n return (...args) => new Promise((resolve, reject) => {\n setTimeout(() => {\n try {\n const result = callback ? callback(...args) : undefined;\n resolve(result);\n } catch (error) {\n reject(error);\n }\n }, delay);\n });\n}\n", "import { invertChange } from \"../../../src/lib/change.js\";\nimport { defer } from \"../../../src/utils/defer.js\";\nimport { Plugin } from \"../../../src/Plugin.js\";\n\nclass Marker {\n constructor(description = '') {\n this.isMarker = true;\n this.description = description;\n }\n}\n\nexport class HistoryManager extends Plugin {\n static name = 'history';\n static options = {\n maxSize: 100\n };\n\n #changes = [];\n #started = false;\n #commitListeners = new Set();\n #cursor = 0;\n #batchDepth = 0;\n #pendingChanges = new Map();\n #isRecording = true;\n #commitScheduled = false;\n onUndoRedo = null;\n\n initialize(state) {\n this.onUndoRedo = (changes) => state.apply(changes);\n }\n\n #start() {\n // Reset history and set baseline at current state\n this.#changes = [new Marker('History Start')];\n this.#cursor = 0;\n this.#started = true;\n this.#pendingChanges.clear();\n this.#batchDepth = 0;\n this.#commitScheduled = false;\n }\n\n actions (state) {\n return {\n undo: (cb) => this.undo(cb),\n redo: (cb) => this.redo(cb),\n canUndo: () => this.canUndo(),\n canRedo: () => this.canRedo(),\n batch: () => this.batch(),\n commit: () => this.commit(),\n onCommit: (callback) => this.onCommit(callback),\n addMarker: (description) => this.addMarker(description),\n size: () => this.size(),\n start: () => this.#start()\n }\n }\n\n #deferredCommit = defer(() => {\n this.#commitPendingChanges();\n this.#commitScheduled = false;\n });\n\n onStateChange(marker, change, batching) {\n // Ignore all changes if history hasn't been started yet\n if (!this.#started) return;\n if (!this.#isRecording || change.method === 'apply') return;\n \n const existingChange = this.#pendingChanges.get(marker.address);\n const recordedChange = existingChange \n ? { ...change, from: existingChange.from } // Need to preserve original 'from'\n : change; // Can use original object directly\n this.#pendingChanges.set(marker.address, recordedChange);\n\n if (!batching && this.#batchDepth === 0) {\n this.#scheduleCommit();\n }\n }\n\n addMarker(description = '') {\n this.#commitPendingChanges(description);\n this.#cursor = this.#changes.length - 1;\n }\n\n undo = defer((cb) => {\n if (!this.onUndoRedo) {\n throw new Error('Undo/redo handler is required for undo operation');\n }\n\n this.#commitPendingChanges();\n\n // We should always have at least the initial marker\n if (this.#cursor <= 0) return false;\n this.#isRecording = false;\n \n // We should be at a marker\n if (!(this.#changes[this.#cursor] instanceof Marker)) {\n console.warn('Expected to be at a marker for undo operation');\n return false;\n }\n \n const changesToUndo = new Set();\n let tempCursor = this.#cursor - 1; // Don't modify the actual cursor yet\n \n // Collect changes until we hit the next marker\n while (tempCursor > 0) { // Changed from >= 0 to > 0 to preserve initial marker\n const changeEntry = this.#changes[tempCursor];\n \n if (changeEntry instanceof Marker) {\n break;\n }\n \n changesToUndo.add(invertChange(changeEntry));\n tempCursor--;\n }\n \n // Only update cursor after successfully collecting changes\n this.#cursor = tempCursor;\n \n // Apply the changes (already in correct order)\n this.onUndoRedo(Array.from(changesToUndo));\n \n if (cb && typeof cb === 'function') {\n cb();\n }\n\n this.#isRecording = true;\n return true;\n });\n\n redo = defer((cb) => {\n if (!this.onUndoRedo) {\n throw new Error('Undo/redo handler is required for redo operation');\n }\n\n if (this.#cursor >= this.#changes.length - 1) return false;\n this.#isRecording = false;\n \n // We should be at a marker\n if (!(this.#changes[this.#cursor] instanceof Marker)) {\n console.warn('Expected to be at a marker for redo operation');\n return false;\n }\n \n const changesToRedo = new Set();\n this.#cursor++; // Move past current marker\n \n // Collect changes until we hit the next marker\n while (this.#cursor < this.#changes.length) {\n const change = this.#changes[this.#cursor];\n \n if (change instanceof Marker) {\n break;\n }\n \n changesToRedo.add(change);\n this.#cursor++;\n }\n\n // Apply the changes in original order\n this.onUndoRedo(changesToRedo);\n \n if (cb && typeof cb === 'function') {\n cb();\n }\n\n this.#isRecording = true;\n return true;\n });\n\n canUndo() {\n return this.#cursor > 0;\n }\n\n canRedo() {\n return this.#cursor < this.#changes.length - 1;\n }\n\n size() {\n return this.#changes.length;\n }\n\n\n batch() {\n this.#batchDepth++;\n\n return () => {\n this.#batchDepth--;\n };\n }\n\n commit() {\n this.#batchDepth = this.#batchDepth - 1 < 0 ? 0 : this.#batchDepth - 1;\n\n if (this.#batchDepth === 0) {\n this.#commitPendingChanges();\n }\n \n return this;\n }\n\n pause() {\n this.#isRecording = false;\n }\n\n resume() {\n this.#isRecording = true;\n }\n\n onCommit(callback) {\n this.#commitListeners.add(callback);\n\n return () => {\n this.#commitListeners.delete(callback);\n };\n }\n\n reset() {\n this.#changes = [new Marker('History Start')];\n this.#commitListeners = new Set();\n this.#cursor = 0;\n this.#batchDepth = 0;\n this.#pendingChanges = new Map();\n this.#isRecording = true;\n this.#commitScheduled = false;\n this.#started = false;\n this.onUndoRedo = null;\n }\n\n #scheduleCommit() {\n if (!this.#commitScheduled) {\n this.#commitScheduled = true;\n this.#deferredCommit();\n }\n }\n\n #commitPendingChanges(description = '') {\n if (this.#pendingChanges.size === 0) return;\n\n // Truncate future changes if we're not at the end\n if (this.#cursor < this.#changes.length - 1) {\n this.#changes.splice(this.#cursor + 1);\n }\n\n // Add all pending changes individually\n const changes = Array.from(this.#pendingChanges.values());\n this.#changes.push(...changes);\n\n // Notify listeners\n this.#commitListeners.forEach(listener => listener(changes));\n \n // Add a marker automatically after the changes, but only if the last item isn't already a marker\n const lastItem = this.#changes[this.#changes.length - 1];\n \n if (!(lastItem instanceof Marker)) {\n this.#changes.push(new Marker(description || Date.now().toString()));\n }\n\n // Ensure the changes do not exceed maxSize\n while (this.#changes.length > this.options.maxSize) {\n this.#changes.shift(); // Remove the oldest change\n }\n\n // Clear pending changes\n this.#pendingChanges.clear();\n\n // Update current index\n this.#cursor = this.#changes.length - 1;\n }\n}\n", "export const throttled = (func) => {\n let timeout;\n return (...args) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), 0);\n };\n}", "export function createFileList(items, children, acc = []) {\n if (children.length === 0) {\n return acc;\n }\n\n for (const child of children) {\n if (!child) {\n continue;\n }\n\n const item = items[child];\n\n if (!item) {\n continue;\n }\n\n const children = item.children && item.children.length > 0 ? createFileList(items, item.children) : [];\n\n acc.push([child, item, children]);\n }\n\n return acc;\n}", "import { generateAccessKey, KEY_TYPES } from '../utils/generateAccessKey.js';\n\nexport const createIndex = async (email = null) => ({\n // Basic space information\n version: '1.0.0',\n created: new Date().toISOString(),\n updated: new Date().toISOString(),\n email,\n \n // Root workspace organization\n children: [], // Top-level items\n starred: [], // Quick access favorites\n recent: [], // Recently accessed items\n \n // All items by ID (except root)\n items: {},\n accessKey: await generateAccessKey(KEY_TYPES.USER),\n // Fast access indexes\n indexes: {\n byType: {\n document: [],\n project: [],\n asset: []\n },\n byTag: {}\n },\n \n // Space configuration\n settings: {},\n \n // Metadata\n tags: [],\n status: 'active'\n});", "import { nanoid } from 'nanoid';\nimport { createMetaType } from './meta/createMetaType.js';\nimport { addEffect, createComputed } from '@jucie.io/reactive';\nimport { JucieState } from '@jucie.io/reactive/jucie-state';\nimport { createState } from '@jucie.io/state';\nimport { HistoryManager } from '@jucie.io/state/history';\nimport { throttled } from './utils/throttle.js';\nimport { createFileList } from './utils/createFileList.js';\nimport { createIndex } from './meta/createIndex.js';\nimport { Result } from '@brickworks/result';\n\nexport class StorageInstance {\n #provider;\n #state;\n #config;\n #unsubscribe;\n\n constructor(provider, config = {}) {\n this.#provider = provider;\n this.#state = createState().install(JucieState);\n this.#config = config;\n\n // Set up reactive updates to sync state changes back to provider\n this.#unsubscribe = addEffect(\n createComputed(() => this.#state.get()),\n throttled(async () => {\n const index = await this.#state.export(); \n await this.#provider.setIndex(index);\n })\n );\n }\n\n static async create(provider, config = {}) {\n try {\n // Create isolated state for this provider\n const state = createState().install(JucieState, HistoryManager);\n const hasIndex = await provider.hasIndex();\n\n if (hasIndex) {\n try {\n const indexBuffer = await provider.getIndex();\n await state.import(indexBuffer);\n } catch (err) {\n console.trace(`Failed to import index: ${err.message}`);\n throw err\n }\n \n } else {\n const emptyIndex = await createIndex();\n await state.load(emptyIndex);\n const exportedIndex = await state.export();\n await provider.setIndex(exportedIndex);\n }\n \n \n\n const instance = new StorageInstance(provider, state, config);\n return instance\n } catch (error) {\n console.trace(`Failed to create StorageInstance: ${error.message}`);\n throw error;\n }\n }\n\n // Core storage operations\n async create(type, data, meta = {}) {\n try {\n const id = nanoid(32);\n meta.fileType = meta.fileType || 'application/octet-stream';\n\n const metaType = await createMetaType(type, id, meta);\n\n this.#state.set(['items', id], metaType);\n this.#state.update(['children'], (children = []) => {\n children.push(id);\n return children;\n });\n\n // Handle file creation\n await this.#provider.write(id, data);\n\n return id\n } catch (error) {\n return Result.error(`Failed to create file \"${id}\": ${error.message}`, { id, type, meta });\n }\n }\n\n async read(id) {\n try {\n const item = this.#state.get(['items', id]);\n \n if (!item) {\n throw new Error(`File \"${id}\" not found`);\n }\n\n const data = await this.#provider.read(id, item.meta);\n return data\n } catch (error) {\n return Result.error(`Failed to read file \"${id}\": ${error.message}`, { id });\n }\n }\n\n async update(id, data) {\n try {\n const item = this.#state.get(['items', id]);\n \n if (!item) {\n throw new Error(`File \"${id}\" not found`);\n }\n\n await this.#provider.write(id, data);\n return this\n } catch (error) {\n return Result.error(`Failed to update file \"${id}\": ${error.message}`, { id });\n }\n }\n\n async delete(id) {\n try {\n if (!this.#state.has(['items', id])) {\n return Result.failure('FILE_NOT_FOUND', { fileId: id });\n }\n\n const parentPaths = this.#state.findAllWhere('children', 'includes', id);\n \n if (parentPaths && parentPaths.length > 0) {\n parentPaths.forEach(path => {\n this.#state.update(path, (children = []) => {\n return children.filter(child => child !== id);\n });\n });\n }\n\n const item = this.#state.get(['items', id]);\n const fileId = item?.fileId || id;\n \n await this.#provider.delete(fileId);\n this.#state.remove(['items', id]);\n \n return this\n } catch (error) {\n return Result.error(`Failed to delete file \"${id}\": ${error.message}`, { fileId: id });\n }\n }\n\n async addDependency(dependantId, id) {\n try {\n\n this.#state.update(['items', dependantId, 'dependencies'], (dependencies = []) => {\n if (dependencies.includes(id)) {\n return dependencies;\n }\n dependencies.push(id);\n dependencies = dependencies.filter(dependency => Boolean(dependency));\n return dependencies;\n });\n\n return this\n } catch (error) {\n return Result.error(`Failed to add dependency \"${dependantId}\": ${error.message}`, { dependantId, id });\n }\n }\n\n move(id, newParentId) {\n try {\n if (id === newParentId) {\n return this.getFileList();\n }\n const parentPaths = this.#state.findAllWhere('children', 'includes', id);\n\n if (parentPaths?.length > 0) {\n parentPaths.forEach(path => {\n this.#state.update(path, (children = []) => {\n return children.filter(child => child !== id);\n });\n });\n }\n\n if (!newParentId || newParentId === 'root') {\n this.#state.update(['children'], (children = []) => {\n children.push(id);\n return children;\n });\n\n return this\n }\n\n this.#state.update(['items', newParentId, 'children'], (children = []) => {\n children.push(id);\n return children;\n });\n\n return this\n } catch (error) {\n return Result.error(`Failed to move file \"${id}\": ${error.message}`, { id, newParentId });\n }\n }\n\n // Utility methods\n exists(id) {\n return this.#state.has(['items', id]);\n }\n\n getMeta(id) {\n return this.#state.get(['items', id]);\n }\n\n getFileList() {\n try {\n const rootChildren = this.#state.get(['children']) || [];\n const items = this.#state.get(['items']) || {};\n return createFileList(items, rootChildren);\n } catch (error) {\n return Result.error(`Failed to get file list: ${error.message}`);\n }\n }\n\n async findWhere(key, value) {\n const path = this.#state.findWhere(key, 'is', value);\n if (!path || path.length === 0) {\n return undefined;\n }\n const [_, id] = path;\n return await this.read(id);\n }\n\n // Cleanup\n async destroy() {\n try {\n if (this.#unsubscribe) {\n this.#unsubscribe();\n }\n await this.#provider.destroy();\n return this\n } catch (error) {\n return Result.error(`Failed to destroy storage instance: ${error.message}`);\n }\n }\n}", "import { ServiceProvider } from '@jucie.io/engine';\nimport { StorageInstance } from './StorageInstance.js';\nimport { Result } from '@brickworks/result';\n\nexport class Storage extends ServiceProvider {\n #storageInstances = new Map();\n #defaultInstanceName = null;\n\n static manifest = {\n name: 'Storage',\n namespace: 'storage',\n version: '1.0.0',\n description: 'Core storage service for managing file operations across providers',\n defaults: {\n defaultProvider: 'local',\n }\n };\n\n actions(context) {\n return {\n // Provider management\n create: async (name, provider, config) => {\n try {\n \n if (this.#storageInstances.has(name)) {\n return this.#storageInstances.get(name);\n }\n\n const storageProvider = await this.loadStorageProvider(provider, config);\n \n const storageInstance = await StorageInstance.create(storageProvider, config);\n \n this.#storageInstances.set(name, storageInstance);\n \n if (!this.#defaultInstanceName) {\n this.#defaultInstanceName = name;\n }\n \n return storageInstance;\n \n } catch (error) {\n return Result.failure(`Failed to connect provider \"${name}\": ${error.message}`);\n }\n },\n \n use: (name = null) => {\n try {\n const providerId = name || this.#defaultInstanceName;\n const instance = this.#storageInstances.get(providerId);\n \n if (!instance) {\n throw Result.error(`Storage provider \"${providerId}\" not found. Use create() first.`);\n }\n \n return instance;\n } catch (error) {\n return Result.error(`Failed to use provider \"${name}\": ${error.message}`);\n }\n },\n\n list: async () => {\n return {\n providers: Array.from(this.#storageInstances.keys()),\n default: this.#defaultInstanceName\n };\n },\n\n has: (name) => {\n return this.#storageInstances.has(name);\n },\n\n setDefault: async (name) => {\n if (!this.#storageInstances.has(name)) {\n throw new Error(`Provider \"${name}\" not found`);\n }\n this.#defaultInstanceName = name;\n return true;\n },\n\n remove: async (name) => {\n try {\n const storageInstance = this.#storageInstances.get(name);\n\n if (!storageInstance) {\n throw new Error(`Provider \"${name}\" not found`);\n }\n\n // Cleanup instance resources\n await storageInstance.destroy();\n\n // Remove from instances map\n this.#storageInstances.delete(name);\n\n // Reset default provider if needed\n if (this.#defaultInstanceName === name) {\n this.#defaultInstanceName = this.#storageInstances.size > 0 ? \n Array.from(this.#storageInstances.keys())[0] : \n null;\n }\n\n return true;\n } catch (error) {\n return Result.failure(`Failed to remove provider \"${name}\": ${error.message}`);\n }\n },\n\n destroy: async (name = this.#defaultInstanceName) => {\n const storageInstance = this.#storageInstances.get(name);\n if (storageInstance) {\n await storageInstance.destroy();\n }\n return true;\n }\n }\n }\n}\n\n", "import { Storage } from './Storage.js';\n\nexport class StorageClient extends Storage {\n constructor(engine, config = {}) {\n super(engine, config);\n }\n\n async loadStorageProvider(provider = null, config = {}) {\n const providerMap = {\n indexedDb: () => import('./providers/indexedDb/IndexedDbProvider.js')\n };\n\n if (!(provider in providerMap)) {\n throw new Error(`Unsupported provider: ${provider}`);\n }\n \n const { default: StorageProvider } = await providerMap[provider]();\n return StorageProvider.create(config);\n }\n}\n\n", "import { Storage } from './Storage.js';\n\nexport class StorageServer extends Storage {\n constructor(engine, config = {}) {\n super(engine, config);\n }\n\n async loadStorageProvider(provider = null, config = {}) {\n try {\n const providerMap = {\n firebase: () => import('./providers/firebase/FirebaseProvider.js'),\n local: () => import('./providers/local/LocalProvider.js'),\n minio: () => import('./providers/minio/MinioProvider.js'),\n s3: () => import('./providers/s3/S3Provider.js')\n };\n \n if (!(provider in providerMap)) {\n throw new Error(`Unsupported provider: ${provider}`);\n }\n\n const { default: StorageProvider } = await providerMap[provider]();\n\n return StorageProvider.create(config);\n } catch (error) {\n console.trace(`Failed to load storage provider: ${error.message}`);\n throw error;\n }\n }\n}"],
5
+ "mappings": "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",
6
+ "names": ["BaseProvider", "init_BaseProvider", "__esmMin", "_BaseProvider", "config", "provider", "fileName", "data", "index", "mimeType", "IndexedDbProvider_exports", "__export", "IndexedDBProvider", "IndexedDbProvider_default", "init_IndexedDbProvider", "__esmMin", "init_BaseProvider", "BaseProvider", "config", "resolve", "reject", "request", "event", "db", "error", "fileName", "result", "data", "FirebaseProvider_exports", "__export", "FirebaseProvider", "FirebaseProvider_default", "admin", "init_FirebaseProvider", "__esmMin", "init_BaseProvider", "BaseProvider", "config", "fileName", "file", "exists", "content", "error", "data", "LocalProvider_exports", "__export", "LocalProvider", "LocalProvider_default", "fs", "dirname", "resolve", "init_LocalProvider", "__esmMin", "init_BaseProvider", "BaseProvider", "config", "fileName", "resolvedPath", "error", "meta", "encoding", "data", "dir", "MinioProvider_exports", "__export", "MinioProvider", "MinioProvider_default", "S3Client", "GetObjectCommand", "PutObjectCommand", "DeleteObjectCommand", "HeadObjectCommand", "CreateBucketCommand", "init_MinioProvider", "__esmMin", "init_BaseProvider", "BaseProvider", "config", "error", "fileName", "command", "data", "S3Provider_exports", "__export", "S3Provider", "S3Provider_default", "S3Client", "GetObjectCommand", "PutObjectCommand", "DeleteObjectCommand", "HeadObjectCommand", "CreateBucketCommand", "init_S3Provider", "__esmMin", "init_BaseProvider", "BaseProvider", "config", "error", "fileName", "command", "data", "GLOBAL_NS_OBJ", "checkType", "value", "expectedType", "name", "type", "matchesType", "typeNames", "getTypeName", "createTypeChecker", "DefinitionTypes", "Definitions", "createDefinition", "type", "returnTypes", "returnTypeChecker", "createTypeChecker", "DefinitionTypes", "definitionType", "name", "factory", "defaultArgs", "definition", "args", "combinedArgs", "res", "error", "Definitions", "BAD_KEYS", "RESERVED_NAMESPACES", "MAX_NAME_LENGTH", "VALID_NAME", "assertSafeKey", "key", "where", "assertNamespace", "ns", "defineMiddleware", "createDefinition", "defineActions", "defineUninstall", "defineInitialize", "defineGetters", "DefinitionBuilder", "_DefinitionBuilder", "namespace", "#ns", "#args", "#slots", "#set", "type", "factory", "creator", "defineMiddleware", "defineGetters", "defineActions", "defineInitialize", "defineUninstall", "ServiceProvider", "_ServiceProvider", "#services", "options", "useContext", "config", "namespace", "assertNamespace", "instance", "keys", "builder", "DefinitionBuilder", "setupContext", "factory", "maybe", "error", "ENGINE_CONTEXT", "crypto", "urlAlphabet", "POOL_SIZE_MULTIPLIER", "pool", "poolOffset", "fillPool", "bytes", "crypto", "nanoid", "size", "fillPool", "id", "i", "poolOffset", "urlAlphabet", "pool", "KEY_TYPES", "KEY_PREFIXES", "calculateChecksum", "data", "acc", "char", "generateRandomBytes", "length", "bytes", "randomBytes", "str", "generateAccessKey", "type", "defaultLength", "keyLength", "randomKey", "checksum", "keyWithChecksum", "createMetaType", "type", "id", "meta", "created", "updated", "generateAccessKey", "KEY_TYPES", "nextIdleTick", "callback", "ComputationManager", "reactive", "nextIdleTick", "deadRefs", "ids", "weakRef", "dependant", "ref", "now", "timeElapsed", "reactives", "sortedReactives", "callback", "error", "sorted", "visited", "visiting", "visit", "dependants", "Reactive", "_Reactive", "ComputationManager", "key", "value", "keys", "out", "i", "reactive", "reactorIndex", "cycle", "error", "r", "getter", "effect", "reactives", "deadRefs", "ids", "weakRef", "dependant", "ref", "isReactive", "getter", "Reactive", "addEffect", "effect", "isAsyncFunction", "fn", "Computed", "_Computed", "fn", "config", "computed", "Reactive", "isAsyncFunction", "#getter", "computationId", "value", "resolve", "error", "reject", "createComputed", "Subscriber", "_Subscriber", "getter", "fn", "config", "subscriber", "Reactive", "error", "createSubscriber", "EMPTY_CACHE", "GLOBAL_TAG", "STATE_CONTEXT", "MATCHER", "CREATED", "DELETED", "UPDATED", "MARKER_GLOBAL", "MARKER_SINGLE", "MARKER_MANY", "MARKER_EPHEMERAL", "escapeStr", "str", "out", "i", "ch", "encodePath", "segments", "parts", "i", "v", "escapeStr", "isGlobalMarker", "marker", "MARKER_GLOBAL", "isPathMarker", "MARKER_SINGLE", "isMarkers", "MARKER_MANY", "isEphemeralMarker", "MARKER_EPHEMERAL", "isGlobalPath", "path", "GLOBAL_TAG", "normalizePaths", "args", "len", "pathHasEphemeral", "i", "segment", "createMarker", "paths", "length", "normalizedPaths", "type", "children", "isEphemeral", "child", "markerType", "encodePath", "createChildMarker", "parentMarker", "childPaths", "childLength", "normalizedChildPaths", "newPath", "newPaths", "childPath", "newMarkers", "allPaths", "j", "dispatch", "global", "ephemeral", "error", "results", "nestedMarker", "err", "Plugin", "options", "state", "pluginInstance", "nextIdleTick", "callback", "Node", "_Node", "JucieState", "_JucieState", "Plugin", "#batching", "#markers", "state", "fn", "config", "createComputed", "getter", "callback", "createSubscriber", "marker", "dispatch", "path", "stateInstance", "node", "visitedReactives", "lastIndex", "segment", "reactiveSet", "idSet", "deadRefs", "ids", "weakRef", "reactive", "Reactive", "ref", "id", "weakRefSet", "root", "normalizedPath", "length", "i", "nextIdleTick", "removeFromSet", "set", "toDelete", "child", "countAlive", "count", "hasReactives", "hasChildReactives", "hasAlive", "updateNode", "visited", "parent", "newValue", "traversalFunctions", "obj", "path", "createTraversalFunction", "length", "expr", "_", "fn", "traverse", "state", "len", "createNodeType", "a", "graftFunctions", "state", "path", "value", "b", "c", "d", "e", "f", "g", "h", "createGraftFunction", "depth", "names", "_", "i", "body", "pathSoFar", "current", "next", "fn", "graft", "len", "detach", "parentPath", "last", "parent", "traverse", "replace", "oldState", "newState", "oldKeys", "newKeys", "key", "clear", "keys", "isPrimitive", "value", "type", "clone", "value", "spread", "value", "get", "state", "marker", "cb", "shouldCallCallback", "dispatch", "path", "traverse", "error", "set", "method", "from", "replace", "graft", "remove", "detach", "update", "fn", "to", "isGlobalPath", "clonePrev", "isPrimitive", "clone", "defaultReplacer", "key", "value", "applyReplacerDeep", "input", "replacer", "parentKey", "v", "out", "k", "encode", "decode", "MAGIC", "VERSION", "base64urlEncode", "buffer", "binaryString", "i", "chunk", "base64urlDecode", "str", "base64", "padded", "result", "calculateChecksum", "checksum", "writeUint32", "value", "offset", "readUint32", "writeUint16", "readUint16", "writeUint8", "readUint8", "encodeObject", "obj", "decodeObject", "pack", "data", "replacer", "defaultReplacer", "clean", "applyReplacerDeep", "dataBuffer", "encodeObject", "payloadLength", "payload", "offset", "writeUint32", "checksum", "calculateChecksum", "headerLen", "capsule", "MAGIC", "writeUint16", "VERSION", "writeUint8", "base64urlEncode", "unpack", "capsuleString", "cb", "capsule", "base64urlDecode", "i", "MAGIC", "version", "readUint16", "VERSION", "flags", "readUint8", "storedChecksum", "readUint32", "payloadLength", "payload", "actualChecksum", "calculateChecksum", "offset", "dataLength", "data", "decodeObject", "match", "value", "matcher", "testValue", "seek", "obj", "targetKey", "currentPath", "findAll", "results", "key", "i", "item", "nested", "findFirstNode", "findAllNodes", "OPERATION_INVERSES", "CREATED", "DELETED", "UPDATED", "determineOperation", "to", "from", "createChange", "marker", "method", "dispatch", "GLOBAL_TAG", "invertChange", "change", "address", "path", "operation", "invertOperation", "State", "_State", "#state", "#marker", "#batchDepth", "#changeHandler", "#accessHandler", "#plugins", "state", "marker", "changeHandler", "accessHandler", "#createChangeHandler", "#createAccessHandler", "createMarker", "plugins", "initializeFunctions", "plugin", "pluginInstance", "actions", "initialize", "args", "get", "createChildMarker", "dispatch", "path", "key", "matcher", "value", "findFirstNode", "findAllNodes", "set", "fn", "update", "changeEntries", "changeEntry", "operation", "to", "CREATED", "UPDATED", "DELETED", "remove", "promises", "pack", "err", "exportedData", "data", "unpack", "clear", "#notifyPlugins", "method", "from", "createChange", "event", "createState", "defer", "arg1", "arg2", "callback", "delay", "args", "resolve", "reject", "result", "error", "Marker", "description", "HistoryManager", "Plugin", "#changes", "#started", "#commitListeners", "#cursor", "#batchDepth", "#pendingChanges", "#isRecording", "#commitScheduled", "state", "changes", "#start", "cb", "callback", "#deferredCommit", "defer", "#commitPendingChanges", "marker", "change", "batching", "existingChange", "recordedChange", "#scheduleCommit", "changesToUndo", "tempCursor", "changeEntry", "invertChange", "changesToRedo", "listener", "throttled", "func", "timeout", "args", "createFileList", "items", "children", "acc", "child", "item", "createIndex", "email", "generateAccessKey", "KEY_TYPES", "Result", "StorageInstance", "_StorageInstance", "#provider", "#state", "#config", "#unsubscribe", "provider", "config", "createState", "JucieState", "addEffect", "createComputed", "throttled", "index", "state", "HistoryManager", "indexBuffer", "err", "emptyIndex", "createIndex", "exportedIndex", "error", "type", "data", "meta", "id", "nanoid", "metaType", "createMetaType", "children", "item", "parentPaths", "path", "child", "fileId", "dependantId", "dependencies", "dependency", "newParentId", "rootChildren", "items", "createFileList", "key", "value", "_", "Result", "Storage", "ServiceProvider", "#storageInstances", "#defaultInstanceName", "context", "name", "provider", "config", "storageProvider", "storageInstance", "StorageInstance", "error", "providerId", "instance", "StorageClient", "Storage", "engine", "config", "provider", "providerMap", "StorageProvider", "StorageServer", "Storage", "engine", "config", "provider", "providerMap", "StorageProvider", "error"]
7
+ }