@milaboratories/pl-tree 1.8.33 → 1.8.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/accessors.cjs +23 -23
  2. package/dist/accessors.cjs.map +1 -1
  3. package/dist/accessors.d.ts +10 -10
  4. package/dist/accessors.d.ts.map +1 -1
  5. package/dist/accessors.js +23 -23
  6. package/dist/accessors.js.map +1 -1
  7. package/dist/dump.cjs.map +1 -1
  8. package/dist/dump.d.ts +1 -1
  9. package/dist/dump.js.map +1 -1
  10. package/dist/index.d.ts +9 -9
  11. package/dist/snapshot.cjs +3 -3
  12. package/dist/snapshot.cjs.map +1 -1
  13. package/dist/snapshot.d.ts +12 -12
  14. package/dist/snapshot.js +3 -3
  15. package/dist/snapshot.js.map +1 -1
  16. package/dist/state.cjs +33 -33
  17. package/dist/state.cjs.map +1 -1
  18. package/dist/state.d.ts +10 -10
  19. package/dist/state.d.ts.map +1 -1
  20. package/dist/state.js +33 -33
  21. package/dist/state.js.map +1 -1
  22. package/dist/sync.cjs +1 -1
  23. package/dist/sync.cjs.map +1 -1
  24. package/dist/sync.d.ts +2 -2
  25. package/dist/sync.d.ts.map +1 -1
  26. package/dist/sync.js +1 -1
  27. package/dist/sync.js.map +1 -1
  28. package/dist/synchronized_tree.cjs +11 -11
  29. package/dist/synchronized_tree.cjs.map +1 -1
  30. package/dist/synchronized_tree.d.ts +6 -6
  31. package/dist/synchronized_tree.d.ts.map +1 -1
  32. package/dist/synchronized_tree.js +11 -11
  33. package/dist/synchronized_tree.js.map +1 -1
  34. package/dist/test_utils.d.ts +12 -12
  35. package/dist/test_utils.d.ts.map +1 -1
  36. package/dist/traversal_ops.d.ts +1 -1
  37. package/dist/value_or_error.d.ts.map +1 -1
  38. package/package.json +23 -22
  39. package/src/accessors.ts +44 -43
  40. package/src/dump.ts +1 -1
  41. package/src/index.ts +9 -9
  42. package/src/snapshot.test.ts +29 -29
  43. package/src/snapshot.ts +26 -26
  44. package/src/state.test.ts +88 -85
  45. package/src/state.ts +123 -71
  46. package/src/sync.test.ts +31 -31
  47. package/src/sync.ts +6 -8
  48. package/src/synchronized_tree.test.ts +60 -60
  49. package/src/synchronized_tree.ts +41 -38
  50. package/src/test_utils.ts +33 -35
  51. package/src/traversal_ops.ts +1 -1
  52. package/src/value_or_error.ts +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"state.cjs","sources":["../src/state.ts"],"sourcesContent":["import type {\n BasicResourceData,\n FieldData,\n FieldStatus,\n FieldType,\n KeyValue,\n OptionalResourceId,\n ResourceData,\n ResourceId,\n ResourceKind,\n ResourceType } from '@milaboratories/pl-client';\nimport {\n isNotNullResourceId,\n isNullResourceId,\n NullResourceId,\n resourceIdToString,\n stringifyWithResourceId,\n} from '@milaboratories/pl-client';\nimport type { Watcher } from '@milaboratories/computable';\nimport { ChangeSource, KeyedChangeSource } from '@milaboratories/computable';\nimport { PlTreeEntry } from './accessors';\nimport type { ValueAndError } from './value_and_error';\nimport type { MiLogger } from '@milaboratories/ts-helpers';\nimport { cachedDecode, cachedDeserialize, notEmpty } from '@milaboratories/ts-helpers';\nimport type { FieldTraversalStep, GetFieldStep } from './traversal_ops';\nimport type { FinalResourceDataPredicate } from '@milaboratories/pl-client';\n\nexport type ExtendedResourceData = ResourceData & {\n kv: KeyValue[];\n};\n\nexport class TreeStateUpdateError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n\nclass PlTreeField implements FieldData {\n readonly change = new ChangeSource();\n\n constructor(\n public readonly name: string,\n public type: FieldType,\n public value: OptionalResourceId,\n public error: OptionalResourceId,\n public status: FieldStatus,\n public valueIsFinal: boolean,\n /** Last version of resource this field was observed, used to garbage collect fields in tree patching procedure */\n public resourceVersion: number,\n ) {}\n\n get state(): FieldData {\n return {\n name: this.name,\n type: this.type,\n status: this.status,\n value: this.value,\n error: this.error,\n valueIsFinal: this.valueIsFinal,\n };\n }\n}\n\nconst InitialResourceVersion = 0;\n\nexport type ResourceDataWithFinalState = ResourceData & {\n finalState: boolean;\n};\n\n/** Never store instances of this class, always get fresh instance from {@link PlTreeState} */\nexport class PlTreeResource implements ResourceDataWithFinalState {\n /** Tracks number of other resources referencing this resource. Used to perform garbage collection in tree patching procedure */\n refCount: number = 0;\n\n /** Increments each time resource is checked for difference with new state */\n version: number = InitialResourceVersion;\n /** Set to resource version when resource state, or it's fields have changed */\n dataVersion: number = InitialResourceVersion;\n\n readonly fieldsMap: Map<string, PlTreeField> = new Map();\n\n readonly kv = new Map<string, Uint8Array>();\n\n readonly resourceRemoved = new ChangeSource();\n\n // following change source are removed when resource is marked as final\n\n finalChanged? = new ChangeSource();\n\n resourceStateChange? = new ChangeSource();\n\n lockedChange? = new ChangeSource();\n inputAndServiceFieldListChanged? = new ChangeSource();\n outputFieldListChanged? = new ChangeSource();\n dynamicFieldListChanged? = new ChangeSource();\n\n // kvChangedGlobal? = new ChangeSource();\n kvChangedPerKey? = new KeyedChangeSource();\n\n readonly id: ResourceId;\n originalResourceId: OptionalResourceId;\n\n readonly kind: ResourceKind;\n readonly type: ResourceType;\n\n readonly data?: Uint8Array;\n private dataAsString?: string;\n private dataAsJson?: unknown;\n\n error: OptionalResourceId;\n\n inputsLocked: boolean;\n outputsLocked: boolean;\n resourceReady: boolean;\n finalFlag: boolean;\n\n /** Set externally by the tree, using {@link FinalResourceDataPredicate} */\n _finalState: boolean = false;\n\n private readonly logger?: MiLogger;\n\n constructor(initialState: BasicResourceData, logger?: MiLogger) {\n this.id = initialState.id;\n this.originalResourceId = initialState.originalResourceId;\n this.kind = initialState.kind;\n this.type = initialState.type;\n this.data = initialState.data;\n this.error = initialState.error;\n this.inputsLocked = initialState.inputsLocked;\n this.outputsLocked = initialState.outputsLocked;\n this.resourceReady = initialState.resourceReady;\n this.finalFlag = initialState.final;\n this.logger = logger;\n }\n\n // TODO add logging\n\n private info(msg: string) {\n if (this.logger !== undefined) this.logger.info(msg);\n }\n\n private warn(msg: string) {\n if (this.logger !== undefined) this.logger.warn(msg);\n }\n\n get final(): boolean {\n return this.finalFlag;\n }\n\n get finalState(): boolean {\n return this._finalState;\n }\n\n get fields(): FieldData[] {\n return [...this.fieldsMap.values()];\n }\n\n public getField(\n watcher: Watcher,\n _step:\n | (Omit<GetFieldStep, 'errorIfFieldNotFound'> & { errorIfFieldNotFound: true })\n | (Omit<GetFieldStep, 'errorIfFieldNotSet'> & { errorIfFieldNotSet: true }),\n onUnstable: (marker: string) => void\n ): ValueAndError<ResourceId>;\n public getField(\n watcher: Watcher,\n _step: string | GetFieldStep,\n onUnstable: (marker: string) => void\n ): ValueAndError<ResourceId> | undefined;\n public getField(\n watcher: Watcher,\n _step: string | GetFieldStep,\n onUnstable: (marker: string) => void = () => {},\n ): ValueAndError<ResourceId> | undefined {\n const step: FieldTraversalStep = typeof _step === 'string' ? { field: _step } : _step;\n\n const field = this.fieldsMap.get(step.field);\n if (field === undefined) {\n if (step.errorIfFieldNotFound || step.errorIfFieldNotSet)\n throw new Error(\n `Field \"${step.field}\" not found in resource ${resourceIdToString(this.id)}`,\n );\n\n if (!this.inputsLocked) this.inputAndServiceFieldListChanged?.attachWatcher(watcher);\n else if (step.assertFieldType === 'Service' || step.assertFieldType === 'Input') {\n if (step.allowPermanentAbsence)\n // stable absence of field\n return undefined;\n else throw new Error(`Service or input field not found ${step.field}.`);\n }\n\n if (!this.outputsLocked) this.outputFieldListChanged?.attachWatcher(watcher);\n else if (step.assertFieldType === 'Output') {\n if (step.allowPermanentAbsence)\n // stable absence of field\n return undefined;\n else throw new Error(`Output field not found ${step.field}.`);\n }\n\n this.dynamicFieldListChanged?.attachWatcher(watcher);\n if (!this._finalState && !step.stableIfNotFound) onUnstable('field_not_found:' + step.field);\n\n return undefined;\n } else {\n if (step.assertFieldType !== undefined && field.type !== step.assertFieldType)\n throw new Error(\n `Unexpected field type: expected ${step.assertFieldType} but got ${field.type} for the field name ${step.field}`,\n );\n\n const ret = {} as ValueAndError<ResourceId>;\n if (isNotNullResourceId(field.value)) ret.value = field.value;\n if (isNotNullResourceId(field.error)) ret.error = field.error;\n if (ret.value === undefined && ret.error === undefined)\n // this method returns value and error of the field, thus those values are considered to be accessed;\n // any existing but not resolved field here is considered to be unstable, in the sense it is\n // considered to acquire some resolved value eventually\n onUnstable('field_not_resolved:' + step.field);\n field.change.attachWatcher(watcher);\n return ret;\n }\n }\n\n public getInputsLocked(watcher: Watcher): boolean {\n if (!this.inputsLocked)\n // reverse transition can't happen, so there is no reason to wait for value to change\n this.resourceStateChange?.attachWatcher(watcher);\n return this.inputsLocked;\n }\n\n public getOutputsLocked(watcher: Watcher): boolean {\n if (!this.outputsLocked)\n // reverse transition can't happen, so there is no reason to wait for value to change\n this.resourceStateChange?.attachWatcher(watcher);\n return this.outputsLocked;\n }\n\n public get isReadyOrError(): boolean {\n return (\n this.error !== NullResourceId\n || this.resourceReady\n || this.originalResourceId !== NullResourceId\n );\n }\n\n public getIsFinal(watcher: Watcher): boolean {\n this.finalChanged?.attachWatcher(watcher);\n return this._finalState;\n }\n\n public getIsReadyOrError(watcher: Watcher): boolean {\n if (!this.isReadyOrError)\n // reverse transition can't happen, so there is no reason to wait for value to change if it is already true\n this.resourceStateChange?.attachWatcher(watcher);\n return this.isReadyOrError;\n }\n\n public getError(watcher: Watcher): ResourceId | undefined {\n if (isNullResourceId(this.error)) {\n this.resourceStateChange?.attachWatcher(watcher);\n return undefined;\n } else {\n // reverse transition can't happen, so there is no reason to wait for value to change, if error already set\n return this.error;\n }\n }\n\n public listInputFields(watcher: Watcher): string[] {\n const ret: string[] = [];\n this.fieldsMap.forEach((field, name) => {\n if (field.type === 'Input' || field.type === 'Service') ret.push(name);\n });\n if (!this.inputsLocked) this.inputAndServiceFieldListChanged?.attachWatcher(watcher);\n\n return ret;\n }\n\n public listOutputFields(watcher: Watcher): string[] {\n const ret: string[] = [];\n this.fieldsMap.forEach((field, name) => {\n if (field.type === 'Output') ret.push(name);\n });\n if (!this.outputsLocked) this.outputFieldListChanged?.attachWatcher(watcher);\n\n return ret;\n }\n\n public listDynamicFields(watcher: Watcher): string[] {\n const ret: string[] = [];\n this.fieldsMap.forEach((field, name) => {\n if (field.type !== 'Input' && field.type !== 'Output') ret.push(name);\n });\n this.dynamicFieldListChanged?.attachWatcher(watcher);\n\n return ret;\n }\n\n public getKeyValue(watcher: Watcher, key: string): Uint8Array | undefined {\n this.kvChangedPerKey?.attachWatcher(key, watcher);\n return this.kv.get(key);\n }\n\n public getKeyValueString(watcher: Watcher, key: string): string | undefined {\n const bytes = this.getKeyValue(watcher, key);\n if (bytes === undefined) return undefined;\n return cachedDecode(bytes);\n }\n\n public getKeyValueAsJson<T = unknown>(watcher: Watcher, key: string): T | undefined {\n const bytes = this.getKeyValue(watcher, key);\n if (bytes === undefined) return undefined;\n return cachedDeserialize(bytes);\n }\n\n public getDataAsString(): string | undefined {\n if (this.data === undefined) return undefined;\n if (this.dataAsString === undefined) this.dataAsString = cachedDecode(this.data);\n return this.dataAsString;\n }\n\n public getDataAsJson<T = unknown>(): T | undefined {\n if (this.data === undefined) return undefined;\n if (this.dataAsJson === undefined) this.dataAsJson = cachedDeserialize(this.data);\n return this.dataAsJson as T;\n }\n\n verifyReadyState() {\n if (this.resourceReady && !this.inputsLocked)\n throw new Error(`ready without input or output lock: ${stringifyWithResourceId(this.basicState)}`);\n }\n\n get basicState(): BasicResourceData {\n return {\n id: this.id,\n kind: this.kind,\n type: this.type,\n data: this.data,\n resourceReady: this.resourceReady,\n inputsLocked: this.inputsLocked,\n outputsLocked: this.outputsLocked,\n error: this.error,\n originalResourceId: this.originalResourceId,\n final: this.finalFlag,\n };\n }\n\n get extendedState(): ExtendedResourceData {\n return {\n ...this.basicState,\n fields: this.fields,\n kv: Array.from(this.kv.entries()).map(([key, value]) => ({ key, value })),\n };\n }\n\n /** Called when {@link FinalResourceDataPredicate} returns true for the state. */\n markFinal() {\n if (this._finalState) return;\n\n this._finalState = true;\n notEmpty(this.finalChanged).markChanged('marked final');\n this.finalChanged = undefined;\n this.resourceStateChange = undefined;\n this.dynamicFieldListChanged = undefined;\n this.inputAndServiceFieldListChanged = undefined;\n this.outputFieldListChanged = undefined;\n this.lockedChange = undefined;\n // this.kvChangedGlobal = undefined;\n this.kvChangedPerKey = undefined;\n }\n\n /** Used for invalidation */\n markAllChanged() {\n this.fieldsMap.forEach((field) => field.change.markChanged('marked all changed'));\n this.finalChanged?.markChanged('marked all changed');\n this.resourceStateChange?.markChanged('marked all changed');\n this.lockedChange?.markChanged('marked all changed');\n this.inputAndServiceFieldListChanged?.markChanged('marked all changed');\n this.outputFieldListChanged?.markChanged('marked all changed');\n this.dynamicFieldListChanged?.markChanged('marked all changed');\n // this.kvChangedGlobal?.markChanged('marked all changed');\n this.kvChangedPerKey?.markAllChanged('marked all changed');\n this.resourceRemoved.markChanged('marked all changed');\n }\n}\n\nexport class PlTreeState {\n /** resource heap */\n private resources: Map<ResourceId, PlTreeResource> = new Map();\n private readonly resourcesAdded = new ChangeSource();\n /** Resets to false if any invalid state transitions are registered,\n * after that tree will produce errors for any read or write operations */\n private _isValid: boolean = true;\n private invalidationMessage?: string;\n\n constructor(\n /** This will be the only resource not deleted during GC round */\n public readonly root: ResourceId,\n public readonly isFinalPredicate: FinalResourceDataPredicate,\n ) {}\n\n public forEachResource(cb: (res: ResourceDataWithFinalState) => void): void {\n this.resources.forEach((v) => cb(v));\n }\n\n private checkValid() {\n if (!this._isValid) throw new Error(this.invalidationMessage ?? 'tree is in invalid state');\n }\n\n public get(watcher: Watcher, rid: ResourceId): PlTreeResource {\n this.checkValid();\n const res = this.resources.get(rid);\n if (res === undefined) {\n // to make recovery from resource not found possible, considering some\n // race conditions, where computable is created before tree is updated\n this.resourcesAdded.attachWatcher(watcher);\n throw new Error(`resource ${resourceIdToString(rid)} not found in the tree`);\n }\n res.resourceRemoved.attachWatcher(watcher);\n return res;\n }\n\n updateFromResourceData(resourceData: ExtendedResourceData[], allowOrphanInputs: boolean = false) {\n this.checkValid();\n\n // All resources for which recount should be incremented, first are aggregated in this list\n const incrementRefs: ResourceId[] = [];\n const decrementRefs: ResourceId[] = [];\n\n // patching / creating resources\n for (const rd of resourceData) {\n let resource = this.resources.get(rd.id);\n\n const statBeforeMutation = resource?.basicState;\n const unexpectedTransitionError = (reason: string): never => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { fields, ...rdWithoutFields } = rd;\n this.invalidateTree();\n throw new TreeStateUpdateError(\n `Unexpected resource state transition (${reason}): ${stringifyWithResourceId(\n rdWithoutFields,\n )} -> ${stringifyWithResourceId(statBeforeMutation)}`,\n );\n };\n\n if (resource !== undefined) {\n // updating existing resource\n\n if (resource.finalState)\n unexpectedTransitionError('resource state can\\t be updated after it is marked as final');\n\n let changed = false;\n // updating resource version, even if it was not changed\n resource.version += 1;\n\n // duplicate / original\n if (resource.originalResourceId !== rd.originalResourceId) {\n if (resource.originalResourceId !== NullResourceId)\n unexpectedTransitionError('originalResourceId can\\'t change after it is set');\n resource.originalResourceId = rd.originalResourceId;\n // duplicate status of the resource counts as ready for the external observer\n notEmpty(resource.resourceStateChange).markChanged(`originalResourceId changed for ${resourceIdToString(resource.id)}`);\n changed = true;\n }\n\n // error\n if (resource.error !== rd.error) {\n if (isNotNullResourceId(resource.error))\n unexpectedTransitionError('resource can\\'t change attached error after it is set');\n resource.error = rd.error;\n incrementRefs.push(resource.error as ResourceId);\n notEmpty(resource.resourceStateChange).markChanged(`error changed for ${resourceIdToString(resource.id)}`);\n changed = true;\n }\n\n // updating fields\n for (const fd of rd.fields) {\n let field = resource.fieldsMap.get(fd.name);\n\n if (!field) {\n // new field\n\n field = new PlTreeField(\n fd.name,\n fd.type,\n fd.value,\n fd.error,\n fd.status,\n fd.valueIsFinal,\n resource.version,\n );\n if (isNotNullResourceId(fd.value)) incrementRefs.push(fd.value);\n if (isNotNullResourceId(fd.error)) incrementRefs.push(fd.error);\n\n if (fd.type === 'Input' || fd.type === 'Service') {\n if (resource.inputsLocked)\n unexpectedTransitionError(\n `adding ${fd.type} (${fd.name}) field while inputs locked`,\n );\n notEmpty(resource.inputAndServiceFieldListChanged).markChanged(`new ${fd.type} field ${fd.name} added to ${resourceIdToString(resource.id)}`);\n } else if (fd.type === 'Output') {\n if (resource.outputsLocked)\n unexpectedTransitionError(\n `adding ${fd.type} (${fd.name}) field while outputs locked`,\n );\n notEmpty(resource.outputFieldListChanged).markChanged(`new ${fd.type} field ${fd.name} added to ${resourceIdToString(resource.id)}`);\n } else {\n notEmpty(resource.dynamicFieldListChanged).markChanged(`new ${fd.type} field ${fd.name} added to ${resourceIdToString(resource.id)}`);\n }\n\n resource.fieldsMap.set(fd.name, field);\n\n changed = true;\n } else {\n // change of old field\n\n // in principle this transition is possible, see assertions below\n if (field.type !== fd.type) {\n if (field.type !== 'Dynamic')\n unexpectedTransitionError(`field changed type ${field.type} -> ${fd.type}`);\n notEmpty(resource.dynamicFieldListChanged).markChanged(`field ${fd.name} changed type from Dynamic to ${fd.type} in ${resourceIdToString(resource.id)}`);\n if (field.type === 'Input' || field.type === 'Service') {\n if (resource.inputsLocked)\n unexpectedTransitionError(\n `adding input field \"${fd.name}\", while corresponding list is locked`,\n );\n notEmpty(resource.inputAndServiceFieldListChanged).markChanged(`field ${fd.name} changed to type ${fd.type} in ${resourceIdToString(resource.id)}`);\n }\n if (field.type === 'Output') {\n if (resource.outputsLocked)\n unexpectedTransitionError(\n `adding output field \"${fd.name}\", while corresponding list is locked`,\n );\n notEmpty(resource.outputFieldListChanged).markChanged(`field ${fd.name} changed to type ${fd.type} in ${resourceIdToString(resource.id)}`);\n }\n field.type = fd.type;\n field.change.markChanged(`field ${fd.name} type changed to ${fd.type} in ${resourceIdToString(resource.id)}`);\n changed = true;\n }\n\n // field value\n if (field.value !== fd.value) {\n if (isNotNullResourceId(field.value)) decrementRefs.push(field.value);\n field.value = fd.value;\n if (isNotNullResourceId(fd.value)) incrementRefs.push(fd.value);\n field.change.markChanged(`field ${fd.name} value changed in ${resourceIdToString(resource.id)}`);\n changed = true;\n }\n\n // field error\n if (field.error !== fd.error) {\n if (isNotNullResourceId(field.error)) decrementRefs.push(field.error);\n field.error = fd.error;\n if (isNotNullResourceId(fd.error)) incrementRefs.push(fd.error);\n field.change.markChanged(`field ${fd.name} error changed in ${resourceIdToString(resource.id)}`);\n changed = true;\n }\n\n // field status\n if (field.status !== fd.status) {\n field.status = fd.status;\n field.change.markChanged(`field ${fd.name} status changed to ${fd.status} in ${resourceIdToString(resource.id)}`);\n changed = true;\n }\n\n // field valueIsFinal flag\n if (field.valueIsFinal !== fd.valueIsFinal) {\n field.valueIsFinal = fd.valueIsFinal;\n field.change.markChanged(`field ${fd.name} valueIsFinal changed to ${fd.valueIsFinal} in ${resourceIdToString(resource.id)}`);\n changed = true;\n }\n\n field.resourceVersion = resource.version;\n }\n }\n\n // detecting removed fields\n resource.fieldsMap.forEach((field, fieldName, fields) => {\n if (field.resourceVersion !== resource!.version) {\n if (field.type === 'Input' || field.type === 'Service' || field.type === 'Output')\n unexpectedTransitionError(`removal of ${field.type} field ${fieldName}`);\n field.change.markChanged(`dynamic field ${fieldName} removed from ${resourceIdToString(resource!.id)}`);\n fields.delete(fieldName);\n\n if (isNotNullResourceId(field.value)) decrementRefs.push(field.value);\n if (isNotNullResourceId(field.error)) decrementRefs.push(field.error);\n\n notEmpty(resource!.dynamicFieldListChanged).markChanged(`dynamic field ${fieldName} removed from ${resourceIdToString(resource!.id)}`);\n }\n });\n\n // inputsLocked\n if (resource.inputsLocked !== rd.inputsLocked) {\n if (resource.inputsLocked) unexpectedTransitionError('inputs unlocking is not permitted');\n resource.inputsLocked = rd.inputsLocked;\n notEmpty(resource.lockedChange).markChanged(`inputs locked for ${resourceIdToString(resource.id)}`);\n changed = true;\n }\n\n // outputsLocked\n if (resource.outputsLocked !== rd.outputsLocked) {\n if (resource.outputsLocked)\n unexpectedTransitionError('outputs unlocking is not permitted');\n resource.outputsLocked = rd.outputsLocked;\n notEmpty(resource.lockedChange).markChanged(`outputs locked for ${resourceIdToString(resource.id)}`);\n changed = true;\n }\n\n // ready flag\n if (resource.resourceReady !== rd.resourceReady) {\n const readyStateBefore = resource.resourceReady;\n resource.resourceReady = rd.resourceReady;\n resource.verifyReadyState();\n if (!resource.isReadyOrError)\n unexpectedTransitionError(\n `resource can't lose it's ready or error state (ready state before ${readyStateBefore})`,\n );\n notEmpty(resource.resourceStateChange).markChanged(`ready flag changed to ${rd.resourceReady} for ${resourceIdToString(resource.id)}`);\n changed = true;\n }\n\n // syncing kv\n for (const kv of rd.kv) {\n const current = resource.kv.get(kv.key);\n if (current === undefined) {\n resource.kv.set(kv.key, kv.value);\n notEmpty(resource.kvChangedPerKey).markChanged(kv.key, `kv added for ${resourceIdToString(resource.id)}: ${kv.key}`);\n } else if (Buffer.compare(current, kv.value) !== 0) {\n resource.kv.set(kv.key, kv.value);\n notEmpty(resource.kvChangedPerKey).markChanged(kv.key, `kv changed for ${resourceIdToString(resource.id)}: ${kv.key}`);\n }\n }\n\n if (resource.kv.size > rd.kv.length) {\n // only it this case it makes sense to check for deletions\n const newStateKeys = new Set(rd.kv.map((kv) => kv.key));\n\n // deleting keys not present in resource anymore\n resource.kv.forEach((_value, key, map) => {\n if (!newStateKeys.has(key)) {\n map.delete(key);\n notEmpty(resource!.kvChangedPerKey).markChanged(key, `kv deleted for ${resourceIdToString(resource!.id)}: ${key}`);\n }\n });\n }\n\n if (changed) {\n // if resource was changed, updating resource data version\n resource.dataVersion = resource.version;\n if (this.isFinalPredicate(resource)) resource.markFinal();\n }\n } else {\n // creating new resource\n\n resource = new PlTreeResource(rd);\n resource.verifyReadyState();\n if (isNotNullResourceId(resource.error)) incrementRefs.push(resource.error);\n for (const fd of rd.fields) {\n const field = new PlTreeField(\n fd.name,\n fd.type,\n fd.value,\n fd.error,\n fd.status,\n fd.valueIsFinal,\n InitialResourceVersion,\n );\n if (isNotNullResourceId(fd.value)) incrementRefs.push(fd.value);\n if (isNotNullResourceId(fd.error)) incrementRefs.push(fd.error);\n resource.fieldsMap.set(fd.name, field);\n }\n\n // adding kv\n for (const kv of rd.kv) resource.kv.set(kv.key, kv.value);\n\n // checking that resource is final, and if so, marking it\n if (this.isFinalPredicate(resource)) resource.markFinal();\n\n // adding the resource to the heap\n this.resources.set(resource.id, resource);\n this.resourcesAdded.markChanged(`new resource ${resourceIdToString(resource.id)} added`);\n }\n }\n\n // applying refCount increments\n for (const rid of incrementRefs) {\n const res = this.resources.get(rid);\n if (!res) {\n this.invalidateTree();\n throw new TreeStateUpdateError(`orphan resource ${rid}`);\n }\n res.refCount++;\n }\n\n // recursively applying refCount decrements / doing garbage collection\n let currentRefs = decrementRefs;\n while (currentRefs.length > 0) {\n const nextRefs: ResourceId[] = [];\n for (const rid of currentRefs) {\n const res = this.resources.get(rid);\n if (!res) {\n this.invalidateTree();\n throw new TreeStateUpdateError(`orphan resource ${rid}`);\n }\n res.refCount--;\n\n // garbage collection\n if (res.refCount === 0 && res.id !== this.root) {\n // removing fields\n res.fieldsMap.forEach((field) => {\n if (isNotNullResourceId(field.value)) nextRefs.push(field.value);\n if (isNotNullResourceId(field.error)) nextRefs.push(field.error);\n field.change.markChanged(`field ${field.name} removed during garbage collection of ${resourceIdToString(res.id)}`);\n });\n if (isNotNullResourceId(res.error)) nextRefs.push(res.error);\n res.resourceRemoved.markChanged(`resource removed during garbage collection: ${resourceIdToString(res.id)}`);\n this.resources.delete(rid);\n }\n }\n currentRefs = nextRefs;\n }\n\n // checking for orphans (maybe removed in the future)\n if (!allowOrphanInputs) {\n for (const rd of resourceData) {\n if (!this.resources.has(rd.id)) {\n this.invalidateTree();\n throw new TreeStateUpdateError(`orphan input resource ${rd.id}`);\n }\n }\n }\n }\n\n /** @deprecated use \"entry\" instead */\n public accessor(rid: ResourceId = this.root): PlTreeEntry {\n this.checkValid();\n return this.entry(rid);\n }\n\n public entry(rid: ResourceId = this.root): PlTreeEntry {\n this.checkValid();\n return new PlTreeEntry({ treeProvider: () => this }, rid);\n }\n\n public invalidateTree(msg?: string) {\n this._isValid = false;\n this.invalidationMessage = msg;\n this.resources.forEach((res) => {\n res.markAllChanged();\n });\n }\n\n public dumpState(): ExtendedResourceData[] {\n return Array.from(this.resources.values()).map((res) => res.extendedState);\n }\n}\n"],"names":["ChangeSource","KeyedChangeSource","resourceIdToString","isNotNullResourceId","NullResourceId","isNullResourceId","cachedDecode","cachedDeserialize","stringifyWithResourceId","notEmpty","PlTreeEntry"],"mappings":"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"}
