UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

1 lines 6.76 kB
{"version":3,"sources":["../../../packages/core/workflow/persistent-local-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAM,MAAM,MAAM,CAAC;AAEtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEtE;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,uBAAuB;IAC/D,OAAO,CAAC,cAAc,CAAK;IAE3B;;;;;;;;OAQG;IACI,IAAI,CACP,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,uBAAuB,EACtC,YAAY,EAAE,GAAG,EACjB,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,0BAA0B,CAAC;IAiBhE;;OAEG;IACI,OAAO,IAAI,UAAU,CAAC,0BAA0B,EAAE,CAAC;IAyB1D;;;;;OAKG;IACI,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;IA4BnD;;OAEG;IACH,OAAO,CAAC,QAAQ;IAIhB;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAItB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAIpB;;;;OAIG;IACH,OAAO,CAAC,aAAa;CAGxB","file":"persistent-local-storage.d.ts","sourcesContent":["import { Observable, of } from 'rxjs';\r\nimport { map, tap } from 'rxjs/operators';\r\nimport { PersistentWorkItemState } from './persistent-work-item-state';\r\nimport { PersistentWorkflowSnapshot } from './persistent-workflow-snapshot';\r\nimport { PersistentWorkflowStore } from './persistent-workflow-store';\r\n\r\n/**\r\n * Implementation of PersistentWorkflowStore by local storage.\r\n */\r\nexport class PersistentLocalStorage extends PersistentWorkflowStore {\r\n private nextInstanceId = 1;\r\n\r\n /**\r\n * Save the work item snapshot to the local storage.\r\n *\r\n * @param version the version number.\r\n * @param workItemId the id of work item.\r\n * @param workItemState the state of work item.\r\n * @param workItemData the persistent data of work item.\r\n * @param instanceId the instance ID if it has already.\r\n */\r\n public save(\r\n version: number,\r\n workItemId: number,\r\n workItemState: PersistentWorkItemState,\r\n workItemData: any,\r\n instanceId?: number): Observable<PersistentWorkflowSnapshot> {\r\n\r\n return of(null)\r\n .pipe(map(() => {\r\n const indexData = this.readIndexData();\r\n if (MsftSme.isNullOrUndefined(instanceId)) {\r\n instanceId = this.nextInstanceId++;\r\n indexData.instances.push(instanceId);\r\n this.writeIndexData(indexData);\r\n }\r\n\r\n const snapshot: PersistentWorkflowSnapshot = { version, instanceId, workItemId, workItemState, workItemData };\r\n this.writeInstance(snapshot);\r\n return snapshot;\r\n }));\r\n }\r\n\r\n /**\r\n * Restore the snapshot data for the workflow.\r\n */\r\n public restore(): Observable<PersistentWorkflowSnapshot[]> {\r\n return of(null)\r\n .pipe(map(() => {\r\n const instances: PersistentWorkflowSnapshot[] = [];\r\n const indexData = this.readIndexData();\r\n if (indexData.instances.length === 0) {\r\n return instances;\r\n }\r\n\r\n for (const instanceId of indexData.instances) {\r\n const instance = this.readInstance(instanceId);\r\n if (instance) {\r\n instances.push(instance);\r\n if (this.nextInstanceId < instanceId) {\r\n this.nextInstanceId = instanceId;\r\n }\r\n } else {\r\n this.clear(instanceId);\r\n }\r\n }\r\n\r\n return instances;\r\n }));\r\n }\r\n\r\n /**\r\n * Clear the snapshot for the instance id.\r\n * If not specified, clear all snapshots.\r\n *\r\n * @param instanceId the instance id.\r\n */\r\n public clear(instanceId?: number): Observable<void> {\r\n return of(null)\r\n .pipe(tap(() => {\r\n const indexData = this.readIndexData();\r\n\r\n // remove one.\r\n if (!MsftSme.isNullOrUndefined(instanceId)) {\r\n const pointer = indexData.instances.indexOf(instanceId);\r\n if (pointer >= 0) {\r\n indexData.instances.splice(pointer, 1);\r\n this.writeIndexData(indexData);\r\n }\r\n\r\n MsftSme.LocalStorageHandler.removeItem(this.instanceKey(instanceId));\r\n\r\n return;\r\n }\r\n\r\n // remove all.\r\n MsftSme.LocalStorageHandler.removeItem(this.indexKey());\r\n for (const index2 of indexData.instances) {\r\n MsftSme.LocalStorageHandler.removeItem(this.instanceKey(index2));\r\n }\r\n\r\n return;\r\n }));\r\n }\r\n\r\n /**\r\n * Gets the key of index data.\r\n */\r\n private indexKey(): string {\r\n return `${this.moduleName}@${this.name}:index`;\r\n }\r\n\r\n /**\r\n * Gets the key of snapshot instance.\r\n *\r\n * @param instanceId the instance Id.\r\n */\r\n private instanceKey(instanceId: number): string {\r\n return `${this.moduleName}@${this.name}:${instanceId}`;\r\n }\r\n\r\n /**\r\n * Reads the index data to enumerate all snapshots.\r\n */\r\n private readIndexData(): { instances: number[] } {\r\n let indexData: { instances: number[] } = null;\r\n const item = MsftSme.LocalStorageHandler.getItem(this.indexKey());\r\n if (item) {\r\n indexData = JSON.parse(item);\r\n } else {\r\n indexData = { instances: [] };\r\n }\r\n\r\n return indexData;\r\n }\r\n\r\n /**\r\n * Writes the index data.\r\n *\r\n * @param indexData the index data.\r\n */\r\n private writeIndexData(indexData: { instances: number[] }): void {\r\n MsftSme.LocalStorageHandler.setItem(this.indexKey(), JSON.stringify(indexData));\r\n }\r\n\r\n /**\r\n * Reads the snapshot of the instance.\r\n *\r\n * @param instanceId the instance ID.\r\n */\r\n private readInstance(instanceId: number): PersistentWorkflowSnapshot {\r\n return JSON.parse(MsftSme.LocalStorageHandler.getItem(this.instanceKey(instanceId)) ?? '{}');\r\n }\r\n\r\n /**\r\n * Writes the snapshot.\r\n *\r\n * @param snapshot the snapshot.\r\n */\r\n private writeInstance(snapshot: PersistentWorkflowSnapshot): void {\r\n MsftSme.LocalStorageHandler.setItem(this.instanceKey(snapshot.instanceId), JSON.stringify(snapshot));\r\n }\r\n}\r\n"]}