live-cache 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +116 -72
- package/dist/core/Controller.d.ts +12 -5
- package/dist/core/Invalidator.d.ts +11 -0
- package/dist/core/ObjectStore.d.ts +5 -0
- package/dist/core/StorageManager.d.ts +10 -6
- package/dist/core/Transactions.d.ts +20 -0
- package/dist/index.cjs +242 -68
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.mjs +239 -69
- package/dist/index.mjs.map +1 -1
- package/dist/index.umd.js +242 -68
- package/dist/index.umd.js.map +1 -1
- package/dist/invalidator/TimeoutInvalidator.d.ts +13 -0
- package/dist/invalidator/WebsocketInvalidator.d.ts +28 -0
- package/dist/react/useController.d.ts +6 -3
- package/dist/storage-manager/IndexDbStorageManager.d.ts +1 -1
- package/dist/storage-manager/LocalStorageManager.d.ts +1 -1
- package/package.json +5 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../node_modules/tslib/tslib.es6.js","../src/core/Document.ts","../src/core/Collection.ts","../src/core/StorageManager.ts","../src/core/Controller.ts","../src/core/join.ts","../src/core/ObjectStore.ts","../src/storage-manager/IndexDbStorageManager.ts","../src/storage-manager/LocalStorageManager.ts","../src/react/Context.tsx","../src/react/useController.ts","../src/react/useJoinController.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/*\n * A Single Model stores the data for a single item.\n */\n\n/**\n * A single stored record.\n *\n * `Document<T>` wraps raw data and adds:\n * - a generated `_id` (MongoDB-style ObjectId)\n * - `updatedAt` timestamp, refreshed on updates\n *\n * Use `toModel()` when you need a plain object including `_id`\n * (this is what `Controller` publishes and persists).\n *\n * @typeParam TVariable - data shape without `_id`\n */\nexport default class Document<TVariable> {\n public _id: string;\n private data: TVariable;\n public updatedAt: number;\n\n // Random value generated once per process (5 bytes)\n private static processId = Math.floor(Math.random() * 0xffffffffff);\n\n constructor(data: TVariable, counter = 0 * 0xffffff) {\n this._id = Document.generateId(counter);\n this.data = data;\n this.updatedAt = Date.now();\n }\n\n updateData(data: Partial<TVariable>) {\n this.data = {\n ...this.data,\n ...data,\n };\n this.updatedAt = Date.now();\n }\n\n /**\n * Convert to a plain model including `_id`.\n */\n toModel() {\n return {\n _id: this._id,\n ...this.data,\n };\n }\n\n /**\n * Convert to raw data (without `_id`).\n */\n toData() {\n return { ...this.data };\n }\n\n /**\n * Generate a MongoDB-style ObjectId (24 hex characters).\n *\n * Format: timestamp (4 bytes) + random process id (5 bytes) + counter (3 bytes)\n */\n static generateId(_counter: number): string {\n // MongoDB ObjectId structure (12 bytes = 24 hex chars):\n // - 4 bytes: timestamp (seconds since Unix epoch)\n // - 5 bytes: random process identifier\n // - 3 bytes: incrementing counter\n\n // 1. Timestamp (4 bytes) - seconds since Unix epoch\n const timestamp = Math.floor(Date.now() / 1000);\n\n // 2. Process identifier (5 bytes) - random value\n const processId = this.processId;\n\n // 3. Counter (3 bytes) - incrementing counter with wraparound\n const counter = (_counter + 1) % 0xffffff;\n\n // Convert to hexadecimal strings with proper padding\n const timestampHex = timestamp.toString(16).padStart(8, \"0\");\n const processIdHex = processId.toString(16).padStart(10, \"0\");\n const counterHex = counter.toString(16).padStart(6, \"0\");\n\n // Combine into 24-character hex string\n return timestampHex + processIdHex + counterHex;\n }\n}\n\n/**\n * Convenience type: the return type of `Document<T>[\"toModel\"]`.\n */\nexport type ModelType<K> = ReturnType<Document<K>[\"toModel\"]>;\n","/*\n * A List Model stores a list of items.\n */\n\nimport Document from \"./Document\";\n\n/**\n * An in-memory collection of documents with simple hash-based indexes.\n *\n * - Insert/update/delete operations keep indexes consistent.\n * - `find()` / `findOne()` attempt indexed lookups first and fall back to linear scan.\n *\n * This is commonly used via `Controller.collection`.\n *\n * @typeParam TVariable - the data shape stored in the collection (without `_id`)\n * @typeParam TName - the collection name (string-literal type)\n */\nexport default class Collection<TVariable, TName extends string> {\n // hash of conditions mapping to _id\n private dataMap: Record<string, Document<TVariable>> = {};\n private indexes: Record<string, string[]> = {};\n private counter: number = 0;\n\n constructor(public name: TName) { }\n\n /**\n * Clear all in-memory documents and indexes.\n */\n public clear() {\n this.dataMap = {};\n this.indexes = {};\n this.counter = 0;\n }\n\n /**\n * Add a document to all relevant indexes\n */\n private addToIndexes(doc: Document<TVariable>): void {\n const model = doc.toModel();\n\n // Create index entries for each property\n for (const [key, value] of Object.entries(model)) {\n if (key === \"_id\") continue; // Skip _id as it's the primary key\n\n const indexKey = Collection.hash({ [key]: value });\n if (!this.indexes[indexKey]) {\n this.indexes[indexKey] = [];\n }\n\n // Add document _id to index if not already present\n if (!this.indexes[indexKey].includes(doc._id)) {\n this.indexes[indexKey].push(doc._id);\n }\n }\n\n // Also create a compound index for the full document conditions\n const fullIndexKey = Collection.hash(model);\n if (!this.indexes[fullIndexKey]) {\n this.indexes[fullIndexKey] = [];\n }\n if (!this.indexes[fullIndexKey].includes(doc._id)) {\n this.indexes[fullIndexKey].push(doc._id);\n }\n }\n\n /**\n * Remove a document from all indexes\n */\n private removeFromIndexes(doc: Document<TVariable>): void {\n const model = doc.toModel();\n\n // Remove from all property indexes\n for (const [key, value] of Object.entries(model)) {\n if (key === \"_id\") continue;\n\n const indexKey = Collection.hash({ [key]: value });\n if (this.indexes[indexKey]) {\n this.indexes[indexKey] = this.indexes[indexKey].filter(\n (id) => id !== doc._id,\n );\n\n // Clean up empty indexes\n if (this.indexes[indexKey].length === 0) {\n delete this.indexes[indexKey];\n }\n }\n }\n\n // Remove from compound index\n const fullIndexKey = Collection.hash(model);\n if (this.indexes[fullIndexKey]) {\n this.indexes[fullIndexKey] = this.indexes[fullIndexKey].filter(\n (id) => id !== doc._id,\n );\n if (this.indexes[fullIndexKey].length === 0) {\n delete this.indexes[fullIndexKey];\n }\n }\n }\n\n /**\n * Find a single document by _id or by matching conditions (optimized with indexes)\n */\n findOne(where: string | Partial<TVariable>): Document<TVariable> | null {\n if (typeof where === \"string\") {\n return this.dataMap[where] || null;\n }\n\n // Try to use index for faster lookup\n const indexKey = Collection.hash(where);\n if (this.indexes[indexKey] && this.indexes[indexKey].length > 0) {\n const docId = this.indexes[indexKey][0];\n const doc = this.dataMap[docId];\n\n // Verify the document still matches (in case of hash collision)\n if (doc && this.matchesConditions(doc, where)) {\n return doc;\n }\n }\n\n // Fallback to linear search if index lookup fails\n return (\n Object.values(this.dataMap).find((doc) =>\n this.matchesConditions(doc, where),\n ) ?? null\n );\n }\n\n /**\n * Find all documents matching the conditions (optimized with indexes)\n */\n find(where?: string | Partial<TVariable>): Document<TVariable>[] {\n // If no conditions, return all documents\n if (!where || Object.keys(where).length === 0) {\n return Object.values(this.dataMap);\n }\n\n if (typeof where === \"string\") {\n const doc = this.dataMap[where];\n return doc ? [doc] : [];\n }\n\n // Try to use index for faster lookup\n const indexKey = Collection.hash(where);\n if (this.indexes[indexKey]) {\n // Get candidate documents from index\n const candidateDocs = this.indexes[indexKey]\n .map((id) => this.dataMap[id])\n .filter((doc) => doc && this.matchesConditions(doc, where));\n\n if (candidateDocs.length > 0) {\n return candidateDocs;\n }\n }\n\n // Fallback to linear search\n return Object.values(this.dataMap).filter((doc) =>\n this.matchesConditions(doc, where),\n );\n }\n\n /**\n * Helper method to check if a document matches the conditions\n */\n private matchesConditions(\n doc: Document<TVariable>,\n where: Partial<TVariable>,\n ): boolean {\n const model = doc.toModel();\n return Object.entries(where).every(([key, value]) => {\n if (!(key in model)) return false;\n return (\n Collection.hash(model[key as keyof typeof model]) ===\n Collection.hash(value)\n );\n });\n }\n\n /**\n * Insert a new document into the collection\n */\n insertOne(data: TVariable): Document<TVariable> {\n const doc = new Document<TVariable>(data, this.counter++);\n this.dataMap[doc._id] = doc;\n\n // Add to indexes\n this.addToIndexes(doc);\n\n return doc;\n }\n\n /**\n * Delete a document by _id or by matching conditions\n */\n deleteOne(where: string | Partial<TVariable>): boolean {\n const doc = this.findOne(where);\n if (!doc) {\n return false;\n }\n\n // Remove from indexes first\n this.removeFromIndexes(doc);\n\n // Remove from dataMap\n delete this.dataMap[doc._id];\n\n return true;\n }\n\n /**\n * Find a document and update it with new data\n *\n * @example\n * ```ts\n * users.findOneAndUpdate({ id: 1 }, { name: \"Updated\" });\n * ```\n */\n findOneAndUpdate(\n where: string | Partial<TVariable>,\n update: Partial<TVariable>,\n ): Document<TVariable> | null {\n const doc = this.findOne(where);\n if (!update) return doc;\n if (!doc) {\n // If document not found, insert a new one with the provided update data\n const newDoc = this.insertOne(update as TVariable);\n this.addToIndexes(newDoc);\n return newDoc;\n }\n\n // Keep indexes consistent: remove old index entries, update, then re-index\n this.removeFromIndexes(doc);\n doc.updateData(update);\n this.addToIndexes(doc);\n\n return doc;\n }\n\n /**\n * Insert multiple documents into the collection at once\n * @param dataArray Array of data objects to insert\n * @returns Array of inserted documents\n */\n insertMany(dataArray: TVariable[]): Document<TVariable>[] {\n const insertedDocs: Document<TVariable>[] = [];\n\n for (const data of dataArray) {\n const doc = new Document<TVariable>(data, this.counter++);\n this.dataMap[doc._id] = doc;\n\n // Add to indexes\n this.addToIndexes(doc);\n\n insertedDocs.push(doc);\n }\n\n return insertedDocs;\n }\n\n /**\n * Serialize the collection to a plain object for storage\n * @returns A plain object representation of the collection\n */\n serialize(): string {\n const data = {\n counter: this.counter,\n documents: Object.values(this.dataMap).map((doc) => doc.toModel()),\n };\n return JSON.stringify(data);\n }\n\n /**\n * Deserialize and restore collection data from storage\n * @param serializedData The serialized collection data\n * @returns A new Collection instance with the restored data\n */\n static deserialize<T, N extends string>(\n name: N,\n serializedData: string,\n ): Collection<T, N> {\n const collection = new Collection<T, N>(name);\n\n try {\n const data = JSON.parse(serializedData);\n\n // Restore counter\n collection.counter = data.counter || 0;\n\n // Restore documents\n if (data.documents && Array.isArray(data.documents)) {\n for (let i = 0; i < data.documents.length; i++) {\n const docData = data.documents[i];\n const { _id, ...rest } = docData;\n\n // Create document without counter increment. Internal _id is generated.\n const doc = new Document<T>(rest as any, i);\n\n // Add to dataMap using the generated internal id\n collection.dataMap[doc._id] = doc;\n\n // Rebuild indexes for this document\n collection.addToIndexes(doc);\n }\n }\n\n } catch (error) {\n console.error(\"Failed to deserialize collection data:\", error);\n }\n\n return collection;\n }\n\n /**\n * Hydrate the current collection instance with data from storage\n * This clears existing data and replaces it with the deserialized data\n * @param serializedData The serialized collection data\n */\n hydrate(serializedData: string): void {\n try {\n const data = JSON.parse(serializedData);\n\n // Clear existing data\n this.dataMap = {};\n this.indexes = {};\n this.counter = data.counter || 0;\n\n // Restore documents\n if (data.documents && Array.isArray(data.documents)) {\n for (let i = 0; i < data.documents.length; i++) {\n const docData = data.documents[i];\n const { _id, ...rest } = docData;\n\n // Create document without counter increment. Internal _id is generated.\n const doc = new Document<TVariable>(rest as any, i);\n\n // Add to dataMap using the generated internal id\n this.dataMap[_id] = doc;\n\n // Rebuild indexes for this document\n this.addToIndexes(doc);\n }\n }\n\n } catch (error) {\n console.error(\"Failed to hydrate collection:\", error);\n }\n }\n\n /**\n * Dehydrate the collection to a format suitable for storage\n * This is an alias for serialize() for semantic clarity\n * @returns A serialized string representation of the collection\n */\n dehydrate(): string {\n return this.serialize();\n }\n\n static hash(data: any): string {\n // Browser-safe hashing: stable stringify + FNV-1a (32-bit).\n return Collection.fnv1a(Collection.stableStringify(data));\n }\n\n private static stableStringify(value: any): string {\n const type = typeof value;\n\n if (value === null) return \"null\";\n\n if (type === \"string\") return JSON.stringify(value);\n if (type === \"number\") {\n if (Number.isFinite(value)) return String(value);\n return JSON.stringify(String(value));\n }\n if (type === \"boolean\") return value ? \"true\" : \"false\";\n if (type === \"undefined\") return \"undefined\";\n if (type === \"bigint\") return JSON.stringify(`bigint:${value.toString()}`);\n if (type === \"symbol\") return JSON.stringify(`symbol:${String(value)}`);\n if (type === \"function\") return JSON.stringify(\"function\");\n\n if (Array.isArray(value)) {\n return (\n \"[\" + value.map((v) => Collection.stableStringify(v)).join(\",\") + \"]\"\n );\n }\n\n if (value instanceof Date) {\n return '{\"$date\":' + JSON.stringify(value.toISOString()) + \"}\";\n }\n\n // Plain object: sort keys for determinism\n const keys = Object.keys(value).sort();\n return (\n \"{\" +\n keys\n .map(\n (k) => JSON.stringify(k) + \":\" + Collection.stableStringify(value[k]),\n )\n .join(\",\") +\n \"}\"\n );\n }\n\n private static fnv1a(input: string): string {\n // FNV-1a 32-bit\n let hash = 0x811c9dc5;\n\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i);\n hash = Math.imul(hash, 0x01000193);\n }\n\n // Unsigned + fixed-width hex to keep index keys uniform\n return (hash >>> 0).toString(16).padStart(8, \"0\");\n }\n}\n","import { ModelType } from \"./Document\";\n\n/**\n * Storage adapter used by `Controller` to persist and hydrate snapshots.\n *\n * A controller stores a **full snapshot** (array of models) keyed by `name`.\n * Implementations should be resilient: reads should return `[]` on failure.\n */\nexport abstract class StorageManager<TVariable> {\n\n /**\n * Get a previously persisted snapshot for a controller name.\n *\n * @returns Array of models (each model includes `_id`)\n */\n public abstract get<T>(name: string): Promise<ModelType<T>[]>;\n\n /**\n * Persist a snapshot for a controller name.\n *\n * Controllers call this from `commit()`.\n */\n public abstract set<T>(name: string, models: ModelType<T>[]): Promise<void>;\n\n /**\n * Delete the persisted snapshot for a controller name.\n */\n public abstract delete(name: string): Promise<void>;\n\n}\n\n/**\n * No-op storage manager.\n *\n * Useful in environments where you don’t want persistence (tests, ephemeral caches, etc).\n */\nexport class DefaultStorageManager<TVariable> implements StorageManager<TVariable> {\n\n public async get<T>(_name: string): Promise<ModelType<T>[]> {\n return Promise.resolve([]);\n }\n\n public async set<T>(_name: string, _models: ModelType<T>[]): Promise<void> {\n return Promise.resolve();\n }\n\n public async delete(_name: string): Promise<void> {\n return Promise.resolve();\n }\n}\n","import Collection from \"./Collection\";\nimport Document, { ModelType } from \"./Document\";\nimport { DefaultStorageManager, StorageManager } from \"./StorageManager\";\n\n/**\n * Controller is the recommended integration layer for server-backed resources.\n *\n * It wraps a `Collection` with:\n * - hydration (`initialise()`)\n * - persistence (`commit()` writes a full snapshot using the configured `StorageManager`)\n * - subscriptions (`publish()`)\n * - invalidation hooks (`invalidate()`, `refetch()`)\n *\n * The intended mutation pattern is:\n * 1) mutate `this.collection` (insert/update/delete)\n * 2) call `await this.commit()` so subscribers update and storage persists\n *\n * @typeParam TVariable - the “data” shape stored in the collection (without `_id`)\n * @typeParam TName - a stable, string-literal name for this controller/collection\n *\n * @example\n * ```ts\n * type User = { id: number; name: string };\n *\n * class UsersController extends Controller<User, \"users\"> {\n * async fetchAll(): Promise<[User[], number]> {\n * const res = await fetch(\"/api/users\");\n * const data = (await res.json()) as User[];\n * return [data, data.length];\n * }\n *\n * invalidate(): () => void {\n * this.abort();\n * void this.refetch();\n * return () => {};\n * }\n *\n * async renameUser(id: number, name: string) {\n * this.collection.findOneAndUpdate({ id }, { name });\n * await this.commit();\n * }\n * }\n * ```\n */\nexport default class Controller<TVariable, TName extends string> {\n public name: TName;\n public collection: Collection<TVariable, TName>;\n protected subscribers: Set<(model: ModelType<TVariable>[]) => void> = new Set();\n protected storageManager: StorageManager<TVariable>;\n loading: boolean = false;\n error: unknown = null;\n public total: number = -1;\n public pageSize: number = -1;\n public abortController: AbortController | null = null;\n\n /**\n * Abort any in-flight work owned by this controller (typically network fetches).\n *\n * This method also installs a new `AbortController` so subclasses can safely\n * pass `this.abortController.signal` to the next request.\n */\n public abort() {\n if (this.abortController) {\n this.abortController.abort();\n }\n this.abortController = new AbortController();\n }\n\n protected updateTotal(total: number) {\n this.total = total;\n }\n\n protected updatePageSize(pageSize: number) {\n this.pageSize = pageSize;\n }\n\n /**\n * Fetch the complete dataset for this controller.\n *\n * Subclasses must implement this. Return `[rows, total]` where `total` is the\n * total number of rows available on the backend (useful for pagination).\n */\n public async fetchAll(): Promise<[TVariable[], number]> {\n throw Error(\"Not Implemented\");\n }\n\n /**\n * Initialise (hydrate) the controller's collection.\n *\n * Resolution order:\n * 1) If the in-memory collection is already non-empty: do nothing.\n * 2) Else, try `storageManager.get(name)` and hydrate from persisted snapshot.\n * 3) Else, call `fetchAll()` and populate from the backend.\n *\n * A successful initialise ends with `commit()` so subscribers receive the latest snapshot.\n */\n public async initialise(): Promise<void> {\n // If the collection is not empty, return.\n let data = this.collection.find().map((doc) => doc.toData());\n if (data.length !== 0) return;\n\n // If the collection is empty, check the storage manager.\n data = await this.storageManager.get(this.name);\n\n if (data.length !== 0) {\n this.updateTotal(this.collection.find().length);\n this.collection.insertMany(data);\n await this.commit();\n return;\n }\n\n // If the storage manager is empty, fetch the data from the server.\n try {\n this.loading = true;\n const [_data, total] = await this.fetchAll();\n this.collection.insertMany(_data);\n this.updateTotal(total);\n } catch (error) {\n this.error = error;\n }\n finally {\n this.loading = false;\n }\n\n await this.commit();\n }\n\n /**\n * Subscribe to controller updates.\n *\n * The callback receives the full snapshot (`ModelType<TVariable>[]`) each time `commit()` runs.\n * Returns an unsubscribe function.\n *\n * @example\n * ```ts\n * const unsubscribe = controller.publish((rows) => console.log(rows.length));\n * // later...\n * unsubscribe();\n * ```\n */\n public publish(onChange: (data: ModelType<TVariable>[]) => void) {\n this.subscribers.add(onChange);\n return () => this.subscribers.delete(onChange);\n }\n\n /**\n * Persist the latest snapshot and notify all subscribers.\n *\n * This is intentionally private: consumers should use `commit()` which computes the snapshot.\n */\n private async subscribe(model: ModelType<TVariable>[]) {\n // Persist the full cache snapshot for hydration.\n await this.storageManager.set(\n this.name,\n this.collection.find().map((doc) => doc.toModel()),\n );\n this.subscribers.forEach((sub) => {\n sub(model);\n });\n }\n\n /**\n * Publish + persist the current snapshot.\n *\n * Call this after any local mutation of `this.collection` so:\n * - subscribers are updated (UI refresh)\n * - the `StorageManager` has the latest snapshot for future hydration\n */\n public async commit() {\n const models = this.collection.find().map((doc) => doc.toModel());\n await this.subscribe(models);\n }\n\n /**\n * Refetch data using the controller's initialise flow.\n *\n * Subclasses typically use this inside `invalidate()`.\n */\n protected refetch() {\n return this.initialise();\n }\n\n /**\n * Invalidate the cache for this controller.\n *\n * Subclasses must implement this. Common patterns:\n * - TTL based: refetch when expired\n * - SWR: revalidate in background\n * - push: refetch or patch based on websocket messages\n *\n * This method should return a cleanup function that unregisters any timers/listeners/sockets\n * created as part of invalidation wiring.\n */\n public invalidate(...data: TVariable[]): () => void {\n throw Error(\"Not Implemented\");\n }\n\n /**\n * Clear in-memory cache and delete persisted snapshot.\n * Publishes an empty snapshot to subscribers.\n */\n public reset() {\n void this.storageManager.delete(this.name);\n this.collection.clear();\n this.updateTotal(0);\n this.updatePageSize(-1);\n this.error = null;\n this.loading = false;\n void this.subscribe([]);\n }\n\n /**\n * Create a controller.\n *\n * @param name - stable controller/collection name\n * @param initialise - whether to run `initialise()` immediately\n * @param storageManager - where snapshots are persisted (defaults to no-op)\n * @param pageSize - optional pagination hint (userland)\n */\n constructor(name: TName, initialise = true, storageManager = new DefaultStorageManager<TVariable>(), pageSize = -1) {\n this.collection = new Collection(name);\n this.storageManager = storageManager;\n this.name = name;\n this.pageSize = pageSize;\n if (initialise) {\n void this.initialise();\n }\n\n }\n}\n\n","import Controller from \"./Controller\";\nimport { ModelType } from \"./Document\";\n\n/**\n * Join data across multiple controllers by applying cross-controller equality constraints.\n *\n * `where.$and[controllerName]` can include:\n * - literal: `{ id: 1 }`\n * - join ref: `{ userId: { $ref: { controller: \"users\", field: \"id\" } } }`\n * - eq: `{ status: { $eq: \"active\" } }`\n *\n * `select` supports:\n * - array of qualified keys: `[\"users.id\", \"posts.title\"]`\n * - select-map for aliasing: `{ \"users.id\": \"userId\", \"posts.title\": \"title\" }`\n * - mixed array: `[\"users.id\", { \"posts.title\": \"title\" }]`\n *\n * @example\n * ```ts\n * const rows = join(\n * [usersController, postsController] as const,\n * {\n * $and: {\n * posts: { userId: { $ref: { controller: \"users\", field: \"id\" } } },\n * },\n * } as const,\n * [\"users.name\", \"posts.title\"] as const,\n * );\n * ```\n */\ntype ControllerName<C> = C extends Controller<any, infer N> ? N : never;\ntype ControllerVar<C> = C extends Controller<infer V, any> ? V : never;\n\ntype Tuple2Plus = readonly [\n Controller<any, any>,\n Controller<any, any>,\n ...Controller<any, any>[],\n];\n\ntype Names<Cs extends readonly Controller<any, any>[]> = ControllerName<Cs[number]>;\ntype AnyModel<Cs extends readonly Controller<any, any>[]> = ModelType<ControllerVar<Cs[number]>>;\n\ntype ControllerOfName<Cs extends readonly Controller<any, any>[], N extends string> = Extract<\n Cs[number],\n Controller<any, N>\n>;\n\ntype ModelOfName<Cs extends readonly Controller<any, any>[], N extends string> = ModelType<\n ControllerVar<ControllerOfName<Cs, N>>\n>;\n\nexport type JoinRef<Cs extends readonly Controller<any, any>[]> = {\n [N in Names<Cs>]: {\n controller: N;\n field: keyof ModelOfName<Cs, N>;\n };\n}[Names<Cs>];\n\ntype JoinEq<Cs extends readonly Controller<any, any>[], N extends Names<Cs>, K extends keyof ModelOfName<Cs, N>> = {\n $eq: ModelOfName<Cs, N>[K] | JoinRef<Cs>;\n $as?: string;\n};\n\ntype JoinRefCond<Cs extends readonly Controller<any, any>[]> = {\n $ref: JoinRef<Cs>;\n $as?: string;\n};\n\nexport type FieldCondition<\n Cs extends readonly Controller<any, any>[],\n N extends Names<Cs>,\n K extends keyof ModelOfName<Cs, N>,\n> = ModelOfName<Cs, N>[K] | JoinEq<Cs, N, K> | JoinRefCond<Cs>;\n\ntype PerControllerWhere<Cs extends readonly Controller<any, any>[], N extends Names<Cs>> = Partial<{\n [K in keyof ModelOfName<Cs, N>]: FieldCondition<Cs, N, K>;\n}>;\n\ntype AndWhere<Cs extends readonly Controller<any, any>[]> = Partial<{\n [N in Names<Cs>]: PerControllerWhere<Cs, N>;\n}>;\n\nexport type JoinWhere<Cs extends readonly Controller<any, any>[]> = {\n $and?: AndWhere<Cs>;\n};\n\ntype ExtractAs<T> = T extends { $as?: infer S } ? (S extends string ? S : never) : never;\n\n// Shallow `$as` extractor from `where.$and[controller][field]` without deep recursion.\ntype AsInPerControllerWhere<T> = T extends object ? ExtractAs<T[keyof T]> : never;\ntype AsInAndWhere<T> = T extends object ? AsInPerControllerWhere<T[keyof T]> : never;\ntype AsInJoinWhere<W> = W extends { $and?: infer A } ? AsInAndWhere<A> : never;\n\n/**\n * `keyof` on a union (`A | B`) returns only the intersection of keys (`keyof A & keyof B`),\n * which breaks IntelliSense for `select`. This helper distributes over the union to get\n * the full set of keys.\n */\ntype KeysOfUnion<T> = T extends any ? keyof T : never;\n\ntype QualifiedModelKey<Cs extends readonly Controller<any, any>[]> = {\n [N in Names<Cs>]: `${N}.${Extract<keyof ModelOfName<Cs, N>, string>}`;\n}[Names<Cs>];\n\ntype QualifiedAsKey<Cs extends readonly Controller<any, any>[], W> =\n AsInJoinWhere<W> extends infer A\n ? A extends string\n ? `${Names<Cs>}.${A}`\n : never\n : never;\n\n// Select keys are controller-qualified: \"<controller>.<field>\".\n// We also allow selecting `$as`-produced fields (typed loosely).\ntype SelectKey<Cs extends readonly Controller<any, any>[], W> = QualifiedModelKey<Cs> | QualifiedAsKey<Cs, W>;\n\ntype ValueForKey<Cs extends readonly Controller<any, any>[], K extends PropertyKey> =\n K extends `${infer N}.${infer F}`\n ? N extends Names<Cs>\n ? F extends keyof ModelOfName<Cs, N>\n ? ModelOfName<Cs, N>[F]\n : unknown\n : unknown\n : unknown;\n\ntype ProjectionFromSelect<\n Cs extends readonly Controller<any, any>[],\n S extends readonly PropertyKey[],\n> = {\n [K in S[number]]: ValueForKey<Cs, K>;\n };\n\ntype SelectMap<Cs extends readonly Controller<any, any>[], W> = Partial<Record<SelectKey<Cs, W>, string>>;\n\ntype ProjectionFromSelectMap<\n Cs extends readonly Controller<any, any>[],\n M extends Partial<Record<PropertyKey, string>>,\n> = {\n [K in keyof M as M[K] extends string ? M[K] : never]: ValueForKey<Cs, K>;\n };\n\ntype ProjectionFromSelectMapSafe<Cs extends readonly Controller<any, any>[], M> =\n M extends Partial<Record<PropertyKey, string>> ? ProjectionFromSelectMap<Cs, M> : {};\n\ntype UnionToIntersection<U> =\n [U] extends [never]\n ? {}\n : (U extends any ? (k: U) => void : never) extends (k: infer I) => void\n ? I\n : {};\n\ntype MixedSelect<Cs extends readonly Controller<any, any>[], W> =\n readonly (SelectKey<Cs, W> | SelectMap<Cs, W>)[];\n\ntype KeysFromMixedSelect<SA extends readonly unknown[]> = Extract<SA[number], PropertyKey>;\ntype MapsFromMixedSelect<SA extends readonly unknown[]> = Extract<SA[number], Partial<Record<PropertyKey, string>>>;\n\ntype ProjectionFromMixedSelect<\n Cs extends readonly Controller<any, any>[],\n SA extends readonly unknown[],\n> =\n ProjectionFromSelect<Cs, readonly KeysFromMixedSelect<SA>[]> &\n ProjectionFromSelectMapSafe<Cs, UnionToIntersection<MapsFromMixedSelect<SA>>>;\n\nfunction cartesian<T>(arrays: T[][]): T[][] {\n if (arrays.length === 0) return [[]];\n for (const a of arrays) if (a.length === 0) return [];\n\n let acc: T[][] = [[]];\n for (const items of arrays) {\n const next: T[][] = [];\n for (const prefix of acc) for (const item of items) next.push([...prefix, item]);\n acc = next;\n }\n return acc;\n}\n\nfunction hasEq(value: unknown): value is { $eq: unknown; $as?: string } {\n return typeof value === \"object\" && value !== null && \"$eq\" in value;\n}\n\nfunction hasRef(value: unknown): value is { $ref: { controller: string; field: string }; $as?: string } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"$ref\" in value &&\n typeof (value as any).$ref === \"object\" &&\n (value as any).$ref !== null &&\n \"controller\" in (value as any).$ref &&\n \"field\" in (value as any).$ref\n );\n}\n\nfunction isJoinRefObject(value: unknown): value is { controller: string; field: string } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"controller\" in (value as any) &&\n \"field\" in (value as any)\n );\n}\n\nfunction buildPrefilterObject(where: Record<string, unknown>): Record<string, unknown> {\n // Only include conditions that Collection can evaluate locally:\n // - literal values\n // - {$eq: literal}\n // Excludes cross-controller comparisons ($ref, $eq with JoinRef).\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(where)) {\n if (hasRef(v)) continue;\n if (hasEq(v)) {\n const rhs = (v as any).$eq;\n if (isJoinRefObject(rhs)) continue;\n out[k] = rhs;\n continue;\n }\n out[k] = v;\n }\n return out;\n}\n\nfunction getByName(\n comboByName: Record<string, Record<string, unknown>>,\n controller: string,\n field: string | number | symbol,\n) {\n return comboByName[controller]?.[field as any];\n}\n\nfunction applyAliasesToModel(\n model: Record<string, unknown>,\n rawWhere: Record<string, unknown>,\n comboByName: Record<string, Record<string, unknown>>,\n) {\n for (const [field, cond] of Object.entries(rawWhere)) {\n const as = (cond as any)?.$as as string | undefined;\n if (!as) continue;\n\n // Prefer the local value; if missing, try resolving from ref/eq(rhs ref).\n let value = model[field];\n if (value === undefined) {\n if (hasRef(cond)) {\n value = getByName(comboByName, cond.$ref.controller, cond.$ref.field);\n } else if (hasEq(cond) && isJoinRefObject((cond as any).$eq)) {\n const rhs = (cond as any).$eq as { controller: string; field: string };\n value = getByName(comboByName, rhs.controller, rhs.field);\n }\n }\n\n model[as] = value;\n }\n}\n\n/**\n * Joins data across controllers.\n *\n * `where.$and[controllerName]` can include:\n * - literal: `{ id: 1 }`\n * - join: `{ userId: { $ref: { controller: \\\"users\\\", field: \\\"id\\\" }, $as?: \\\"userId\\\" } }`\n * - eq: `{ status: { $eq: \\\"active\\\", $as?: \\\"state\\\" } }`\n *\n * `$as` aliases the value into the output object (legacy).\n * Prefer passing `select` as an object: `{ fieldName: \"alias\" }`.\n */\nexport default function join<const Cs extends Tuple2Plus, const W extends JoinWhere<Cs>, const S extends readonly SelectKey<Cs, W>[]>(\n from: Cs,\n where: W,\n select: S,\n): Array<ProjectionFromSelect<Cs, S>>;\nexport default function join<const Cs extends Tuple2Plus, const W extends JoinWhere<Cs>, const SM extends SelectMap<Cs, W>>(\n from: Cs,\n where: W,\n // Intersect with the constraint so object literals get contextual typing\n // (key autocomplete + excess-property checks) while keeping `SM` inference.\n select: SM & SelectMap<Cs, W>,\n): Array<ProjectionFromSelectMap<Cs, SM>>;\nexport default function join<const Cs extends Tuple2Plus, const W extends JoinWhere<Cs>, const SA extends MixedSelect<Cs, W>>(\n from: Cs,\n where: W,\n select: SA,\n): Array<ProjectionFromMixedSelect<Cs, SA>>;\nexport default function join<const Cs extends Tuple2Plus, const W extends JoinWhere<Cs>>(\n from: Cs,\n where: W = {} as W,\n select: readonly (SelectKey<Cs, W> | SelectMap<Cs, W>)[] | SelectMap<Cs, W>,\n): Array<Record<string, unknown>> {\n const andWhere = (where.$and ?? {}) as AndWhere<Cs>;\n const controllerNames = from.map((c) => c.name) as unknown as readonly string[];\n\n const perControllerMatches: Array<Array<Record<string, unknown>>> = from.map((c) => {\n const rawWhere = (andWhere[c.name as keyof AndWhere<Cs>] ?? {}) as Record<string, unknown>;\n const prefilter = buildPrefilterObject(rawWhere);\n return c.collection.find(prefilter as any).map((d) => d.toModel() as Record<string, unknown>);\n });\n\n const combos = cartesian(perControllerMatches);\n\n const filtered = combos.filter((models) => {\n const byName: Record<string, Record<string, unknown>> = {};\n for (let i = 0; i < controllerNames.length; i++) byName[controllerNames[i]] = models[i] ?? {};\n\n for (const c of from) {\n const rawWhere = (andWhere[c.name as keyof AndWhere<Cs>] ?? {}) as Record<string, unknown>;\n const model = byName[c.name] ?? {};\n\n for (const [field, cond] of Object.entries(rawWhere)) {\n if (hasRef(cond)) {\n const lhs = model[field];\n const rhs = getByName(byName, cond.$ref.controller, cond.$ref.field);\n if (lhs !== rhs) return false;\n continue;\n }\n\n if (hasEq(cond)) {\n const lhs = model[field];\n const rhs = (cond as any).$eq;\n if (isJoinRefObject(rhs)) {\n const rhsVal = getByName(byName, rhs.controller, rhs.field);\n if (lhs !== rhsVal) return false;\n } else {\n if (lhs !== rhs) return false;\n }\n }\n }\n }\n\n return true;\n });\n\n if (!select) {\n return filtered.map((ms) => Object.assign({}, ...ms));\n }\n\n return filtered.map((ms) => {\n // Rebuild per-controller view to apply $as aliases deterministically.\n const byName: Record<string, Record<string, unknown>> = {};\n for (let i = 0; i < controllerNames.length; i++) byName[controllerNames[i]] = { ...(ms[i] ?? {}) };\n\n for (const c of from) {\n const rawWhere = (andWhere[c.name as keyof AndWhere<Cs>] ?? {}) as Record<string, unknown>;\n applyAliasesToModel(byName[c.name] ?? {}, rawWhere, byName);\n }\n\n // Now project.\n const out: Record<string, unknown> = {};\n\n const getQualified = (qualified: string): unknown => {\n const dot = qualified.indexOf(\".\");\n if (dot <= 0) return undefined;\n const controller = qualified.slice(0, dot);\n const field = qualified.slice(dot + 1);\n const model = byName[controller] ?? {};\n return (model as any)[field];\n };\n\n if (Array.isArray(select)) {\n for (const item of select as ReadonlyArray<unknown>) {\n if (typeof item === \"string\") {\n out[item] = getQualified(item);\n continue;\n }\n if (typeof item === \"object\" && item !== null) {\n for (const [key, as] of Object.entries(item)) {\n if (typeof as !== \"string\" || as.length === 0) continue;\n out[as] = getQualified(key);\n }\n }\n }\n } else {\n for (const [key, as] of Object.entries(select)) {\n if (typeof as !== \"string\" || as.length === 0) continue;\n out[as] = getQualified(key);\n }\n }\n\n return out;\n });\n}\n\n// Type-check-only example (kept unreachable to avoid runtime side effects).\nif (false) {\n join(\n [\n new Controller<{ name: string; age: number; city: string }, \"users\">(\"users\"),\n new Controller<{ name: string; title: string; body: string; creator: string }, \"posts\">(\"posts\"),\n ],\n {\n $and: {\n users: {\n name: {\n $ref: {\n controller: \"posts\",\n field: \"creator\",\n },\n },\n },\n },\n } as const,\n [\"posts._id\"]\n )[0];\n}\n","import Controller from \"./Controller\";\n\n/**\n * Registry for controllers, keyed by `controller.name`.\n *\n * Used by React helpers (`ContextProvider`, `useController`, `useRegister`), but\n * can be used in any framework.\n *\n * @example\n * ```ts\n * const store = createObjectStore();\n * store.register(new UsersController(\"users\"));\n * const users = store.get(\"users\");\n * ```\n */\nexport default class ObjectStore {\n public store = new Map<string, Controller<any, any>>();\n\n /**\n * Register a controller instance in this store.\n */\n register<TVariable, TName extends string>(\n controller: Controller<TVariable, TName>,\n ) {\n this.store.set(controller.name, controller);\n }\n\n /**\n * Get a controller by name.\n *\n * Throws if not found. Register controllers up front via `register()`.\n */\n get<TVariable, TName extends string>(name: TName) {\n const controller = this.store.get(name);\n\n if (!controller) {\n throw Error(`Controller with name ${name} is not registered`);\n }\n\n return controller as Controller<TVariable, TName>;\n }\n\n /**\n * Remove a controller from the store.\n */\n remove<TVariable, TName extends string>(name: TName) {\n this.store.delete(name);\n }\n\n /**\n * Initialise all registered controllers.\n *\n * This is equivalent to calling `controller.initialise()` for each controller.\n */\n initialise() {\n this.store.forEach((controller) => {\n controller.initialise();\n });\n }\n}\n\nconst _objectStore = new ObjectStore();\n\n/**\n * Returns a singleton store instance.\n *\n * `ContextProvider` uses this by default.\n */\nexport function getDefaultObjectStore() {\n return _objectStore;\n}\n\n/**\n * Create a new store instance (non-singleton).\n */\nexport function createObjectStore() {\n return new ObjectStore();\n}\n","import { StorageManager } from \"../core/StorageManager\";\n\ntype Key = string;\n\nexport interface IndexDbStorageManagerOptions {\n /**\n * IndexedDB database name.\n */\n dbName?: string;\n /**\n * IndexedDB object store name.\n */\n storeName?: string;\n /**\n * Prefix used to namespace keys within the object store.\n */\n prefix?: string;\n}\n\n/**\n * IndexedDB-backed StorageManager.\n *\n * This is fully async (no in-memory cache needed).\n *\n * Stores snapshots as array-of-models under `${prefix}${name}`.\n */\nexport default class IndexDbStorageManager extends StorageManager<any> {\n private dbName: string;\n private storeName: string;\n private prefix: string;\n\n private dbPromise: Promise<IDBDatabase> | null = null;\n\n constructor(options: IndexDbStorageManagerOptions = {}) {\n super();\n this.dbName = options.dbName ?? \"live-cache\";\n this.storeName = options.storeName ?? \"collections\";\n this.prefix = options.prefix ?? \"live-cache:\";\n }\n\n private key(name: string) {\n return `${this.prefix}${name}`;\n }\n\n private openDb(): Promise<IDBDatabase> {\n if (this.dbPromise) return this.dbPromise;\n\n this.dbPromise = new Promise((resolve, reject) => {\n if (typeof indexedDB === \"undefined\") {\n reject(new Error(\"indexedDB is not available in this environment\"));\n return;\n }\n\n const request = indexedDB.open(this.dbName, 1);\n\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(this.storeName)) {\n db.createObjectStore(this.storeName);\n }\n };\n\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error ?? new Error(\"Failed to open IndexedDB\"));\n });\n\n return this.dbPromise;\n }\n\n private async idbGet(key: Key): Promise<any[] | null> {\n const db = await this.openDb();\n\n return await new Promise((resolve, reject) => {\n const tx = db.transaction(this.storeName, \"readonly\");\n const store = tx.objectStore(this.storeName);\n const req = store.get(key);\n req.onsuccess = () => {\n const value = req.result;\n if (!value) return resolve(null);\n resolve(Array.isArray(value) ? value : null);\n };\n req.onerror = () => reject(req.error ?? new Error(\"IndexedDB get failed\"));\n });\n }\n\n private async idbSet(key: Key, value: any[]): Promise<void> {\n const db = await this.openDb();\n\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(this.storeName, \"readwrite\");\n const store = tx.objectStore(this.storeName);\n store.put(value, key);\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error ?? new Error(\"IndexedDB set failed\"));\n tx.onabort = () => reject(tx.error ?? new Error(\"IndexedDB set aborted\"));\n });\n }\n\n private async idbDelete(key: Key): Promise<void> {\n const db = await this.openDb();\n\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(this.storeName, \"readwrite\");\n const store = tx.objectStore(this.storeName);\n store.delete(key);\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error ?? new Error(\"IndexedDB delete failed\"));\n tx.onabort = () => reject(tx.error ?? new Error(\"IndexedDB delete aborted\"));\n });\n }\n\n async get<T>(name: string): Promise<T[]> {\n const k = this.key(name);\n try {\n const value = await this.idbGet(k);\n return (value ?? []) as T[];\n } catch {\n return [];\n }\n }\n\n async set(name: string, models: any[]): Promise<void> {\n const k = this.key(name);\n const value = Array.isArray(models) ? models : [];\n try {\n await this.idbSet(k, value);\n } catch {\n // ignore write errors\n }\n }\n\n async delete(name: string): Promise<void> {\n const k = this.key(name);\n try {\n await this.idbDelete(k);\n } catch {\n // ignore delete errors\n }\n }\n}\n\n","import { StorageManager } from \"../core/StorageManager\";\n\n/**\n * `localStorage`-backed `StorageManager`.\n *\n * Stores snapshots as JSON under `${prefix}${name}`.\n * Reads return `[]` on failure (private mode, JSON parse issues, etc).\n */\nexport default class LocalStorageStorageManager extends StorageManager<any> {\n prefix: string;\n\n constructor(prefix = \"live-cache:\") {\n super();\n this.prefix = prefix;\n }\n\n private key(name: string) {\n return `${this.prefix}${name}`;\n }\n\n async get<T>(name: string): Promise<T[]> {\n try {\n const raw = localStorage.getItem(this.key(name));\n if (!raw) return [];\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }\n\n async set(name: string, models: any[]): Promise<void> {\n try {\n localStorage.setItem(this.key(name), JSON.stringify(models));\n } catch {\n // ignore quota / private mode issues\n }\n }\n\n async delete(name: string): Promise<void> {\n try {\n localStorage.removeItem(this.key(name));\n } catch {\n // ignore\n }\n }\n}\n","import React, { createContext, ReactNode, useMemo } from \"react\";\nimport { getDefaultObjectStore } from \"../core/ObjectStore\";\nimport Controller from \"../core/Controller\";\n\ninterface Props {\n store?: ReturnType<typeof getDefaultObjectStore>;\n children: ReactNode;\n}\n\nexport const context = createContext<ReturnType<\n typeof getDefaultObjectStore\n> | null>(null);\n\n/**\n * React context provider for an `ObjectStore`.\n *\n * `useController()` reads the store from this context by default.\n *\n * @example\n * ```tsx\n * <ContextProvider>\n * <App />\n * </ContextProvider>\n * ```\n */\nexport default function ContextProvider({\n children,\n store = getDefaultObjectStore(),\n}: Props) {\n return <context.Provider value={store}>{children}</context.Provider>;\n}\n\n/**\n * Register controllers in a store (defaults to the singleton store).\n *\n * This is usually called at component mount time.\n *\n * @example\n * ```tsx\n * useRegister([usersController, postsController]);\n * ```\n */\nexport function useRegister(\n controller: Controller<any, any>[],\n store = getDefaultObjectStore()\n) {\n const stored = useMemo(() => {\n controller.forEach((c) => {\n store.register(c);\n });\n return store;\n }, [store, controller]);\n\n return stored;\n}\n","import { useContext, useEffect, useMemo, useState } from \"react\";\nimport ObjectStore from \"../core/ObjectStore\";\nimport { context } from \"./Context\";\nimport { ModelType } from \"../core/Document\";\nimport Controller from \"../core/Controller\";\n\ninterface ControllerOptions {\n store?: ObjectStore;\n initialise?: boolean;\n abortOnUnmount?: boolean;\n withInvalidation?: boolean;\n}\n\nexport interface UseControllerResult<TVariable, TName extends string> {\n controller: Controller<TVariable, TName>;\n data: ModelType<TVariable>[];\n loading: boolean;\n error: unknown;\n}\n\n/**\n * React hook to subscribe to a registered controller.\n *\n * - Looks up the controller by name from the `ObjectStore` (context by default)\n * - Subscribes to `controller.publish()`\n * - Exposes `data`, `loading`, `error`, and the `controller` instance\n *\n * @param name - controller name\n * @param where - optional `Collection.find()` filter (string `_id` or partial)\n * @param options - store selection, initialise behavior, abort-on-unmount, and invalidation wiring\n *\n * When `options.withInvalidation` is true, this hook calls `controller.invalidate()` once on mount\n * and calls the returned cleanup function on unmount.\n *\n * @example\n * ```tsx\n * const { data, controller } = useController<User, \"users\">(\"users\");\n * return (\n * <button onClick={() => void controller.invalidate()}>Refresh</button>\n * );\n * ```\n */\nexport default function useController<TVariable, TName extends string>(\n name: TName,\n where?: string | Partial<TVariable>,\n options?: ControllerOptions,\n): UseControllerResult<TVariable, TName> {\n const initialise = options?.initialise ?? true;\n const optionalStore = options?.store;\n const abortOnUnmount = options?.abortOnUnmount ?? true;\n const withInvalidation = options?.withInvalidation ?? true;\n\n const [data, setData] = useState<ModelType<TVariable>[]>([]);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<unknown>(null);\n\n const defaultStore = useContext(context);\n const store = optionalStore ?? defaultStore ?? null;\n if (!store) {\n throw Error(\"Store is not defined\");\n }\n\n const controller = useMemo(() => store.get<TVariable, TName>(name), [store, name]);\n useEffect(() => {\n if (initialise) {\n controller.initialise();\n }\n const callback = () => {\n setLoading(controller.loading);\n setError(controller.error ?? null);\n setData(controller.collection.find(where).map((item) => item.toModel()));\n };\n\n // Prime state immediately.\n callback();\n\n const cleanup = controller.publish(callback);\n\n let cleanupInvalidation: () => void = () => { };\n if (withInvalidation) {\n cleanupInvalidation = controller.invalidate();\n }\n\n return () => {\n if (abortOnUnmount) {\n controller.abort();\n }\n cleanup();\n cleanupInvalidation();\n };\n }, [controller, where, initialise, abortOnUnmount, withInvalidation]);\n\n return { controller, data, loading, error };\n}\n","import React, { useEffect, useState } from 'react'\nimport Controller from '../core/Controller';\nimport join from '../core/join';\n\n\ntype Args = Parameters<typeof join>;\ntype From = Args[0];\ntype Where = Args[1];\ntype Select = Args[2];\n\ntype Result = ReturnType<typeof join>;\n\ninterface UseJoinControllerProps {\n from: From;\n where: Where;\n select: Select;\n}\n\n/**\n * React hook that recomputes a `join()` projection whenever any of the `from` controllers commit.\n *\n * @example\n * ```tsx\n * const rows = useJoinController({\n * from: [usersController, postsController] as const,\n * where: { $and: { posts: { userId: { $ref: { controller: \"users\", field: \"id\" } } } } } as const,\n * select: [\"users.name\", \"posts.title\"] as const,\n * });\n * ```\n */\nexport default function useJoinController({ from, where, select }: UseJoinControllerProps) {\n\n const [data, setData] = useState<Result>([]);\n\n\n useEffect(() => {\n\n const callback = () => {\n setData(join(from, where, select));\n }\n\n callback();\n\n const cleanup = from.map((c) => c.publish(callback));\n\n return () => {\n cleanup.forEach((c) => c());\n }\n\n }, [from, where, select])\n\n\n\n return data;\n\n}\n","// Main library exports\nimport Collection from \"./core/Collection\";\nimport Controller from \"./core/Controller\";\nimport Document from \"./core/Document\";\nimport join from \"./core/join\";\nimport ObjectStore, {\n createObjectStore,\n getDefaultObjectStore,\n} from \"./core/ObjectStore\";\nimport { DefaultStorageManager, StorageManager } from \"./core/StorageManager\";\nimport IndexDbStorageManager from \"./storage-manager/IndexDbStorageManager\";\nimport LocalStorageStorageManager from \"./storage-manager/LocalStorageManager\";\n\n// React helpers\nimport ContextProvider, { useRegister } from \"./react/Context\";\nimport useController from \"./react/useController\";\nimport useJoinController from \"./react/useJoinController\";\n\n// Export core classes / helpers\nexport {\n Collection,\n Controller,\n Document,\n join,\n ObjectStore,\n createObjectStore,\n getDefaultObjectStore,\n StorageManager,\n DefaultStorageManager,\n IndexDbStorageManager,\n LocalStorageStorageManager,\n ContextProvider,\n useRegister,\n useController,\n useJoinController,\n};\n\n// Default export for UMD/browser usage\nexport default {\n Collection,\n Controller,\n Document,\n join,\n ObjectStore,\n createObjectStore,\n getDefaultObjectStore,\n StorageManager,\n DefaultStorageManager,\n IndexDbStorageManager,\n LocalStorageStorageManager,\n ContextProvider,\n useRegister,\n useController,\n useJoinController,\n};\n"],"names":["createContext","useMemo","useState","useContext","useEffect"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../node_modules/tslib/tslib.es6.js","../src/core/Document.ts","../src/core/Collection.ts","../src/core/Invalidator.ts","../src/core/StorageManager.ts","../src/core/Controller.ts","../src/core/join.ts","../src/core/ObjectStore.ts","../src/core/Transactions.ts","../src/storage-manager/IndexDbStorageManager.ts","../src/storage-manager/LocalStorageManager.ts","../src/react/Context.tsx","../src/react/useController.ts","../src/react/useJoinController.ts","../src/invalidator/TimeoutInvalidator.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/*\n * A Single Model stores the data for a single item.\n */\n\n/**\n * A single stored record.\n *\n * `Document<T>` wraps raw data and adds:\n * - a generated `_id` (MongoDB-style ObjectId)\n * - `updatedAt` timestamp, refreshed on updates\n *\n * Use `toModel()` when you need a plain object including `_id`\n * (this is what `Controller` publishes and persists).\n *\n * @typeParam TVariable - data shape without `_id`\n */\nexport default class Document<TVariable> {\n public _id: string;\n private data: TVariable;\n public updatedAt: number;\n\n // Random value generated once per process (5 bytes)\n private static processId = Math.floor(Math.random() * 0xffffffffff);\n\n constructor(data: TVariable, counter = 0 * 0xffffff) {\n this._id = Document.generateId(counter);\n this.data = data;\n this.updatedAt = Date.now();\n }\n\n updateData(data: Partial<TVariable>) {\n this.data = {\n ...this.data,\n ...data,\n };\n this.updatedAt = Date.now();\n }\n\n /**\n * Convert to a plain model including `_id`.\n */\n toModel() {\n return {\n _id: this._id,\n ...this.data,\n };\n }\n\n /**\n * Convert to raw data (without `_id`).\n */\n toData() {\n return { ...this.data };\n }\n\n /**\n * Generate a MongoDB-style ObjectId (24 hex characters).\n *\n * Format: timestamp (4 bytes) + random process id (5 bytes) + counter (3 bytes)\n */\n static generateId(_counter: number): string {\n // MongoDB ObjectId structure (12 bytes = 24 hex chars):\n // - 4 bytes: timestamp (seconds since Unix epoch)\n // - 5 bytes: random process identifier\n // - 3 bytes: incrementing counter\n\n // 1. Timestamp (4 bytes) - seconds since Unix epoch\n const timestamp = Math.floor(Date.now() / 1000);\n\n // 2. Process identifier (5 bytes) - random value\n const processId = this.processId;\n\n // 3. Counter (3 bytes) - incrementing counter with wraparound\n const counter = (_counter + 1) % 0xffffff;\n\n // Convert to hexadecimal strings with proper padding\n const timestampHex = timestamp.toString(16).padStart(8, \"0\");\n const processIdHex = processId.toString(16).padStart(10, \"0\");\n const counterHex = counter.toString(16).padStart(6, \"0\");\n\n // Combine into 24-character hex string\n return timestampHex + processIdHex + counterHex;\n }\n}\n\n/**\n * Convenience type: the return type of `Document<T>[\"toModel\"]`.\n */\nexport type ModelType<K> = ReturnType<Document<K>[\"toModel\"]>;\n","/*\n * A List Model stores a list of items.\n */\n\nimport Document from \"./Document\";\n\n/**\n * An in-memory collection of documents with simple hash-based indexes.\n *\n * - Insert/update/delete operations keep indexes consistent.\n * - `find()` / `findOne()` attempt indexed lookups first and fall back to linear scan.\n *\n * This is commonly used via `Controller.collection`.\n *\n * @typeParam TVariable - the data shape stored in the collection (without `_id`)\n * @typeParam TName - the collection name (string-literal type)\n */\nexport default class Collection<TVariable, TName extends string> {\n // hash of conditions mapping to _id\n private dataMap: Record<string, Document<TVariable>> = {};\n private indexes: Record<string, string[]> = {};\n private counter: number = 0;\n\n constructor(public name: TName) { }\n\n /**\n * Clear all in-memory documents and indexes.\n */\n public clear() {\n this.dataMap = {};\n this.indexes = {};\n this.counter = 0;\n }\n\n /**\n * Add a document to all relevant indexes\n */\n private addToIndexes(doc: Document<TVariable>): void {\n const model = doc.toModel();\n\n // Create index entries for each property\n for (const [key, value] of Object.entries(model)) {\n if (key === \"_id\") continue; // Skip _id as it's the primary key\n\n const indexKey = Collection.hash({ [key]: value });\n if (!this.indexes[indexKey]) {\n this.indexes[indexKey] = [];\n }\n\n // Add document _id to index if not already present\n if (!this.indexes[indexKey].includes(doc._id)) {\n this.indexes[indexKey].push(doc._id);\n }\n }\n\n // Also create a compound index for the full document conditions\n const fullIndexKey = Collection.hash(model);\n if (!this.indexes[fullIndexKey]) {\n this.indexes[fullIndexKey] = [];\n }\n if (!this.indexes[fullIndexKey].includes(doc._id)) {\n this.indexes[fullIndexKey].push(doc._id);\n }\n }\n\n /**\n * Remove a document from all indexes\n */\n private removeFromIndexes(doc: Document<TVariable>): void {\n const model = doc.toModel();\n\n // Remove from all property indexes\n for (const [key, value] of Object.entries(model)) {\n if (key === \"_id\") continue;\n\n const indexKey = Collection.hash({ [key]: value });\n if (this.indexes[indexKey]) {\n this.indexes[indexKey] = this.indexes[indexKey].filter(\n (id) => id !== doc._id,\n );\n\n // Clean up empty indexes\n if (this.indexes[indexKey].length === 0) {\n delete this.indexes[indexKey];\n }\n }\n }\n\n // Remove from compound index\n const fullIndexKey = Collection.hash(model);\n if (this.indexes[fullIndexKey]) {\n this.indexes[fullIndexKey] = this.indexes[fullIndexKey].filter(\n (id) => id !== doc._id,\n );\n if (this.indexes[fullIndexKey].length === 0) {\n delete this.indexes[fullIndexKey];\n }\n }\n }\n\n /**\n * Find a single document by _id or by matching conditions (optimized with indexes)\n */\n findOne(where: string | Partial<TVariable>): Document<TVariable> | null {\n if (typeof where === \"string\") {\n return this.dataMap[where] || null;\n }\n\n // Try to use index for faster lookup\n const indexKey = Collection.hash(where);\n if (this.indexes[indexKey] && this.indexes[indexKey].length > 0) {\n const docId = this.indexes[indexKey][0];\n const doc = this.dataMap[docId];\n\n // Verify the document still matches (in case of hash collision)\n if (doc && this.matchesConditions(doc, where)) {\n return doc;\n }\n }\n\n // Fallback to linear search if index lookup fails\n return (\n Object.values(this.dataMap).find((doc) =>\n this.matchesConditions(doc, where),\n ) ?? null\n );\n }\n\n /**\n * Find all documents matching the conditions (optimized with indexes)\n */\n find(where?: string | Partial<TVariable>): Document<TVariable>[] {\n // If no conditions, return all documents\n if (!where || Object.keys(where).length === 0) {\n return Object.values(this.dataMap);\n }\n\n if (typeof where === \"string\") {\n const doc = this.dataMap[where];\n return doc ? [doc] : [];\n }\n\n // Try to use index for faster lookup\n const indexKey = Collection.hash(where);\n if (this.indexes[indexKey]) {\n // Get candidate documents from index\n const candidateDocs = this.indexes[indexKey]\n .map((id) => this.dataMap[id])\n .filter((doc) => doc && this.matchesConditions(doc, where));\n\n if (candidateDocs.length > 0) {\n return candidateDocs;\n }\n }\n\n // Fallback to linear search\n return Object.values(this.dataMap).filter((doc) =>\n this.matchesConditions(doc, where),\n );\n }\n\n /**\n * Helper method to check if a document matches the conditions\n */\n private matchesConditions(\n doc: Document<TVariable>,\n where: Partial<TVariable>,\n ): boolean {\n const model = doc.toModel();\n return Object.entries(where).every(([key, value]) => {\n if (!(key in model)) return false;\n return (\n Collection.hash(model[key as keyof typeof model]) ===\n Collection.hash(value)\n );\n });\n }\n\n /**\n * Insert a new document into the collection\n */\n insertOne(data: TVariable): Document<TVariable> {\n const doc = new Document<TVariable>(data, this.counter++);\n this.dataMap[doc._id] = doc;\n\n // Add to indexes\n this.addToIndexes(doc);\n\n return doc;\n }\n\n /**\n * Delete a document by _id or by matching conditions\n */\n deleteOne(where: string | Partial<TVariable>): boolean {\n const doc = this.findOne(where);\n if (!doc) {\n return false;\n }\n\n // Remove from indexes first\n this.removeFromIndexes(doc);\n\n // Remove from dataMap\n delete this.dataMap[doc._id];\n\n return true;\n }\n\n /**\n * Find a document and update it with new data\n *\n * @example\n * ```ts\n * users.findOneAndUpdate({ id: 1 }, { name: \"Updated\" });\n * ```\n */\n findOneAndUpdate(\n where: string | Partial<TVariable>,\n update: Partial<TVariable>,\n ): Document<TVariable> | null {\n const doc = this.findOne(where);\n if (!update) return doc;\n if (!doc) {\n // If document not found, insert a new one with the provided update data\n const newDoc = this.insertOne(update as TVariable);\n this.addToIndexes(newDoc);\n return newDoc;\n }\n\n // Keep indexes consistent: remove old index entries, update, then re-index\n this.removeFromIndexes(doc);\n doc.updateData(update);\n this.addToIndexes(doc);\n\n return doc;\n }\n\n /**\n * Insert multiple documents into the collection at once\n * @param dataArray Array of data objects to insert\n * @returns Array of inserted documents\n */\n insertMany(dataArray: TVariable[]): Document<TVariable>[] {\n const insertedDocs: Document<TVariable>[] = [];\n\n for (const data of dataArray) {\n const doc = new Document<TVariable>(data, this.counter++);\n this.dataMap[doc._id] = doc;\n\n // Add to indexes\n this.addToIndexes(doc);\n\n insertedDocs.push(doc);\n }\n\n return insertedDocs;\n }\n\n /**\n * Serialize the collection to a plain object for storage\n * @returns A plain object representation of the collection\n */\n serialize(): string {\n const data = {\n counter: this.counter,\n documents: Object.values(this.dataMap).map((doc) => doc.toModel()),\n };\n return JSON.stringify(data);\n }\n\n /**\n * Deserialize and restore collection data from storage\n * @param serializedData The serialized collection data\n * @returns A new Collection instance with the restored data\n */\n static deserialize<T, N extends string>(\n name: N,\n serializedData: string,\n ): Collection<T, N> {\n const collection = new Collection<T, N>(name);\n\n try {\n const data = JSON.parse(serializedData);\n\n // Restore counter\n collection.counter = data.counter || 0;\n\n // Restore documents\n if (data.documents && Array.isArray(data.documents)) {\n for (let i = 0; i < data.documents.length; i++) {\n const docData = data.documents[i];\n const { _id, ...rest } = docData;\n\n // Create document without counter increment. Internal _id is generated.\n const doc = new Document<T>(rest as any, i);\n\n // Add to dataMap using the generated internal id\n collection.dataMap[doc._id] = doc;\n\n // Rebuild indexes for this document\n collection.addToIndexes(doc);\n }\n }\n\n } catch (error) {\n console.error(\"Failed to deserialize collection data:\", error);\n }\n\n return collection;\n }\n\n /**\n * Hydrate the current collection instance with data from storage\n * This clears existing data and replaces it with the deserialized data\n * @param serializedData The serialized collection data\n */\n hydrate(serializedData: string): void {\n try {\n const data = JSON.parse(serializedData);\n\n // Clear existing data\n this.dataMap = {};\n this.indexes = {};\n this.counter = data.counter || 0;\n\n // Restore documents\n if (data.documents && Array.isArray(data.documents)) {\n for (let i = 0; i < data.documents.length; i++) {\n const docData = data.documents[i];\n const { _id, ...rest } = docData;\n\n // Create document without counter increment. Internal _id is generated.\n const doc = new Document<TVariable>(rest as any, i);\n\n // Add to dataMap using the generated internal id\n this.dataMap[_id] = doc;\n\n // Rebuild indexes for this document\n this.addToIndexes(doc);\n }\n }\n\n } catch (error) {\n console.error(\"Failed to hydrate collection:\", error);\n }\n }\n\n /**\n * Dehydrate the collection to a format suitable for storage\n * This is an alias for serialize() for semantic clarity\n * @returns A serialized string representation of the collection\n */\n dehydrate(): string {\n return this.serialize();\n }\n\n static hash(data: any): string {\n // Browser-safe hashing: stable stringify + FNV-1a (32-bit).\n return Collection.fnv1a(Collection.stableStringify(data));\n }\n\n private static stableStringify(value: any): string {\n const type = typeof value;\n\n if (value === null) return \"null\";\n\n if (type === \"string\") return JSON.stringify(value);\n if (type === \"number\") {\n if (Number.isFinite(value)) return String(value);\n return JSON.stringify(String(value));\n }\n if (type === \"boolean\") return value ? \"true\" : \"false\";\n if (type === \"undefined\") return \"undefined\";\n if (type === \"bigint\") return JSON.stringify(`bigint:${value.toString()}`);\n if (type === \"symbol\") return JSON.stringify(`symbol:${String(value)}`);\n if (type === \"function\") return JSON.stringify(\"function\");\n\n if (Array.isArray(value)) {\n return (\n \"[\" + value.map((v) => Collection.stableStringify(v)).join(\",\") + \"]\"\n );\n }\n\n if (value instanceof Date) {\n return '{\"$date\":' + JSON.stringify(value.toISOString()) + \"}\";\n }\n\n // Plain object: sort keys for determinism\n const keys = Object.keys(value).sort();\n return (\n \"{\" +\n keys\n .map(\n (k) => JSON.stringify(k) + \":\" + Collection.stableStringify(value[k]),\n )\n .join(\",\") +\n \"}\"\n );\n }\n\n private static fnv1a(input: string): string {\n // FNV-1a 32-bit\n let hash = 0x811c9dc5;\n\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i);\n hash = Math.imul(hash, 0x01000193);\n }\n\n // Unsigned + fixed-width hex to keep index keys uniform\n return (hash >>> 0).toString(16).padStart(8, \"0\");\n }\n}\n","export class Invalidator<TVariable> {\n protected invalidator = (...data: TVariable[]): void => {\n throw Error(\"The invalidator needs to be binded from the controller\");\n }\n\n bind(invalidator: typeof this.invalidator) {\n this.invalidator = invalidator;\n }\n\n public registerInvalidation() {\n throw Error(\"Method not implemented\");\n }\n\n public unregisterInvalidation() {\n throw Error(\"Method not implemented\");\n }\n}\n\nexport class DefaultInvalidator<TVariable> extends Invalidator<TVariable> {\n bind(invalidator: (...data: TVariable[]) => void) {\n super.bind(invalidator);\n }\n\n public registerInvalidation() {\n // No-op\n }\n\n public unregisterInvalidation() {\n return () => { };\n }\n}\n","import { ModelType } from \"./Document\";\n\n/**\n * Storage adapter used by `Controller` to persist and hydrate snapshots.\n *\n * A controller stores a **full snapshot** (array of models) keyed by `name`.\n * Implementations should be resilient: reads should return `[]` on failure.\n */\nexport abstract class StorageManager<TVariable> {\n public prefix: string;\n constructor(prefix: string) {\n this.prefix = prefix;\n }\n\n /**\n * Get a previously persisted snapshot for a controller name.\n *\n * @returns Array of models (each model includes `_id`)\n */\n public abstract get(name: string): Promise<TVariable | null>;\n\n /**\n * Persist a snapshot for a controller name.\n *\n * Controllers call this from `commit()`.\n */\n public abstract set(name: string, models: TVariable): Promise<void>;\n\n /**\n * Delete the persisted snapshot for a controller name.\n */\n public abstract delete(name: string): Promise<void>;\n\n public abstract getParams(): Promise<string[]>;\n\n}\n\n/**\n * No-op storage manager.\n *\n * Useful in environments where you don’t want persistence (tests, ephemeral caches, etc).\n */\nexport class DefaultStorageManager<TVariable> extends StorageManager<TVariable> {\n constructor(prefix: string) {\n super(prefix);\n }\n public async get(name: string): Promise<TVariable | null> {\n return Promise.resolve(null);\n }\n\n public async set(name: string, models: TVariable): Promise<void> {\n return Promise.resolve();\n }\n\n public async delete(_name: string): Promise<void> {\n return Promise.resolve();\n }\n\n public async getParams(): Promise<string[]> {\n return Promise.resolve([]);\n }\n}\n","import Collection from \"./Collection\";\nimport Document, { ModelType } from \"./Document\";\nimport { DefaultInvalidator, Invalidator } from \"./Invalidator\";\nimport { DefaultStorageManager, StorageManager } from \"./StorageManager\";\n\n/**\n * Controller is the recommended integration layer for server-backed resources.\n *\n * It wraps a `Collection` with:\n * - hydration (`initialise()`)\n * - persistence (`commit()` writes a full snapshot using the configured `StorageManager`)\n * - subscriptions (`publish()`)\n * - invalidation hooks (`invalidate()`, `refetch()`)\n *\n * The intended mutation pattern is:\n * 1) mutate `this.collection` (insert/update/delete)\n * 2) call `await this.commit()` so subscribers update and storage persists\n *\n * @typeParam TVariable - the “data” shape stored in the collection (without `_id`)\n * @typeParam TName - a stable, string-literal name for this controller/collection\n *\n * @example\n * ```ts\n * type User = { id: number; name: string };\n *\n * class UsersController extends Controller<User, \"users\"> {\n * async fetchAll(): Promise<[User[], number]> {\n * const res = await fetch(\"/api/users\");\n * const data = (await res.json()) as User[];\n * return [data, data.length];\n * }\n *\n * invalidate(): () => void {\n * this.abort();\n * void this.refetch();\n * return () => {};\n * }\n *\n * async renameUser(id: number, name: string) {\n * this.collection.findOneAndUpdate({ id }, { name });\n * await this.commit();\n * }\n * }\n * ```\n */\nexport interface ControllerOptions<TVariable, TName extends string> {\n storageManager?: StorageManager<TVariable[]>;\n pageSize?: number;\n invalidator?: Invalidator<TVariable>;\n initialiseOnMount?: boolean;\n}\nexport default class Controller<TVariable, TName extends string> {\n public name: TName;\n public collection: Collection<TVariable, TName>;\n protected subscribers: Set<(model: ModelType<TVariable>[]) => void> = new Set();\n protected storageManager: StorageManager<TVariable[]>;\n loading: boolean = false;\n error: unknown = null;\n public total: number = -1;\n public pageSize: number = -1;\n public abortController: AbortController | null = null;\n public invalidator: Invalidator<TVariable>;\n /**\n * Abort any in-flight work owned by this controller (typically network fetches).\n *\n * This method also installs a new `AbortController` so subclasses can safely\n * pass `this.abortController.signal` to the next request.\n */\n public abort() {\n if (this.abortController) {\n this.abortController.abort();\n }\n this.abortController = new AbortController();\n }\n\n protected updateTotal(total: number) {\n this.total = total;\n }\n\n protected updatePageSize(pageSize: number) {\n this.pageSize = pageSize;\n }\n\n /**\n * Fetch the complete dataset for this controller.\n *\n * Subclasses must implement this. Return `[rows, total]` where `total` is the\n * total number of rows available on the backend (useful for pagination).\n */\n public async fetchAll(): Promise<[TVariable[], number]> {\n throw Error(\"Not Implemented\");\n }\n\n /**\n * Initialise (hydrate) the controller's collection.\n *\n * Resolution order:\n * 1) If the in-memory collection is already non-empty: do nothing.\n * 2) Else, try `storageManager.get(name)` and hydrate from persisted snapshot.\n * 3) Else, call `fetchAll()` and populate from the backend.\n *\n * A successful initialise ends with `commit()` so subscribers receive the latest snapshot.\n */\n public async initialise(): Promise<void> {\n if (this.loading) return;\n // If the collection is not empty, return.\n let data = this.collection.find().map((doc) => doc.toData());\n if (data.length !== 0) {\n return;\n }\n\n // If the collection is empty, check the storage manager.\n data = (await this.storageManager.get(this.name)) ?? [];\n\n if (data.length !== 0) {\n this.updateTotal(this.collection.find().length);\n this.collection.insertMany(data);\n await this.commit();\n return;\n }\n\n // If the storage manager is empty, fetch the data from the server.\n try {\n this.loading = true;\n const [_data, total] = await this.fetchAll();\n this.collection.insertMany(_data);\n this.updateTotal(total);\n await this.commit();\n } catch (error) {\n this.error = error;\n }\n finally {\n this.loading = false;\n }\n\n }\n\n /**\n * Subscribe to controller updates.\n *\n * The callback receives the full snapshot (`ModelType<TVariable>[]`) each time `commit()` runs.\n * Returns an unsubscribe function.\n *\n * @example\n * ```ts\n * const unsubscribe = controller.publish((rows) => console.log(rows.length));\n * // later...\n * unsubscribe();\n * ```\n */\n public publish(onChange: (data: ModelType<TVariable>[]) => void) {\n this.subscribers.add(onChange);\n return () => this.subscribers.delete(onChange);\n }\n\n /**\n * Persist the latest snapshot and notify all subscribers.\n *\n * This is intentionally private: consumers should use `commit()` which computes the snapshot.\n */\n private async subscribe(model: ModelType<TVariable>[]) {\n // Persist the full cache snapshot for hydration.\n await this.storageManager.set(\n this.name,\n this.collection.find().map((doc) => doc.toModel()),\n );\n this.subscribers.forEach((sub) => {\n sub(model);\n });\n }\n\n /**\n * Publish + persist the current snapshot.\n *\n * Call this after any local mutation of `this.collection` so:\n * - subscribers are updated (UI refresh)\n * - the `StorageManager` has the latest snapshot for future hydration\n */\n public async commit() {\n const models = this.collection.find().map((doc) => doc.toModel());\n await this.subscribe(models);\n }\n\n /**\n * Refetch data using the controller's initialise flow.\n *\n * Subclasses typically use this inside `invalidate()`.\n */\n protected refetch() {\n return this.initialise();\n }\n\n /**\n * Invalidate the cache for this controller.\n *\n * Subclasses must implement this. Common patterns:\n * - TTL based: refetch when expired\n * - SWR: revalidate in background\n * - push: refetch or patch based on websocket messages\n *\n * This method should return a cleanup function that unregisters any timers/listeners/sockets\n * created as part of invalidation wiring.\n */\n public invalidate(...data: TVariable[]): void {\n throw Error(\"Not Implemented\");\n }\n\n /**\n * Clear in-memory cache and delete persisted snapshot.\n * Publishes an empty snapshot to subscribers.\n */\n public reset() {\n void this.storageManager.delete(this.name);\n this.collection.clear();\n this.updateTotal(0);\n this.updatePageSize(-1);\n this.error = null;\n this.loading = false;\n void this.subscribe([]);\n }\n\n /**\n * Create a controller.\n *\n * @param name - stable controller/collection name\n * @param storageManager - where snapshots are persisted (defaults to no-op)\n * @param pageSize - optional pagination hint (userland)\n */\n constructor(name: TName, {\n storageManager = new DefaultStorageManager<TVariable[]>(\"live-cache:\"),\n pageSize = -1,\n invalidator = new DefaultInvalidator<TVariable>(),\n initialiseOnMount = true,\n }: ControllerOptions<TVariable, TName>) {\n this.name = name;\n this.collection = new Collection(name);\n this.storageManager = storageManager;\n this.pageSize = pageSize;\n this.invalidator = invalidator;\n this.invalidator.bind(this.invalidate.bind(this));\n if (initialiseOnMount) {\n this.initialise();\n }\n }\n}\n\n","import Controller from \"./Controller\";\nimport { ModelType } from \"./Document\";\n\n/**\n * Join data across multiple controllers by applying cross-controller equality constraints.\n *\n * `where.$and[controllerName]` can include:\n * - literal: `{ id: 1 }`\n * - join ref: `{ userId: { $ref: { controller: \"users\", field: \"id\" } } }`\n * - eq: `{ status: { $eq: \"active\" } }`\n *\n * `select` supports:\n * - array of qualified keys: `[\"users.id\", \"posts.title\"]`\n * - select-map for aliasing: `{ \"users.id\": \"userId\", \"posts.title\": \"title\" }`\n * - mixed array: `[\"users.id\", { \"posts.title\": \"title\" }]`\n *\n * @example\n * ```ts\n * const rows = join(\n * [usersController, postsController] as const,\n * {\n * $and: {\n * posts: { userId: { $ref: { controller: \"users\", field: \"id\" } } },\n * },\n * } as const,\n * [\"users.name\", \"posts.title\"] as const,\n * );\n * ```\n */\ntype ControllerName<C> = C extends Controller<any, infer N> ? N : never;\ntype ControllerVar<C> = C extends Controller<infer V, any> ? V : never;\n\ntype Tuple2Plus = readonly [\n Controller<any, any>,\n Controller<any, any>,\n ...Controller<any, any>[],\n];\n\ntype Names<Cs extends readonly Controller<any, any>[]> = ControllerName<Cs[number]>;\ntype AnyModel<Cs extends readonly Controller<any, any>[]> = ModelType<ControllerVar<Cs[number]>>;\n\ntype ControllerOfName<Cs extends readonly Controller<any, any>[], N extends string> = Extract<\n Cs[number],\n Controller<any, N>\n>;\n\ntype ModelOfName<Cs extends readonly Controller<any, any>[], N extends string> = ModelType<\n ControllerVar<ControllerOfName<Cs, N>>\n>;\n\nexport type JoinRef<Cs extends readonly Controller<any, any>[]> = {\n [N in Names<Cs>]: {\n controller: N;\n field: keyof ModelOfName<Cs, N>;\n };\n}[Names<Cs>];\n\ntype JoinEq<Cs extends readonly Controller<any, any>[], N extends Names<Cs>, K extends keyof ModelOfName<Cs, N>> = {\n $eq: ModelOfName<Cs, N>[K] | JoinRef<Cs>;\n $as?: string;\n};\n\ntype JoinRefCond<Cs extends readonly Controller<any, any>[]> = {\n $ref: JoinRef<Cs>;\n $as?: string;\n};\n\nexport type FieldCondition<\n Cs extends readonly Controller<any, any>[],\n N extends Names<Cs>,\n K extends keyof ModelOfName<Cs, N>,\n> = ModelOfName<Cs, N>[K] | JoinEq<Cs, N, K> | JoinRefCond<Cs>;\n\ntype PerControllerWhere<Cs extends readonly Controller<any, any>[], N extends Names<Cs>> = Partial<{\n [K in keyof ModelOfName<Cs, N>]: FieldCondition<Cs, N, K>;\n}>;\n\ntype AndWhere<Cs extends readonly Controller<any, any>[]> = Partial<{\n [N in Names<Cs>]: PerControllerWhere<Cs, N>;\n}>;\n\nexport type JoinWhere<Cs extends readonly Controller<any, any>[]> = {\n $and?: AndWhere<Cs>;\n};\n\ntype ExtractAs<T> = T extends { $as?: infer S } ? (S extends string ? S : never) : never;\n\n// Shallow `$as` extractor from `where.$and[controller][field]` without deep recursion.\ntype AsInPerControllerWhere<T> = T extends object ? ExtractAs<T[keyof T]> : never;\ntype AsInAndWhere<T> = T extends object ? AsInPerControllerWhere<T[keyof T]> : never;\ntype AsInJoinWhere<W> = W extends { $and?: infer A } ? AsInAndWhere<A> : never;\n\n/**\n * `keyof` on a union (`A | B`) returns only the intersection of keys (`keyof A & keyof B`),\n * which breaks IntelliSense for `select`. This helper distributes over the union to get\n * the full set of keys.\n */\ntype KeysOfUnion<T> = T extends any ? keyof T : never;\n\ntype QualifiedModelKey<Cs extends readonly Controller<any, any>[]> = {\n [N in Names<Cs>]: `${N}.${Extract<keyof ModelOfName<Cs, N>, string>}`;\n}[Names<Cs>];\n\ntype QualifiedAsKey<Cs extends readonly Controller<any, any>[], W> =\n AsInJoinWhere<W> extends infer A\n ? A extends string\n ? `${Names<Cs>}.${A}`\n : never\n : never;\n\n// Select keys are controller-qualified: \"<controller>.<field>\".\n// We also allow selecting `$as`-produced fields (typed loosely).\ntype SelectKey<Cs extends readonly Controller<any, any>[], W> = QualifiedModelKey<Cs> | QualifiedAsKey<Cs, W>;\n\ntype ValueForKey<Cs extends readonly Controller<any, any>[], K extends PropertyKey> =\n K extends `${infer N}.${infer F}`\n ? N extends Names<Cs>\n ? F extends keyof ModelOfName<Cs, N>\n ? ModelOfName<Cs, N>[F]\n : unknown\n : unknown\n : unknown;\n\ntype ProjectionFromSelect<\n Cs extends readonly Controller<any, any>[],\n S extends readonly PropertyKey[],\n> = {\n [K in S[number]]: ValueForKey<Cs, K>;\n };\n\ntype SelectMap<Cs extends readonly Controller<any, any>[], W> = Partial<Record<SelectKey<Cs, W>, string>>;\n\ntype ProjectionFromSelectMap<\n Cs extends readonly Controller<any, any>[],\n M extends Partial<Record<PropertyKey, string>>,\n> = {\n [K in keyof M as M[K] extends string ? M[K] : never]: ValueForKey<Cs, K>;\n };\n\ntype ProjectionFromSelectMapSafe<Cs extends readonly Controller<any, any>[], M> =\n M extends Partial<Record<PropertyKey, string>> ? ProjectionFromSelectMap<Cs, M> : {};\n\ntype UnionToIntersection<U> =\n [U] extends [never]\n ? {}\n : (U extends any ? (k: U) => void : never) extends (k: infer I) => void\n ? I\n : {};\n\ntype MixedSelect<Cs extends readonly Controller<any, any>[], W> =\n readonly (SelectKey<Cs, W> | SelectMap<Cs, W>)[];\n\ntype KeysFromMixedSelect<SA extends readonly unknown[]> = Extract<SA[number], PropertyKey>;\ntype MapsFromMixedSelect<SA extends readonly unknown[]> = Extract<SA[number], Partial<Record<PropertyKey, string>>>;\n\ntype ProjectionFromMixedSelect<\n Cs extends readonly Controller<any, any>[],\n SA extends readonly unknown[],\n> =\n ProjectionFromSelect<Cs, readonly KeysFromMixedSelect<SA>[]> &\n ProjectionFromSelectMapSafe<Cs, UnionToIntersection<MapsFromMixedSelect<SA>>>;\n\nfunction cartesian<T>(arrays: T[][]): T[][] {\n if (arrays.length === 0) return [[]];\n for (const a of arrays) if (a.length === 0) return [];\n\n let acc: T[][] = [[]];\n for (const items of arrays) {\n const next: T[][] = [];\n for (const prefix of acc) for (const item of items) next.push([...prefix, item]);\n acc = next;\n }\n return acc;\n}\n\nfunction hasEq(value: unknown): value is { $eq: unknown; $as?: string } {\n return typeof value === \"object\" && value !== null && \"$eq\" in value;\n}\n\nfunction hasRef(value: unknown): value is { $ref: { controller: string; field: string }; $as?: string } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"$ref\" in value &&\n typeof (value as any).$ref === \"object\" &&\n (value as any).$ref !== null &&\n \"controller\" in (value as any).$ref &&\n \"field\" in (value as any).$ref\n );\n}\n\nfunction isJoinRefObject(value: unknown): value is { controller: string; field: string } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"controller\" in (value as any) &&\n \"field\" in (value as any)\n );\n}\n\nfunction buildPrefilterObject(where: Record<string, unknown>): Record<string, unknown> {\n // Only include conditions that Collection can evaluate locally:\n // - literal values\n // - {$eq: literal}\n // Excludes cross-controller comparisons ($ref, $eq with JoinRef).\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(where)) {\n if (hasRef(v)) continue;\n if (hasEq(v)) {\n const rhs = (v as any).$eq;\n if (isJoinRefObject(rhs)) continue;\n out[k] = rhs;\n continue;\n }\n out[k] = v;\n }\n return out;\n}\n\nfunction getByName(\n comboByName: Record<string, Record<string, unknown>>,\n controller: string,\n field: string | number | symbol,\n) {\n return comboByName[controller]?.[field as any];\n}\n\nfunction applyAliasesToModel(\n model: Record<string, unknown>,\n rawWhere: Record<string, unknown>,\n comboByName: Record<string, Record<string, unknown>>,\n) {\n for (const [field, cond] of Object.entries(rawWhere)) {\n const as = (cond as any)?.$as as string | undefined;\n if (!as) continue;\n\n // Prefer the local value; if missing, try resolving from ref/eq(rhs ref).\n let value = model[field];\n if (value === undefined) {\n if (hasRef(cond)) {\n value = getByName(comboByName, cond.$ref.controller, cond.$ref.field);\n } else if (hasEq(cond) && isJoinRefObject((cond as any).$eq)) {\n const rhs = (cond as any).$eq as { controller: string; field: string };\n value = getByName(comboByName, rhs.controller, rhs.field);\n }\n }\n\n model[as] = value;\n }\n}\n\n/**\n * Joins data across controllers.\n *\n * `where.$and[controllerName]` can include:\n * - literal: `{ id: 1 }`\n * - join: `{ userId: { $ref: { controller: \\\"users\\\", field: \\\"id\\\" }, $as?: \\\"userId\\\" } }`\n * - eq: `{ status: { $eq: \\\"active\\\", $as?: \\\"state\\\" } }`\n *\n * `$as` aliases the value into the output object (legacy).\n * Prefer passing `select` as an object: `{ fieldName: \"alias\" }`.\n */\nexport default function join<const Cs extends Tuple2Plus, const W extends JoinWhere<Cs>, const S extends readonly SelectKey<Cs, W>[]>(\n from: Cs,\n where: W,\n select: S,\n): Array<ProjectionFromSelect<Cs, S>>;\nexport default function join<const Cs extends Tuple2Plus, const W extends JoinWhere<Cs>, const SM extends SelectMap<Cs, W>>(\n from: Cs,\n where: W,\n // Intersect with the constraint so object literals get contextual typing\n // (key autocomplete + excess-property checks) while keeping `SM` inference.\n select: SM & SelectMap<Cs, W>,\n): Array<ProjectionFromSelectMap<Cs, SM>>;\nexport default function join<const Cs extends Tuple2Plus, const W extends JoinWhere<Cs>, const SA extends MixedSelect<Cs, W>>(\n from: Cs,\n where: W,\n select: SA,\n): Array<ProjectionFromMixedSelect<Cs, SA>>;\nexport default function join<const Cs extends Tuple2Plus, const W extends JoinWhere<Cs>>(\n from: Cs,\n where: W = {} as W,\n select: readonly (SelectKey<Cs, W> | SelectMap<Cs, W>)[] | SelectMap<Cs, W>,\n): Array<Record<string, unknown>> {\n const andWhere = (where.$and ?? {}) as AndWhere<Cs>;\n const controllerNames = from.map((c) => c.name) as unknown as readonly string[];\n\n const perControllerMatches: Array<Array<Record<string, unknown>>> = from.map((c) => {\n const rawWhere = (andWhere[c.name as keyof AndWhere<Cs>] ?? {}) as Record<string, unknown>;\n const prefilter = buildPrefilterObject(rawWhere);\n return c.collection.find(prefilter as any).map((d) => d.toModel() as Record<string, unknown>);\n });\n\n const combos = cartesian(perControllerMatches);\n\n const filtered = combos.filter((models) => {\n const byName: Record<string, Record<string, unknown>> = {};\n for (let i = 0; i < controllerNames.length; i++) byName[controllerNames[i]] = models[i] ?? {};\n\n for (const c of from) {\n const rawWhere = (andWhere[c.name as keyof AndWhere<Cs>] ?? {}) as Record<string, unknown>;\n const model = byName[c.name] ?? {};\n\n for (const [field, cond] of Object.entries(rawWhere)) {\n if (hasRef(cond)) {\n const lhs = model[field];\n const rhs = getByName(byName, cond.$ref.controller, cond.$ref.field);\n if (lhs !== rhs) return false;\n continue;\n }\n\n if (hasEq(cond)) {\n const lhs = model[field];\n const rhs = (cond as any).$eq;\n if (isJoinRefObject(rhs)) {\n const rhsVal = getByName(byName, rhs.controller, rhs.field);\n if (lhs !== rhsVal) return false;\n } else {\n if (lhs !== rhs) return false;\n }\n }\n }\n }\n\n return true;\n });\n\n if (!select) {\n return filtered.map((ms) => Object.assign({}, ...ms));\n }\n\n return filtered.map((ms) => {\n // Rebuild per-controller view to apply $as aliases deterministically.\n const byName: Record<string, Record<string, unknown>> = {};\n for (let i = 0; i < controllerNames.length; i++) byName[controllerNames[i]] = { ...(ms[i] ?? {}) };\n\n for (const c of from) {\n const rawWhere = (andWhere[c.name as keyof AndWhere<Cs>] ?? {}) as Record<string, unknown>;\n applyAliasesToModel(byName[c.name] ?? {}, rawWhere, byName);\n }\n\n // Now project.\n const out: Record<string, unknown> = {};\n\n const getQualified = (qualified: string): unknown => {\n const dot = qualified.indexOf(\".\");\n if (dot <= 0) return undefined;\n const controller = qualified.slice(0, dot);\n const field = qualified.slice(dot + 1);\n const model = byName[controller] ?? {};\n return (model as any)[field];\n };\n\n if (Array.isArray(select)) {\n for (const item of select as ReadonlyArray<unknown>) {\n if (typeof item === \"string\") {\n out[item] = getQualified(item);\n continue;\n }\n if (typeof item === \"object\" && item !== null) {\n for (const [key, as] of Object.entries(item)) {\n if (typeof as !== \"string\" || as.length === 0) continue;\n out[as] = getQualified(key);\n }\n }\n }\n } else {\n for (const [key, as] of Object.entries(select)) {\n if (typeof as !== \"string\" || as.length === 0) continue;\n out[as] = getQualified(key);\n }\n }\n\n return out;\n });\n}\n\n// // Type-check-only example (kept unreachable to avoid runtime side effects).\n// if (false) {\n// join(\n// [\n// new Controller<{ name: string; age: number; city: string }, \"users\">(\"users\"),\n// new Controller<{ name: string; title: string; body: string; creator: string }, \"posts\">(\"posts\"),\n// ],\n// {\n// $and: {\n// users: {\n// name: {\n// $ref: {\n// controller: \"posts\",\n// field: \"creator\",\n// },\n// },\n// },\n// },\n// } as const,\n// [\"posts._id\"]\n// )[0];\n// }\n","import Controller from \"./Controller\";\n\n/**\n * Registry for controllers, keyed by `controller.name`.\n *\n * Used by React helpers (`ContextProvider`, `useController`, `useRegister`), but\n * can be used in any framework.\n *\n * @example\n * ```ts\n * const store = createObjectStore();\n * store.register(new UsersController(\"users\"));\n * const users = store.get(\"users\");\n * ```\n */\nexport default class ObjectStore {\n public store = new Map<string, Controller<any, any>>();\n private initialisePromises = new WeakMap<Controller<any, any>, Promise<void>>();\n\n /**\n * Register a controller instance in this store.\n */\n register<TVariable, TName extends string>(\n controller: Controller<TVariable, TName>,\n ) {\n this.store.set(controller.name, controller);\n }\n\n /**\n * Get a controller by name.\n *\n * Throws if not found. Register controllers up front via `register()`.\n */\n get<TVariable, TName extends string>(name: TName) {\n const controller = this.store.get(name);\n\n if (!controller) {\n throw Error(`Controller with name ${name} is not registered`);\n }\n\n return controller as Controller<TVariable, TName>;\n }\n\n /**\n * Remove a controller from the store.\n */\n remove<TVariable, TName extends string>(name: TName) {\n this.store.delete(name);\n }\n\n /**\n * Initialise all registered controllers.\n *\n * This is equivalent to calling `controller.initialise()` for each controller.\n */\n initialise() {\n this.store.forEach((controller) => {\n controller.initialise();\n });\n }\n\n /**\n * Initialise a controller once per store, even if multiple callers request it.\n */\n initialiseOnce<TVariable, TName extends string>(name: TName) {\n const controller = this.get<TVariable, TName>(name);\n const existing = this.initialisePromises.get(controller);\n if (existing) return existing;\n\n const promise = controller.initialise().finally(() => {\n if (this.initialisePromises.get(controller) === promise) {\n this.initialisePromises.delete(controller);\n }\n });\n\n this.initialisePromises.set(controller, promise);\n return promise;\n }\n}\n\nconst _objectStore = new ObjectStore();\n\n/**\n * Returns a singleton store instance.\n *\n * `ContextProvider` uses this by default.\n */\nexport function getDefaultObjectStore() {\n return _objectStore;\n}\n\n/**\n * Create a new store instance (non-singleton).\n */\nexport function createObjectStore() {\n return new ObjectStore();\n}\n","import Collection from \"./Collection\";\nimport { StorageManager } from \"./StorageManager\";\n\nclass TransactionsInstance<TVariable, TName extends string> {\n private storageManager: StorageManager<string>;\n\n constructor(storageManager: StorageManager<string>) {\n this.storageManager = storageManager;\n }\n\n public async add<TVariable, TName extends string>(collection: Collection<TVariable, TName>) {\n const transaction_name = `transaction::${collection.name}::${Date.now()}`\n await this.storageManager.set(transaction_name, collection.serialize());\n return transaction_name;\n }\n\n public async rollback(transaction_name: string, name: TName) {\n const collection = await this.get<TVariable, TName>(transaction_name, name);\n await this.storageManager.delete(transaction_name);\n return collection;\n }\n\n public async finish(name: TName) {\n const params = await this.storageManager.getParams();\n const _txn_name = `transaction::${name}::`;\n for (const param of params) {\n if (param.startsWith(_txn_name)) {\n await this.storageManager.delete(param);\n }\n }\n }\n\n public async get<TVariable, TName extends string>(transaction_name: string, name: TName): Promise<Collection<TVariable, TName>> {\n const serialized = await this.storageManager.get(transaction_name);\n if (!serialized) {\n throw new Error(\"Transaction not found\");\n }\n return Collection.deserialize<TVariable, TName>(name, serialized);\n }\n\n\n\n\n\n}\n\n\nexport default class Transactions {\n static instance: TransactionsInstance<any, any>;\n\n static createInstance(storageManager: StorageManager<string>) {\n if (Transactions.instance) {\n throw new Error(\"Transactions instance already initialized\");\n }\n Transactions.instance = new TransactionsInstance<any, any>(storageManager);\n }\n\n static getInstance() {\n if (!Transactions.instance) {\n throw new Error(\"Transactions instance not initialized\");\n }\n return Transactions.instance;\n }\n\n static async add<TVariable, TName extends string>(collection: Collection<TVariable, TName>) {\n const instance = Transactions.getInstance() as TransactionsInstance<TVariable, TName>;\n return instance.add(collection);\n }\n\n static async rollback<TVariable, TName extends string>(transaction_name: string, name: TName) {\n const instance = Transactions.getInstance() as TransactionsInstance<TVariable, TName>;\n return instance.rollback(transaction_name, name);\n }\n\n static async finish(name: string) {\n const instance = Transactions.getInstance() as TransactionsInstance<any, any>;\n return instance.finish(name);\n }\n\n static async get<TVariable, TName extends string>(transaction_name: string, name: TName) {\n const instance = Transactions.getInstance() as TransactionsInstance<TVariable, TName>;\n return instance.get<TVariable, TName>(transaction_name, name);\n }\n\n\n}\n","import { StorageManager } from \"../core/StorageManager\";\n\ntype Key = string;\n\nexport interface IndexDbStorageManagerOptions {\n /**\n * IndexedDB database name.\n */\n dbName?: string;\n /**\n * IndexedDB object store name.\n */\n storeName?: string;\n /**\n * Prefix used to namespace keys within the object store.\n */\n prefix?: string;\n}\n\n/**\n * IndexedDB-backed StorageManager.\n *\n * This is fully async (no in-memory cache needed).\n *\n * Stores snapshots as array-of-models under `${prefix}${name}`.\n */\nexport default class IndexDbStorageManager extends StorageManager<any> {\n private dbName: string;\n private storeName: string;\n\n private dbPromise: Promise<IDBDatabase> | null = null;\n\n constructor(options: IndexDbStorageManagerOptions = {}) {\n super(options.prefix ?? \"live-cache:\");\n this.dbName = options.dbName ?? \"live-cache\";\n this.storeName = options.storeName ?? \"collections\";\n this.prefix = options.prefix ?? \"live-cache:\";\n }\n\n private key(name: string) {\n return `${this.prefix}${name}`;\n }\n\n private openDb(): Promise<IDBDatabase> {\n if (this.dbPromise) return this.dbPromise;\n\n this.dbPromise = new Promise((resolve, reject) => {\n if (typeof indexedDB === \"undefined\") {\n reject(new Error(\"indexedDB is not available in this environment\"));\n return;\n }\n\n const request = indexedDB.open(this.dbName, 1);\n\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(this.storeName)) {\n db.createObjectStore(this.storeName);\n }\n };\n\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error ?? new Error(\"Failed to open IndexedDB\"));\n });\n\n return this.dbPromise;\n }\n\n private async idbGet(key: Key): Promise<any[] | null> {\n const db = await this.openDb();\n\n return await new Promise((resolve, reject) => {\n const tx = db.transaction(this.storeName, \"readonly\");\n const store = tx.objectStore(this.storeName);\n const req = store.get(key);\n req.onsuccess = () => {\n const value = req.result;\n if (!value) return resolve(null);\n resolve(Array.isArray(value) ? value : null);\n };\n req.onerror = () => reject(req.error ?? new Error(\"IndexedDB get failed\"));\n });\n }\n\n private async idbSet(key: Key, value: any[]): Promise<void> {\n const db = await this.openDb();\n\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(this.storeName, \"readwrite\");\n const store = tx.objectStore(this.storeName);\n store.put(value, key);\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error ?? new Error(\"IndexedDB set failed\"));\n tx.onabort = () => reject(tx.error ?? new Error(\"IndexedDB set aborted\"));\n });\n }\n\n private async idbDelete(key: Key): Promise<void> {\n const db = await this.openDb();\n\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(this.storeName, \"readwrite\");\n const store = tx.objectStore(this.storeName);\n store.delete(key);\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error ?? new Error(\"IndexedDB delete failed\"));\n tx.onabort = () => reject(tx.error ?? new Error(\"IndexedDB delete aborted\"));\n });\n }\n\n async get<T>(name: string): Promise<T[]> {\n const k = this.key(name);\n try {\n const value = await this.idbGet(k);\n return (value ?? []) as T[];\n } catch {\n return [];\n }\n }\n\n async set(name: string, models: any[]): Promise<void> {\n const k = this.key(name);\n const value = Array.isArray(models) ? models : [];\n try {\n await this.idbSet(k, value);\n } catch {\n // ignore write errors\n }\n }\n\n async delete(name: string): Promise<void> {\n const k = this.key(name);\n try {\n await this.idbDelete(k);\n } catch {\n // ignore delete errors\n }\n }\n\n async getParams(): Promise<string[]> {\n const db = await this.openDb();\n return new Promise((resolve, reject) => {\n const req = db.transaction(this.storeName, \"readonly\").objectStore(this.storeName).getAllKeys();\n const keys = req.result.map(x => x.toString().replace(this.prefix, \"\"));\n req.onsuccess = () => resolve(keys);\n req.onerror = () => reject(req.error ?? new Error(\"IndexedDB get params failed\"));\n });\n }\n}\n\n","import { StorageManager } from \"../core/StorageManager\";\n\n/**\n * `localStorage`-backed `StorageManager`.\n *\n * Stores snapshots as JSON under `${prefix}${name}`.\n * Reads return `[]` on failure (private mode, JSON parse issues, etc).\n */\nexport default class LocalStorageStorageManager extends StorageManager<any> {\n\n constructor(prefix = \"live-cache:\") {\n super(prefix);\n }\n\n private key(name: string) {\n return `${this.prefix}${name}`;\n }\n\n async get<T>(name: string): Promise<T[]> {\n try {\n const raw = localStorage.getItem(this.key(name));\n if (!raw) return [];\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }\n\n async set(name: string, models: any[]): Promise<void> {\n try {\n localStorage.setItem(this.key(name), JSON.stringify(models));\n } catch {\n // ignore quota / private mode issues\n }\n }\n\n async delete(name: string): Promise<void> {\n try {\n localStorage.removeItem(this.key(name));\n } catch {\n // ignore\n }\n }\n\n async getParams(): Promise<string[]> {\n return Object.keys(localStorage).filter(key => key.startsWith(this.prefix)).map(key => key.replace(this.prefix, \"\"));\n }\n}\n","import React, { createContext, ReactNode, useMemo } from \"react\";\nimport { getDefaultObjectStore } from \"../core/ObjectStore\";\nimport Controller from \"../core/Controller\";\n\ninterface Props {\n store?: ReturnType<typeof getDefaultObjectStore>;\n children: ReactNode;\n}\n\nexport const context = createContext<ReturnType<\n typeof getDefaultObjectStore\n> | null>(null);\n\n/**\n * React context provider for an `ObjectStore`.\n *\n * `useController()` reads the store from this context by default.\n *\n * @example\n * ```tsx\n * <ContextProvider>\n * <App />\n * </ContextProvider>\n * ```\n */\nexport default function ContextProvider({\n children,\n store = getDefaultObjectStore(),\n}: Props) {\n return <context.Provider value={store}>{children}</context.Provider>;\n}\n\n/**\n * Register controllers in a store (defaults to the singleton store).\n *\n * This is usually called at component mount time.\n *\n * @example\n * ```tsx\n * useRegister([usersController, postsController]);\n * ```\n */\nexport function useRegister(\n controller: Controller<any, any>[],\n store = getDefaultObjectStore()\n) {\n const stored = useMemo(() => {\n controller.forEach((c) => {\n store.register(c);\n });\n return store;\n }, [store, controller]);\n\n return stored;\n}\n","import { useContext, useEffect, useMemo, useState } from \"react\";\nimport ObjectStore from \"../core/ObjectStore\";\nimport { context } from \"./Context\";\nimport { ModelType } from \"../core/Document\";\nimport Controller from \"../core/Controller\";\n\ninterface ControllerOptions {\n store?: ObjectStore;\n initialise?: boolean;\n abortOnUnmount?: boolean;\n withInvalidation?: boolean;\n}\n\nexport interface UseControllerResult<TVariable, TName extends string> {\n controller: Controller<TVariable, TName>;\n data: ModelType<TVariable>[];\n loading: boolean;\n error: unknown;\n}\n\n/**\n * React hook to subscribe to a registered controller.\n *\n * - Looks up the controller by name from the `ObjectStore` (context by default)\n * - Subscribes to `controller.publish()`\n * - Exposes `data`, `loading`, `error`, and the `controller` instance\n *\n * @param name - controller name\n * @param where - optional `Collection.find()` filter (string `_id` or partial)\n * @param options - store selection, initialise behavior, abort-on-unmount, and invalidation wiring\n *\n * When `options.withInvalidation` is true, this hook calls\n * `controller.invalidator.registerInvalidation()` on mount and\n * `controller.invalidator.unregisterInvalidation()` on unmount.\n *\n * @example\n * ```tsx\n * const { data, controller } = useController<User, \"users\">(\"users\", undefined, {\n * withInvalidation: true,\n * });\n * return (\n * <button onClick={() => void controller.invalidate()}>Refresh</button>\n * );\n * ```\n */\nexport default function useController<TVariable, TName extends string>(\n name: TName,\n where?: string | Partial<TVariable>,\n options?: ControllerOptions,\n): UseControllerResult<TVariable, TName> {\n const initialise = options?.initialise ?? true;\n const optionalStore = options?.store;\n const abortOnUnmount = options?.abortOnUnmount ?? true;\n const withInvalidation = options?.withInvalidation ?? true;\n\n const [data, setData] = useState<ModelType<TVariable>[]>([]);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<unknown>(null);\n\n const defaultStore = useContext(context);\n const store = optionalStore ?? defaultStore ?? null;\n if (!store) {\n throw Error(\"Store is not defined\");\n }\n\n const controller = useMemo(() => store.get<TVariable, TName>(name), [store, name]);\n useEffect(() => {\n const callback = () => {\n setLoading(controller.loading);\n setError(controller.error ?? null);\n setData(controller.collection.find(where).map((item) => item.toModel()));\n };\n\n // Prime state immediately.\n callback();\n\n const cleanup = controller.publish(callback);\n\n if (withInvalidation) {\n controller.invalidator.registerInvalidation();\n }\n\n if (initialise) {\n void store.initialiseOnce<TVariable, TName>(name);\n }\n\n\n return () => {\n if (abortOnUnmount) {\n controller.abort();\n }\n cleanup();\n controller.invalidator.unregisterInvalidation();\n };\n }, [controller, where, initialise, abortOnUnmount, withInvalidation]);\n\n return { controller, data, loading, error };\n}\n","import React, { useEffect, useState } from 'react'\nimport Controller from '../core/Controller';\nimport join from '../core/join';\n\n\ntype Args = Parameters<typeof join>;\ntype From = Args[0];\ntype Where = Args[1];\ntype Select = Args[2];\n\ntype Result = ReturnType<typeof join>;\n\ninterface UseJoinControllerProps {\n from: From;\n where: Where;\n select: Select;\n}\n\n/**\n * React hook that recomputes a `join()` projection whenever any of the `from` controllers commit.\n *\n * @example\n * ```tsx\n * const rows = useJoinController({\n * from: [usersController, postsController] as const,\n * where: { $and: { posts: { userId: { $ref: { controller: \"users\", field: \"id\" } } } } } as const,\n * select: [\"users.name\", \"posts.title\"] as const,\n * });\n * ```\n */\nexport default function useJoinController({ from, where, select }: UseJoinControllerProps) {\n\n const [data, setData] = useState<Result>([]);\n\n\n useEffect(() => {\n\n const callback = () => {\n setData(join(from, where, select));\n }\n\n callback();\n\n const cleanup = from.map((c) => c.publish(callback));\n\n return () => {\n cleanup.forEach((c) => c());\n }\n\n }, [from, where, select])\n\n\n\n return data;\n\n}\n","import { Invalidator } from \"../core/Invalidator\";\n\ninterface TimeoutInvalidatorOptions {\n immediate?: boolean;\n}\n\nexport default class TimeoutInvalidator<TVariable> extends Invalidator<TVariable> {\n private timeoutMs: number;\n private intervalId: ReturnType<typeof setInterval> | null = null;\n private immediate: boolean;\n\n constructor(\n timeoutMs: number = 0,\n options: TimeoutInvalidatorOptions = {},\n ) {\n super();\n this.timeoutMs = timeoutMs;\n this.immediate = options.immediate ?? true;\n }\n\n public registerInvalidation() {\n if (this.intervalId) return;\n\n if (this.immediate) {\n this.invalidator();\n }\n\n if (this.timeoutMs > 0) {\n this.intervalId = setInterval(() => {\n this.invalidator();\n }, this.timeoutMs);\n }\n }\n\n public unregisterInvalidation() {\n if (!this.intervalId) return;\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n}\n","// Main library exports\nimport Collection from \"./core/Collection\";\nimport Controller from \"./core/Controller\";\nimport Document from \"./core/Document\";\nimport join from \"./core/join\";\nimport ObjectStore, {\n createObjectStore,\n getDefaultObjectStore,\n} from \"./core/ObjectStore\";\nimport Transactions from \"./core/Transactions\";\nimport { DefaultStorageManager, StorageManager } from \"./core/StorageManager\";\nimport IndexDbStorageManager from \"./storage-manager/IndexDbStorageManager\";\nimport LocalStorageStorageManager from \"./storage-manager/LocalStorageManager\";\n\n// React helpers\nimport ContextProvider, { useRegister } from \"./react/Context\";\nimport useController from \"./react/useController\";\nimport useJoinController from \"./react/useJoinController\";\n\n// Invalidators\nimport { DefaultInvalidator, Invalidator } from \"./core/Invalidator\";\nimport TimeoutInvalidator from \"./invalidator/TimeoutInvalidator\";\n\n// Export core classes / helpers\nexport {\n Collection,\n Controller,\n Document,\n join,\n ObjectStore,\n createObjectStore,\n getDefaultObjectStore,\n Transactions,\n StorageManager,\n DefaultStorageManager,\n IndexDbStorageManager,\n LocalStorageStorageManager,\n ContextProvider,\n useRegister,\n useController,\n useJoinController,\n DefaultInvalidator,\n Invalidator,\n TimeoutInvalidator,\n};\n\n// Default export for UMD/browser usage\nexport default {\n Collection,\n Controller,\n Document,\n join,\n ObjectStore,\n createObjectStore,\n getDefaultObjectStore,\n Transactions,\n StorageManager,\n DefaultStorageManager,\n IndexDbStorageManager,\n LocalStorageStorageManager,\n ContextProvider,\n useRegister,\n useController,\n useJoinController,\n DefaultInvalidator,\n Invalidator,\n TimeoutInvalidator,\n};\n"],"names":["createContext","useMemo","useState","useContext","useEffect"],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,13 +3,16 @@ import Controller from "./core/Controller";
|
|
|
3
3
|
import Document from "./core/Document";
|
|
4
4
|
import join from "./core/join";
|
|
5
5
|
import ObjectStore, { createObjectStore, getDefaultObjectStore } from "./core/ObjectStore";
|
|
6
|
+
import Transactions from "./core/Transactions";
|
|
6
7
|
import { DefaultStorageManager, StorageManager } from "./core/StorageManager";
|
|
7
8
|
import IndexDbStorageManager from "./storage-manager/IndexDbStorageManager";
|
|
8
9
|
import LocalStorageStorageManager from "./storage-manager/LocalStorageManager";
|
|
9
10
|
import ContextProvider, { useRegister } from "./react/Context";
|
|
10
11
|
import useController from "./react/useController";
|
|
11
12
|
import useJoinController from "./react/useJoinController";
|
|
12
|
-
|
|
13
|
+
import { DefaultInvalidator, Invalidator } from "./core/Invalidator";
|
|
14
|
+
import TimeoutInvalidator from "./invalidator/TimeoutInvalidator";
|
|
15
|
+
export { Collection, Controller, Document, join, ObjectStore, createObjectStore, getDefaultObjectStore, Transactions, StorageManager, DefaultStorageManager, IndexDbStorageManager, LocalStorageStorageManager, ContextProvider, useRegister, useController, useJoinController, DefaultInvalidator, Invalidator, TimeoutInvalidator, };
|
|
13
16
|
declare const _default: {
|
|
14
17
|
Collection: typeof Collection;
|
|
15
18
|
Controller: typeof Controller;
|
|
@@ -18,6 +21,7 @@ declare const _default: {
|
|
|
18
21
|
ObjectStore: typeof ObjectStore;
|
|
19
22
|
createObjectStore: typeof createObjectStore;
|
|
20
23
|
getDefaultObjectStore: typeof getDefaultObjectStore;
|
|
24
|
+
Transactions: typeof Transactions;
|
|
21
25
|
StorageManager: typeof StorageManager;
|
|
22
26
|
DefaultStorageManager: typeof DefaultStorageManager;
|
|
23
27
|
IndexDbStorageManager: typeof IndexDbStorageManager;
|
|
@@ -26,5 +30,8 @@ declare const _default: {
|
|
|
26
30
|
useRegister: typeof useRegister;
|
|
27
31
|
useController: typeof useController;
|
|
28
32
|
useJoinController: typeof useJoinController;
|
|
33
|
+
DefaultInvalidator: typeof DefaultInvalidator;
|
|
34
|
+
Invalidator: typeof Invalidator;
|
|
35
|
+
TimeoutInvalidator: typeof TimeoutInvalidator;
|
|
29
36
|
};
|
|
30
37
|
export default _default;
|