1
+ {"version":3,"file":"state.cjs","sources":["../src/state.ts"],"sourcesContent":["import type {\n BasicResourceData,\n FieldData,\n FieldStatus,\n FieldType,\n KeyValue,\n OptionalResourceId,\n ResourceData,\n ResourceId,\n ResourceKind,\n ResourceType,\n} from \"@milaboratories/pl-client\";\nimport {\n isNotNullResourceId,\n isNullResourceId,\n NullResourceId,\n resourceIdToString,\n stringifyWithResourceId,\n} from \"@milaboratories/pl-client\";\nimport type { Watcher } from \"@milaboratories/computable\";\nimport { ChangeSource, KeyedChangeSource } from \"@milaboratories/computable\";\nimport { PlTreeEntry } from \"./accessors\";\nimport type { ValueAndError } from \"./value_and_error\";\nimport type { MiLogger } from \"@milaboratories/ts-helpers\";\nimport { cachedDecode, cachedDeserialize, notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { FieldTraversalStep, GetFieldStep } from \"./traversal_ops\";\nimport type { FinalResourceDataPredicate } from \"@milaboratories/pl-client\";\n\nexport type ExtendedResourceData = ResourceData & {\n kv: KeyValue[];\n};\n\nexport class TreeStateUpdateError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n\nclass PlTreeField implements FieldData {\n readonly change = new ChangeSource();\n\n constructor(\n public readonly name: string,\n public type: FieldType,\n public value: OptionalResourceId,\n public error: OptionalResourceId,\n public status: FieldStatus,\n public valueIsFinal: boolean,\n /** Last version of resource this field was observed, used to garbage collect fields in tree patching procedure */\n public resourceVersion: number,\n ) {}\n\n get state(): FieldData {\n return {\n name: this.name,\n type: this.type,\n status: this.status,\n value: this.value,\n error: this.error,\n valueIsFinal: this.valueIsFinal,\n };\n }\n}\n\nconst InitialResourceVersion = 0;\n\nexport type ResourceDataWithFinalState = ResourceData & {\n finalState: boolean;\n};\n\n/** Never store instances of this class, always get fresh instance from {@link PlTreeState} */\nexport class PlTreeResource implements ResourceDataWithFinalState {\n /** Tracks number of other resources referencing this resource. Used to perform garbage collection in tree patching procedure */\n refCount: number = 0;\n\n /** Increments each time resource is checked for difference with new state */\n version: number = InitialResourceVersion;\n /** Set to resource version when resource state, or it's fields have changed */\n dataVersion: number = InitialResourceVersion;\n\n readonly fieldsMap: Map<string, PlTreeField> = new Map();\n\n readonly kv = new Map<string, Uint8Array>();\n\n readonly resourceRemoved = new ChangeSource();\n\n // following change source are removed when resource is marked as final\n\n finalChanged? = new ChangeSource();\n\n resourceStateChange? = new ChangeSource();\n\n lockedChange? = new ChangeSource();\n inputAndServiceFieldListChanged? = new ChangeSource();\n outputFieldListChanged? = new ChangeSource();\n dynamicFieldListChanged? = new ChangeSource();\n\n // kvChangedGlobal? = new ChangeSource();\n kvChangedPerKey? = new KeyedChangeSource();\n\n readonly id: ResourceId;\n originalResourceId: OptionalResourceId;\n\n readonly kind: ResourceKind;\n readonly type: ResourceType;\n\n readonly data?: Uint8Array;\n private dataAsString?: string;\n private dataAsJson?: unknown;\n\n error: OptionalResourceId;\n\n inputsLocked: boolean;\n outputsLocked: boolean;\n resourceReady: boolean;\n finalFlag: boolean;\n\n /** Set externally by the tree, using {@link FinalResourceDataPredicate} */\n _finalState: boolean = false;\n\n private readonly logger?: MiLogger;\n\n constructor(initialState: BasicResourceData, logger?: MiLogger) {\n this.id = initialState.id;\n this.originalResourceId = initialState.originalResourceId;\n this.kind = initialState.kind;\n this.type = initialState.type;\n this.data = initialState.data;\n this.error = initialState.error;\n this.inputsLocked = initialState.inputsLocked;\n this.outputsLocked = initialState.outputsLocked;\n this.resourceReady = initialState.resourceReady;\n this.finalFlag = initialState.final;\n this.logger = logger;\n }\n\n // TODO add logging\n\n private info(msg: string) {\n if (this.logger !== undefined) this.logger.info(msg);\n }\n\n private warn(msg: string) {\n if (this.logger !== undefined) this.logger.warn(msg);\n }\n\n get final(): boolean {\n return this.finalFlag;\n }\n\n get finalState(): boolean {\n return this._finalState;\n }\n\n get fields(): FieldData[] {\n return [...this.fieldsMap.values()];\n }\n\n public getField(\n watcher: Watcher,\n _step:\n | (Omit<GetFieldStep, \"errorIfFieldNotFound\"> & { errorIfFieldNotFound: true })\n | (Omit<GetFieldStep, \"errorIfFieldNotSet\"> & { errorIfFieldNotSet: true }),\n onUnstable: (marker: string) => void,\n ): ValueAndError<ResourceId>;\n public getField(\n watcher: Watcher,\n _step: string | GetFieldStep,\n onUnstable: (marker: string) => void,\n ): ValueAndError<ResourceId> | undefined;\n public getField(\n watcher: Watcher,\n _step: string | GetFieldStep,\n onUnstable: (marker: string) => void = () => {},\n ): ValueAndError<ResourceId> | undefined {\n const step: FieldTraversalStep = typeof _step === \"string\" ? { field: _step } : _step;\n\n const field = this.fieldsMap.get(step.field);\n if (field === undefined) {\n if (step.errorIfFieldNotFound || step.errorIfFieldNotSet)\n throw new Error(\n `Field \"${step.field}\" not found in resource ${resourceIdToString(this.id)}`,\n );\n\n if (!this.inputsLocked) this.inputAndServiceFieldListChanged?.attachWatcher(watcher);\n else if (step.assertFieldType === \"Service\" || step.assertFieldType === \"Input\") {\n if (step.allowPermanentAbsence)\n // stable absence of field\n return undefined;\n else throw new Error(`Service or input field not found ${step.field}.`);\n }\n\n if (!this.outputsLocked) this.outputFieldListChanged?.attachWatcher(watcher);\n else if (step.assertFieldType === \"Output\") {\n if (step.allowPermanentAbsence)\n // stable absence of field\n return undefined;\n else throw new Error(`Output field not found ${step.field}.`);\n }\n\n this.dynamicFieldListChanged?.attachWatcher(watcher);\n if (!this._finalState && !step.stableIfNotFound) onUnstable(\"field_not_found:\" + step.field);\n\n return undefined;\n } else {\n if (step.assertFieldType !== undefined && field.type !== step.assertFieldType)\n throw new Error(\n `Unexpected field type: expected ${step.assertFieldType} but got ${field.type} for the field name ${step.field}`,\n );\n\n const ret = {} as ValueAndError<ResourceId>;\n if (isNotNullResourceId(field.value)) ret.value = field.value;\n if (isNotNullResourceId(field.error)) ret.error = field.error;\n if (ret.value === undefined && ret.error === undefined)\n // this method returns value and error of the field, thus those values are considered to be accessed;\n // any existing but not resolved field here is considered to be unstable, in the sense it is\n // considered to acquire some resolved value eventually\n onUnstable(\"field_not_resolved:\" + step.field);\n field.change.attachWatcher(watcher);\n return ret;\n }\n }\n\n public getInputsLocked(watcher: Watcher): boolean {\n if (!this.inputsLocked)\n // reverse transition can't happen, so there is no reason to wait for value to change\n this.resourceStateChange?.attachWatcher(watcher);\n return this.inputsLocked;\n }\n\n public getOutputsLocked(watcher: Watcher): boolean {\n if (!this.outputsLocked)\n // reverse transition can't happen, so there is no reason to wait for value to change\n this.resourceStateChange?.attachWatcher(watcher);\n return this.outputsLocked;\n }\n\n public get isReadyOrError(): boolean {\n return (\n this.error !== NullResourceId ||\n this.resourceReady ||\n this.originalResourceId !== NullResourceId\n );\n }\n\n public getIsFinal(watcher: Watcher): boolean {\n this.finalChanged?.attachWatcher(watcher);\n return this._finalState;\n }\n\n public getIsReadyOrError(watcher: Watcher): boolean {\n if (!this.isReadyOrError)\n // reverse transition can't happen, so there is no reason to wait for value to change if it is already true\n this.resourceStateChange?.attachWatcher(watcher);\n return this.isReadyOrError;\n }\n\n public getError(watcher: Watcher): ResourceId | undefined {\n if (isNullResourceId(this.error)) {\n this.resourceStateChange?.attachWatcher(watcher);\n return undefined;\n } else {\n // reverse transition can't happen, so there is no reason to wait for value to change, if error already set\n return this.error;\n }\n }\n\n public listInputFields(watcher: Watcher): string[] {\n const ret: string[] = [];\n this.fieldsMap.forEach((field, name) => {\n if (field.type === \"Input\" || field.type === \"Service\") ret.push(name);\n });\n if (!this.inputsLocked) this.inputAndServiceFieldListChanged?.attachWatcher(watcher);\n\n return ret;\n }\n\n public listOutputFields(watcher: Watcher): string[] {\n const ret: string[] = [];\n this.fieldsMap.forEach((field, name) => {\n if (field.type === \"Output\") ret.push(name);\n });\n if (!this.outputsLocked) this.outputFieldListChanged?.attachWatcher(watcher);\n\n return ret;\n }\n\n public listDynamicFields(watcher: Watcher): string[] {\n const ret: string[] = [];\n this.fieldsMap.forEach((field, name) => {\n if (field.type !== \"Input\" && field.type !== \"Output\") ret.push(name);\n });\n this.dynamicFieldListChanged?.attachWatcher(watcher);\n\n return ret;\n }\n\n public getKeyValue(watcher: Watcher, key: string): Uint8Array | undefined {\n this.kvChangedPerKey?.attachWatcher(key, watcher);\n return this.kv.get(key);\n }\n\n public getKeyValueString(watcher: Watcher, key: string): string | undefined {\n const bytes = this.getKeyValue(watcher, key);\n if (bytes === undefined) return undefined;\n return cachedDecode(bytes);\n }\n\n public getKeyValueAsJson<T = unknown>(watcher: Watcher, key: string): T | undefined {\n const bytes = this.getKeyValue(watcher, key);\n if (bytes === undefined) return undefined;\n return cachedDeserialize(bytes);\n }\n\n public getDataAsString(): string | undefined {\n if (this.data === undefined) return undefined;\n if (this.dataAsString === undefined) this.dataAsString = cachedDecode(this.data);\n return this.dataAsString;\n }\n\n public getDataAsJson<T = unknown>(): T | undefined {\n if (this.data === undefined) return undefined;\n if (this.dataAsJson === undefined) this.dataAsJson = cachedDeserialize(this.data);\n return this.dataAsJson as T;\n }\n\n verifyReadyState() {\n if (this.resourceReady && !this.inputsLocked)\n throw new Error(\n `ready without input or output lock: ${stringifyWithResourceId(this.basicState)}`,\n );\n }\n\n get basicState(): BasicResourceData {\n return {\n id: this.id,\n kind: this.kind,\n type: this.type,\n data: this.data,\n resourceReady: this.resourceReady,\n inputsLocked: this.inputsLocked,\n outputsLocked: this.outputsLocked,\n error: this.error,\n originalResourceId: this.originalResourceId,\n final: this.finalFlag,\n };\n }\n\n get extendedState(): ExtendedResourceData {\n return {\n ...this.basicState,\n fields: this.fields,\n kv: Array.from(this.kv.entries()).map(([key, value]) => ({ key, value })),\n };\n }\n\n /** Called when {@link FinalResourceDataPredicate} returns true for the state. */\n markFinal() {\n if (this._finalState) return;\n\n this._finalState = true;\n notEmpty(this.finalChanged).markChanged(\"marked final\");\n this.finalChanged = undefined;\n this.resourceStateChange = undefined;\n this.dynamicFieldListChanged = undefined;\n this.inputAndServiceFieldListChanged = undefined;\n this.outputFieldListChanged = undefined;\n this.lockedChange = undefined;\n // this.kvChangedGlobal = undefined;\n this.kvChangedPerKey = undefined;\n }\n\n /** Used for invalidation */\n markAllChanged() {\n this.fieldsMap.forEach((field) => field.change.markChanged(\"marked all changed\"));\n this.finalChanged?.markChanged(\"marked all changed\");\n this.resourceStateChange?.markChanged(\"marked all changed\");\n this.lockedChange?.markChanged(\"marked all changed\");\n this.inputAndServiceFieldListChanged?.markChanged(\"marked all changed\");\n this.outputFieldListChanged?.markChanged(\"marked all changed\");\n this.dynamicFieldListChanged?.markChanged(\"marked all changed\");\n // this.kvChangedGlobal?.markChanged('marked all changed');\n this.kvChangedPerKey?.markAllChanged(\"marked all changed\");\n this.resourceRemoved.markChanged(\"marked all changed\");\n }\n}\n\nexport class PlTreeState {\n /** resource heap */\n private resources: Map<ResourceId, PlTreeResource> = new Map();\n private readonly resourcesAdded = new ChangeSource();\n /** Resets to false if any invalid state transitions are registered,\n * after that tree will produce errors for any read or write operations */\n private _isValid: boolean = true;\n private invalidationMessage?: string;\n\n constructor(\n /** This will be the only resource not deleted during GC round */\n public readonly root: ResourceId,\n public readonly isFinalPredicate: FinalResourceDataPredicate,\n ) {}\n\n public forEachResource(cb: (res: ResourceDataWithFinalState) => void): void {\n this.resources.forEach((v) => cb(v));\n }\n\n private checkValid() {\n if (!this._isValid) throw new Error(this.invalidationMessage ?? \"tree is in invalid state\");\n }\n\n public get(watcher: Watcher, rid: ResourceId): PlTreeResource {\n this.checkValid();\n const res = this.resources.get(rid);\n if (res === undefined) {\n // to make recovery from resource not found possible, considering some\n // race conditions, where computable is created before tree is updated\n this.resourcesAdded.attachWatcher(watcher);\n throw new Error(`resource ${resourceIdToString(rid)} not found in the tree`);\n }\n res.resourceRemoved.attachWatcher(watcher);\n return res;\n }\n\n updateFromResourceData(resourceData: ExtendedResourceData[], allowOrphanInputs: boolean = false) {\n this.checkValid();\n\n // All resources for which recount should be incremented, first are aggregated in this list\n const incrementRefs: ResourceId[] = [];\n const decrementRefs: ResourceId[] = [];\n\n // patching / creating resources\n for (const rd of resourceData) {\n let resource = this.resources.get(rd.id);\n\n const statBeforeMutation = resource?.basicState;\n const unexpectedTransitionError = (reason: string): never => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { fields, ...rdWithoutFields } = rd;\n this.invalidateTree();\n throw new TreeStateUpdateError(\n `Unexpected resource state transition (${reason}): ${stringifyWithResourceId(\n rdWithoutFields,\n )} -> ${stringifyWithResourceId(statBeforeMutation)}`,\n );\n };\n\n if (resource !== undefined) {\n // updating existing resource\n\n if (resource.finalState)\n unexpectedTransitionError(\"resource state can\\t be updated after it is marked as final\");\n\n let changed = false;\n // updating resource version, even if it was not changed\n resource.version += 1;\n\n // duplicate / original\n if (resource.originalResourceId !== rd.originalResourceId) {\n if (resource.originalResourceId !== NullResourceId)\n unexpectedTransitionError(\"originalResourceId can't change after it is set\");\n resource.originalResourceId = rd.originalResourceId;\n // duplicate status of the resource counts as ready for the external observer\n notEmpty(resource.resourceStateChange).markChanged(\n `originalResourceId changed for ${resourceIdToString(resource.id)}`,\n );\n changed = true;\n }\n\n // error\n if (resource.error !== rd.error) {\n if (isNotNullResourceId(resource.error))\n unexpectedTransitionError(\"resource can't change attached error after it is set\");\n resource.error = rd.error;\n incrementRefs.push(resource.error as ResourceId);\n notEmpty(resource.resourceStateChange).markChanged(\n `error changed for ${resourceIdToString(resource.id)}`,\n );\n changed = true;\n }\n\n // updating fields\n for (const fd of rd.fields) {\n let field = resource.fieldsMap.get(fd.name);\n\n if (!field) {\n // new field\n\n field = new PlTreeField(\n fd.name,\n fd.type,\n fd.value,\n fd.error,\n fd.status,\n fd.valueIsFinal,\n resource.version,\n );\n if (isNotNullResourceId(fd.value)) incrementRefs.push(fd.value);\n if (isNotNullResourceId(fd.error)) incrementRefs.push(fd.error);\n\n if (fd.type === \"Input\" || fd.type === \"Service\") {\n if (resource.inputsLocked)\n unexpectedTransitionError(\n `adding ${fd.type} (${fd.name}) field while inputs locked`,\n );\n notEmpty(resource.inputAndServiceFieldListChanged).markChanged(\n `new ${fd.type} field ${fd.name} added to ${resourceIdToString(resource.id)}`,\n );\n } else if (fd.type === \"Output\") {\n if (resource.outputsLocked)\n unexpectedTransitionError(\n `adding ${fd.type} (${fd.name}) field while outputs locked`,\n );\n notEmpty(resource.outputFieldListChanged).markChanged(\n `new ${fd.type} field ${fd.name} added to ${resourceIdToString(resource.id)}`,\n );\n } else {\n notEmpty(resource.dynamicFieldListChanged).markChanged(\n `new ${fd.type} field ${fd.name} added to ${resourceIdToString(resource.id)}`,\n );\n }\n\n resource.fieldsMap.set(fd.name, field);\n\n changed = true;\n } else {\n // change of old field\n\n // in principle this transition is possible, see assertions below\n if (field.type !== fd.type) {\n if (field.type !== \"Dynamic\")\n unexpectedTransitionError(`field changed type ${field.type} -> ${fd.type}`);\n notEmpty(resource.dynamicFieldListChanged).markChanged(\n `field ${fd.name} changed type from Dynamic to ${fd.type} in ${resourceIdToString(resource.id)}`,\n );\n if (field.type === \"Input\" || field.type === \"Service\") {\n if (resource.inputsLocked)\n unexpectedTransitionError(\n `adding input field \"${fd.name}\", while corresponding list is locked`,\n );\n notEmpty(resource.inputAndServiceFieldListChanged).markChanged(\n `field ${fd.name} changed to type ${fd.type} in ${resourceIdToString(resource.id)}`,\n );\n }\n if (field.type === \"Output\") {\n if (resource.outputsLocked)\n unexpectedTransitionError(\n `adding output field \"${fd.name}\", while corresponding list is locked`,\n );\n notEmpty(resource.outputFieldListChanged).markChanged(\n `field ${fd.name} changed to type ${fd.type} in ${resourceIdToString(resource.id)}`,\n );\n }\n field.type = fd.type;\n field.change.markChanged(\n `field ${fd.name} type changed to ${fd.type} in ${resourceIdToString(resource.id)}`,\n );\n changed = true;\n }\n\n // field value\n if (field.value !== fd.value) {\n if (isNotNullResourceId(field.value)) decrementRefs.push(field.value);\n field.value = fd.value;\n if (isNotNullResourceId(fd.value)) incrementRefs.push(fd.value);\n field.change.markChanged(\n `field ${fd.name} value changed in ${resourceIdToString(resource.id)}`,\n );\n changed = true;\n }\n\n // field error\n if (field.error !== fd.error) {\n if (isNotNullResourceId(field.error)) decrementRefs.push(field.error);\n field.error = fd.error;\n if (isNotNullResourceId(fd.error)) incrementRefs.push(fd.error);\n field.change.markChanged(\n `field ${fd.name} error changed in ${resourceIdToString(resource.id)}`,\n );\n changed = true;\n }\n\n // field status\n if (field.status !== fd.status) {\n field.status = fd.status;\n field.change.markChanged(\n `field ${fd.name} status changed to ${fd.status} in ${resourceIdToString(resource.id)}`,\n );\n changed = true;\n }\n\n // field valueIsFinal flag\n if (field.valueIsFinal !== fd.valueIsFinal) {\n field.valueIsFinal = fd.valueIsFinal;\n field.change.markChanged(\n `field ${fd.name} valueIsFinal changed to ${fd.valueIsFinal} in ${resourceIdToString(resource.id)}`,\n );\n changed = true;\n }\n\n field.resourceVersion = resource.version;\n }\n }\n\n // detecting removed fields\n resource.fieldsMap.forEach((field, fieldName, fields) => {\n if (field.resourceVersion !== resource!.version) {\n if (field.type === \"Input\" || field.type === \"Service\" || field.type === \"Output\")\n unexpectedTransitionError(`removal of ${field.type} field ${fieldName}`);\n field.change.markChanged(\n `dynamic field ${fieldName} removed from ${resourceIdToString(resource!.id)}`,\n );\n fields.delete(fieldName);\n\n if (isNotNullResourceId(field.value)) decrementRefs.push(field.value);\n if (isNotNullResourceId(field.error)) decrementRefs.push(field.error);\n\n notEmpty(resource!.dynamicFieldListChanged).markChanged(\n `dynamic field ${fieldName} removed from ${resourceIdToString(resource!.id)}`,\n );\n }\n });\n\n // inputsLocked\n if (resource.inputsLocked !== rd.inputsLocked) {\n if (resource.inputsLocked) unexpectedTransitionError(\"inputs unlocking is not permitted\");\n resource.inputsLocked = rd.inputsLocked;\n notEmpty(resource.lockedChange).markChanged(\n `inputs locked for ${resourceIdToString(resource.id)}`,\n );\n changed = true;\n }\n\n // outputsLocked\n if (resource.outputsLocked !== rd.outputsLocked) {\n if (resource.outputsLocked)\n unexpectedTransitionError(\"outputs unlocking is not permitted\");\n resource.outputsLocked = rd.outputsLocked;\n notEmpty(resource.lockedChange).markChanged(\n `outputs locked for ${resourceIdToString(resource.id)}`,\n );\n changed = true;\n }\n\n // ready flag\n if (resource.resourceReady !== rd.resourceReady) {\n const readyStateBefore = resource.resourceReady;\n resource.resourceReady = rd.resourceReady;\n resource.verifyReadyState();\n if (!resource.isReadyOrError)\n unexpectedTransitionError(\n `resource can't lose it's ready or error state (ready state before ${readyStateBefore})`,\n );\n notEmpty(resource.resourceStateChange).markChanged(\n `ready flag changed to ${rd.resourceReady} for ${resourceIdToString(resource.id)}`,\n );\n changed = true;\n }\n\n // syncing kv\n for (const kv of rd.kv) {\n const current = resource.kv.get(kv.key);\n if (current === undefined) {\n resource.kv.set(kv.key, kv.value);\n notEmpty(resource.kvChangedPerKey).markChanged(\n kv.key,\n `kv added for ${resourceIdToString(resource.id)}: ${kv.key}`,\n );\n } else if (Buffer.compare(current, kv.value) !== 0) {\n resource.kv.set(kv.key, kv.value);\n notEmpty(resource.kvChangedPerKey).markChanged(\n kv.key,\n `kv changed for ${resourceIdToString(resource.id)}: ${kv.key}`,\n );\n }\n }\n\n if (resource.kv.size > rd.kv.length) {\n // only it this case it makes sense to check for deletions\n const newStateKeys = new Set(rd.kv.map((kv) => kv.key));\n\n // deleting keys not present in resource anymore\n resource.kv.forEach((_value, key, map) => {\n if (!newStateKeys.has(key)) {\n map.delete(key);\n notEmpty(resource!.kvChangedPerKey).markChanged(\n key,\n `kv deleted for ${resourceIdToString(resource!.id)}: ${key}`,\n );\n }\n });\n }\n\n if (changed) {\n // if resource was changed, updating resource data version\n resource.dataVersion = resource.version;\n if (this.isFinalPredicate(resource)) resource.markFinal();\n }\n } else {\n // creating new resource\n\n resource = new PlTreeResource(rd);\n resource.verifyReadyState();\n if (isNotNullResourceId(resource.error)) incrementRefs.push(resource.error);\n for (const fd of rd.fields) {\n const field = new PlTreeField(\n fd.name,\n fd.type,\n fd.value,\n fd.error,\n fd.status,\n fd.valueIsFinal,\n InitialResourceVersion,\n );\n if (isNotNullResourceId(fd.value)) incrementRefs.push(fd.value);\n if (isNotNullResourceId(fd.error)) incrementRefs.push(fd.error);\n resource.fieldsMap.set(fd.name, field);\n }\n\n // adding kv\n for (const kv of rd.kv) resource.kv.set(kv.key, kv.value);\n\n // checking that resource is final, and if so, marking it\n if (this.isFinalPredicate(resource)) resource.markFinal();\n\n // adding the resource to the heap\n this.resources.set(resource.id, resource);\n this.resourcesAdded.markChanged(`new resource ${resourceIdToString(resource.id)} added`);\n }\n }\n\n // applying refCount increments\n for (const rid of incrementRefs) {\n const res = this.resources.get(rid);\n if (!res) {\n this.invalidateTree();\n throw new TreeStateUpdateError(`orphan resource ${rid}`);\n }\n res.refCount++;\n }\n\n // recursively applying refCount decrements / doing garbage collection\n let currentRefs = decrementRefs;\n while (currentRefs.length > 0) {\n const nextRefs: ResourceId[] = [];\n for (const rid of currentRefs) {\n const res = this.resources.get(rid);\n if (!res) {\n this.invalidateTree();\n throw new TreeStateUpdateError(`orphan resource ${rid}`);\n }\n res.refCount--;\n\n // garbage collection\n if (res.refCount === 0 && res.id !== this.root) {\n // removing fields\n res.fieldsMap.forEach((field) => {\n if (isNotNullResourceId(field.value)) nextRefs.push(field.value);\n if (isNotNullResourceId(field.error)) nextRefs.push(field.error);\n field.change.markChanged(\n `field ${field.name} removed during garbage collection of ${resourceIdToString(res.id)}`,\n );\n });\n if (isNotNullResourceId(res.error)) nextRefs.push(res.error);\n res.resourceRemoved.markChanged(\n `resource removed during garbage collection: ${resourceIdToString(res.id)}`,\n );\n this.resources.delete(rid);\n }\n }\n currentRefs = nextRefs;\n }\n\n // checking for orphans (maybe removed in the future)\n if (!allowOrphanInputs) {\n for (const rd of resourceData) {\n if (!this.resources.has(rd.id)) {\n this.invalidateTree();\n throw new TreeStateUpdateError(`orphan input resource ${rd.id}`);\n }\n }\n }\n }\n\n /** @deprecated use \"entry\" instead */\n public accessor(rid: ResourceId = this.root): PlTreeEntry {\n this.checkValid();\n return this.entry(rid);\n }\n\n public entry(rid: ResourceId = this.root): PlTreeEntry {\n this.checkValid();\n return new PlTreeEntry({ treeProvider: () => this }, rid);\n }\n\n public invalidateTree(msg?: string) {\n this._isValid = false;\n this.invalidationMessage = msg;\n this.resources.forEach((res) => {\n res.markAllChanged();\n });\n }\n\n public dumpState(): ExtendedResourceData[] {\n return Array.from(this.resources.values()).map((res) => res.extendedState);\n }\n}\n"],"names":["ChangeSource","KeyedChangeSource","resourceIdToString","isNotNullResourceId","NullResourceId","isNullResourceId","cachedDecode","cachedDeserialize","stringifyWithResourceId","notEmpty","PlTreeEntry"],"mappings":"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"}
package/dist/state.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- import type { BasicResourceData, FieldData, FieldStatus, FieldType, KeyValue, OptionalResourceId, ResourceData, ResourceId, ResourceKind, ResourceType } from '@milaboratories/pl-client';
2
- import type { Watcher } from '@milaboratories/computable';
3
- import { ChangeSource, KeyedChangeSource } from '@milaboratories/computable';
4
- import { PlTreeEntry } from './accessors';
5
- import type { ValueAndError } from './value_and_error';
6
- import type { MiLogger } from '@milaboratories/ts-helpers';
7
- import type { GetFieldStep } from './traversal_ops';
8
- import type { FinalResourceDataPredicate } from '@milaboratories/pl-client';
1
+ import type { BasicResourceData, FieldData, FieldStatus, FieldType, KeyValue, OptionalResourceId, ResourceData, ResourceId, ResourceKind, ResourceType } from "@milaboratories/pl-client";
2
+ import type { Watcher } from "@milaboratories/computable";
3
+ import { ChangeSource, KeyedChangeSource } from "@milaboratories/computable";
4
+ import { PlTreeEntry } from "./accessors";
5
+ import type { ValueAndError } from "./value_and_error";
6
+ import type { MiLogger } from "@milaboratories/ts-helpers";
7
+ import type { GetFieldStep } from "./traversal_ops";
8
+ import type { FinalResourceDataPredicate } from "@milaboratories/pl-client";
9
9
  export type ExtendedResourceData = ResourceData & {
10
10
  kv: KeyValue[];
11
11
  };
