@routier/core 0.0.7 → 0.1.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"plugins/index.js","sources":["webpack://@routier/core/./src/assertions/index.ts","webpack://@routier/core/./src/collections/Changes.ts","webpack://@routier/core/./src/collections/TagCollection.ts","webpack://@routier/core/./src/expressions/utils.ts","webpack://@routier/core/./src/pipeline/TrampolinePipeline.ts","webpack://@routier/core/./src/plugins/EphemeralDataPlugin.ts","webpack://@routier/core/./src/plugins/query/Query.ts","webpack://@routier/core/./src/plugins/query/QueryOptionsCollection.ts","webpack://@routier/core/./src/plugins/query/index.ts","webpack://@routier/core/./src/plugins/query/types.ts","webpack://@routier/core/./src/plugins/replication/OptimisticReplicationDbPlugin.ts","webpack://@routier/core/./src/plugins/replication/ReplicationDbPlugin.ts","webpack://@routier/core/./src/plugins/replication/index.ts","webpack://@routier/core/./src/plugins/translators/DataTranslator.ts","webpack://@routier/core/./src/plugins/translators/JsonTranslator.ts","webpack://@routier/core/./src/plugins/translators/SqlTranslator.ts","webpack://@routier/core/./src/plugins/translators/TranslatedArrayValue.ts","webpack://@routier/core/./src/plugins/translators/TranslatedGroupValue.ts","webpack://@routier/core/./src/plugins/translators/TranslatedSingleValue.ts","webpack://@routier/core/./src/plugins/translators/index.ts","webpack://@routier/core/./src/results/Result.ts","webpack://@routier/core/./src/utilities/dates.ts","webpack://@routier/core/./src/utilities/replication.ts","webpack://@routier/core/./src/utilities/uuid.ts","webpack://@routier/core/webpack/runtime/define_property_getters","webpack://@routier/core/webpack/runtime/has_own_property","webpack://@routier/core/webpack/runtime/make_namespace_object","webpack://@routier/core/./src/plugins/index.ts"],"sourcesContent":["import { isDate } from \"../utilities\";\n\nexport function assertDate(data: unknown): asserts data is Date {\n if (isDate(data) === false) {\n throw new TypeError('Value is not a Date');\n }\n}\n\nexport function assertIsNotNull<T>(data: T | null | undefined, message?: string | (() => string)): asserts data is NonNullable<T> {\n if (data == null) {\n if (message == null) {\n throw new TypeError('Assertion failed, data is null');\n }\n\n if (typeof message === \"string\") {\n throw new TypeError(message);\n }\n\n throw new TypeError(message());\n }\n}\n\nexport function assertIsArray<T>(data: unknown, message?: string): asserts data is T[] {\n if (!Array.isArray(data)) {\n throw new TypeError(message ?? 'Assertion failed, data is not of type Array');\n }\n}\n\nexport function assertString(data: unknown, message?: string): asserts data is string {\n if (typeof data !== \"string\") {\n throw new TypeError(message ?? 'Assertion failed, data is not of type String');\n }\n}\n\nexport function assertInstanceOf<T extends new (...args: any[]) => any>(value: unknown, Instance: T): asserts value is T {\n if (value instanceof Instance) {\n return;\n }\n\n if (value != null && typeof value === \"object\" && \"constructor\" in value) {\n throw new TypeError(`Value is not instance of type. Type: ${value.constructor.name}`);\n }\n\n throw new TypeError(`Value is not instance of type`);\n}","import { EntityUpdateInfo } from \"../plugins/types\";\nimport { InferCreateType, InferType, SchemaId } from \"../schema\";\nimport { TagCollection } from \"./TagCollection\";\nexport class BulkPersistResult extends Map<SchemaId, SchemaPersistResult> {\n\n resolve(schemaId: SchemaId): SchemaPersistResult {\n if (this.has(schemaId)) {\n return this.get(schemaId);\n }\n\n this.set(schemaId, new SchemaPersistResult());\n\n return this.get(schemaId);\n }\n\n override get<T extends {} = Record<string, unknown>>(schemaId: SchemaId) {\n return super.get(schemaId) as SchemaPersistResult<T>\n }\n\n get aggregate() {\n return {\n size: this.aggregateSize,\n adds: this.aggregateAddsSize,\n updates: this.aggregateUpdatesSize,\n removes: this.aggregateRemovesSize\n }\n }\n\n private get aggregateSize() {\n let count = 0;\n\n for (const [, result] of this) {\n count += result.total;\n }\n\n return count;\n }\n\n private get aggregateAddsSize() {\n let count = 0;\n\n for (const [, result] of this) {\n count += result.adds.length;\n }\n\n return count;\n }\n\n private get aggregateUpdatesSize() {\n let count = 0;\n\n for (const [, result] of this) {\n count += result.updates.length;\n }\n\n return count;\n }\n\n private get aggregateRemovesSize() {\n let count = 0;\n\n for (const [, result] of this) {\n count += result.removes.length;\n }\n\n return count;\n }\n}\n\nexport class BulkPersistChanges extends Map<SchemaId, SchemaPersistChanges> {\n\n resolve(schemaId: SchemaId): SchemaPersistChanges {\n if (this.has(schemaId)) {\n return this.get(schemaId);\n }\n\n this.set(schemaId, new SchemaPersistChanges());\n\n return this.get(schemaId);\n }\n\n override get<T extends {} = Record<string, unknown>>(schemaId: SchemaId) {\n return super.get(schemaId) as SchemaPersistChanges<T>\n }\n\n get aggregate() {\n return {\n size: this.aggregateSize,\n adds: this.aggregateAddsSize,\n updates: this.aggregateUpdatesSize,\n removes: this.aggregateRemovesSize\n }\n }\n\n private get aggregateSize() {\n let count = 0;\n\n for (const [, result] of this) {\n count += result.total;\n }\n\n return count;\n }\n\n private get aggregateAddsSize() {\n let count = 0;\n\n for (const [, result] of this) {\n count += result.adds.length;\n }\n\n return count;\n }\n\n private get aggregateUpdatesSize() {\n let count = 0;\n\n for (const [, result] of this) {\n count += result.updates.length;\n }\n\n return count;\n }\n\n private get aggregateRemovesSize() {\n let count = 0;\n\n for (const [, result] of this) {\n count += result.removes.length;\n }\n\n return count;\n }\n\n /**\n * Ensures the result has the same result sets as the change sets\n * @returns \n */\n toResult() {\n const result = new BulkPersistResult();\n\n for (const [schemaId] of this) {\n result.set(schemaId, new SchemaPersistResult());\n }\n\n return result;\n }\n}\n\nexport class SchemaPersistChanges<T extends {} = Record<string, unknown>> {\n adds: InferCreateType<T>[] = [];\n updates: EntityUpdateInfo<T>[] = [];\n removes: InferType<T>[] = [];\n tags: TagCollection = new TagCollection();\n\n get hasItems() {\n return this.total > 0;\n }\n\n get total() {\n return this.adds.length + this.updates.length + this.removes.length;\n }\n}\n\nexport class SchemaPersistResult<T extends {} = Record<string, unknown>> {\n adds: InferType<T>[] = [];\n updates: InferType<T>[] = [];\n removes: InferType<T>[] = [];\n\n get hasItems() {\n return this.total > 0;\n }\n\n get total() {\n return this.adds.length + this.updates.length + this.removes.length;\n }\n}","export class TagCollection implements Disposable {\n\n private data: Map<Object, unknown> = new Map<Object, unknown>();\n private _size: number = 0;\n\n get size() {\n return this._size;\n }\n\n get(key: Object) {\n return this.data.get(key);\n }\n\n has(key: Object) {\n return this.data.has(key);\n }\n\n set(key: Object, tag: unknown) {\n this._size++;\n return this.data.set(key, tag);\n }\n\n delete(key: Object) {\n const result = this.data.delete(key);\n\n if (result) {\n this._size--;\n }\n\n return result;\n }\n\n setMany(keys: Object[], tag: unknown) {\n this._size += keys.length;\n for (let i = 0, length = keys.length; i < length; i++) {\n const key = keys[i];\n this.set(key, tag);\n }\n }\n\n combine(tags: TagCollection) {\n for (const [key, value] of tags) {\n this.data.set(key, value);\n }\n }\n\n values() {\n return this.data.values();\n }\n\n keys() {\n return this.data.keys();\n }\n\n [Symbol.dispose]() {\n this.data = null as any;\n }\n\n [Symbol.iterator]() {\n return this.data[Symbol.iterator]();\n }\n}","import { PropertyInfo } from \"../schema\";\nimport { Expression, PropertyExpression } from \"./types\";\n\n/**\n * Extracts all properties referenced in an expression\n * @param expression The expression to analyze\n * @returns Array of PropertyInfo objects referenced in the expression\n */\nexport function getProperties(expression: Expression): PropertyInfo<any>[] {\n const properties: PropertyInfo<any>[] = [];\n\n function traverse(expr: Expression) {\n // If this is a property expression, add it to our collection\n if (expr.type === \"property\") {\n properties.push((expr as PropertyExpression).property);\n }\n\n // Traverse left and right expressions if they exist\n if (expr.left) {\n traverse(expr.left);\n }\n if (expr.right) {\n traverse(expr.right);\n }\n }\n\n traverse(expression);\n return properties;\n}\n\nexport function isPropertyExpression(expression: Expression): expression is PropertyExpression {\n return expression.type === \"property\";\n}\n\nexport function forEach(expression: Expression, callback: (expression: Expression) => boolean) {\n function traverse(expr: Expression): boolean {\n // Call the callback for this expression\n // If callback returns false, stop traversing\n if (!callback(expr)) {\n return false;\n }\n\n // Traverse left and right expressions if they exist\n if (expr.left) {\n if (!traverse(expr.left)) {\n return false;\n }\n }\n if (expr.right) {\n if (!traverse(expr.right)) {\n return false;\n }\n }\n\n return true;\n }\n\n traverse(expression);\n}","import { CallbackResult, Result, ResultType } from \"../results\";\n\n/**\n * Type definition for an asynchronous function that takes data and a callback.\n * TIn: The input data type.\n * TOut: The output data type (passed to the callback).\n */\nexport type Processor<TIn, TOut> = (data: TIn, callback: (result: TOut, error?: any) => void) => void;\n\n// Return type for a step execution: Either the next step function or null if waiting/done.\ntype StepResult<TData> = TrampolineStep<TData> | null;\ntype TrampolineStep<TData> = () => StepResult<TData>;\n\nexport class TrampolinePipeline<TInitial, TCurrent = TInitial> {\n private _list: Processor<any, any>[] = [];\n private _hasErrored: boolean = false; // Flag to prevent calling done on error\n\n filter<TFinal>(initialData: TInitial, done: (data: TFinal, error?: any) => void) {\n\n this._hasErrored = false; // Reset error flag on new execution\n\n if (this._list.length === 0) {\n queueMicrotask(() => done(initialData as any as TFinal));\n return;\n }\n\n let index = 0;\n let currentData: any = initialData;\n let isRunning = false; // Guard against overlapping trampoline calls\n\n try {\n // --- Revised Completion Logic --- (Moved up for clarity)\n const finalStepSentinel = (): StepResult<any> => { // A special step function for the very end\n // Only call done if no error has occurred\n if (!this._hasErrored) {\n queueMicrotask(() => done(currentData as TFinal));\n }\n return null; // Stop the trampoline\n };\n\n const createStepRevised = (idx: number): TrampolineStep<any> => {\n return () => {\n if (this._hasErrored) return null; // Stop if an error occurred elsewhere\n\n if (idx >= this._list.length) {\n return finalStepSentinel(); // Execute the dedicated final step\n }\n\n const processor = this._list[idx];\n // Initialize syncCallbackResult to null to satisfy StepResult type\n let syncCallbackResult: StepResult<any> = null;\n let calledSync = false;\n\n try {\n processor(currentData, (result, error) => {\n // --- Error Handling ---\n if (error) {\n console.error(`Error reported by processor at index ${idx}:`, error);\n this._hasErrored = true; // Set flag\n // Throw the error to be caught by outer try...catch blocks\n throw error;\n }\n // --- /Error Handling ---\n\n // If no error, proceed as before\n currentData = result;\n index = idx + 1; // Update index for the next step\n const nextStep = createStepRevised(index); // Use updated index\n\n if (isRunning) {\n // Callback was synchronous\n syncCallbackResult = nextStep; // Store next step function\n calledSync = true;\n } else {\n // Callback was asynchronous, restart trampoline\n trampoline(nextStep);\n }\n });\n } catch (error) {\n if (!this._hasErrored) { // Check flag to avoid double logging if error was from callback\n console.error(`Error thrown by processor at index ${idx} or its callback:`, error);\n this._hasErrored = true;\n }\n // Rethrow to be caught by the trampoline's catch block\n throw error;\n }\n\n if (calledSync) {\n // Return the next step function for the sync loop\n return syncCallbackResult;\n } else {\n // Pause trampoline for async, loop will stop as step returns null\n return null;\n }\n };\n };\n\n // The trampoline loop\n const trampoline = (step: TrampolineStep<any> | null) => {\n\n if (isRunning) {\n return;\n }\n\n isRunning = true;\n let currentStep = step;\n\n while (typeof currentStep === 'function') {\n try {\n // Stop immediately if an error was flagged elsewhere\n if (this._hasErrored) {\n currentStep = null;\n break;\n }\n currentStep = currentStep(); // Execute step, get next step or null\n } catch (trampolineError) {\n // Catch errors propagated from step execution (processor or callback errors)\n if (!this._hasErrored) { // Avoid double logging\n console.error(\"Error during trampoline step execution:\", trampolineError);\n this._hasErrored = true;\n }\n currentStep = null; // Stop the loop\n // We don't call `done` here because an error occurred.\n // The application should handle the uncaught exception if desired.\n break; // Explicitly break loop on error\n }\n }\n // Loop ends when currentStep is null or loop is broken by error\n isRunning = false;\n\n // Completion check is now handled by finalStepSentinel ensuring `done` isn't called on error.\n };\n\n // --- Start the process ---\n index = 0; // Reset index\n currentData = initialData; // Reset data\n trampoline(createStepRevised(0)); // Start with the revised step creator\n } catch (error: any) {\n done(currentData, error);\n }\n }\n\n pipe<TNext>(processor: Processor<TCurrent, TNext>) {\n this._list.push(processor);\n return this as unknown as TrampolinePipeline<TInitial, TNext>;\n }\n\n pipeEach(items: TCurrent[], fn: (payload: ResultType<TCurrent>, done: CallbackResult<TCurrent>) => void, map: (previous: ResultType<TCurrent>, current: ResultType<TCurrent>) => ResultType<TCurrent>) {\n for (let i = 0, length = items.length; i < length; i++) {\n\n this.pipe<ResultType<TCurrent>>((previous, done) => {\n\n fn(map(previous as ResultType<TCurrent>, Result.success(items[i])), done);\n });\n }\n }\n}\n\nexport type AsyncUnitOfWork<TData, TResult> = (payload: TData, done: CallbackResult<TResult>) => void;\nexport class AsyncPipeline<TData, TResult> {\n private _list: [TData, AsyncUnitOfWork<TData, TResult>][] = [];\n private _hasErrored: boolean = false; // Flag to prevent calling done on error\n\n filter(done: CallbackResult<TResult[]>) {\n\n this._hasErrored = false; // Reset error flag on new execution\n let currentData: TResult[] = [];\n\n if (this._list.length === 0) {\n queueMicrotask(() => done(Result.success()));\n return;\n }\n\n let index = 0;\n let isRunning = false; // Guard against overlapping trampoline calls\n\n try {\n // --- Revised Completion Logic --- (Moved up for clarity)\n const finalStepSentinel = (): StepResult<any> => { // A special step function for the very end\n // Only call done if no error has occurred\n if (!this._hasErrored) {\n queueMicrotask(() => done(Result.success(currentData)));\n }\n return null; // Stop the trampoline\n };\n\n const createStepRevised = (idx: number): TrampolineStep<any> => {\n return () => {\n if (this._hasErrored) return null; // Stop if an error occurred elsewhere\n\n if (idx >= this._list.length) {\n return finalStepSentinel(); // Execute the dedicated final step\n }\n\n const [payload, processor] = this._list[idx];\n // Initialize syncCallbackResult to null to satisfy StepResult type\n let syncCallbackResult: StepResult<any> = null;\n let calledSync = false;\n\n try {\n processor(payload, (result) => {\n // --- Error Handling ---\n if (result.ok === Result.ERROR) {\n console.error(`Error reported by AsyncPipeline at index ${idx}:`, result.error);\n this._hasErrored = true; // Set flag\n // Throw the error to be caught by outer try...catch blocks\n throw result.error;\n }\n // --- /Error Handling ---\n\n // If no error, proceed as before\n currentData.push(result.data);\n index = idx + 1; // Update index for the next step\n const nextStep = createStepRevised(index); // Use updated index\n\n if (isRunning) {\n // Callback was synchronous\n syncCallbackResult = nextStep; // Store next step function\n calledSync = true;\n } else {\n // Callback was asynchronous, restart trampoline\n trampoline(nextStep);\n }\n });\n } catch (error) {\n if (!this._hasErrored) { // Check flag to avoid double logging if error was from callback\n console.error(`Error thrown by processor at index ${idx} or its callback:`, error);\n this._hasErrored = true;\n }\n // Rethrow to be caught by the trampoline's catch block\n throw error;\n }\n\n if (calledSync) {\n // Return the next step function for the sync loop\n return syncCallbackResult;\n } else {\n // Pause trampoline for async, loop will stop as step returns null\n return null;\n }\n };\n };\n\n // The trampoline loop\n const trampoline = (step: TrampolineStep<any> | null) => {\n\n if (isRunning) {\n return;\n }\n\n isRunning = true;\n let currentStep = step;\n\n while (typeof currentStep === 'function') {\n try {\n // Stop immediately if an error was flagged elsewhere\n if (this._hasErrored) {\n currentStep = null;\n break;\n }\n currentStep = currentStep(); // Execute step, get next step or null\n } catch (trampolineError) {\n // Catch errors propagated from step execution (processor or callback errors)\n if (!this._hasErrored) { // Avoid double logging\n console.error(\"Error during trampoline step execution:\", trampolineError);\n this._hasErrored = true;\n }\n currentStep = null; // Stop the loop\n // We don't call `done` here because an error occurred.\n // The application should handle the uncaught exception if desired.\n break; // Explicitly break loop on error\n }\n }\n // Loop ends when currentStep is null or loop is broken by error\n isRunning = false;\n\n // Completion check is now handled by finalStepSentinel ensuring `done` isn't called on error.\n };\n\n // --- Start the process ---\n index = 0; // Reset index\n trampoline(createStepRevised(0)); // Start with the revised step creator\n } catch (error: any) {\n done(Result.error(error));\n }\n }\n\n pipe(data: TData, processor: AsyncUnitOfWork<TData, TResult>) {\n this._list.push([data, processor]);\n }\n\n pipeEach(items: TData[], processor: AsyncUnitOfWork<TData, TResult>) {\n for (let i = 0, length = items.length; i < length; i++) {\n this.pipe(items[i], processor);\n }\n }\n}\n\nexport type UnitOfWork = (done: CallbackResult<never>) => void;\n\n/**\n * Processes functions with callbacks asynchronously.\n * \n * This pipeline handles work items that contain callback functions,\n * executing them in an asynchronous manner while maintaining proper\n * flow control and error handling.\n */\nexport class WorkPipeline {\n private unitsOfWork: UnitOfWork[] = [];\n private _hasErrored: boolean = false; // Flag to prevent calling done on error\n\n filter(done: CallbackResult<never>) {\n\n this._hasErrored = false; // Reset error flag on new execution\n\n if (this.unitsOfWork.length === 0) {\n queueMicrotask(() => done(Result.success()));\n return;\n }\n\n let index = 0;\n let isRunning = false; // Guard against overlapping trampoline calls\n\n try {\n // --- Revised Completion Logic --- (Moved up for clarity)\n const finalStepSentinel = (): StepResult<never> => { // A special step function for the very end\n // Only call done if no error has occurred\n if (!this._hasErrored) {\n queueMicrotask(() => done(Result.success()));\n }\n return null; // Stop the trampoline\n };\n\n const createStepRevised = (idx: number): TrampolineStep<any> => {\n return () => {\n if (this._hasErrored) return null; // Stop if an error occurred elsewhere\n\n if (idx >= this.unitsOfWork.length) {\n return finalStepSentinel(); // Execute the dedicated final step\n }\n\n const processor = this.unitsOfWork[idx];\n // Initialize syncCallbackResult to null to satisfy StepResult type\n let syncCallbackResult: StepResult<any> = null;\n let calledSync = false;\n\n try {\n processor((result) => {\n // --- Error Handling ---\n if (result.ok === Result.ERROR) {\n console.error(`Error reported by AsyncPipeline at index ${idx}:`, result.error);\n this._hasErrored = true; // Set flag\n // Throw the error to be caught by outer try...catch blocks\n throw result.error;\n }\n // --- /Error Handling ---\n\n // If no error, proceed as before\n index = idx + 1; // Update index for the next step\n const nextStep = createStepRevised(index); // Use updated index\n\n if (isRunning) {\n // Callback was synchronous\n syncCallbackResult = nextStep; // Store next step function\n calledSync = true;\n } else {\n // Callback was asynchronous, restart trampoline\n trampoline(nextStep);\n }\n });\n } catch (error) {\n if (!this._hasErrored) { // Check flag to avoid double logging if error was from callback\n console.error(`Error thrown by processor at index ${idx} or its callback:`, error);\n this._hasErrored = true;\n }\n // Rethrow to be caught by the trampoline's catch block\n throw error;\n }\n\n if (calledSync) {\n // Return the next step function for the sync loop\n return syncCallbackResult;\n } else {\n // Pause trampoline for async, loop will stop as step returns null\n return null;\n }\n };\n };\n\n // The trampoline loop\n const trampoline = (step: TrampolineStep<any> | null) => {\n\n if (isRunning) {\n return;\n }\n\n isRunning = true;\n let currentStep = step;\n\n while (typeof currentStep === 'function') {\n try {\n // Stop immediately if an error was flagged elsewhere\n if (this._hasErrored) {\n currentStep = null;\n break;\n }\n currentStep = currentStep(); // Execute step, get next step or null\n } catch (trampolineError) {\n // Catch errors propagated from step execution (processor or callback errors)\n if (!this._hasErrored) { // Avoid double logging\n console.error(\"Error during trampoline step execution:\", trampolineError);\n this._hasErrored = true;\n }\n currentStep = null; // Stop the loop\n // We don't call `done` here because an error occurred.\n // The application should handle the uncaught exception if desired.\n break; // Explicitly break loop on error\n }\n }\n // Loop ends when currentStep is null or loop is broken by error\n isRunning = false;\n\n // Completion check is now handled by finalStepSentinel ensuring `done` isn't called on error.\n };\n\n // --- Start the process ---\n index = 0; // Reset index\n trampoline(createStepRevised(0)); // Start with the revised step creator\n } catch (error: any) {\n done(Result.error(error));\n }\n }\n\n pipe(work: UnitOfWork) {\n this.unitsOfWork.push(work);\n }\n}","import { assertIsNotNull } from '../assertions';\nimport { BulkPersistResult } from '../collections';\nimport { WorkPipeline } from '../pipeline';\nimport { DbPluginBulkPersistEvent, DbPluginEvent, DbPluginQueryEvent, IDbPlugin, ITranslatedValue, JsonTranslator } from '.';\nimport { PluginEventCallbackPartialResult, PluginEventCallbackResult, PluginEventResult, Result } from '../results';\nimport { CompiledSchema, InferCreateType, InferType } from '../schema';\nimport { DeepPartial } from '../types';\nimport { MemoryDataCollection } from '../collections/MemoryDataCollection';\nimport { UnknownRecord } from '../utilities';\n\nexport abstract class EphemeralDataPlugin implements IDbPlugin {\n\n protected databaseName: string;\n\n constructor(databaseName: string) {\n this.databaseName = databaseName;\n }\n\n protected abstract resolveCollection<TEntity extends {}>(schema: CompiledSchema<TEntity>): MemoryDataCollection;\n\n bulkPersist(event: DbPluginBulkPersistEvent, done: PluginEventCallbackPartialResult<BulkPersistResult>) {\n try {\n const bulkPersistResult = event.operation.toResult();\n const schemas = event.schemas;\n const pipeline = new WorkPipeline();\n let hasWork = false;\n\n for (const [schemaId, changes] of event.operation) {\n const { adds, hasItems, removes, updates } = changes;\n\n if (!hasItems) {\n continue;\n }\n\n hasWork = true;\n const result = bulkPersistResult.get(schemaId);\n const schema = schemas.get(schemaId);\n assertIsNotNull(schema);\n\n pipeline.pipe((d) => {\n try {\n const collection = this.resolveCollection(schema);\n collection.load(readResult => {\n if (readResult.ok === Result.ERROR) {\n d(readResult);\n return;\n }\n\n const addsLength = adds.length;\n const updatesLength = updates.length;\n const removesLength = removes.length;\n result.adds = new Array(addsLength);\n result.updates = new Array(updatesLength);\n result.removes = new Array(removesLength);\n\n for (let j = 0; j < addsLength; j++) {\n const item = adds[j];\n collection.add(item);\n result.adds[j] = item as DeepPartial<InferCreateType<UnknownRecord>>;\n }\n\n for (let j = 0; j < updatesLength; j++) {\n const item = updates[j].entity;\n collection.update(item);\n result.updates[j] = item;\n }\n\n for (let j = 0; j < removesLength; j++) {\n collection.remove(removes[j]);\n result.removes[j] = removes[j];\n }\n\n collection.save(saveResult => {\n if (saveResult.ok === Result.ERROR) {\n d(saveResult);\n return;\n }\n d(Result.success());\n });\n });\n } catch (e) {\n d(Result.error(e));\n }\n });\n }\n\n // If there is no work, just return the result\n if (!hasWork) {\n done(PluginEventResult.success(event.id, bulkPersistResult));\n return;\n }\n\n pipeline.filter((result) => {\n if (result.ok === Result.ERROR) {\n done(PluginEventResult.error(event.id, result.error));\n return;\n }\n done(PluginEventResult.success(event.id, bulkPersistResult));\n });\n } catch (e: any) {\n done(PluginEventResult.error(event.id, e));\n }\n }\n\n query<TEntity extends {}, TShape extends any = TEntity>(event: DbPluginQueryEvent<TEntity, TShape>, done: PluginEventCallbackResult<ITranslatedValue<TShape>>): void {\n try {\n const operation = event.operation;\n const schema = operation.schema;\n const translator = new JsonTranslator<TEntity, TShape>(operation);\n const collection = this.resolveCollection(schema);\n\n collection.load(r => {\n if (r.ok === Result.ERROR) {\n done(PluginEventResult.error(event.id, r.error));\n return;\n }\n\n const records = collection.records;\n const length = records.length;\n const cloned: Record<string, unknown>[] = new Array(length);\n\n for (let i = 0; i < length; i++) {\n cloned[i] = schema.clone(records[i] as InferType<TEntity>);\n }\n\n done(PluginEventResult.success(event.id, translator.translate(cloned)));\n });\n } catch (e) {\n done(PluginEventResult.error(event.id, e));\n }\n }\n\n abstract destroy(event: DbPluginEvent, done: PluginEventCallbackResult<never>): void;\n}","\nimport { CompiledSchema } from '../../schema';\nimport { IQuery } from '../types';\nimport { QueryOptionsCollection } from './QueryOptionsCollection';\n\nexport class Query<TRoot extends {}, TShape> implements IQuery<TRoot, TShape> {\n\n readonly options: QueryOptionsCollection<TShape>;\n readonly schema: CompiledSchema<TRoot>;\n private enableChangeTrackingOverride?: boolean\n\n constructor(\n options: QueryOptionsCollection<TShape>,\n schema: CompiledSchema<TRoot>,\n enableChangeTrackingOverride?: boolean,\n ) {\n this.schema = schema;\n this.options = options;\n this.enableChangeTrackingOverride = enableChangeTrackingOverride;\n }\n\n // boolean value whether or not change tracking can be enabled on the query result\n get changeTracking(): boolean {\n\n if (this.enableChangeTrackingOverride != null) {\n return this.enableChangeTrackingOverride;\n }\n\n const map = this.options.getValues(\"map\");\n const count = this.options.has(\"count\");\n const max = this.options.has(\"max\");\n const min = this.options.has(\"min\");\n const sum = this.options.has(\"sum\");\n\n if (map.some(x => x.fields.length > 0)) {\n return false\n }\n\n if (count === true ||\n max === true ||\n min === true ||\n sum === true) {\n return false\n }\n\n return true;\n }\n\n static EMPTY<T extends {}, S>(schema: CompiledSchema<T>) {\n return new Query<T, S>(QueryOptionsCollection.EMPTY<S>(), schema);\n }\n\n static isEmpty<T extends {}, S>(query: IQuery<T, S>) {\n return QueryOptionsCollection.isEmpty(query.options);\n }\n\n static toString<TRoot extends {}, TShape>(query: IQuery<TRoot, TShape>) {\n return JSON.stringify({\n options: query.options.items,\n schema: {\n id: query.schema.id,\n collectionName: query.schema.collectionName\n },\n changeTracking: query.changeTracking\n })\n }\n}","import { forEach, isPropertyExpression } from \"../../expressions/utils\";\nimport { QueryOption, QueryOptionName, QueryOptionExecutionTarget, QueryOptionValueMap } from \"./types\";\n\nexport type QueryCollectionItem<T, K extends QueryOptionName> = { index: number, option: QueryOption<T, K> };\n\nexport class QueryOptionsCollection<T> {\n\n private options: Map<QueryOptionName, QueryCollectionItem<any, any>[]> = new Map<QueryOptionName, QueryCollectionItem<any, any>[]>();\n private nextExecutionTarget: QueryOptionExecutionTarget = \"database\";\n private nextIndex: number = 0;\n private enumeratedItems: QueryCollectionItem<any, any>[] = [];\n\n get items() {\n return this.options;\n }\n\n get isEmpty() {\n return this.items.size === 0;\n }\n\n static EMPTY<R>() {\n return new QueryOptionsCollection<R>();\n }\n\n static isEmpty<T>(options: QueryOptionsCollection<T>) {\n return options.isEmpty;\n }\n\n add<K extends QueryOptionName>(name: K, value: QueryOption<T, K>[\"value\"]) {\n\n if (name === \"map\") {\n const mapValue = value as QueryOptionValueMap<T>[\"map\"];\n\n // Evaluate the map value to see if we are renaming properties, \n // if we are we need to perform everything after in memory\n if (mapValue.fields.some(x => x.isRename === true) || mapValue.fields.some(x => x.property?.isUnmapped === true)) {\n // Cut over to memory execution since we are renaming a property with .map\n // We do not want to figure out how the new name flows through the entire query\n this.nextExecutionTarget = \"memory\";\n }\n }\n\n if (name === \"filter\") {\n // Need to check for unmapped properties\n const filterValue = value as QueryOptionValueMap<T>[\"filter\"];\n\n if (filterValue.expression.type === \"not-parsable\") {\n this.nextExecutionTarget = \"memory\";\n } else {\n forEach(filterValue.expression, (expression) => {\n\n if (isPropertyExpression(expression) && expression.property.isUnmapped) {\n // Cut over to memory execution, unmapped properties are not in the database and\n // cannot be queried\n this.nextExecutionTarget = \"memory\";\n return false;\n }\n\n return true;\n });\n }\n }\n\n const item: QueryCollectionItem<T, K> = {\n index: this.nextIndex,\n option: {\n name,\n target: this.nextExecutionTarget,\n value\n }\n }\n\n this.nextIndex++;\n\n const found = this.options.get(name);\n\n this.options.set(name, [...found ?? [], item]);\n }\n\n split(): { memory: QueryOptionsCollection<T>, database: QueryOptionsCollection<T> } {\n this.resolveEnumeration();\n\n const sortedItems = this.enumeratedItems.toSorted((a, b) => a.index - b.index);\n const memoryQueryOptionsCollection = new QueryOptionsCollection<T>();\n const databaseQueryOptionsCollection = new QueryOptionsCollection<T>();\n\n for (let i = 0, length = sortedItems.length; i < length; i++) {\n const sortedItem = sortedItems[i];\n\n if (sortedItem.option.target === \"database\") {\n databaseQueryOptionsCollection.add(sortedItem.option.name, sortedItem.option.value);\n continue;\n }\n\n memoryQueryOptionsCollection.add(sortedItem.option.name, sortedItem.option.value);\n }\n\n return {\n memory: memoryQueryOptionsCollection,\n database: databaseQueryOptionsCollection\n }\n }\n\n has<K extends QueryOptionName>(name: K): boolean {\n return this.options.has(name);\n }\n\n get<K extends QueryOptionName>(name: K): QueryCollectionItem<T, K>[] {\n return this.options.get(name) ?? [] as QueryCollectionItem<T, K>[];\n }\n\n getLast<K extends QueryOptionName>(name: K): QueryOption<T, K> | null {\n this.resolveEnumeration();\n\n for (let i = this.enumeratedItems.length - 1; i >= 0; i--) {\n const item = this.enumeratedItems[i];\n\n if (item.option.name === name) {\n return item.option;\n }\n }\n\n return null\n }\n\n getValues<K extends QueryOptionName>(name: K): QueryCollectionItem<T, K>[\"option\"][\"value\"][] | undefined {\n\n const found = this.options.get(name);\n\n if (found == null) {\n return [];\n }\n\n return found.map(w => w.option.value) as QueryCollectionItem<T, K>[\"option\"][\"value\"][];\n }\n\n private getEnumeration() {\n return [...this.options.values()].flat().toSorted((a, b) => a.index - b.index);\n }\n\n private resolveEnumeration() {\n if (this.enumeratedItems.length != this.nextIndex) {\n this.enumeratedItems = this.getEnumeration();\n }\n }\n\n forEach(iterator: (item: QueryCollectionItem<T, any>[\"option\"]) => void) {\n this.resolveEnumeration();\n\n for (let i = 0, length = this.enumeratedItems.length; i < length; i++) {\n iterator(this.enumeratedItems[i].option);\n }\n }\n}","export * from './Query';\nexport * from './QueryOptionsCollection';\nexport * from './types';","import { Expression, Filter, ParamsFilter } from \"../../expressions\";\nimport { PropertyInfo } from \"../../schema\";\nimport { GenericFunction } from \"../../types\";\n\nexport enum QueryOrdering {\n Descending = \"desc\",\n Ascending = \"asc\"\n}\n\n/**\n * Field mapping for a query result, including source and destination names and a getter function.\n */\nexport type QueryField = {\n sourceName: string,\n destinationName: string,\n isRename: boolean;\n property?: PropertyInfo<unknown>;\n getter: <T>(data: Record<string, unknown>) => T;\n};\n\nexport type QueryOptionExecutionTarget = \"database\" | \"memory\";\nexport type QueryOptionName = keyof QueryOptionValueMap<unknown>;\n\nexport type QueryOption<T, K extends QueryOptionName> = {\n name: QueryOptionName;\n value: QueryOptionValueMap<T>[K],\n target: QueryOptionExecutionTarget;\n}\n\nexport type QueryOptionValueMap<T extends {}> = {\n skip: number;\n take: number;\n sort: { selector: GenericFunction<T, T[keyof T]>, direction: QueryOrdering, propertyName: string };\n map: { selector: GenericFunction<T, any>, fields: QueryField[] };\n group: { selector: GenericFunction<T, any>, key: QueryField, fields: QueryField[] };\n filter: { params?: {}, filter: ParamsFilter<T, {}> | Filter<T>, expression: Expression };\n min: true; // True or not set\n max: true; // True or not set\n count: true; // True or not set\n sum: true; // True or not set\n distinct: true; // True or not set\n};\n\n/**\n * Sort specification for a query.\n */\nexport type QuerySort = { key: string, selector: (item: unknown) => unknown, direction: \"asc\" | \"desc\" };","import { PluginEventCallbackPartialResult, PluginEventCallbackResult, PluginEventResult, Result } from '../../results';\nimport { DbPluginBulkPersistEvent, DbPluginEvent, DbPluginQueryEvent, IDbPlugin, OptimisticReplicationPluginOptions } from '../types';\nimport { WorkPipeline } from '../../pipeline'; 7\nimport { CompiledSchema } from '../../schema';\nimport { Query } from '../query';\nimport { resolveBulkPersistChanges, uuid } from '../../utilities';\nimport { BulkPersistChanges, BulkPersistResult } from '../../collections';\nimport { ITranslatedValue } from '../translators';\n\nconst getMemoryPluginCollectionSize = <T extends {}>(plugin: IDbPlugin, schema: CompiledSchema<T>): number => {\n\n if (\"getCollectionSize\" in plugin && typeof plugin.getCollectionSize === \"function\") {\n return plugin.getCollectionSize(schema.collectionName) as number;\n }\n\n throw new Error(\"Cannot get size of collection for MemoryPlugin, not an instance of MemoryPlugin\");\n}\n\ntype HydrationStatus =\n | \"hydration-not-started\"\n | \"hydration-pending\"\n | \"hydration-error\"\n | \"hydration-success\";\n\nlet hydrationStatus: HydrationStatus = \"hydration-not-started\";\n\nexport class OptimisticReplicationDbPlugin implements IDbPlugin {\n\n protected plugins: OptimisticReplicationPluginOptions;\n\n protected constructor(plugins: OptimisticReplicationPluginOptions) {\n this.plugins = plugins;\n }\n\n /**\n * Creates a new OptimisticDbPluginReplicator that coordinates operations between a source database and its replicas.\n * \n * @param source The primary database plugin that will receive all operations first\n * @param replicas Additional database plugins that will replicate operations from the source\n * @returns A new DbPluginReplicator instance that manages the source-replica relationship\n */\n static create(plugins: OptimisticReplicationPluginOptions) {\n return new OptimisticReplicationDbPlugin(plugins);\n }\n\n /**\n * Will query the read plugin if there is one, otherwise the source plugin will be queried\n */\n query<TEntity extends {}, TShape extends any = TEntity>(event: DbPluginQueryEvent<TEntity, TShape>, done: PluginEventCallbackResult<ITranslatedValue<TShape>>): void {\n try {\n\n const readPlugin = this.plugins.read;\n const sourcePlugin = this.plugins.source;\n const collectionSize = getMemoryPluginCollectionSize(this.plugins.read, event.operation.schema);\n\n if (collectionSize === 0 && hydrationStatus === \"hydration-not-started\") {\n\n // Notify the cache that the db was hydrated right away\n hydrationStatus = \"hydration-pending\";\n\n console.log('[ROUTIER] - Optimistic Query', hydrationStatus);\n\n // nothing is hydrated, let's try and hydrate before querying\n // Memory plugin might not be hydrated, lets hydrate it for the targeted schema only,\n // Other queries will do the same and hydrate if needed\n // We want to select all data here\n sourcePlugin.query<TEntity, TShape>({\n id: uuid(8),\n schemas: event.schemas,\n source: \"collection\",\n // Select All Data\n operation: Query.EMPTY<TEntity, TShape>(event.operation.schema)\n }, (sourceResult) => {\n\n if (sourceResult.ok === Result.ERROR) {\n\n // Notify that hydration failed\n hydrationStatus = \"hydration-error\";\n console.log(\"[ROUTIER] - Hydration Error - Source Query\", sourceResult);\n done(sourceResult);\n return;\n }\n\n if (sourceResult == null || (Array.isArray(sourceResult.data) && sourceResult.data.length === 0)) {\n // Notify that hydration had no data\n hydrationStatus = \"hydration-error\";\n console.log(\"[ROUTIER] - Hydration Error - No Data\", sourceResult);\n done(sourceResult);\n return;\n }\n\n if (Array.isArray(sourceResult.data) === false) {\n // Notify that hydration failed\n hydrationStatus = \"hydration-error\";\n console.log(\"[ROUTIER] - Hydration Error - Bad Result\", sourceResult);\n done(PluginEventResult.error(event.id, \"Query result is not an array\"));\n return;\n }\n\n const changesCollection = new BulkPersistChanges();\n const schemaChanges = changesCollection.resolve(event.operation.schema.id);\n\n // Add the existing items into the persist payload as adds\n schemaChanges.adds = sourceResult.data;\n\n readPlugin.bulkPersist({\n id: uuid(8),\n schemas: event.schemas,\n operation: changesCollection,\n source: \"collection\",\n }, (readPersistResult) => {\n\n if (readPersistResult.ok === Result.ERROR) {\n // Notify that hydration failed\n hydrationStatus = \"hydration-error\";\n console.log(\"[ROUTIER] - Hydration Error - Could Not Save\", readPersistResult);\n done(readPersistResult);\n return;\n }\n\n hydrationStatus = \"hydration-success\";\n\n // requery the read plugin\n readPlugin.query(event, done);\n });\n });\n\n return;\n }\n\n // Collection is hydrated for the targeted collection and should be in sync\n readPlugin.query(event, (readResult) => {\n\n if (readResult.ok === Result.ERROR) {\n done(readResult);\n return;\n }\n\n done(readResult);\n return;\n\n });\n } catch (e: any) {\n done(PluginEventResult.error(event.id, e));\n }\n }\n\n destroy(event: DbPluginEvent, done: PluginEventCallbackResult<never>): void {\n try {\n\n const workPipeline = new WorkPipeline();\n const plugins = [this.plugins.source, ...this.plugins.replicas];\n\n for (let i = 0, length = plugins.length; i < length; i++) {\n workPipeline.pipe((done) => plugins[i].destroy(event, done));\n }\n\n workPipeline.filter((result) => {\n\n if (result.ok === Result.ERROR) {\n done(PluginEventResult.error(event.id, result.error));\n return;\n }\n\n done(PluginEventResult.success(event.id));\n });\n\n } catch (e: any) {\n done(PluginEventResult.error(event.id, e));\n }\n }\n\n bulkPersist(event: DbPluginBulkPersistEvent, done: PluginEventCallbackPartialResult<BulkPersistResult>): void {\n try {\n\n const workPipeline = new WorkPipeline();\n const deferredPlugins = [this.plugins.source, ... this.plugins.replicas];\n\n // Since we are doing optimistic, we insert into the read plugin first and assume later plugins will succeed\n // This means the read plugin will generate ids for the source plugin\n this.plugins.read.bulkPersist({\n id: uuid(8),\n operation: event.operation,\n schemas: event.schemas,\n source: \"data-store\",\n }, (r) => {\n\n if (r.ok !== Result.SUCCESS) {\n done(r);\n return;\n }\n\n // optimistically call done and still continue saving the rest of the data. We read from the memory\n // db anyways\n done(r);\n\n const optimisticBulkPersistChanges = new BulkPersistChanges();\n\n // make sure we swap the adds here, that way we can make sure other persist events\n // don't take their additions and try to change subsequent calls\n resolveBulkPersistChanges(event, r.data, optimisticBulkPersistChanges);\n\n for (let i = 0, length = deferredPlugins.length; i < length; i++) {\n workPipeline.pipe((d) => {\n\n const plugin = deferredPlugins[i];\n\n plugin.bulkPersist({\n id: uuid(8),\n operation: optimisticBulkPersistChanges,\n schemas: event.schemas,\n source: \"data-store\",\n }, (r) => {\n\n if (r.ok === Result.ERROR) {\n d(r);\n return;\n }\n\n d(Result.success());\n });\n });\n }\n\n setTimeout(() => {\n workPipeline.filter((_) => {\n // no-op for now, maybe implement retries?\n });\n }, 5);\n });\n\n } catch (e: any) {\n done(PluginEventResult.error(event.id, e));\n }\n }\n}","import { PluginEventCallbackPartialResult, PluginEventCallbackResult, PluginEventResult, Result } from '../../results';\nimport { DbPluginBulkPersistEvent, DbPluginEvent, DbPluginQueryEvent, IDbPlugin, ReplicationPluginOptions } from '../types';\nimport { AsyncPipeline, WorkPipeline } from '../../pipeline';\nimport { BulkPersistResult } from '../../collections';\nimport { resolveBulkPersistChanges } from '../../utilities';\nimport { ITranslatedValue } from '../translators';\n\nexport class ReplicationDbPlugin implements IDbPlugin {\n\n plugins: ReplicationPluginOptions;\n\n protected constructor(plugins: ReplicationPluginOptions) {\n this.plugins = plugins;\n }\n\n /**\n * Creates a new DbPluginReplicator that coordinates operations between a source database and its replicas.\n * \n * @param source The primary database plugin that will receive all operations first\n * @param replicas Additional database plugins that will replicate operations from the source\n * @returns A new DbPluginReplicator instance that manages the source-replica relationship\n */\n static create(plugins: ReplicationPluginOptions) {\n return new ReplicationDbPlugin(plugins);\n }\n\n /**\n * Will query the read plugin if there is one, otherwise the source plugin will be queried\n */\n query<TEntity extends {}, TShape extends any = TEntity>(event: DbPluginQueryEvent<TEntity, TShape>, done: PluginEventCallbackResult<ITranslatedValue<TShape>>): void {\n try {\n\n const plugin = this.plugins.read != null ? this.plugins.read : this.plugins.source;\n\n plugin.query(event, done);\n } catch (e: any) {\n done(PluginEventResult.error(event.id, e));\n }\n }\n\n destroy(event: DbPluginEvent, done: PluginEventCallbackResult<never>): void {\n try {\n\n const pipeline = new AsyncPipeline<IDbPlugin, never>();\n const plugins = [this.plugins.source, ...this.plugins.replicas];\n\n for (let i = 0, length = plugins.length; i < length; i++) {\n pipeline.pipe(plugins[i], (plugin, done) => plugin.destroy(event, done));\n }\n\n pipeline.filter((result) => {\n\n if (result.ok === Result.ERROR) {\n done(PluginEventResult.error(event.id, result.error));\n return;\n }\n\n done(PluginEventResult.success(event.id));\n });\n\n } catch (e: any) {\n done(PluginEventResult.error(event.id, e));\n }\n }\n\n\n bulkPersist(event: DbPluginBulkPersistEvent, done: PluginEventCallbackPartialResult<BulkPersistResult>): void {\n try {\n // insert into the source first to generate any ids, then take the result and persist that into the replicas\n const pipeline = new WorkPipeline();\n const plugins = [this.plugins.source, ...this.plugins.replicas];\n\n if (this.plugins.read != null) {\n plugins.push(this.plugins.read);\n }\n\n const result = new BulkPersistResult();\n\n for (let i = 0, length = plugins.length; i < length; i++) {\n pipeline.pipe((d) => {\n\n const plugin = plugins[i];\n\n // source is first\n if (i === 0) {\n plugin.bulkPersist(event, (r) => {\n\n if (r.ok === Result.ERROR) {\n d(r)\n return;\n }\n\n // make sure we swap the adds here, that way we can make sure other persist events\n // don't take their additions and try to change subsequent calls\n resolveBulkPersistChanges(event, r.data, event.operation);\n\n d(Result.success());\n });\n return;\n }\n\n plugin.bulkPersist(event, (r) => {\n\n if (r.ok === Result.ERROR) {\n d(r)\n return;\n }\n\n d(Result.success());\n });\n })\n }\n\n let successCount = 0;\n\n pipeline.filter((r) => {\n\n if (r.ok === Result.ERROR) {\n\n if (successCount > 0) {\n done(PluginEventResult.partial(event.id, result, r.error));\n return;\n }\n\n done(PluginEventResult.error(event.id, r.error));\n return;\n }\n\n successCount++;\n\n done(PluginEventResult.success(event.id, result));\n });\n\n } catch (e: any) {\n done(PluginEventResult.error(event.id, e));\n }\n }\n}","export * from './ReplicationDbPlugin';\nexport * from './OptimisticReplicationDbPlugin';\nexport * from './types';","import { QueryOption, QueryOptionName } from \"../query/types\";\nimport { IQuery } from \"../types\";\nimport { TranslatedArrayValue } from \"./TranslatedArrayValue\";\nimport { TranslatedGroupValue } from \"./TranslatedGroupValue\";\nimport { TranslatedSingleValue } from \"./TranslatedSingleValue\";\nimport { ITranslatedValue } from \"./types\";\n\nexport abstract class DataTranslator<TRoot extends {}, TShape> {\n\n protected query: IQuery<TRoot, TShape>;\n private functionMap: Record<QueryOptionName, (data: unknown, option: QueryOption<any, any>) => TShape> = {\n count: (data: unknown, option: QueryOption<TShape, \"count\">) => this.count<any>(data, option),\n distinct: (data: unknown, option: QueryOption<TShape, \"distinct\">) => this.distinct(data, option),\n filter: (data: unknown, option: QueryOption<TShape, \"filter\">) => this.filter(data, option),\n map: (data: unknown, option: QueryOption<TShape, \"map\">) => this.map(data, option),\n max: (data: unknown, option: QueryOption<TShape, \"max\">) => this.max<any>(data, option),\n min: (data: unknown, option: QueryOption<TShape, \"min\">) => this.min<any>(data, option),\n skip: (data: unknown, option: QueryOption<TShape, \"skip\">) => this.skip(data, option),\n sort: (data: unknown, option: QueryOption<TShape, \"sort\">) => this.sort(data, option),\n sum: (data: unknown, option: QueryOption<TShape, \"sum\">) => this.sum<any>(data, option),\n take: (data: unknown, option: QueryOption<TShape, \"take\">) => this.take(data, option),\n group: (data: unknown, option: QueryOption<TShape, \"group\">) => this.group(data, option)\n };\n\n constructor(query: IQuery<TRoot, TShape>) {\n this.query = query;\n }\n\n // Terminators\n abstract count<TResult extends number>(data: unknown, option: QueryOption<TShape, \"count\">): TResult;\n abstract min<TResult extends string | number | Date>(data: unknown, option: QueryOption<TShape, \"min\">): TResult;\n abstract max<TResult extends string | number | Date>(data: unknown, option: QueryOption<TShape, \"max\">): TResult;\n abstract sum<TResult extends number>(data: unknown, option: QueryOption<TShape, \"sum\">): TResult;\n abstract distinct<TResult>(data: unknown, option: QueryOption<TShape, \"distinct\">): TResult;\n\n // Shapers\n abstract filter<TResult>(data: unknown, option: QueryOption<TShape, \"filter\">): TResult;\n abstract skip(data: unknown, option: QueryOption<TShape, \"skip\">): TShape;\n abstract take(data: unknown, option: QueryOption<TShape, \"take\">): TShape;\n abstract sort(data: unknown, option: QueryOption<TShape, \"sort\">): TShape;\n abstract map(data: unknown, option: QueryOption<TShape, \"map\">): TShape;\n abstract group(data: unknown, option: QueryOption<TShape, \"group\">): TShape;\n\n translate(data: unknown): ITranslatedValue<TShape> {\n\n this.query.options.forEach(item => {\n data = this.functionMap[item.name](data, item);\n });\n\n if (Array.isArray(data)) {\n return new TranslatedArrayValue<TShape>(data);\n }\n\n if (this.query.options.has(\"group\")) {\n return new TranslatedGroupValue<TShape>(data);\n }\n\n return new TranslatedSingleValue<TShape>(data);\n }\n}","import { DataTranslator } from \"./DataTranslator\";\nimport { QueryOption } from \"../query/types\";\nimport { assertIsArray } from \"../../assertions\";\nimport { ParamsFilter } from \"../../expressions\";\nimport { isDate, UnknownRecord } from \"../../utilities\";\nimport { IdType } from \"../../schema\";\n\nexport class JsonTranslator<TRoot extends {}, TShape> extends DataTranslator<TRoot, TShape> {\n\n override filter<TResult>(data: unknown, option: QueryOption<TShape, \"filter\">): TResult {\n\n assertIsArray(data);\n\n if (option.value.filter) {\n\n if (option.value.params == null) {\n // standard filtering\n return data.filter(option.value.filter) as TResult;\n }\n\n // params filtering\n const selector = option.value.filter as ParamsFilter<unknown, {}>\n return data.filter(w => selector([w, option.value.params])) as TResult;\n }\n\n return data as TResult;\n }\n\n override map<T>(data: unknown, option: QueryOption<T, \"map\">): T {\n\n if (Array.isArray(data) == false) {\n throw new Error(\"Can only map an array of data\");\n }\n\n const response = new Array(data.length);\n\n for (let i = 0, length = data.length; i < length; i++) {\n\n for (let j = 0, l = option.value.fields.length; j < l; j++) {\n const field = option.value.fields[j];\n\n if (field.property != null) {\n const value = field.property.getValue(data[i]);\n\n if (value != null) {\n // Some types do not support deserialization (Array, Function, Computed, etc), just directly set the incoming value\n const resolvedValue = field.property.supportsDeserialization ? field.property.deserialize(value) : value;\n field.property.setValue(data[i], resolvedValue);\n }\n }\n }\n\n response[i] = option.value.selector(data[i]);\n }\n\n return response as T;\n }\n\n override group<T>(data: unknown, option: QueryOption<T, \"group\">): T {\n\n if (Array.isArray(data) == false) {\n throw new Error(\"Can only group an array of data\");\n }\n\n const group: Record<IdType, unknown[]> = {};\n\n for (let i = 0, length = data.length; i < length; i++) {\n\n const keyValue = option.value.selector(data[i]) as IdType;\n\n if (!group[keyValue]) {\n group[keyValue] = [];\n }\n\n const item: UnknownRecord = {};\n\n for (let j = 0, l = option.value.fields.length; j < l; j++) {\n const field = option.value.fields[j];\n\n if (field.property != null) {\n const value = field.property.getValue(data[i]);\n\n if (value != null) {\n // Some types do not support deserialization (Array, Function, Computed, etc), just directly set the incoming value\n const resolvedValue = field.property.supportsDeserialization ? field.property.deserialize(value) : value;\n field.property.setValue(item, resolvedValue);\n continue;\n }\n\n // The property exists, lets set it to the value (null/undefined)\n if (Object.hasOwn(data[i], field.destinationName)) {\n field.property.setValue(item, value);\n }\n }\n }\n\n group[keyValue].push(item);\n }\n\n return group as T;\n }\n\n override count<TResult extends number>(data: unknown, _: QueryOption<TShape, \"count\">): TResult {\n\n if (Array.isArray(data)) {\n return data.length as TResult;\n }\n\n throw new Error(\"Cannot count resulting data, it must be an array. Please return array of data for function: count()\");\n }\n\n override min<TResult extends string | number | Date>(data: unknown, _: QueryOption<TShape, \"min\">): TResult {\n return this._minMax(data, \"min\", (a: any, b: any) => a - b);\n }\n\n override max<TResult extends string | number | Date>(data: unknown, _: QueryOption<TShape, \"max\">): TResult {\n return this._minMax(data, \"max\", (a: any, b: any) => b - a);\n }\n\n override sort<TResult>(data: unknown, option: QueryOption<TShape, \"sort\">): TResult {\n\n if (Array.isArray(data)) {\n\n data.sort((a, b) => {\n if (option.value.direction === \"asc\") {\n return (option.value.selector(a) as any) - (option.value.selector(b) as any);\n }\n\n return (option.value.selector(b) as any) - (option.value.selector(a) as any);\n });\n }\n\n return data as TResult;\n }\n\n override sum<TResult extends number>(data: unknown, _: QueryOption<TShape, \"sum\">): TResult {\n\n assertIsArray(data, this._formatDataNotArrayError(\"sum\"));\n\n if (data.length === 0) {\n throw new Error(\"Cannot perform operation on empty array, result query contains no data\")\n }\n\n const map = this.query.options.getLast(\"map\");\n\n let sum = 0;\n const field = this._getSelectionField(\"sum\", map);\n\n for (let i = 0, length = data.length; i < length; i++) {\n const value = data[i];\n\n if (typeof value !== \"number\") {\n throw new Error(`Cannot sum, property is not a number. Property: ${field.sourceName}`);\n }\n\n sum += value;\n }\n\n return sum as TResult;\n }\n\n override distinct<TResult>(data: unknown, _: QueryOption<TShape, \"distinct\">): TResult {\n\n assertIsArray(data, this._formatDataNotArrayError(\"distinct\"));\n\n const result = new Set<string | number | Date>();\n\n // would be nice to have property info here for type detection\n let needsDateConversion = false;\n\n for (let i = 0, length = data.length; i < length; i++) {\n const value = data[i];\n\n if (typeof value === \"number\" || typeof value === \"string\") {\n result.add(value);\n continue;\n }\n\n if (isDate(value)) {\n needsDateConversion = true;\n result.add(value.toISOString());\n continue;\n }\n\n }\n\n if (needsDateConversion) {\n return [...result].map(w => new Date(w)) as TResult;\n }\n\n return [...result] as TResult\n }\n\n override skip<TResult>(data: unknown, option: QueryOption<TShape, \"skip\">): TResult {\n\n if (Array.isArray(data)) {\n\n if (option.value > 0) {\n\n if (data.length < option.value) {\n // We don't have enough data to skip, return an empty array\n return [] as TResult;\n }\n\n return data.slice(option.value) as TResult;\n }\n\n return data as TResult;\n }\n\n return data as TResult;\n }\n\n override take<TResult>(data: unknown, option: QueryOption<TShape, \"take\">): TResult {\n if (Array.isArray(data)) {\n\n if (option.value > 0) {\n\n if (data.length < option.value) {\n return data as TResult;\n }\n\n return data.slice(0, option.value) as TResult;\n }\n\n return data as TResult;\n }\n\n return data as TResult;\n }\n\n private _getSelectionField(name: string, mapOption: QueryOption<TShape, \"map\"> | null) {\n\n if (mapOption == null ||\n mapOption.value.fields.length === 0 ||\n mapOption.value.fields.length > 1) {\n throw new Error(`${name}() operation can only be performed when one field is mapped for a result. Ex. myset.map(x => x.someNumberOrDateOrString).${name}()`)\n }\n\n return mapOption.value.fields[0];\n }\n\n private _minMax<T extends string | number | Date>(data: unknown, name: string, sort: (a: any, b: any) => any): T {\n\n assertIsArray(data, this._formatDataNotArrayError(name));\n\n data.sort(sort);\n\n if (data.length === 0) {\n throw new Error(\"Cannot perform operation on empty array, result query contains no data\")\n }\n\n return data[0] as T;\n }\n\n private _formatDataNotArrayError(functionName: string) {\n return `Cannot sum resulting data, it must be an array. Please return array of data for function: ${functionName}()`\n }\n}","import { IdType } from \"../../schema/types\";\nimport { UnknownRecord } from \"../../utilities/types\";\nimport { QueryOption } from \"../query/types\";\nimport { DataTranslator } from \"./DataTranslator\";\n\nexport class SqlTranslator<TRoot extends {}, TShape> extends DataTranslator<TRoot, TShape> {\n\n count<TResult extends number>(data: unknown, _: QueryOption<TShape, \"count\">): TResult {\n if (Array.isArray(data) && data.length > 0) {\n // Count should be returned as the property alias on the query\n return data[0].count;\n }\n\n return data as TResult;\n }\n\n min<TResult extends string | number | Date>(data: unknown, _: QueryOption<TShape, \"min\">): TResult {\n return this.shapeResult(data);\n }\n\n max<TResult extends string | number | Date>(data: unknown, _: QueryOption<TShape, \"max\">): TResult {\n return this.shapeResult(data);\n }\n\n sum<TResult extends number>(data: unknown, _: QueryOption<TShape, \"sum\">): TResult {\n return this.shapeResult(data);\n }\n\n private shapeResult<TResult>(data: unknown) {\n if (Array.isArray(data) && data.length > 0) {\n // Shape the result\n return data[0];\n }\n\n return data as TResult;\n }\n\n distinct<TResult>(data: unknown, _: QueryOption<TShape, \"distinct\">): TResult {\n return data as TResult;\n }\n\n filter<TResult>(data: unknown, _: QueryOption<TShape, \"filter\">): TResult {\n return data as TResult;\n }\n\n skip(data: unknown, _: QueryOption<TShape, \"skip\">): TShape {\n return data as TShape;\n }\n\n take(data: unknown, _: QueryOption<TShape, \"take\">): TShape {\n return data as TShape;\n }\n\n sort(data: unknown, _: QueryOption<TShape, \"sort\">): TShape {\n return data as TShape;\n }\n\n group<T>(data: unknown, option: QueryOption<T, \"group\">): T {\n\n if (Array.isArray(data) == false) {\n throw new Error(\"Can only group an array of data\");\n }\n\n const group: Record<IdType, unknown[]> = {};\n\n for (let i = 0, length = data.length; i < length; i++) {\n\n const keyValue = option.value.selector(data[i]) as IdType;\n\n if (!group[keyValue]) {\n group[keyValue] = [];\n }\n\n const item: UnknownRecord = {};\n\n for (let j = 0, l = option.value.fields.length; j < l; j++) {\n const field = option.value.fields[j];\n\n if (field.property != null) {\n const value = field.property.getValue(data[i]);\n\n if (value != null) {\n field.property.setValue(item, field.property.deserialize(value));\n }\n }\n }\n\n group[keyValue].push(item);\n }\n\n return group as T;\n }\n\n map(data: unknown, option: QueryOption<TShape, \"map\">): TShape {\n if (Array.isArray(data) == false) {\n throw new Error(\"Can only map an array of data\");\n }\n\n if (this.query.options.has(\"count\") && data.length === 1) {\n // data here is the shape of { count: number }[] and will map to nothing. \n // Return the original data and let count take care of this\n return data as TShape;\n }\n\n const response = [];\n\n for (let i = 0, length = data.length; i < length; i++) {\n\n for (let j = 0, l = option.value.fields.length; j < l; j++) {\n const field = option.value.fields[j];\n\n if (field.property != null) {\n const value = field.property.getValue(data[i]);\n\n if (value != null) {\n field.property.setValue(data[i], field.property.deserialize(value));\n }\n }\n }\n\n response.push(option.value.selector(data[i]));\n }\n\n return response as TShape;\n }\n}","import { ITranslatedValue } from './types';\n\nexport class TranslatedArrayValue<T> implements ITranslatedValue<T> {\n\n readonly value: T;\n\n constructor(value: unknown,) {\n this.value = value as T;\n }\n\n forEach(callback: (item: unknown) => unknown): void {\n const data = this.value as unknown[];\n for (let i = 0, length = data.length; i < length; i++) {\n const result = callback(data[i]);\n\n if (result) {\n // reassign if the callback returns a result\n data[i] = result;\n }\n }\n }\n}","import { ITranslatedValue } from './types';\n\nexport class TranslatedGroupValue<T> implements ITranslatedValue<T> {\n\n readonly value: T;\n\n constructor(value: unknown) {\n this.value = value as T;\n }\n\n forEach(callback: (item: unknown) => unknown): void {\n const group = this.value as Record<string, unknown[]>;\n const keys = Object.keys(group);\n for (let i = 0, length = keys.length; i < length; i++) {\n const key = keys[i];\n const data = group[key];\n\n for (let j = 0, len = data.length; j < len; j++) {\n\n const result = callback(data[j]);\n\n if (result) {\n // reassign if the callback returns a result\n data[j] = result;\n }\n }\n }\n }\n}","import { ITranslatedValue } from './types';\n\nexport class TranslatedSingleValue<T> implements ITranslatedValue<T> {\n\n value: T;\n\n constructor(value: unknown) {\n this.value = value as T;\n }\n\n forEach(callback: (item: unknown) => unknown): void {\n const result = callback(this.value) as T;\n\n if (result) {\n this.value = result;\n }\n }\n}","export * from './DataTranslator';\nexport * from './JsonTranslator';\nexport * from './SqlTranslator';\nexport * from './types';\nexport * from './TranslatedArrayValue';\nexport * from './TranslatedGroupValue';\nexport * from './TranslatedSingleValue';","import { PartialResultType, PluginEventPartialResultType, PluginEventResultType, ResultType } from \"./types\";\n\nabstract class BaseResult {\n static ERROR = \"error\" as const;\n static SUCCESS = \"success\" as const;\n static PARTIAL = \"partial\" as const;\n\n static resolve<T>(result: ResultType<T> | PartialResultType<T>, resolve: (data: T) => void, reject: (error?: any) => void) {\n if (result.ok === BaseResult.SUCCESS) {\n resolve(result.data);\n return;\n }\n\n if (result.ok === BaseResult.PARTIAL) {\n reject({\n partial: result.data,\n error: result.error\n });\n return;\n }\n\n reject(result.error);\n }\n\n static assertSuccess<T>(result: any): asserts result is { ok: \"success\"; data: T } {\n if (result.ok !== BaseResult.SUCCESS) {\n throw new Error(`Expected success result, but got ${result.ok}: ${result.error}`);\n }\n }\n}\n\nexport class Result extends BaseResult {\n static success<T>(data: T): ResultType<T>;\n static success<T>(): ResultType<never>;\n static success<T>(data?: T): ResultType<T> {\n return {\n ok: Result.SUCCESS,\n data\n }\n }\n\n static error<T>(error: any): ResultType<T> {\n return {\n ok: Result.ERROR,\n error\n }\n }\n\n static partial<T>(data: T, error: any): PartialResultType<T> {\n return {\n ok: Result.PARTIAL,\n data,\n error\n }\n }\n}\n\nexport class PluginEventResult extends BaseResult {\n static success<T>(id: string, data: T): PluginEventResultType<T>;\n static success<T>(id: string): PluginEventResultType<never>;\n static success<T>(id: string, data?: T): PluginEventResultType<T> {\n return {\n id,\n ok: Result.SUCCESS,\n data\n }\n }\n\n static error<T>(id: string, error: any): PluginEventResultType<T> {\n return {\n id,\n ok: Result.ERROR,\n error\n }\n }\n\n static partial<T>(id: string, data: T, error: any): PluginEventPartialResultType<T> {\n return {\n id,\n ok: Result.PARTIAL,\n data,\n error\n }\n }\n\n static assertSuccess<T>(result: PluginEventResultType<T>): asserts result is { ok: \"success\"; data: T; id: string } {\n if (result.ok !== Result.SUCCESS) {\n throw new Error(`Expected success result, but got ${result.ok}: ${result.error}`);\n }\n }\n}\n","export const isDate = (data: unknown): data is Date => {\n if (data == null) {\n return false;\n }\n\n if (typeof data !== \"object\") {\n return false;\n }\n\n return data instanceof Date;\n}","import { BulkPersistResult, BulkPersistChanges } from \"../collections\";\nimport { DbPluginBulkPersistEvent } from \"../plugins\";\n\nexport const resolveBulkPersistChanges = (event: DbPluginBulkPersistEvent, result: BulkPersistResult, bulkPersistChanges: BulkPersistChanges) => {\n // make sure we swap the adds here, that way we can make sure other persist events\n // don't take their additions and try to change subsequent calls\n for (const [schemaId, changes] of event.operation) {\n\n const schemmaBulkPersistResult = result.get(schemaId);\n const schemaBulkPersistChanges = bulkPersistChanges.resolve(schemaId);\n\n // Set the original removes\n schemaBulkPersistChanges.removes = changes.removes;\n\n // Set the original updates\n schemaBulkPersistChanges.updates = changes.updates;\n\n // Take the adds from the result and set them to be persisted\n // in the replicated plugins because the id's are set in the \n // memory data store\n schemaBulkPersistChanges.adds = schemmaBulkPersistResult.adds;\n }\n}","export const uuid = (length: number = 16): string => {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n const charLength = chars.length;\n let result = '';\n\n for (let i = 0; i < length; i++) {\n result += chars[Math.random() * charLength | 0];\n }\n return result;\n}\n\nconst HEX_CHARS = '0123456789abcdef';\nconst UUID_TEMPLATE = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n\nconst hasCrypto =\n typeof crypto !== 'undefined' && typeof crypto.getRandomValues === 'function';\n\nexport const uuidv4 = (): string => {\n let randomBytes: Uint8Array | null = null;\n if (hasCrypto) {\n randomBytes = crypto.getRandomValues(new Uint8Array(16));\n }\n\n let byteIndex = 0;\n let uuid = '';\n\n for (let i = 0; i < UUID_TEMPLATE.length; i++) {\n const c = UUID_TEMPLATE[i];\n if (c === '-') {\n uuid += '-';\n continue;\n }\n\n let r: number;\n if (hasCrypto && randomBytes) {\n // Each byte gives two hex digits (nibbles)\n r =\n (i % 2 === 0\n ? randomBytes[byteIndex] >> 4\n : randomBytes[byteIndex++] & 0x0f);\n } else {\n r = Math.floor(Math.random() * 16);\n }\n\n if (c === 'x') {\n uuid += HEX_CHARS[r];\n } else if (c === 'y') {\n // Variant bits: 8, 9, A, or B\n uuid += HEX_CHARS[(r & 0x3) | 0x8];\n } else if (c === '4') {\n uuid += '4';\n }\n }\n\n return uuid;\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export * from './types';\nexport * from './translators';\nexport * from './replication';\nexport * from './query';\nexport * from './EphemeralDataPlugin';"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugins/index.js","sources":["webpack://@routier/core/./src/assertions/index.ts","webpack://@routier/core/./src/collections/Changes.ts","webpack://@routier/core/./src/collections/TagCollection.ts","webpack://@routier/core/./src/expressions/utils.ts","webpack://@routier/core/./src/pipeline/TrampolinePipeline.ts","webpack://@routier/core/./src/plugins/EphemeralDataPlugin.ts","webpack://@routier/core/./src/plugins/query/Query.ts","webpack://@routier/core/./src/plugins/query/QueryOptionsCollection.ts","webpack://@routier/core/./src/plugins/query/index.ts","webpack://@routier/core/./src/plugins/query/types.ts","webpack://@routier/core/./src/plugins/replication/OptimisticReplicationDbPlugin.ts","webpack://@routier/core/./src/plugins/replication/ReplicationDbPlugin.ts","webpack://@routier/core/./src/plugins/replication/index.ts","webpack://@routier/core/./src/plugins/translators/DataTranslator.ts","webpack://@routier/core/./src/plugins/translators/JsonTranslator.ts","webpack://@routier/core/./src/plugins/translators/SqlTranslator.ts","webpack://@routier/core/./src/plugins/translators/TranslatedArrayValue.ts","webpack://@routier/core/./src/plugins/translators/TranslatedGroupValue.ts","webpack://@routier/core/./src/plugins/translators/TranslatedSingleValue.ts","webpack://@routier/core/./src/plugins/translators/index.ts","webpack://@routier/core/./src/results/Result.ts","webpack://@routier/core/./src/utilities/dates.ts","webpack://@routier/core/./src/utilities/replication.ts","webpack://@routier/core/./src/utilities/uuid.ts","webpack://@routier/core/webpack/runtime/define_property_getters","webpack://@routier/core/webpack/runtime/has_own_property","webpack://@routier/core/webpack/runtime/make_namespace_object","webpack://@routier/core/./src/plugins/index.ts"],"sourcesContent":["import { isDate } from \"../utilities\";\n\nexport function assertDate(data: unknown): asserts data is Date {\n if (isDate(data) === false) {\n throw new TypeError('Value is not a Date');\n }\n}\n\nexport function assertIsNotNull<T>(data: T | null | undefined, message?: string | (() => string)): asserts data is NonNullable<T> {\n if (data == null) {\n if (message == null) {\n throw new TypeError('Assertion failed, data is null');\n }\n\n if (typeof message === \"string\") {\n throw new TypeError(message);\n }\n\n throw new TypeError(message());\n }\n}\n\nexport function assertIsArray<T>(data: unknown, message?: string): asserts data is T[] {\n if (!Array.isArray(data)) {\n throw new TypeError(message ?? 'Assertion failed, data is not of type Array');\n }\n}\n\nexport function assertString(data: unknown, message?: string): asserts data is string {\n if (typeof data !== \"string\") {\n throw new TypeError(message ?? 'Assertion failed, data is not of type String');\n }\n}\n\nexport function assertInstanceOf<T extends new (...args: any[]) => any>(value: unknown, Instance: T): asserts value is T {\n if (value instanceof Instance) {\n return;\n }\n\n if (value != null && typeof value === \"object\" && \"constructor\" in value) {\n throw new TypeError(`Value is not instance of type. Type: ${value.constructor.name}`);\n }\n\n throw new TypeError(`Value is not instance of type`);\n}","import { EntityUpdateInfo } from \"../plugins/types\";\nimport { InferCreateType, InferType, SchemaId } from \"../schema\";\nimport { TagCollection } from \"./TagCollection\";\nexport class BulkPersistResult extends Map<SchemaId, SchemaPersistResult> {\n\n resolve(schemaId: SchemaId): SchemaPersistResult {\n if (this.has(schemaId)) {\n return this.get(schemaId);\n }\n\n this.set(schemaId, new SchemaPersistResult());\n\n return this.get(schemaId);\n }\n\n override get<T extends {} = Record<string, unknown>>(schemaId: SchemaId) {\n return super.get(schemaId) as SchemaPersistResult<T>\n }\n\n get aggregate() {\n return {\n size: this.aggregateSize,\n adds: this.aggregateAddsSize,\n updates: this.aggregateUpdatesSize,\n removes: this.aggregateRemovesSize\n }\n }\n\n private get aggregateSize() {\n let count = 0;\n\n for (const [, result] of this) {\n count += result.total;\n }\n\n return count;\n }\n\n private get aggregateAddsSize() {\n let count = 0;\n\n for (const [, result] of this) {\n count += result.adds.length;\n }\n\n return count;\n }\n\n private get aggregateUpdatesSize() {\n let count = 0;\n\n for (const [, result] of this) {\n count += result.updates.length;\n }\n\n return count;\n }\n\n private get aggregateRemovesSize() {\n let count = 0;\n\n for (const [, result] of this) {\n count += result.removes.length;\n }\n\n return count;\n }\n}\n\nexport class BulkPersistChanges extends Map<SchemaId, SchemaPersistChanges> {\n\n resolve(schemaId: SchemaId): SchemaPersistChanges {\n if (this.has(schemaId)) {\n return this.get(schemaId);\n }\n\n this.set(schemaId, new SchemaPersistChanges());\n\n return this.get(schemaId);\n }\n\n override get<T extends {} = Record<string, unknown>>(schemaId: SchemaId) {\n return super.get(schemaId) as SchemaPersistChanges<T>\n }\n\n get aggregate() {\n return {\n size: this.aggregateSize,\n adds: this.aggregateAddsSize,\n updates: this.aggregateUpdatesSize,\n removes: this.aggregateRemovesSize\n }\n }\n\n private get aggregateSize() {\n let count = 0;\n\n for (const [, result] of this) {\n count += result.total;\n }\n\n return count;\n }\n\n private get aggregateAddsSize() {\n let count = 0;\n\n for (const [, result] of this) {\n count += result.adds.length;\n }\n\n return count;\n }\n\n private get aggregateUpdatesSize() {\n let count = 0;\n\n for (const [, result] of this) {\n count += result.updates.length;\n }\n\n return count;\n }\n\n private get aggregateRemovesSize() {\n let count = 0;\n\n for (const [, result] of this) {\n count += result.removes.length;\n }\n\n return count;\n }\n\n /**\n * Ensures the result has the same result sets as the change sets\n * @returns \n */\n toResult() {\n const result = new BulkPersistResult();\n\n for (const [schemaId] of this) {\n result.set(schemaId, new SchemaPersistResult());\n }\n\n return result;\n }\n}\n\nexport class SchemaPersistChanges<T extends {} = Record<string, unknown>> {\n adds: InferCreateType<T>[] = [];\n updates: EntityUpdateInfo<T>[] = [];\n removes: InferType<T>[] = [];\n tags: TagCollection = new TagCollection();\n\n get hasItems() {\n return this.total > 0;\n }\n\n get total() {\n return this.adds.length + this.updates.length + this.removes.length;\n }\n}\n\nexport class SchemaPersistResult<T extends {} = Record<string, unknown>> {\n adds: InferType<T>[] = [];\n updates: InferType<T>[] = [];\n removes: InferType<T>[] = [];\n\n get hasItems() {\n return this.total > 0;\n }\n\n get total() {\n return this.adds.length + this.updates.length + this.removes.length;\n }\n}","export class TagCollection implements Disposable {\n\n private data: Map<Object, unknown> = new Map<Object, unknown>();\n private _size: number = 0;\n\n get size() {\n return this._size;\n }\n\n get(key: Object) {\n return this.data.get(key);\n }\n\n has(key: Object) {\n return this.data.has(key);\n }\n\n set(key: Object, tag: unknown) {\n this._size++;\n return this.data.set(key, tag);\n }\n\n delete(key: Object) {\n const result = this.data.delete(key);\n\n if (result) {\n this._size--;\n }\n\n return result;\n }\n\n setMany(keys: Object[], tag: unknown) {\n this._size += keys.length;\n for (let i = 0, length = keys.length; i < length; i++) {\n const key = keys[i];\n this.set(key, tag);\n }\n }\n\n combine(tags: TagCollection) {\n for (const [key, value] of tags) {\n this.data.set(key, value);\n }\n }\n\n values() {\n return this.data.values();\n }\n\n keys() {\n return this.data.keys();\n }\n\n [Symbol.dispose]() {\n this.data.clear();\n }\n\n [Symbol.iterator]() {\n return this.data[Symbol.iterator]();\n }\n}","import { PropertyInfo } from \"../schema\";\nimport { Expression, PropertyExpression } from \"./types\";\n\n/**\n * Extracts all properties referenced in an expression\n * @param expression The expression to analyze\n * @returns Array of PropertyInfo objects referenced in the expression\n */\nexport function getProperties(expression: Expression): PropertyInfo<any>[] {\n const properties: PropertyInfo<any>[] = [];\n\n function traverse(expr: Expression) {\n // If this is a property expression, add it to our collection\n if (expr.type === \"property\") {\n properties.push((expr as PropertyExpression).property);\n }\n\n // Traverse left and right expressions if they exist\n if (expr.left) {\n traverse(expr.left);\n }\n if (expr.right) {\n traverse(expr.right);\n }\n }\n\n traverse(expression);\n return properties;\n}\n\nexport function isPropertyExpression(expression: Expression): expression is PropertyExpression {\n return expression.type === \"property\";\n}\n\nexport function forEach(expression: Expression, callback: (expression: Expression) => boolean) {\n function traverse(expr: Expression): boolean {\n // Call the callback for this expression\n // If callback returns false, stop traversing\n if (!callback(expr)) {\n return false;\n }\n\n // Traverse left and right expressions if they exist\n if (expr.left) {\n if (!traverse(expr.left)) {\n return false;\n }\n }\n if (expr.right) {\n if (!traverse(expr.right)) {\n return false;\n }\n }\n\n return true;\n }\n\n traverse(expression);\n}","import { CallbackResult, Result, ResultType } from \"../results\";\n\n/**\n * Type definition for an asynchronous function that takes data and a callback.\n * TIn: The input data type.\n * TOut: The output data type (passed to the callback).\n */\nexport type Processor<TIn, TOut> = (data: TIn, callback: (result: TOut, error?: any) => void) => void;\n\n// Return type for a step execution: Either the next step function or null if waiting/done.\ntype StepResult<TData> = TrampolineStep<TData> | null;\ntype TrampolineStep<TData> = () => StepResult<TData>;\n\nexport class TrampolinePipeline<TInitial, TCurrent = TInitial> {\n private _list: Processor<any, any>[] = [];\n private _hasErrored: boolean = false; // Flag to prevent calling done on error\n\n filter<TFinal>(initialData: TInitial, done: (data: TFinal, error?: any) => void) {\n\n this._hasErrored = false; // Reset error flag on new execution\n\n if (this._list.length === 0) {\n queueMicrotask(() => done(initialData as unknown as TFinal));\n return;\n }\n\n let index = 0;\n let currentData: any = initialData;\n let isRunning = false; // Guard against overlapping trampoline calls\n\n try {\n // --- Revised Completion Logic --- (Moved up for clarity)\n const finalStepSentinel = (): StepResult<any> => { // A special step function for the very end\n // Only call done if no error has occurred\n if (!this._hasErrored) {\n queueMicrotask(() => done(currentData as TFinal));\n }\n return null; // Stop the trampoline\n };\n\n const createStepRevised = (idx: number): TrampolineStep<any> => {\n return () => {\n if (this._hasErrored) return null; // Stop if an error occurred elsewhere\n\n if (idx >= this._list.length) {\n return finalStepSentinel(); // Execute the dedicated final step\n }\n\n const processor = this._list[idx];\n // Initialize syncCallbackResult to null to satisfy StepResult type\n let syncCallbackResult: StepResult<any> = null;\n let calledSync = false;\n\n try {\n processor(currentData, (result, error) => {\n // --- Error Handling ---\n if (error) {\n console.error(`Error reported by processor at index ${idx}:`, error);\n this._hasErrored = true; // Set flag\n // Throw the error to be caught by outer try...catch blocks\n throw error;\n }\n // --- /Error Handling ---\n\n // If no error, proceed as before\n currentData = result;\n index = idx + 1; // Update index for the next step\n const nextStep = createStepRevised(index); // Use updated index\n\n if (isRunning) {\n // Callback was synchronous\n syncCallbackResult = nextStep; // Store next step function\n calledSync = true;\n } else {\n // Callback was asynchronous, restart trampoline\n trampoline(nextStep);\n }\n });\n } catch (error) {\n if (!this._hasErrored) { // Check flag to avoid double logging if error was from callback\n console.error(`Error thrown by processor at index ${idx} or its callback:`, error);\n this._hasErrored = true;\n }\n // Rethrow to be caught by the trampoline's catch block\n throw error;\n }\n\n if (calledSync) {\n // Return the next step function for the sync loop\n return syncCallbackResult;\n } else {\n // Pause trampoline for async, loop will stop as step returns null\n return null;\n }\n };\n };\n\n // The trampoline loop\n const trampoline = (step: TrampolineStep<any> | null) => {\n\n if (isRunning) {\n return;\n }\n\n isRunning = true;\n let currentStep = step;\n\n while (typeof currentStep === 'function') {\n try {\n // Stop immediately if an error was flagged elsewhere\n if (this._hasErrored) {\n currentStep = null;\n break;\n }\n currentStep = currentStep(); // Execute step, get next step or null\n } catch (trampolineError) {\n // Catch errors propagated from step execution (processor or callback errors)\n if (!this._hasErrored) { // Avoid double logging\n console.error(\"Error during trampoline step execution:\", trampolineError);\n this._hasErrored = true;\n }\n currentStep = null; // Stop the loop\n // We don't call `done` here because an error occurred.\n // The application should handle the uncaught exception if desired.\n break; // Explicitly break loop on error\n }\n }\n // Loop ends when currentStep is null or loop is broken by error\n isRunning = false;\n\n // Completion check is now handled by finalStepSentinel ensuring `done` isn't called on error.\n };\n\n // --- Start the process ---\n index = 0; // Reset index\n currentData = initialData; // Reset data\n trampoline(createStepRevised(0)); // Start with the revised step creator\n } catch (error: any) {\n done(currentData, error);\n }\n }\n\n pipe<TNext>(processor: Processor<TCurrent, TNext>) {\n this._list.push(processor);\n return this as unknown as TrampolinePipeline<TInitial, TNext>;\n }\n\n pipeEach(items: TCurrent[], fn: (payload: ResultType<TCurrent>, done: CallbackResult<TCurrent>) => void, map: (previous: ResultType<TCurrent>, current: ResultType<TCurrent>) => ResultType<TCurrent>) {\n for (let i = 0, length = items.length; i < length; i++) {\n\n this.pipe<ResultType<TCurrent>>((previous, done) => {\n\n fn(map(previous as ResultType<TCurrent>, Result.success(items[i])), done);\n });\n }\n }\n}\n\nexport type AsyncUnitOfWork<TData, TResult> = (payload: TData, done: CallbackResult<TResult>) => void;\nexport class AsyncPipeline<TData, TResult> {\n private _list: [TData, AsyncUnitOfWork<TData, TResult>][] = [];\n private _hasErrored: boolean = false; // Flag to prevent calling done on error\n\n filter(done: CallbackResult<TResult[]>) {\n\n this._hasErrored = false; // Reset error flag on new execution\n let currentData: TResult[] = [];\n\n if (this._list.length === 0) {\n queueMicrotask(() => done(Result.success()));\n return;\n }\n\n let index = 0;\n let isRunning = false; // Guard against overlapping trampoline calls\n\n try {\n // --- Revised Completion Logic --- (Moved up for clarity)\n const finalStepSentinel = (): StepResult<any> => { // A special step function for the very end\n // Only call done if no error has occurred\n if (!this._hasErrored) {\n queueMicrotask(() => done(Result.success(currentData)));\n }\n return null; // Stop the trampoline\n };\n\n const createStepRevised = (idx: number): TrampolineStep<any> => {\n return () => {\n if (this._hasErrored) return null; // Stop if an error occurred elsewhere\n\n if (idx >= this._list.length) {\n return finalStepSentinel(); // Execute the dedicated final step\n }\n\n const [payload, processor] = this._list[idx];\n // Initialize syncCallbackResult to null to satisfy StepResult type\n let syncCallbackResult: StepResult<any> = null;\n let calledSync = false;\n\n try {\n processor(payload, (result) => {\n // --- Error Handling ---\n if (result.ok === Result.ERROR) {\n console.error(`Error reported by AsyncPipeline at index ${idx}:`, result.error);\n this._hasErrored = true; // Set flag\n // Throw the error to be caught by outer try...catch blocks\n throw result.error;\n }\n // --- /Error Handling ---\n\n // If no error, proceed as before\n currentData.push(result.data);\n index = idx + 1; // Update index for the next step\n const nextStep = createStepRevised(index); // Use updated index\n\n if (isRunning) {\n // Callback was synchronous\n syncCallbackResult = nextStep; // Store next step function\n calledSync = true;\n } else {\n // Callback was asynchronous, restart trampoline\n trampoline(nextStep);\n }\n });\n } catch (error) {\n if (!this._hasErrored) { // Check flag to avoid double logging if error was from callback\n console.error(`Error thrown by processor at index ${idx} or its callback:`, error);\n this._hasErrored = true;\n }\n // Rethrow to be caught by the trampoline's catch block\n throw error;\n }\n\n if (calledSync) {\n // Return the next step function for the sync loop\n return syncCallbackResult;\n } else {\n // Pause trampoline for async, loop will stop as step returns null\n return null;\n }\n };\n };\n\n // The trampoline loop\n const trampoline = (step: TrampolineStep<any> | null) => {\n\n if (isRunning) {\n return;\n }\n\n isRunning = true;\n let currentStep = step;\n\n while (typeof currentStep === 'function') {\n try {\n // Stop immediately if an error was flagged elsewhere\n if (this._hasErrored) {\n currentStep = null;\n break;\n }\n currentStep = currentStep(); // Execute step, get next step or null\n } catch (trampolineError) {\n // Catch errors propagated from step execution (processor or callback errors)\n if (!this._hasErrored) { // Avoid double logging\n console.error(\"Error during trampoline step execution:\", trampolineError);\n this._hasErrored = true;\n }\n currentStep = null; // Stop the loop\n // We don't call `done` here because an error occurred.\n // The application should handle the uncaught exception if desired.\n break; // Explicitly break loop on error\n }\n }\n // Loop ends when currentStep is null or loop is broken by error\n isRunning = false;\n\n // Completion check is now handled by finalStepSentinel ensuring `done` isn't called on error.\n };\n\n // --- Start the process ---\n index = 0; // Reset index\n trampoline(createStepRevised(0)); // Start with the revised step creator\n } catch (error: any) {\n done(Result.error(error));\n }\n }\n\n pipe(data: TData, processor: AsyncUnitOfWork<TData, TResult>) {\n this._list.push([data, processor]);\n }\n\n pipeEach(items: TData[], processor: AsyncUnitOfWork<TData, TResult>) {\n for (let i = 0, length = items.length; i < length; i++) {\n this.pipe(items[i], processor);\n }\n }\n}\n\nexport type UnitOfWork = (done: CallbackResult<never>) => void;\n\n/**\n * Processes functions with callbacks asynchronously.\n * \n * This pipeline handles work items that contain callback functions,\n * executing them in an asynchronous manner while maintaining proper\n * flow control and error handling.\n */\nexport class WorkPipeline {\n private unitsOfWork: UnitOfWork[] = [];\n private _hasErrored: boolean = false; // Flag to prevent calling done on error\n\n filter(done: CallbackResult<never>) {\n\n this._hasErrored = false; // Reset error flag on new execution\n\n if (this.unitsOfWork.length === 0) {\n queueMicrotask(() => done(Result.success()));\n return;\n }\n\n let index = 0;\n let isRunning = false; // Guard against overlapping trampoline calls\n\n try {\n // --- Revised Completion Logic --- (Moved up for clarity)\n const finalStepSentinel = (): StepResult<never> => { // A special step function for the very end\n // Only call done if no error has occurred\n if (!this._hasErrored) {\n queueMicrotask(() => done(Result.success()));\n }\n return null; // Stop the trampoline\n };\n\n const createStepRevised = (idx: number): TrampolineStep<any> => {\n return () => {\n if (this._hasErrored) return null; // Stop if an error occurred elsewhere\n\n if (idx >= this.unitsOfWork.length) {\n return finalStepSentinel(); // Execute the dedicated final step\n }\n\n const processor = this.unitsOfWork[idx];\n // Initialize syncCallbackResult to null to satisfy StepResult type\n let syncCallbackResult: StepResult<any> = null;\n let calledSync = false;\n\n try {\n processor((result) => {\n // --- Error Handling ---\n if (result.ok === Result.ERROR) {\n console.error(`Error reported by AsyncPipeline at index ${idx}:`, result.error);\n this._hasErrored = true; // Set flag\n // Throw the error to be caught by outer try...catch blocks\n throw result.error;\n }\n // --- /Error Handling ---\n\n // If no error, proceed as before\n index = idx + 1; // Update index for the next step\n const nextStep = createStepRevised(index); // Use updated index\n\n if (isRunning) {\n // Callback was synchronous\n syncCallbackResult = nextStep; // Store next step function\n calledSync = true;\n } else {\n // Callback was asynchronous, restart trampoline\n trampoline(nextStep);\n }\n });\n } catch (error) {\n if (!this._hasErrored) { // Check flag to avoid double logging if error was from callback\n console.error(`Error thrown by processor at index ${idx} or its callback:`, error);\n this._hasErrored = true;\n }\n // Rethrow to be caught by the trampoline's catch block\n throw error;\n }\n\n if (calledSync) {\n // Return the next step function for the sync loop\n return syncCallbackResult;\n } else {\n // Pause trampoline for async, loop will stop as step returns null\n return null;\n }\n };\n };\n\n // The trampoline loop\n const trampoline = (step: TrampolineStep<any> | null) => {\n\n if (isRunning) {\n return;\n }\n\n isRunning = true;\n let currentStep = step;\n\n while (typeof currentStep === 'function') {\n try {\n // Stop immediately if an error was flagged elsewhere\n if (this._hasErrored) {\n currentStep = null;\n break;\n }\n currentStep = currentStep(); // Execute step, get next step or null\n } catch (trampolineError) {\n // Catch errors propagated from step execution (processor or callback errors)\n if (!this._hasErrored) { // Avoid double logging\n console.error(\"Error during trampoline step execution:\", trampolineError);\n this._hasErrored = true;\n }\n currentStep = null; // Stop the loop\n // We don't call `done` here because an error occurred.\n // The application should handle the uncaught exception if desired.\n break; // Explicitly break loop on error\n }\n }\n // Loop ends when currentStep is null or loop is broken by error\n isRunning = false;\n\n // Completion check is now handled by finalStepSentinel ensuring `done` isn't called on error.\n };\n\n // --- Start the process ---\n index = 0; // Reset index\n trampoline(createStepRevised(0)); // Start with the revised step creator\n } catch (error: any) {\n done(Result.error(error));\n }\n }\n\n pipe(work: UnitOfWork) {\n this.unitsOfWork.push(work);\n }\n}","import { assertIsNotNull } from '../assertions';\nimport { BulkPersistResult } from '../collections';\nimport { WorkPipeline } from '../pipeline';\nimport { DbPluginBulkPersistEvent, DbPluginEvent, DbPluginQueryEvent, IDbPlugin, ITranslatedValue, JsonTranslator } from '.';\nimport { PluginEventCallbackPartialResult, PluginEventCallbackResult, PluginEventResult, Result } from '../results';\nimport { CompiledSchema, InferCreateType, InferType } from '../schema';\nimport { DeepPartial } from '../types';\nimport { MemoryDataCollection } from '../collections/MemoryDataCollection';\nimport { UnknownRecord } from '../utilities';\n\nexport abstract class EphemeralDataPlugin implements IDbPlugin {\n\n protected databaseName: string;\n\n constructor(databaseName: string) {\n this.databaseName = databaseName;\n }\n\n protected abstract resolveCollection<TEntity extends {}>(schema: CompiledSchema<TEntity>): MemoryDataCollection;\n\n bulkPersist(event: DbPluginBulkPersistEvent, done: PluginEventCallbackPartialResult<BulkPersistResult>) {\n try {\n const bulkPersistResult = event.operation.toResult();\n const schemas = event.schemas;\n const pipeline = new WorkPipeline();\n let hasWork = false;\n\n for (const [schemaId, changes] of event.operation) {\n const { adds, hasItems, removes, updates } = changes;\n\n if (!hasItems) {\n continue;\n }\n\n hasWork = true;\n const result = bulkPersistResult.get(schemaId);\n const schema = schemas.get(schemaId);\n assertIsNotNull(schema);\n\n pipeline.pipe((d) => {\n try {\n const collection = this.resolveCollection(schema);\n collection.load(readResult => {\n if (readResult.ok === Result.ERROR) {\n d(readResult);\n return;\n }\n\n const addsLength = adds.length;\n const updatesLength = updates.length;\n const removesLength = removes.length;\n result.adds = new Array(addsLength);\n result.updates = new Array(updatesLength);\n result.removes = new Array(removesLength);\n\n for (let j = 0; j < addsLength; j++) {\n const item = adds[j];\n collection.add(item);\n result.adds[j] = item as DeepPartial<InferCreateType<UnknownRecord>>;\n }\n\n for (let j = 0; j < updatesLength; j++) {\n const item = updates[j].entity;\n collection.update(item);\n result.updates[j] = item;\n }\n\n for (let j = 0; j < removesLength; j++) {\n collection.remove(removes[j]);\n result.removes[j] = removes[j];\n }\n\n collection.save(saveResult => {\n if (saveResult.ok === Result.ERROR) {\n d(saveResult);\n return;\n }\n d(Result.success());\n });\n });\n } catch (e) {\n d(Result.error(e));\n }\n });\n }\n\n // If there is no work, just return the result\n if (!hasWork) {\n done(PluginEventResult.success(event.id, bulkPersistResult));\n return;\n }\n\n pipeline.filter((result) => {\n if (result.ok === Result.ERROR) {\n done(PluginEventResult.error(event.id, result.error));\n return;\n }\n done(PluginEventResult.success(event.id, bulkPersistResult));\n });\n } catch (e: any) {\n done(PluginEventResult.error(event.id, e));\n }\n }\n\n query<TEntity extends {}, TShape extends any = TEntity>(event: DbPluginQueryEvent<TEntity, TShape>, done: PluginEventCallbackResult<ITranslatedValue<TShape>>): void {\n try {\n const operation = event.operation;\n const schema = operation.schema;\n const translator = new JsonTranslator<TEntity, TShape>(operation);\n const collection = this.resolveCollection(schema);\n\n collection.load(r => {\n if (r.ok === Result.ERROR) {\n done(PluginEventResult.error(event.id, r.error));\n return;\n }\n\n const records = collection.records;\n const length = records.length;\n const cloned: Record<string, unknown>[] = new Array(length);\n\n for (let i = 0; i < length; i++) {\n cloned[i] = schema.clone(records[i] as InferType<TEntity>);\n }\n\n done(PluginEventResult.success(event.id, translator.translate(cloned)));\n });\n } catch (e) {\n done(PluginEventResult.error(event.id, e));\n }\n }\n\n abstract destroy(event: DbPluginEvent, done: PluginEventCallbackResult<never>): void;\n}","\nimport { CompiledSchema } from '../../schema';\nimport { IQuery } from '../types';\nimport { QueryOptionsCollection } from './QueryOptionsCollection';\n\nexport class Query<TRoot extends {}, TShape> implements IQuery<TRoot, TShape> {\n\n readonly options: QueryOptionsCollection<TShape>;\n readonly schema: CompiledSchema<TRoot>;\n private enableChangeTrackingOverride?: boolean\n\n constructor(\n options: QueryOptionsCollection<TShape>,\n schema: CompiledSchema<TRoot>,\n enableChangeTrackingOverride?: boolean,\n ) {\n this.schema = schema;\n this.options = options;\n this.enableChangeTrackingOverride = enableChangeTrackingOverride;\n }\n\n // boolean value whether or not change tracking can be enabled on the query result\n get changeTracking(): boolean {\n\n if (this.enableChangeTrackingOverride != null) {\n return this.enableChangeTrackingOverride;\n }\n\n const map = this.options.getValues(\"map\");\n const count = this.options.has(\"count\");\n const max = this.options.has(\"max\");\n const min = this.options.has(\"min\");\n const sum = this.options.has(\"sum\");\n\n if (map.some(x => x.fields.length > 0)) {\n return false\n }\n\n if (count === true ||\n max === true ||\n min === true ||\n sum === true) {\n return false\n }\n\n return true;\n }\n\n static EMPTY<T extends {}, S>(schema: CompiledSchema<T>) {\n return new Query<T, S>(QueryOptionsCollection.EMPTY<S>(), schema);\n }\n\n static isEmpty<T extends {}, S>(query: IQuery<T, S>) {\n return QueryOptionsCollection.isEmpty(query.options);\n }\n\n static toString<TRoot extends {}, TShape>(query: IQuery<TRoot, TShape>) {\n return JSON.stringify({\n options: query.options.items,\n schema: {\n id: query.schema.id,\n collectionName: query.schema.collectionName\n },\n changeTracking: query.changeTracking\n })\n }\n}","import { forEach, isPropertyExpression } from \"../../expressions/utils\";\nimport { QueryOption, QueryOptionName, QueryOptionExecutionTarget, QueryOptionValueMap } from \"./types\";\n\nexport type QueryCollectionItem<T, K extends QueryOptionName> = { index: number, option: QueryOption<T, K> };\n\nexport class QueryOptionsCollection<T> {\n\n private options: Map<QueryOptionName, QueryCollectionItem<any, any>[]> = new Map<QueryOptionName, QueryCollectionItem<any, any>[]>();\n private nextExecutionTarget: QueryOptionExecutionTarget = \"database\";\n private nextIndex: number = 0;\n private enumeratedItems: QueryCollectionItem<any, any>[] = [];\n\n get items() {\n return this.options;\n }\n\n get isEmpty() {\n return this.items.size === 0;\n }\n\n static EMPTY<R>() {\n return new QueryOptionsCollection<R>();\n }\n\n static isEmpty<T>(options: QueryOptionsCollection<T>) {\n return options.isEmpty;\n }\n\n add<K extends QueryOptionName>(name: K, value: QueryOption<T, K>[\"value\"]) {\n\n if (name === \"map\") {\n const mapValue = value as QueryOptionValueMap<T>[\"map\"];\n\n // Evaluate the map value to see if we are renaming properties, \n // if we are we need to perform everything after in memory\n if (mapValue.fields.some(x => x.isRename === true) || mapValue.fields.some(x => x.property?.isUnmapped === true)) {\n // Cut over to memory execution since we are renaming a property with .map\n // We do not want to figure out how the new name flows through the entire query\n this.nextExecutionTarget = \"memory\";\n }\n }\n\n if (name === \"filter\") {\n // Need to check for unmapped properties\n const filterValue = value as QueryOptionValueMap<T>[\"filter\"];\n\n if (filterValue.expression.type === \"not-parsable\") {\n this.nextExecutionTarget = \"memory\";\n } else {\n forEach(filterValue.expression, (expression) => {\n\n if (isPropertyExpression(expression) && expression.property.isUnmapped) {\n // Cut over to memory execution, unmapped properties are not in the database and\n // cannot be queried\n this.nextExecutionTarget = \"memory\";\n return false;\n }\n\n return true;\n });\n }\n }\n\n const item: QueryCollectionItem<T, K> = {\n index: this.nextIndex,\n option: {\n name,\n target: this.nextExecutionTarget,\n value\n }\n }\n\n this.nextIndex++;\n\n const found = this.options.get(name);\n\n this.options.set(name, [...found ?? [], item]);\n }\n\n split(): { memory: QueryOptionsCollection<T>, database: QueryOptionsCollection<T> } {\n this.resolveEnumeration();\n\n const sortedItems = this.enumeratedItems.toSorted((a, b) => a.index - b.index);\n const memoryQueryOptionsCollection = new QueryOptionsCollection<T>();\n const databaseQueryOptionsCollection = new QueryOptionsCollection<T>();\n\n for (let i = 0, length = sortedItems.length; i < length; i++) {\n const sortedItem = sortedItems[i];\n\n if (sortedItem.option.target === \"database\") {\n databaseQueryOptionsCollection.add(sortedItem.option.name, sortedItem.option.value);\n continue;\n }\n\n memoryQueryOptionsCollection.add(sortedItem.option.name, sortedItem.option.value);\n }\n\n return {\n memory: memoryQueryOptionsCollection,\n database: databaseQueryOptionsCollection\n }\n }\n\n has<K extends QueryOptionName>(name: K): boolean {\n return this.options.has(name);\n }\n\n get<K extends QueryOptionName>(name: K): QueryCollectionItem<T, K>[] {\n return this.options.get(name) ?? [] as QueryCollectionItem<T, K>[];\n }\n\n getLast<K extends QueryOptionName>(name: K): QueryOption<T, K> | null {\n this.resolveEnumeration();\n\n for (let i = this.enumeratedItems.length - 1; i >= 0; i--) {\n const item = this.enumeratedItems[i];\n\n if (item.option.name === name) {\n return item.option;\n }\n }\n\n return null\n }\n\n getValues<K extends QueryOptionName>(name: K): QueryCollectionItem<T, K>[\"option\"][\"value\"][] | undefined {\n\n const found = this.options.get(name);\n\n if (found == null) {\n return [];\n }\n\n return found.map(w => w.option.value) as QueryCollectionItem<T, K>[\"option\"][\"value\"][];\n }\n\n private getEnumeration() {\n return [...this.options.values()].flat().toSorted((a, b) => a.index - b.index);\n }\n\n private resolveEnumeration() {\n if (this.enumeratedItems.length != this.nextIndex) {\n this.enumeratedItems = this.getEnumeration();\n }\n }\n\n forEach(iterator: (item: QueryCollectionItem<T, any>[\"option\"]) => void) {\n this.resolveEnumeration();\n\n for (let i = 0, length = this.enumeratedItems.length; i < length; i++) {\n iterator(this.enumeratedItems[i].option);\n }\n }\n}","export * from './Query';\nexport * from './QueryOptionsCollection';\nexport * from './types';","import { Expression, Filter, ParamsFilter } from \"../../expressions\";\nimport { PropertyInfo } from \"../../schema\";\nimport { GenericFunction } from \"../../types\";\n\nexport enum QueryOrdering {\n Descending = \"desc\",\n Ascending = \"asc\"\n}\n\n/**\n * Field mapping for a query result, including source and destination names and a getter function.\n */\nexport type QueryField = {\n sourceName: string,\n destinationName: string,\n isRename: boolean;\n property?: PropertyInfo<unknown>;\n getter: <T>(data: Record<string, unknown>) => T;\n};\n\nexport type QueryOptionExecutionTarget = \"database\" | \"memory\";\nexport type QueryOptionName = keyof QueryOptionValueMap<unknown>;\n\nexport type QueryOption<T, K extends QueryOptionName> = {\n name: QueryOptionName;\n value: QueryOptionValueMap<T>[K],\n target: QueryOptionExecutionTarget;\n}\n\nexport type QueryOptionValueMap<T extends {}> = {\n skip: number;\n take: number;\n sort: { selector: GenericFunction<T, T[keyof T]>, direction: QueryOrdering, propertyName: string };\n map: { selector: GenericFunction<T, any>, fields: QueryField[] };\n group: { selector: GenericFunction<T, any>, key: QueryField, fields: QueryField[] };\n filter: { params?: {}, filter: ParamsFilter<T, {}> | Filter<T>, expression: Expression };\n min: true; // True or not set\n max: true; // True or not set\n count: true; // True or not set\n sum: true; // True or not set\n distinct: true; // True or not set\n};\n\n/**\n * Sort specification for a query.\n */\nexport type QuerySort = { key: string, selector: (item: unknown) => unknown, direction: \"asc\" | \"desc\" };","import { PluginEventCallbackPartialResult, PluginEventCallbackResult, PluginEventResult, Result } from '../../results';\nimport { DbPluginBulkPersistEvent, DbPluginEvent, DbPluginQueryEvent, IDbPlugin, OptimisticReplicationPluginOptions } from '../types';\nimport { WorkPipeline } from '../../pipeline'; 7\nimport { CompiledSchema } from '../../schema';\nimport { Query } from '../query';\nimport { resolveBulkPersistChanges, uuid } from '../../utilities';\nimport { BulkPersistChanges, BulkPersistResult } from '../../collections';\nimport { ITranslatedValue } from '../translators';\n\nconst getMemoryPluginCollectionSize = <T extends {}>(plugin: IDbPlugin, schema: CompiledSchema<T>): number => {\n\n if (\"getCollectionSize\" in plugin && typeof plugin.getCollectionSize === \"function\") {\n return plugin.getCollectionSize(schema.collectionName) as number;\n }\n\n throw new Error(\"Cannot get size of collection for MemoryPlugin, not an instance of MemoryPlugin\");\n}\n\ntype HydrationStatus =\n | \"hydration-not-started\"\n | \"hydration-pending\"\n | \"hydration-error\"\n | \"hydration-success\";\n\nlet hydrationStatus: HydrationStatus = \"hydration-not-started\";\n\nexport class OptimisticReplicationDbPlugin implements IDbPlugin {\n\n protected plugins: OptimisticReplicationPluginOptions;\n\n protected constructor(plugins: OptimisticReplicationPluginOptions) {\n this.plugins = plugins;\n }\n\n /**\n * Creates a new OptimisticDbPluginReplicator that coordinates operations between a source database and its replicas.\n * \n * @param source The primary database plugin that will receive all operations first\n * @param replicas Additional database plugins that will replicate operations from the source\n * @returns A new DbPluginReplicator instance that manages the source-replica relationship\n */\n static create(plugins: OptimisticReplicationPluginOptions) {\n return new OptimisticReplicationDbPlugin(plugins);\n }\n\n /**\n * Will query the read plugin if there is one, otherwise the source plugin will be queried\n */\n query<TEntity extends {}, TShape extends any = TEntity>(event: DbPluginQueryEvent<TEntity, TShape>, done: PluginEventCallbackResult<ITranslatedValue<TShape>>): void {\n try {\n\n const readPlugin = this.plugins.read;\n const sourcePlugin = this.plugins.source;\n const collectionSize = getMemoryPluginCollectionSize(this.plugins.read, event.operation.schema);\n\n if (collectionSize === 0 && hydrationStatus === \"hydration-not-started\") {\n\n // Notify the cache that the db was hydrated right away\n hydrationStatus = \"hydration-pending\";\n\n console.log('[ROUTIER] - Optimistic Query', hydrationStatus);\n\n // nothing is hydrated, let's try and hydrate before querying\n // Memory plugin might not be hydrated, lets hydrate it for the targeted schema only,\n // Other queries will do the same and hydrate if needed\n // We want to select all data here\n sourcePlugin.query<TEntity, TShape>({\n id: uuid(8),\n schemas: event.schemas,\n source: \"collection\",\n // Select All Data\n operation: Query.EMPTY<TEntity, TShape>(event.operation.schema)\n }, (sourceResult) => {\n\n if (sourceResult.ok === Result.ERROR) {\n\n // Notify that hydration failed\n hydrationStatus = \"hydration-error\";\n console.log(\"[ROUTIER] - Hydration Error - Source Query\", sourceResult);\n done(sourceResult);\n return;\n }\n\n if (sourceResult == null || (Array.isArray(sourceResult.data) && sourceResult.data.length === 0)) {\n // Notify that hydration had no data\n hydrationStatus = \"hydration-error\";\n console.log(\"[ROUTIER] - Hydration Error - No Data\", sourceResult);\n done(sourceResult);\n return;\n }\n\n if (Array.isArray(sourceResult.data) === false) {\n // Notify that hydration failed\n hydrationStatus = \"hydration-error\";\n console.log(\"[ROUTIER] - Hydration Error - Bad Result\", sourceResult);\n done(PluginEventResult.error(event.id, \"Query result is not an array\"));\n return;\n }\n\n const changesCollection = new BulkPersistChanges();\n const schemaChanges = changesCollection.resolve(event.operation.schema.id);\n\n // Add the existing items into the persist payload as adds\n schemaChanges.adds = sourceResult.data;\n\n readPlugin.bulkPersist({\n id: uuid(8),\n schemas: event.schemas,\n operation: changesCollection,\n source: \"collection\",\n }, (readPersistResult) => {\n\n if (readPersistResult.ok === Result.ERROR) {\n // Notify that hydration failed\n hydrationStatus = \"hydration-error\";\n console.log(\"[ROUTIER] - Hydration Error - Could Not Save\", readPersistResult);\n done(readPersistResult);\n return;\n }\n\n hydrationStatus = \"hydration-success\";\n\n // requery the read plugin\n readPlugin.query(event, done);\n });\n });\n\n return;\n }\n\n // Collection is hydrated for the targeted collection and should be in sync\n readPlugin.query(event, (readResult) => {\n\n if (readResult.ok === Result.ERROR) {\n done(readResult);\n return;\n }\n\n done(readResult);\n return;\n\n });\n } catch (e: any) {\n done(PluginEventResult.error(event.id, e));\n }\n }\n\n destroy(event: DbPluginEvent, done: PluginEventCallbackResult<never>): void {\n try {\n\n const workPipeline = new WorkPipeline();\n const plugins = [this.plugins.source, ...this.plugins.replicas];\n\n for (let i = 0, length = plugins.length; i < length; i++) {\n workPipeline.pipe((done) => plugins[i].destroy(event, done));\n }\n\n workPipeline.filter((result) => {\n\n if (result.ok === Result.ERROR) {\n done(PluginEventResult.error(event.id, result.error));\n return;\n }\n\n done(PluginEventResult.success(event.id));\n });\n\n } catch (e: any) {\n done(PluginEventResult.error(event.id, e));\n }\n }\n\n bulkPersist(event: DbPluginBulkPersistEvent, done: PluginEventCallbackPartialResult<BulkPersistResult>): void {\n try {\n\n const workPipeline = new WorkPipeline();\n const deferredPlugins = [this.plugins.source, ... this.plugins.replicas];\n\n // Since we are doing optimistic, we insert into the read plugin first and assume later plugins will succeed\n // This means the read plugin will generate ids for the source plugin\n this.plugins.read.bulkPersist({\n id: uuid(8),\n operation: event.operation,\n schemas: event.schemas,\n source: \"data-store\",\n }, (r) => {\n\n if (r.ok !== Result.SUCCESS) {\n done(r);\n return;\n }\n\n // optimistically call done and still continue saving the rest of the data. We read from the memory\n // db anyways\n done(r);\n\n const optimisticBulkPersistChanges = new BulkPersistChanges();\n\n // make sure we swap the adds here, that way we can make sure other persist events\n // don't take their additions and try to change subsequent calls\n resolveBulkPersistChanges(event, r.data, optimisticBulkPersistChanges);\n\n for (let i = 0, length = deferredPlugins.length; i < length; i++) {\n workPipeline.pipe((d) => {\n\n const plugin = deferredPlugins[i];\n\n plugin.bulkPersist({\n id: uuid(8),\n operation: optimisticBulkPersistChanges,\n schemas: event.schemas,\n source: \"data-store\",\n }, (r) => {\n\n if (r.ok === Result.ERROR) {\n d(r);\n return;\n }\n\n d(Result.success());\n });\n });\n }\n\n setTimeout(() => {\n workPipeline.filter((_) => {\n // no-op for now, maybe implement retries?\n });\n }, 5);\n });\n\n } catch (e: any) {\n done(PluginEventResult.error(event.id, e));\n }\n }\n}","import { PluginEventCallbackPartialResult, PluginEventCallbackResult, PluginEventResult, Result } from '../../results';\nimport { DbPluginBulkPersistEvent, DbPluginEvent, DbPluginQueryEvent, IDbPlugin, ReplicationPluginOptions } from '../types';\nimport { AsyncPipeline, WorkPipeline } from '../../pipeline';\nimport { BulkPersistResult } from '../../collections';\nimport { resolveBulkPersistChanges } from '../../utilities';\nimport { ITranslatedValue } from '../translators';\n\nexport class ReplicationDbPlugin implements IDbPlugin {\n\n plugins: ReplicationPluginOptions;\n\n protected constructor(plugins: ReplicationPluginOptions) {\n this.plugins = plugins;\n }\n\n /**\n * Creates a new DbPluginReplicator that coordinates operations between a source database and its replicas.\n * \n * @param source The primary database plugin that will receive all operations first\n * @param replicas Additional database plugins that will replicate operations from the source\n * @returns A new DbPluginReplicator instance that manages the source-replica relationship\n */\n static create(plugins: ReplicationPluginOptions) {\n return new ReplicationDbPlugin(plugins);\n }\n\n /**\n * Will query the read plugin if there is one, otherwise the source plugin will be queried\n */\n query<TEntity extends {}, TShape extends any = TEntity>(event: DbPluginQueryEvent<TEntity, TShape>, done: PluginEventCallbackResult<ITranslatedValue<TShape>>): void {\n try {\n\n const plugin = this.plugins.read != null ? this.plugins.read : this.plugins.source;\n\n plugin.query(event, done);\n } catch (e: any) {\n done(PluginEventResult.error(event.id, e));\n }\n }\n\n destroy(event: DbPluginEvent, done: PluginEventCallbackResult<never>): void {\n try {\n\n const pipeline = new AsyncPipeline<IDbPlugin, never>();\n const plugins = [this.plugins.source, ...this.plugins.replicas];\n\n for (let i = 0, length = plugins.length; i < length; i++) {\n pipeline.pipe(plugins[i], (plugin, done) => plugin.destroy(event, done));\n }\n\n pipeline.filter((result) => {\n\n if (result.ok === Result.ERROR) {\n done(PluginEventResult.error(event.id, result.error));\n return;\n }\n\n done(PluginEventResult.success(event.id));\n });\n\n } catch (e: any) {\n done(PluginEventResult.error(event.id, e));\n }\n }\n\n\n bulkPersist(event: DbPluginBulkPersistEvent, done: PluginEventCallbackPartialResult<BulkPersistResult>): void {\n try {\n // insert into the source first to generate any ids, then take the result and persist that into the replicas\n const pipeline = new WorkPipeline();\n const plugins = [this.plugins.source, ...this.plugins.replicas];\n\n if (this.plugins.read != null) {\n plugins.push(this.plugins.read);\n }\n\n const result = new BulkPersistResult();\n\n for (let i = 0, length = plugins.length; i < length; i++) {\n pipeline.pipe((d) => {\n\n const plugin = plugins[i];\n\n // source is first\n if (i === 0) {\n plugin.bulkPersist(event, (r) => {\n\n if (r.ok === Result.ERROR) {\n d(r)\n return;\n }\n\n // make sure we swap the adds here, that way we can make sure other persist events\n // don't take their additions and try to change subsequent calls\n resolveBulkPersistChanges(event, r.data, event.operation);\n\n d(Result.success());\n });\n return;\n }\n\n plugin.bulkPersist(event, (r) => {\n\n if (r.ok === Result.ERROR) {\n d(r)\n return;\n }\n\n d(Result.success());\n });\n })\n }\n\n let successCount = 0;\n\n pipeline.filter((r) => {\n\n if (r.ok === Result.ERROR) {\n\n if (successCount > 0) {\n done(PluginEventResult.partial(event.id, result, r.error));\n return;\n }\n\n done(PluginEventResult.error(event.id, r.error));\n return;\n }\n\n successCount++;\n\n done(PluginEventResult.success(event.id, result));\n });\n\n } catch (e: any) {\n done(PluginEventResult.error(event.id, e));\n }\n }\n}","export * from './ReplicationDbPlugin';\nexport * from './OptimisticReplicationDbPlugin';\nexport * from './types';","import { QueryOption, QueryOptionName } from \"../query/types\";\nimport { IQuery } from \"../types\";\nimport { TranslatedArrayValue } from \"./TranslatedArrayValue\";\nimport { TranslatedGroupValue } from \"./TranslatedGroupValue\";\nimport { TranslatedSingleValue } from \"./TranslatedSingleValue\";\nimport { ITranslatedValue } from \"./types\";\n\nexport abstract class DataTranslator<TRoot extends {}, TShape> {\n\n protected query: IQuery<TRoot, TShape>;\n private functionMap: Record<QueryOptionName, (data: unknown, option: QueryOption<any, any>) => TShape> = {\n count: (data: unknown, option: QueryOption<TShape, \"count\">) => this.count<any>(data, option),\n distinct: (data: unknown, option: QueryOption<TShape, \"distinct\">) => this.distinct(data, option),\n filter: (data: unknown, option: QueryOption<TShape, \"filter\">) => this.filter(data, option),\n map: (data: unknown, option: QueryOption<TShape, \"map\">) => this.map(data, option),\n max: (data: unknown, option: QueryOption<TShape, \"max\">) => this.max<any>(data, option),\n min: (data: unknown, option: QueryOption<TShape, \"min\">) => this.min<any>(data, option),\n skip: (data: unknown, option: QueryOption<TShape, \"skip\">) => this.skip(data, option),\n sort: (data: unknown, option: QueryOption<TShape, \"sort\">) => this.sort(data, option),\n sum: (data: unknown, option: QueryOption<TShape, \"sum\">) => this.sum<any>(data, option),\n take: (data: unknown, option: QueryOption<TShape, \"take\">) => this.take(data, option),\n group: (data: unknown, option: QueryOption<TShape, \"group\">) => this.group(data, option)\n };\n\n constructor(query: IQuery<TRoot, TShape>) {\n this.query = query;\n }\n\n // Terminators\n abstract count<TResult extends number>(data: unknown, option: QueryOption<TShape, \"count\">): TResult;\n abstract min<TResult extends string | number | Date>(data: unknown, option: QueryOption<TShape, \"min\">): TResult;\n abstract max<TResult extends string | number | Date>(data: unknown, option: QueryOption<TShape, \"max\">): TResult;\n abstract sum<TResult extends number>(data: unknown, option: QueryOption<TShape, \"sum\">): TResult;\n abstract distinct<TResult>(data: unknown, option: QueryOption<TShape, \"distinct\">): TResult;\n\n // Shapers\n abstract filter<TResult>(data: unknown, option: QueryOption<TShape, \"filter\">): TResult;\n abstract skip(data: unknown, option: QueryOption<TShape, \"skip\">): TShape;\n abstract take(data: unknown, option: QueryOption<TShape, \"take\">): TShape;\n abstract sort(data: unknown, option: QueryOption<TShape, \"sort\">): TShape;\n abstract map(data: unknown, option: QueryOption<TShape, \"map\">): TShape;\n abstract group(data: unknown, option: QueryOption<TShape, \"group\">): TShape;\n\n translate(data: unknown): ITranslatedValue<TShape> {\n\n this.query.options.forEach(item => {\n data = this.functionMap[item.name](data, item);\n });\n\n if (Array.isArray(data)) {\n return new TranslatedArrayValue<TShape>(data);\n }\n\n if (this.query.options.has(\"group\")) {\n return new TranslatedGroupValue<TShape>(data);\n }\n\n return new TranslatedSingleValue<TShape>(data);\n }\n}","import { DataTranslator } from \"./DataTranslator\";\nimport { QueryOption } from \"../query/types\";\nimport { assertIsArray } from \"../../assertions\";\nimport { ParamsFilter } from \"../../expressions\";\nimport { isDate, UnknownRecord } from \"../../utilities\";\nimport { IdType } from \"../../schema\";\n\nexport class JsonTranslator<TRoot extends {}, TShape> extends DataTranslator<TRoot, TShape> {\n\n override filter<TResult>(data: unknown, option: QueryOption<TShape, \"filter\">): TResult {\n\n assertIsArray(data);\n\n if (option.value.filter) {\n\n if (option.value.params == null) {\n // standard filtering\n return data.filter(option.value.filter) as TResult;\n }\n\n // params filtering\n const selector = option.value.filter as ParamsFilter<unknown, {}>\n return data.filter(w => selector([w, option.value.params])) as TResult;\n }\n\n return data as TResult;\n }\n\n override map<T>(data: unknown, option: QueryOption<T, \"map\">): T {\n\n if (Array.isArray(data) == false) {\n throw new Error(\"Can only map an array of data\");\n }\n\n const response = new Array(data.length);\n\n for (let i = 0, length = data.length; i < length; i++) {\n\n for (let j = 0, l = option.value.fields.length; j < l; j++) {\n const field = option.value.fields[j];\n\n if (field.property != null) {\n const value = field.property.getValue(data[i]);\n\n if (value != null) {\n // Some types do not support deserialization (Array, Function, Computed, etc), just directly set the incoming value\n const resolvedValue = field.property.supportsDeserialization ? field.property.deserialize(value) : value;\n field.property.setValue(data[i], resolvedValue);\n }\n }\n }\n\n response[i] = option.value.selector(data[i]);\n }\n\n return response as T;\n }\n\n override group<T>(data: unknown, option: QueryOption<T, \"group\">): T {\n\n if (Array.isArray(data) == false) {\n throw new Error(\"Can only group an array of data\");\n }\n\n const group: Record<IdType, unknown[]> = {};\n\n for (let i = 0, length = data.length; i < length; i++) {\n\n const keyValue = option.value.selector(data[i]) as IdType;\n\n if (!group[keyValue]) {\n group[keyValue] = [];\n }\n\n const item: UnknownRecord = {};\n\n for (let j = 0, l = option.value.fields.length; j < l; j++) {\n const field = option.value.fields[j];\n\n if (field.property != null) {\n const value = field.property.getValue(data[i]);\n\n if (value != null) {\n // Some types do not support deserialization (Array, Function, Computed, etc), just directly set the incoming value\n const resolvedValue = field.property.supportsDeserialization ? field.property.deserialize(value) : value;\n field.property.setValue(item, resolvedValue);\n continue;\n }\n\n // The property exists, lets set it to the value (null/undefined)\n if (Object.hasOwn(data[i], field.destinationName)) {\n field.property.setValue(item, value);\n }\n }\n }\n\n group[keyValue].push(item);\n }\n\n return group as T;\n }\n\n override count<TResult extends number>(data: unknown, _: QueryOption<TShape, \"count\">): TResult {\n\n if (Array.isArray(data)) {\n return data.length as TResult;\n }\n\n throw new Error(\"Cannot count resulting data, it must be an array. Please return array of data for function: count()\");\n }\n\n override min<TResult extends string | number | Date>(data: unknown, _: QueryOption<TShape, \"min\">): TResult {\n return this._minMax(data, \"min\", (a: any, b: any) => a - b);\n }\n\n override max<TResult extends string | number | Date>(data: unknown, _: QueryOption<TShape, \"max\">): TResult {\n return this._minMax(data, \"max\", (a: any, b: any) => b - a);\n }\n\n override sort<TResult>(data: unknown, option: QueryOption<TShape, \"sort\">): TResult {\n\n if (Array.isArray(data)) {\n\n data.sort((a, b) => {\n if (option.value.direction === \"asc\") {\n return (option.value.selector(a) as any) - (option.value.selector(b) as any);\n }\n\n return (option.value.selector(b) as any) - (option.value.selector(a) as any);\n });\n }\n\n return data as TResult;\n }\n\n override sum<TResult extends number>(data: unknown, _: QueryOption<TShape, \"sum\">): TResult {\n\n assertIsArray(data, this._formatDataNotArrayError(\"sum\"));\n\n if (data.length === 0) {\n throw new Error(\"Cannot perform operation on empty array, result query contains no data\")\n }\n\n const map = this.query.options.getLast(\"map\");\n\n let sum = 0;\n const field = this._getSelectionField(\"sum\", map);\n\n for (let i = 0, length = data.length; i < length; i++) {\n const value = data[i];\n\n if (typeof value !== \"number\") {\n throw new Error(`Cannot sum, property is not a number. Property: ${field.sourceName}`);\n }\n\n sum += value;\n }\n\n return sum as TResult;\n }\n\n override distinct<TResult>(data: unknown, _: QueryOption<TShape, \"distinct\">): TResult {\n\n assertIsArray(data, this._formatDataNotArrayError(\"distinct\"));\n\n const result = new Set<string | number | Date>();\n\n // would be nice to have property info here for type detection\n let needsDateConversion = false;\n\n for (let i = 0, length = data.length; i < length; i++) {\n const value = data[i];\n\n if (typeof value === \"number\" || typeof value === \"string\") {\n result.add(value);\n continue;\n }\n\n if (isDate(value)) {\n needsDateConversion = true;\n result.add(value.toISOString());\n continue;\n }\n\n }\n\n if (needsDateConversion) {\n return [...result].map(w => new Date(w)) as TResult;\n }\n\n return [...result] as TResult\n }\n\n override skip<TResult>(data: unknown, option: QueryOption<TShape, \"skip\">): TResult {\n\n if (Array.isArray(data)) {\n\n if (option.value > 0) {\n\n if (data.length < option.value) {\n // We don't have enough data to skip, return an empty array\n return [] as TResult;\n }\n\n return data.slice(option.value) as TResult;\n }\n\n return data as TResult;\n }\n\n return data as TResult;\n }\n\n override take<TResult>(data: unknown, option: QueryOption<TShape, \"take\">): TResult {\n if (Array.isArray(data)) {\n\n if (option.value > 0) {\n\n if (data.length < option.value) {\n return data as TResult;\n }\n\n return data.slice(0, option.value) as TResult;\n }\n\n return data as TResult;\n }\n\n return data as TResult;\n }\n\n private _getSelectionField(name: string, mapOption: QueryOption<TShape, \"map\"> | null) {\n\n if (mapOption == null ||\n mapOption.value.fields.length === 0 ||\n mapOption.value.fields.length > 1) {\n throw new Error(`${name}() operation can only be performed when one field is mapped for a result. Ex. myset.map(x => x.someNumberOrDateOrString).${name}()`)\n }\n\n return mapOption.value.fields[0];\n }\n\n private _minMax<T extends string | number | Date>(data: unknown, name: string, sort: (a: any, b: any) => any): T {\n\n assertIsArray(data, this._formatDataNotArrayError(name));\n\n data.sort(sort);\n\n if (data.length === 0) {\n throw new Error(\"Cannot perform operation on empty array, result query contains no data\")\n }\n\n return data[0] as T;\n }\n\n private _formatDataNotArrayError(functionName: string) {\n return `Cannot sum resulting data, it must be an array. Please return array of data for function: ${functionName}()`\n }\n}","import { IdType } from \"../../schema/types\";\nimport { UnknownRecord } from \"../../utilities/types\";\nimport { QueryOption } from \"../query/types\";\nimport { DataTranslator } from \"./DataTranslator\";\n\nexport class SqlTranslator<TRoot extends {}, TShape> extends DataTranslator<TRoot, TShape> {\n\n count<TResult extends number>(data: unknown, _: QueryOption<TShape, \"count\">): TResult {\n if (Array.isArray(data) && data.length > 0) {\n // Count should be returned as the property alias on the query\n return data[0].count;\n }\n\n return data as TResult;\n }\n\n min<TResult extends string | number | Date>(data: unknown, _: QueryOption<TShape, \"min\">): TResult {\n return this.shapeResult(data);\n }\n\n max<TResult extends string | number | Date>(data: unknown, _: QueryOption<TShape, \"max\">): TResult {\n return this.shapeResult(data);\n }\n\n sum<TResult extends number>(data: unknown, _: QueryOption<TShape, \"sum\">): TResult {\n return this.shapeResult(data);\n }\n\n private shapeResult<TResult>(data: unknown) {\n if (Array.isArray(data) && data.length > 0) {\n // Shape the result\n return data[0];\n }\n\n return data as TResult;\n }\n\n distinct<TResult>(data: unknown, _: QueryOption<TShape, \"distinct\">): TResult {\n return data as TResult;\n }\n\n filter<TResult>(data: unknown, _: QueryOption<TShape, \"filter\">): TResult {\n return data as TResult;\n }\n\n skip(data: unknown, _: QueryOption<TShape, \"skip\">): TShape {\n return data as TShape;\n }\n\n take(data: unknown, _: QueryOption<TShape, \"take\">): TShape {\n return data as TShape;\n }\n\n sort(data: unknown, _: QueryOption<TShape, \"sort\">): TShape {\n return data as TShape;\n }\n\n group<T>(data: unknown, option: QueryOption<T, \"group\">): T {\n\n if (Array.isArray(data) == false) {\n throw new Error(\"Can only group an array of data\");\n }\n\n const group: Record<IdType, unknown[]> = {};\n\n for (let i = 0, length = data.length; i < length; i++) {\n\n const keyValue = option.value.selector(data[i]) as IdType;\n\n if (!group[keyValue]) {\n group[keyValue] = [];\n }\n\n const item: UnknownRecord = {};\n\n for (let j = 0, l = option.value.fields.length; j < l; j++) {\n const field = option.value.fields[j];\n\n if (field.property != null) {\n const value = field.property.getValue(data[i]);\n\n if (value != null) {\n field.property.setValue(item, field.property.deserialize(value));\n }\n }\n }\n\n group[keyValue].push(item);\n }\n\n return group as T;\n }\n\n map(data: unknown, option: QueryOption<TShape, \"map\">): TShape {\n if (Array.isArray(data) == false) {\n throw new Error(\"Can only map an array of data\");\n }\n\n if (this.query.options.has(\"count\") && data.length === 1) {\n // data here is the shape of { count: number }[] and will map to nothing. \n // Return the original data and let count take care of this\n return data as TShape;\n }\n\n const response = [];\n\n for (let i = 0, length = data.length; i < length; i++) {\n\n for (let j = 0, l = option.value.fields.length; j < l; j++) {\n const field = option.value.fields[j];\n\n if (field.property != null) {\n const value = field.property.getValue(data[i]);\n\n if (value != null) {\n field.property.setValue(data[i], field.property.deserialize(value));\n }\n }\n }\n\n response.push(option.value.selector(data[i]));\n }\n\n return response as TShape;\n }\n}","import { ITranslatedValue } from './types';\n\nexport class TranslatedArrayValue<T> implements ITranslatedValue<T> {\n\n readonly value: T;\n\n constructor(value: unknown,) {\n this.value = value as T;\n }\n\n forEach(callback: (item: unknown) => unknown): void {\n const data = this.value as unknown[];\n for (let i = 0, length = data.length; i < length; i++) {\n const result = callback(data[i]);\n\n if (result) {\n // reassign if the callback returns a result\n data[i] = result;\n }\n }\n }\n}","import { ITranslatedValue } from './types';\n\nexport class TranslatedGroupValue<T> implements ITranslatedValue<T> {\n\n readonly value: T;\n\n constructor(value: unknown) {\n this.value = value as T;\n }\n\n forEach(callback: (item: unknown) => unknown): void {\n const group = this.value as Record<string, unknown[]>;\n const keys = Object.keys(group);\n for (let i = 0, length = keys.length; i < length; i++) {\n const key = keys[i];\n const data = group[key];\n\n for (let j = 0, len = data.length; j < len; j++) {\n\n const result = callback(data[j]);\n\n if (result) {\n // reassign if the callback returns a result\n data[j] = result;\n }\n }\n }\n }\n}","import { ITranslatedValue } from './types';\n\nexport class TranslatedSingleValue<T> implements ITranslatedValue<T> {\n\n value: T;\n\n constructor(value: unknown) {\n this.value = value as T;\n }\n\n forEach(callback: (item: unknown) => unknown): void {\n const result = callback(this.value) as T;\n\n if (result) {\n this.value = result;\n }\n }\n}","export * from './DataTranslator';\nexport * from './JsonTranslator';\nexport * from './SqlTranslator';\nexport * from './types';\nexport * from './TranslatedArrayValue';\nexport * from './TranslatedGroupValue';\nexport * from './TranslatedSingleValue';","import { PartialResultType, PluginEventPartialResultType, PluginEventResultType, ResultType } from \"./types\";\n\nabstract class BaseResult {\n static ERROR = \"error\" as const;\n static SUCCESS = \"success\" as const;\n static PARTIAL = \"partial\" as const;\n\n static resolve<T>(result: ResultType<T> | PartialResultType<T>, resolve: (data: T) => void, reject: (error?: any) => void) {\n if (result.ok === BaseResult.SUCCESS) {\n resolve(result.data);\n return;\n }\n\n if (result.ok === BaseResult.PARTIAL) {\n reject({\n partial: result.data,\n error: result.error\n });\n return;\n }\n\n reject(result.error);\n }\n\n static assertSuccess<T>(result: any): asserts result is { ok: \"success\"; data: T } {\n if (result.ok !== BaseResult.SUCCESS) {\n throw new Error(`Expected success result, but got ${result.ok}: ${result.error}`);\n }\n }\n}\n\nexport class Result extends BaseResult {\n static success<T>(data: T): ResultType<T>;\n static success<T>(): ResultType<never>;\n static success<T>(data?: T): ResultType<T> {\n return {\n ok: Result.SUCCESS,\n data\n }\n }\n\n static error<T>(error: any): ResultType<T> {\n return {\n ok: Result.ERROR,\n error\n }\n }\n\n static partial<T>(data: T, error: any): PartialResultType<T> {\n return {\n ok: Result.PARTIAL,\n data,\n error\n }\n }\n}\n\nexport class PluginEventResult extends BaseResult {\n static success<T>(id: string, data: T): PluginEventResultType<T>;\n static success<T>(id: string): PluginEventResultType<never>;\n static success<T>(id: string, data?: T): PluginEventResultType<T> {\n return {\n id,\n ok: Result.SUCCESS,\n data\n }\n }\n\n static error<T>(id: string, error: any): PluginEventResultType<T> {\n return {\n id,\n ok: Result.ERROR,\n error\n }\n }\n\n static partial<T>(id: string, data: T, error: any): PluginEventPartialResultType<T> {\n return {\n id,\n ok: Result.PARTIAL,\n data,\n error\n }\n }\n\n static assertSuccess<T>(result: PluginEventResultType<T>): asserts result is { ok: \"success\"; data: T; id: string } {\n if (result.ok !== Result.SUCCESS) {\n throw new Error(`Expected success result, but got ${result.ok}: ${result.error}`);\n }\n }\n}\n","export const isDate = (data: unknown): data is Date => {\n if (data == null) {\n return false;\n }\n\n if (typeof data !== \"object\") {\n return false;\n }\n\n return data instanceof Date;\n}","import { BulkPersistResult, BulkPersistChanges } from \"../collections\";\nimport { DbPluginBulkPersistEvent } from \"../plugins\";\n\nexport const resolveBulkPersistChanges = (event: DbPluginBulkPersistEvent, result: BulkPersistResult, bulkPersistChanges: BulkPersistChanges) => {\n // make sure we swap the adds here, that way we can make sure other persist events\n // don't take their additions and try to change subsequent calls\n for (const [schemaId, changes] of event.operation) {\n\n const schemmaBulkPersistResult = result.get(schemaId);\n const schemaBulkPersistChanges = bulkPersistChanges.resolve(schemaId);\n\n // Set the original removes\n schemaBulkPersistChanges.removes = changes.removes;\n\n // Set the original updates\n schemaBulkPersistChanges.updates = changes.updates;\n\n // Take the adds from the result and set them to be persisted\n // in the replicated plugins because the id's are set in the \n // memory data store\n schemaBulkPersistChanges.adds = schemmaBulkPersistResult.adds;\n }\n}","export const uuid = (length: number = 16): string => {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n const charLength = chars.length;\n let result = '';\n\n for (let i = 0; i < length; i++) {\n result += chars[Math.random() * charLength | 0];\n }\n return result;\n}\n\nconst HEX_CHARS = '0123456789abcdef';\nconst UUID_TEMPLATE = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n\nconst hasCrypto =\n typeof crypto !== 'undefined' && typeof crypto.getRandomValues === 'function';\n\nexport const uuidv4 = (): string => {\n let randomBytes: Uint8Array | null = null;\n if (hasCrypto) {\n randomBytes = crypto.getRandomValues(new Uint8Array(16));\n }\n\n let byteIndex = 0;\n let uuid = '';\n\n for (let i = 0; i < UUID_TEMPLATE.length; i++) {\n const c = UUID_TEMPLATE[i];\n if (c === '-') {\n uuid += '-';\n continue;\n }\n\n let r: number;\n if (hasCrypto && randomBytes) {\n // Each byte gives two hex digits (nibbles)\n r =\n (i % 2 === 0\n ? randomBytes[byteIndex] >> 4\n : randomBytes[byteIndex++] & 0x0f);\n } else {\n r = Math.floor(Math.random() * 16);\n }\n\n if (c === 'x') {\n uuid += HEX_CHARS[r];\n } else if (c === 'y') {\n // Variant bits: 8, 9, A, or B\n uuid += HEX_CHARS[(r & 0x3) | 0x8];\n } else if (c === '4') {\n uuid += '4';\n }\n }\n\n return uuid;\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export * from './types';\nexport * from './translators';\nexport * from './replication';\nexport * from './query';\nexport * from './EphemeralDataPlugin';"],"names":[],"mappings":"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"}