@@ -69,9 +69,9 @@ export declare class PlTreeResource implements ResourceDataWithFinalState {
69
69
  get final(): boolean;
70
70
  get finalState(): boolean;
71
71
  get fields(): FieldData[];
72
- getField(watcher: Watcher, _step: (Omit<GetFieldStep, 'errorIfFieldNotFound'> & {
72
+ getField(watcher: Watcher, _step: (Omit<GetFieldStep, "errorIfFieldNotFound"> & {
73
73
  errorIfFieldNotFound: true;
74
- }) | (Omit<GetFieldStep, 'errorIfFieldNotSet'> & {
74
+ }) | (Omit<GetFieldStep, "errorIfFieldNotSet"> & {
75
75
  errorIfFieldNotSet: true;
76
76
  }), onUnstable: (marker: string) => void): ValueAndError<ResourceId>;
77
77
  getField(watcher: Watcher, _step: string | GetFieldStep, onUnstable: (marker: string) => void): ValueAndError<ResourceId> | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
package/dist/state.js CHANGED
@@ -107,14 +107,14 @@ class PlTreeResource {
107
107
  return [...this.fieldsMap.values()];
108
108
  }
109
109
  getField(watcher, _step, onUnstable = () => { }) {
110
- const step = typeof _step === 'string' ? { field: _step } : _step;
110
+ const step = typeof _step === "string" ? { field: _step } : _step;
111
111
  const field = this.fieldsMap.get(step.field);
112
112
  if (field === undefined) {
113
113
  if (step.errorIfFieldNotFound || step.errorIfFieldNotSet)
114
114
  throw new Error(`Field "${step.field}" not found in resource ${resourceIdToString(this.id)}`);
115
115
  if (!this.inputsLocked)
116
116
  this.inputAndServiceFieldListChanged?.attachWatcher(watcher);
117
- else if (step.assertFieldType === 'Service' || step.assertFieldType === 'Input') {
117
+ else if (step.assertFieldType === "Service" || step.assertFieldType === "Input") {
118
118
  if (step.allowPermanentAbsence)
119
119
  // stable absence of field
120
120
  return undefined;
@@ -123,7 +123,7 @@ class PlTreeResource {
123
123
  }
124
124
  if (!this.outputsLocked)
125
125
  this.outputFieldListChanged?.attachWatcher(watcher);
126
- else if (step.assertFieldType === 'Output') {
126
+ else if (step.assertFieldType === "Output") {
127
127
  if (step.allowPermanentAbsence)
128
128
  // stable absence of field
129
129
  return undefined;
@@ -132,7 +132,7 @@ class PlTreeResource {
132
132
  }
133
133
  this.dynamicFieldListChanged?.attachWatcher(watcher);
134
134
  if (!this._finalState && !step.stableIfNotFound)
135
- onUnstable('field_not_found:' + step.field);
135
+ onUnstable("field_not_found:" + step.field);
136
136
  return undefined;
137
137
  }
138
138
  else {
@@ -147,7 +147,7 @@ class PlTreeResource {
147
147
  // this method returns value and error of the field, thus those values are considered to be accessed;
148
148
  // any existing but not resolved field here is considered to be unstable, in the sense it is
149
149
  // considered to acquire some resolved value eventually
150
- onUnstable('field_not_resolved:' + step.field);
150
+ onUnstable("field_not_resolved:" + step.field);
151
151
  field.change.attachWatcher(watcher);
152
152
  return ret;
153
153
  }
@@ -165,9 +165,9 @@ class PlTreeResource {
165
165
  return this.outputsLocked;
166
166
  }
167
167
  get isReadyOrError() {
168
- return (this.error !== NullResourceId
169
- || this.resourceReady
170
- || this.originalResourceId !== NullResourceId);
168
+ return (this.error !== NullResourceId ||
169
+ this.resourceReady ||
170
+ this.originalResourceId !== NullResourceId);
171
171
  }
172
172
  getIsFinal(watcher) {
173
173
  this.finalChanged?.attachWatcher(watcher);
@@ -192,7 +192,7 @@ class PlTreeResource {
192
192
  listInputFields(watcher) {
193
193
  const ret = [];
194
194
  this.fieldsMap.forEach((field, name) => {
195
- if (field.type === 'Input' || field.type === 'Service')
195
+ if (field.type === "Input" || field.type === "Service")
196
196
  ret.push(name);
197
197
  });
198
198
  if (!this.inputsLocked)
@@ -202,7 +202,7 @@ class PlTreeResource {
202
202
  listOutputFields(watcher) {
203
203
  const ret = [];
204
204
  this.fieldsMap.forEach((field, name) => {
205
- if (field.type === 'Output')
205
+ if (field.type === "Output")
206
206
  ret.push(name);
207
207
  });
208
208
  if (!this.outputsLocked)
@@ -212,7 +212,7 @@ class PlTreeResource {
212
212
  listDynamicFields(watcher) {
213
213
  const ret = [];
214
214
  this.fieldsMap.forEach((field, name) => {
215
- if (field.type !== 'Input' && field.type !== 'Output')
215
+ if (field.type !== "Input" && field.type !== "Output")
216
216
  ret.push(name);
217
217
  });
218
218
  this.dynamicFieldListChanged?.attachWatcher(watcher);
@@ -278,7 +278,7 @@ class PlTreeResource {
278
278
  if (this._finalState)
279
279
  return;
280
280
  this._finalState = true;
281
- notEmpty(this.finalChanged).markChanged('marked final');
281
+ notEmpty(this.finalChanged).markChanged("marked final");
282
282
  this.finalChanged = undefined;
283
283
  this.resourceStateChange = undefined;
284
284
  this.dynamicFieldListChanged = undefined;
@@ -290,16 +290,16 @@ class PlTreeResource {
290
290
  }
291
291
  /** Used for invalidation */
292
292
  markAllChanged() {
293
- this.fieldsMap.forEach((field) => field.change.markChanged('marked all changed'));
294
- this.finalChanged?.markChanged('marked all changed');
295
- this.resourceStateChange?.markChanged('marked all changed');
296
- this.lockedChange?.markChanged('marked all changed');
297
- this.inputAndServiceFieldListChanged?.markChanged('marked all changed');
298
- this.outputFieldListChanged?.markChanged('marked all changed');
299
- this.dynamicFieldListChanged?.markChanged('marked all changed');
293
+ this.fieldsMap.forEach((field) => field.change.markChanged("marked all changed"));
294
+ this.finalChanged?.markChanged("marked all changed");
295
+ this.resourceStateChange?.markChanged("marked all changed");
296
+ this.lockedChange?.markChanged("marked all changed");
297
+ this.inputAndServiceFieldListChanged?.markChanged("marked all changed");
298
+ this.outputFieldListChanged?.markChanged("marked all changed");
299
+ this.dynamicFieldListChanged?.markChanged("marked all changed");
300
300
  // this.kvChangedGlobal?.markChanged('marked all changed');
301
- this.kvChangedPerKey?.markAllChanged('marked all changed');
302
- this.resourceRemoved.markChanged('marked all changed');
301
+ this.kvChangedPerKey?.markAllChanged("marked all changed");
302
+ this.resourceRemoved.markChanged("marked all changed");
303
303
  }
304
304
  }
305
305
  class PlTreeState {
@@ -323,7 +323,7 @@ class PlTreeState {
323
323
  }
324
324
  checkValid() {
325
325
  if (!this._isValid)
326
- throw new Error(this.invalidationMessage ?? 'tree is in invalid state');
326
+ throw new Error(this.invalidationMessage ?? "tree is in invalid state");
327
327
  }
328
328
  get(watcher, rid) {
329
329
  this.checkValid();
@@ -355,14 +355,14 @@ class PlTreeState {
355
355
  if (resource !== undefined) {
356
356
  // updating existing resource
357
357
  if (resource.finalState)
358
- unexpectedTransitionError('resource state can\t be updated after it is marked as final');
358
+ unexpectedTransitionError("resource state can\t be updated after it is marked as final");
359
359
  let changed = false;
360
360
  // updating resource version, even if it was not changed
361
361
  resource.version += 1;
362
362
  // duplicate / original
363
363
  if (resource.originalResourceId !== rd.originalResourceId) {
364
364
  if (resource.originalResourceId !== NullResourceId)
365
- unexpectedTransitionError('originalResourceId can\'t change after it is set');
365
+ unexpectedTransitionError("originalResourceId can't change after it is set");
366
366
  resource.originalResourceId = rd.originalResourceId;
367
367
  // duplicate status of the resource counts as ready for the external observer
368
368
  notEmpty(resource.resourceStateChange).markChanged(`originalResourceId changed for ${resourceIdToString(resource.id)}`);
@@ -371,7 +371,7 @@ class PlTreeState {
371
371
  // error
372
372
  if (resource.error !== rd.error) {
373
373
  if (isNotNullResourceId(resource.error))
374
- unexpectedTransitionError('resource can\'t change attached error after it is set');
374
+ unexpectedTransitionError("resource can't change attached error after it is set");
375
375
  resource.error = rd.error;
376
376
  incrementRefs.push(resource.error);
377
377
  notEmpty(resource.resourceStateChange).markChanged(`error changed for ${resourceIdToString(resource.id)}`);
@@ -387,12 +387,12 @@ class PlTreeState {
387
387
  incrementRefs.push(fd.value);
388
388
  if (isNotNullResourceId(fd.error))
389
389
  incrementRefs.push(fd.error);
390
- if (fd.type === 'Input' || fd.type === 'Service') {
390
+ if (fd.type === "Input" || fd.type === "Service") {
391
391
  if (resource.inputsLocked)
392
392
  unexpectedTransitionError(`adding ${fd.type} (${fd.name}) field while inputs locked`);
393
393
  notEmpty(resource.inputAndServiceFieldListChanged).markChanged(`new ${fd.type} field ${fd.name} added to ${resourceIdToString(resource.id)}`);
394
394
  }
395
- else if (fd.type === 'Output') {
395
+ else if (fd.type === "Output") {
396
396
  if (resource.outputsLocked)
397
397
  unexpectedTransitionError(`adding ${fd.type} (${fd.name}) field while outputs locked`);
398
398
  notEmpty(resource.outputFieldListChanged).markChanged(`new ${fd.type} field ${fd.name} added to ${resourceIdToString(resource.id)}`);
@@ -407,15 +407,15 @@ class PlTreeState {
407
407
  // change of old field
408
408
  // in principle this transition is possible, see assertions below
409
409
  if (field.type !== fd.type) {
410
- if (field.type !== 'Dynamic')
410
+ if (field.type !== "Dynamic")
411
411
  unexpectedTransitionError(`field changed type ${field.type} -> ${fd.type}`);
412
412
  notEmpty(resource.dynamicFieldListChanged).markChanged(`field ${fd.name} changed type from Dynamic to ${fd.type} in ${resourceIdToString(resource.id)}`);
413
- if (field.type === 'Input' || field.type === 'Service') {
413
+ if (field.type === "Input" || field.type === "Service") {
414
414
  if (resource.inputsLocked)
415
415
  unexpectedTransitionError(`adding input field "${fd.name}", while corresponding list is locked`);
416
416
  notEmpty(resource.inputAndServiceFieldListChanged).markChanged(`field ${fd.name} changed to type ${fd.type} in ${resourceIdToString(resource.id)}`);
417
417
  }
418
- if (field.type === 'Output') {
418
+ if (field.type === "Output") {
419
419
  if (resource.outputsLocked)
420
420
  unexpectedTransitionError(`adding output field "${fd.name}", while corresponding list is locked`);
421
421
  notEmpty(resource.outputFieldListChanged).markChanged(`field ${fd.name} changed to type ${fd.type} in ${resourceIdToString(resource.id)}`);
@@ -462,7 +462,7 @@ class PlTreeState {
462
462
  // detecting removed fields
463
463
  resource.fieldsMap.forEach((field, fieldName, fields) => {
464
464
  if (field.resourceVersion !== resource.version) {
465
- if (field.type === 'Input' || field.type === 'Service' || field.type === 'Output')
465
+ if (field.type === "Input" || field.type === "Service" || field.type === "Output")
466
466
  unexpectedTransitionError(`removal of ${field.type} field ${fieldName}`);
467
467
  field.change.markChanged(`dynamic field ${fieldName} removed from ${resourceIdToString(resource.id)}`);
468
468
  fields.delete(fieldName);
@@ -476,7 +476,7 @@ class PlTreeState {
476
476
  // inputsLocked
477
477
  if (resource.inputsLocked !== rd.inputsLocked) {
478
478
  if (resource.inputsLocked)
479
- unexpectedTransitionError('inputs unlocking is not permitted');
479
+ unexpectedTransitionError("inputs unlocking is not permitted");
480
480
  resource.inputsLocked = rd.inputsLocked;
481
481
  notEmpty(resource.lockedChange).markChanged(`inputs locked for ${resourceIdToString(resource.id)}`);
482
482
  changed = true;
@@ -484,7 +484,7 @@ class PlTreeState {
484
484
  // outputsLocked
485
485
  if (resource.outputsLocked !== rd.outputsLocked) {
486
486
  if (resource.outputsLocked)
487
- unexpectedTransitionError('outputs unlocking is not permitted');
487
+ unexpectedTransitionError("outputs unlocking is not permitted");
488
488
  resource.outputsLocked = rd.outputsLocked;
489
489
  notEmpty(resource.lockedChange).markChanged(`outputs locked for ${resourceIdToString(resource.id)}`);
490
490
  changed = true;