@fluidframework/task-manager 2.0.0-rc.1.0.3 → 2.0.0-rc.2.0.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.
- package/{.eslintrc.js → .eslintrc.cjs} +5 -9
- package/{.mocharc.js → .mocharc.cjs} +1 -1
- package/CHANGELOG.md +4 -0
- package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
- package/api-extractor-lint.json +1 -1
- package/api-extractor.json +1 -1
- package/api-report/task-manager.api.md +1 -4
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/package.json +3 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/task-manager-beta.d.ts +2 -0
- package/dist/task-manager-public.d.ts +2 -0
- package/dist/task-manager-untrimmed.d.ts +1 -1
- package/dist/taskManager.d.ts +2 -2
- package/dist/taskManager.d.ts.map +1 -1
- package/dist/taskManager.js +27 -11
- package/dist/taskManager.js.map +1 -1
- package/dist/taskManagerFactory.d.ts +1 -1
- package/dist/taskManagerFactory.d.ts.map +1 -1
- package/dist/taskManagerFactory.js +5 -5
- package/dist/taskManagerFactory.js.map +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/index.d.ts +13 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/{index.mjs → index.js} +2 -2
- package/lib/index.js.map +1 -0
- package/lib/{interfaces.d.mts → interfaces.d.ts} +1 -1
- package/lib/interfaces.d.ts.map +1 -0
- package/lib/{interfaces.mjs → interfaces.js} +1 -1
- package/lib/interfaces.js.map +1 -0
- package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
- package/lib/packageVersion.d.ts.map +1 -0
- package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
- package/lib/packageVersion.js.map +1 -0
- package/lib/{task-manager-alpha.d.mts → task-manager-alpha.d.ts} +7 -0
- package/lib/{task-manager-beta.d.mts → task-manager-beta.d.ts} +9 -0
- package/lib/{task-manager-public.d.mts → task-manager-public.d.ts} +9 -0
- package/lib/{task-manager-untrimmed.d.mts → task-manager-untrimmed.d.ts} +8 -1
- package/lib/{taskManager.d.mts → taskManager.d.ts} +3 -3
- package/lib/taskManager.d.ts.map +1 -0
- package/lib/{taskManager.mjs → taskManager.js} +22 -6
- package/lib/taskManager.js.map +1 -0
- package/lib/{taskManagerFactory.d.mts → taskManagerFactory.d.ts} +2 -2
- package/lib/taskManagerFactory.d.ts.map +1 -0
- package/lib/{taskManagerFactory.mjs → taskManagerFactory.js} +3 -3
- package/lib/taskManagerFactory.js.map +1 -0
- package/lib/test/dirname.cjs +16 -0
- package/lib/test/dirname.cjs.map +1 -0
- package/lib/test/taskManager.fuzz.spec.js +203 -0
- package/lib/test/taskManager.fuzz.spec.js.map +1 -0
- package/lib/test/taskManager.spec.js +845 -0
- package/lib/test/taskManager.spec.js.map +1 -0
- package/lib/test/types/validateTaskManagerPrevious.generated.js +12 -0
- package/lib/test/types/validateTaskManagerPrevious.generated.js.map +1 -0
- package/package.json +44 -57
- package/src/index.ts +2 -2
- package/src/packageVersion.ts +1 -1
- package/src/taskManager.ts +22 -7
- package/src/taskManagerFactory.ts +3 -3
- package/tsconfig.cjs.json +7 -0
- package/tsconfig.json +2 -5
- package/lib/index.d.mts +0 -7
- package/lib/index.d.mts.map +0 -1
- package/lib/index.mjs.map +0 -1
- package/lib/interfaces.d.mts.map +0 -1
- package/lib/interfaces.mjs.map +0 -1
- package/lib/packageVersion.d.mts.map +0 -1
- package/lib/packageVersion.mjs.map +0 -1
- package/lib/taskManager.d.mts.map +0 -1
- package/lib/taskManager.mjs.map +0 -1
- package/lib/taskManagerFactory.d.mts.map +0 -1
- package/lib/taskManagerFactory.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskManager.spec.js","sourceRoot":"","sources":["../../src/test/taskManager.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport {\n\tMockFluidDataStoreRuntime,\n\tMockContainerRuntimeFactory,\n\tMockContainerRuntimeFactoryForReconnection,\n\tMockContainerRuntimeForReconnection,\n\tMockStorage,\n} from \"@fluidframework/test-runtime-utils\";\nimport { AttachState, ReadOnlyInfo } from \"@fluidframework/container-definitions\";\nimport { TaskManager } from \"../taskManager.js\";\nimport { TaskManagerFactory } from \"../taskManagerFactory.js\";\nimport { ITaskManager } from \"../interfaces.js\";\n\nfunction createConnectedTaskManager(id: string, runtimeFactory: MockContainerRuntimeFactory) {\n\t// Create and connect a TaskManager.\n\tconst dataStoreRuntime = new MockFluidDataStoreRuntime();\n\truntimeFactory.createContainerRuntime(dataStoreRuntime);\n\tconst services = {\n\t\tdeltaConnection: dataStoreRuntime.createDeltaConnection(),\n\t\tobjectStorage: new MockStorage(),\n\t};\n\n\tconst taskManager = new TaskManager(id, dataStoreRuntime, TaskManagerFactory.Attributes);\n\ttaskManager.connect(services);\n\treturn taskManager;\n}\n\nfunction createDetachedTaskManager(\n\tid: string,\n\truntimeFactory: MockContainerRuntimeFactory,\n): { taskManager: TaskManager; attach: () => Promise<void> } {\n\t// Create a detached TaskManager.\n\tconst dataStoreRuntime = new MockFluidDataStoreRuntime({ attachState: AttachState.Detached });\n\truntimeFactory.createContainerRuntime(dataStoreRuntime);\n\tconst clientId = dataStoreRuntime.clientId;\n\n\tconst taskManager = new TaskManager(id, dataStoreRuntime, TaskManagerFactory.Attributes);\n\tconst attach = async () => {\n\t\tconst services = {\n\t\t\tdeltaConnection: dataStoreRuntime.createDeltaConnection(),\n\t\t\tobjectStorage: new MockStorage(),\n\t\t};\n\n\t\t// Manually trigger a summarize (should be done automatically when attaching normally)\n\t\tawait taskManager.summarize();\n\n\t\tdataStoreRuntime.setAttachState(AttachState.Attached);\n\t\ttaskManager.connect(services);\n\n\t\t// Ensure clientId is set after attach (might be forced undefined in some tests)\n\t\tdataStoreRuntime.clientId = clientId;\n\t};\n\n\treturn { taskManager, attach };\n}\n\ndescribe(\"TaskManager\", () => {\n\tdescribe(\"Connected state\", () => {\n\t\tlet taskManager1: ITaskManager;\n\t\tlet taskManager2: ITaskManager;\n\t\tlet containerRuntimeFactory: MockContainerRuntimeFactory;\n\n\t\tbeforeEach(() => {\n\t\t\tcontainerRuntimeFactory = new MockContainerRuntimeFactory();\n\t\t\ttaskManager1 = createConnectedTaskManager(\"taskManager1\", containerRuntimeFactory);\n\t\t\ttaskManager2 = createConnectedTaskManager(\"taskManager2\", containerRuntimeFactory);\n\t\t});\n\n\t\tit(\"Can create a connected TaskManager\", () => {\n\t\t\tassert.ok(taskManager1, \"Could not create a task manager\");\n\t\t\tassert.ok(taskManager1.isAttached(), \"TaskManager should be attached\");\n\t\t\tassert.ok((taskManager1 as TaskManager).connected, \"TaskManager should be connected\");\n\t\t});\n\n\t\tdescribe(\"Volunteering for a task\", () => {\n\t\t\tit(\"Can volunteer for a task\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned = await volunteerTaskP;\n\t\t\t\tassert.ok(isAssigned, \"Should resolve true\");\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Can wait for a task\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tconst volunteerTaskP2 = taskManager2.volunteerForTask(taskId);\n\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Task manager 1 should not be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned1 = await volunteerTaskP1;\n\t\t\t\tassert.ok(isAssigned1, \"Should resolve true\");\n\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned2 = await volunteerTaskP2;\n\t\t\t\tassert.ok(isAssigned2, \"Should resolve true\");\n\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Task manager 1 should not be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Rejects the promise if abandon before ack\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\t// Will reject due to exiting the queue without first acquiring task\n\t\t\t\t// Promise should be settled already prior to processing messages\n\t\t\t\tawait assert.rejects(volunteerTaskP);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Rejects the promise if abandon after ack but before acquire\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tconst volunteerTaskP2 = taskManager2.volunteerForTask(taskId);\n\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Task manager 1 should not be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned = await volunteerTaskP1;\n\t\t\t\tassert.ok(isAssigned, \"Should resolve true\");\n\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\ttaskManager2.abandon(taskId);\n\t\t\t\t// Will reject due to exiting the queue without first acquiring task\n\t\t\t\t// Promise should be settled already prior to processing messages\n\t\t\t\tawait assert.rejects(volunteerTaskP2);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(!taskManager2.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Should not be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Can abandon and immediately attempt to reacquire a task\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned = await volunteerTaskP;\n\t\t\t\tassert.ok(isAssigned, \"Should resolve true\");\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tconst revolunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned2 = await revolunteerTaskP;\n\t\t\t\tassert.ok(isAssigned2, \"Should resolve true\");\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Can attempt to volunteer for task twice and abandon twice (after ack)\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned1 = await volunteerTaskP1;\n\t\t\t\tassert.ok(isAssigned1, \"Should resolve true\");\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\n\t\t\t\tconst volunteerTaskP2 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned2 = await volunteerTaskP2;\n\t\t\t\tassert.ok(isAssigned2, \"Should resolve true\");\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Can attempt to lock task twice and abandon twice (before ack)\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\n\t\t\t\tconst volunteerTaskP2 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned1 = await volunteerTaskP1;\n\t\t\t\tassert.ok(isAssigned1, \"Should resolve true\");\n\t\t\t\tconst isAssigned2 = await volunteerTaskP2;\n\t\t\t\tassert.ok(isAssigned2, \"Should resolve true\");\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Can volunteer for a task immediately after it was completed\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tawait volunteerTaskP;\n\n\t\t\t\ttaskManager2.subscribeToTask(taskId);\n\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\tconst volunteerTaskP2 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tawait volunteerTaskP2;\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"taskManager1 should be assigned\");\n\t\t\t\tassert.ok(!taskManager2.queued(taskId), \"taskManager 2 should not be assigned\");\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Subscribing to a task\", () => {\n\t\t\tit(\"Can subscribe to a task\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Task manager 1 should not be assigned\");\n\t\t\t\tassert.ok(taskManager1.subscribed(taskId), \"Task manager 1 should be subscribed\");\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\tassert.ok(taskManager1.subscribed(taskId), \"Task manager 1 should be subscribed\");\n\t\t\t});\n\n\t\t\tit(\"Can abandon a subscribed task\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Task manager 1 should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Task manager 1 should not be assigned\");\n\t\t\t\tassert.ok(\n\t\t\t\t\t!taskManager1.subscribed(taskId),\n\t\t\t\t\t\"Task manager 1 should not be subscribed\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"Can subscribe and wait for a task\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\ttaskManager2.subscribeToTask(taskId);\n\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Task manager 1 should not be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(taskManager2.assigned(taskId), \"Task manager 2 should be assigned\");\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Completing tasks\", () => {\n\t\t\tit(\"Can complete a task\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tawait volunteerTaskP;\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\n\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Rejects the promise if you try to complete without being assigned\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tvoid taskManager2.volunteerForTask(taskId);\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tawait volunteerTaskP1;\n\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\tassert.throws(() => {\n\t\t\t\t\ttaskManager2.complete(taskId);\n\t\t\t\t}, \"Should throw error\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Can complete a task and remove other clients from queue\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tconst volunteerTaskP2 = taskManager2.volunteerForTask(taskId);\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned1 = await volunteerTaskP1;\n\t\t\t\tassert.ok(isAssigned1, \"Should resolve true\");\n\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned2 = await volunteerTaskP2;\n\t\t\t\tassert.ok(!isAssigned2, \"Should resolve false\");\n\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Task manager 1 should not be queued\");\n\t\t\t\tassert.ok(!taskManager2.queued(taskId), \"Task manager 2 should not be queued\");\n\t\t\t});\n\n\t\t\tit(\"Can complete a task and remove other subscribed clients from queue\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\ttaskManager2.subscribeToTask(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Task manager 1 should not be queued\");\n\t\t\t\tassert.ok(!taskManager2.queued(taskId), \"Task manager 2 should not be queued\");\n\t\t\t});\n\n\t\t\tit(\"Can emit completed event\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\ttaskManager2.subscribeToTask(taskId);\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tawait volunteerTaskP1;\n\n\t\t\t\tlet taskManager1EventFired = false;\n\t\t\t\tlet taskManager2EventFired = false;\n\t\t\t\ttaskManager1.on(\"completed\", (completedTaskId: string) => {\n\t\t\t\t\tassert.ok(completedTaskId === taskId, \"taskId should match\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1EventFired,\n\t\t\t\t\t\t\"Should only fire completed event once on taskManager1\",\n\t\t\t\t\t);\n\t\t\t\t\ttaskManager1EventFired = true;\n\t\t\t\t});\n\t\t\t\ttaskManager2.on(\"completed\", (completedTaskId: string) => {\n\t\t\t\t\tassert.ok(completedTaskId === taskId, \"taskId should match\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager2EventFired,\n\t\t\t\t\t\t\"Should only fire completed event once on taskManager2\",\n\t\t\t\t\t);\n\t\t\t\t\ttaskManager2EventFired = true;\n\t\t\t\t});\n\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(\n\t\t\t\t\ttaskManager1EventFired,\n\t\t\t\t\t\"Should have raised completed event on taskManager1\",\n\t\t\t\t);\n\t\t\t\tassert.ok(\n\t\t\t\t\ttaskManager2EventFired,\n\t\t\t\t\t\"Should have raised completed event on taskManager2\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"Can complete a task with a pending volunteer op\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tawait volunteerTaskP1;\n\n\t\t\t\tlet taskManager1EventFired = false;\n\t\t\t\tlet taskManager2EventFired = false;\n\t\t\t\ttaskManager1.on(\"completed\", (completedTaskId: string) => {\n\t\t\t\t\tassert.ok(completedTaskId === taskId, \"taskId should match\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1EventFired,\n\t\t\t\t\t\t\"Should only fire completed event once on taskManager1\",\n\t\t\t\t\t);\n\t\t\t\t\ttaskManager1EventFired = true;\n\t\t\t\t});\n\t\t\t\ttaskManager2.on(\"completed\", (completedTaskId: string) => {\n\t\t\t\t\tassert.ok(completedTaskId === taskId, \"taskId should match\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager2EventFired,\n\t\t\t\t\t\t\"Should only fire completed event once on taskManager2\",\n\t\t\t\t\t);\n\t\t\t\t\ttaskManager2EventFired = true;\n\t\t\t\t});\n\n\t\t\t\tconst volunteerTaskP2 = taskManager2.volunteerForTask(taskId);\n\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tawait volunteerTaskP2;\n\n\t\t\t\tassert.ok(\n\t\t\t\t\ttaskManager1EventFired,\n\t\t\t\t\t\"Should have raised completed event on taskManager1\",\n\t\t\t\t);\n\t\t\t\tassert.ok(\n\t\t\t\t\ttaskManager2EventFired,\n\t\t\t\t\t\"Should have raised completed event on taskManager2\",\n\t\t\t\t);\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Task manager 1 should not be queued\");\n\t\t\t\tassert.ok(!taskManager2.queued(taskId), \"Task manager 2 should not be queued\");\n\t\t\t});\n\t\t});\n\t});\n\n\t// Note: Since read/write modes are not yet implemented in mocks, tests are limited to simulate these scenarios.\n\tdescribe(\"Read/Write Mode\", () => {\n\t\tlet taskManager1: ITaskManager;\n\t\tlet containerRuntimeFactory: MockContainerRuntimeFactoryForReconnection;\n\t\tlet containerRuntime1: MockContainerRuntimeForReconnection;\n\n\t\tconst setReadOnlyInfo = (readOnlyInfo: ReadOnlyInfo) => {\n\t\t\t(taskManager1 as any).runtime.deltaManager.readOnlyInfo = readOnlyInfo;\n\t\t\t// Force connection to simulate read mode (TaskManager considered the client disconnected in read mode)\n\t\t\tcontainerRuntime1.connected = readOnlyInfo.readonly === false;\n\t\t};\n\n\t\tbeforeEach(() => {\n\t\t\tcontainerRuntimeFactory = new MockContainerRuntimeFactoryForReconnection();\n\t\t\tconst dataStoreRuntime1 = new MockFluidDataStoreRuntime();\n\t\t\tcontainerRuntime1 = containerRuntimeFactory.createContainerRuntime(dataStoreRuntime1);\n\t\t\tconst services1 = {\n\t\t\t\tdeltaConnection: dataStoreRuntime1.createDeltaConnection(),\n\t\t\t\tobjectStorage: new MockStorage(),\n\t\t\t};\n\t\t\ttaskManager1 = new TaskManager(\n\t\t\t\t\"task-manager-1\",\n\t\t\t\tdataStoreRuntime1,\n\t\t\t\tTaskManagerFactory.Attributes,\n\t\t\t);\n\t\t\ttaskManager1.connect(services1);\n\t\t});\n\n\t\tit(\"Immediately rejects attempts to volunteer in read mode\", async () => {\n\t\t\tconst taskId = \"taskId\";\n\t\t\tsetReadOnlyInfo({\n\t\t\t\treadonly: true,\n\t\t\t\tpermissions: false,\n\t\t\t\tforced: false,\n\t\t\t\tstorageOnly: false,\n\t\t\t});\n\n\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\tawait assert.rejects(volunteerTaskP);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t});\n\n\t\tit(\"Immediately rejects attempts to volunteer with read-only permissions\", async () => {\n\t\t\tconst taskId = \"taskId\";\n\t\t\tsetReadOnlyInfo({\n\t\t\t\treadonly: true,\n\t\t\t\tpermissions: true,\n\t\t\t\tforced: false,\n\t\t\t\tstorageOnly: false,\n\t\t\t});\n\n\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\tawait assert.rejects(volunteerTaskP);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t});\n\n\t\tit(\"Can subscribe while in read mode\", async () => {\n\t\t\tconst taskId = \"taskId\";\n\t\t\tsetReadOnlyInfo({\n\t\t\t\treadonly: true,\n\t\t\t\tpermissions: false,\n\t\t\t\tforced: false,\n\t\t\t\tstorageOnly: false,\n\t\t\t});\n\n\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\tassert.ok(taskManager1.subscribed(taskId), \"Should be subscribed\");\n\n\t\t\tsetReadOnlyInfo({ readonly: false });\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\tassert.ok(taskManager1.subscribed(taskId), \"Should be subscribed\");\n\t\t});\n\n\t\tit(\"Immediately rejects attempts to subscribe with read-only permissions\", async () => {\n\t\t\tconst taskId = \"taskId\";\n\t\t\tsetReadOnlyInfo({\n\t\t\t\treadonly: true,\n\t\t\t\tpermissions: true,\n\t\t\t\tforced: false,\n\t\t\t\tstorageOnly: false,\n\t\t\t});\n\n\t\t\tassert.throws(() => {\n\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t}, \"Should throw error if subscribing with read-only permissions\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\tassert.ok(!taskManager1.subscribed(taskId), \"Should not be subscribed\");\n\t\t});\n\t});\n\n\tdescribe(\"Detached/Attach\", () => {\n\t\tlet taskManager1: TaskManager;\n\t\tlet attachTaskManager1: () => Promise<void>;\n\t\t// let taskManager2: ITaskManager;\n\t\t// let attachTaskManager2: () => void;\n\t\tlet containerRuntimeFactory: MockContainerRuntimeFactory;\n\t\tconst placeholderClientId = \"placeholder\";\n\n\t\tbeforeEach(() => {\n\t\t\tcontainerRuntimeFactory = new MockContainerRuntimeFactory();\n\t\t\tconst createResponse1 = createDetachedTaskManager(\n\t\t\t\t\"taskManager1\",\n\t\t\t\tcontainerRuntimeFactory,\n\t\t\t);\n\t\t\ttaskManager1 = createResponse1.taskManager;\n\t\t\tattachTaskManager1 = createResponse1.attach;\n\t\t});\n\n\t\tit(\"Can create a detached TaskManager and attach later\", async () => {\n\t\t\tassert.ok(!taskManager1.isAttached(), \"taskManager1 should be detached\");\n\t\t\tawait attachTaskManager1();\n\t\t\tassert.ok(taskManager1.isAttached(), \"taskManager1 should be attached\");\n\t\t});\n\n\t\tdescribe(\"Behavior before attach\", () => {\n\t\t\tdescribe(\"Volunteering for a task\", () => {\n\t\t\t\tit(\"Can volunteer for a task before attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP;\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t\t});\n\n\t\t\t\tit(\"Can volunteer and abandon a task before attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP;\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Subscribing to a task\", () => {\n\t\t\t\tit(\"Can subscribe to a task before attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tit(\"Can abandon a subscribed task before attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Task manager 1 should not be queued\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1.assigned(taskId),\n\t\t\t\t\t\t\"Task manager 1 should not be assigned\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should not be subscribed\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Completing tasks\", () => {\n\t\t\t\tit(\"Can complete a task before attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP;\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\n\t\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t});\n\n\t\t\t\tit(\"Can emit completed event before attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP1;\n\n\t\t\t\t\tlet taskManager1EventFired = false;\n\t\t\t\t\ttaskManager1.once(\"completed\", (completedTaskId: string) => {\n\t\t\t\t\t\tassert.ok(completedTaskId === taskId, \"taskId should match\");\n\t\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t\t!taskManager1EventFired,\n\t\t\t\t\t\t\t\"Should only fire completed event once on taskManager1\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttaskManager1EventFired = true;\n\t\t\t\t\t});\n\t\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1EventFired,\n\t\t\t\t\t\t\"Should have raised completed event on taskManager1\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Behavior after attaching\", () => {\n\t\t\tdescribe(\"Volunteering for a task\", () => {\n\t\t\t\tit(\"Will keep task assignment after attaching if clientId is defined\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP;\n\t\t\t\t\tawait attachTaskManager1();\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t\t});\n\n\t\t\t\tit(\"Will lose task assignment after attaching if clientId is undefined\", async () => {\n\t\t\t\t\t(taskManager1 as any).runtime.clientId = undefined;\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP;\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t\t\tassert.strictEqual(\n\t\t\t\t\t\t(taskManager1 as any).taskQueues.get(taskId)?.[0],\n\t\t\t\t\t\tplaceholderClientId,\n\t\t\t\t\t\t\"taskQueue should have placeholder clientId\",\n\t\t\t\t\t);\n\n\t\t\t\t\tlet taskManager1EventFired = false;\n\t\t\t\t\ttaskManager1.on(\"lost\", (completedTaskId: string) => {\n\t\t\t\t\t\tassert.ok(completedTaskId === taskId, \"taskId should match\");\n\t\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t\t!taskManager1EventFired,\n\t\t\t\t\t\t\t\"Should only fire lost event once on taskManager1\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttaskManager1EventFired = true;\n\t\t\t\t\t});\n\t\t\t\t\tawait attachTaskManager1();\n\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1EventFired,\n\t\t\t\t\t\t\"Should have raised lost event on taskManager1\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t(taskManager1 as any).taskQueues.size === 0,\n\t\t\t\t\t\t\"taskQueue should be empty\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Subscribing to a task\", () => {\n\t\t\t\tit(\"Can subscribe to a task and stay assigned/subscribed after attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait attachTaskManager1();\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tit(\"Can subscribe to a task and stay subscribed after attach if clientId was undefined\", async () => {\n\t\t\t\t\t(taskManager1 as any).runtime.clientId = undefined;\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tlet taskManager1EventFired = false;\n\t\t\t\t\ttaskManager1.on(\"lost\", (completedTaskId: string) => {\n\t\t\t\t\t\tassert.ok(completedTaskId === taskId, \"taskId should match\");\n\t\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t\t!taskManager1EventFired,\n\t\t\t\t\t\t\t\"Should only fire lost event once on taskManager1\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttaskManager1EventFired = true;\n\t\t\t\t\t});\n\n\t\t\t\t\tawait attachTaskManager1();\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1.assigned(taskId),\n\t\t\t\t\t\t\"Task manager 1 should not be assigned\",\n\t\t\t\t\t);\n\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1EventFired,\n\t\t\t\t\t\t\"Should have raised lost event on taskManager1\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t(taskManager1 as any).taskQueues.get(taskId)?.length !== 0,\n\t\t\t\t\t\t\"taskQueue should not be empty\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.notStrictEqual(\n\t\t\t\t\t\t(taskManager1 as any).taskQueues.get(taskId)?.[0],\n\t\t\t\t\t\tplaceholderClientId,\n\t\t\t\t\t\t\"taskQueue should not have placeholder clientId\",\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\t// todo AB#7310\n\t\t\t\tit.skip(\"Can abandon a subscribed task after attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait attachTaskManager1();\n\t\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Task manager 1 should not be queued\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1.assigned(taskId),\n\t\t\t\t\t\t\"Task manager 1 should not be assigned\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should not be subscribed\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Completing tasks\", () => {\n\t\t\t\tit(\"Can complete a task after attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP;\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t\t\tawait attachTaskManager1();\n\t\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t});\n\n\t\t\t\tit(\"Can emit completed event after attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP1;\n\t\t\t\t\tawait attachTaskManager1();\n\t\t\t\t\tlet taskManager1EventFired = false;\n\t\t\t\t\ttaskManager1.on(\"completed\", (completedTaskId: string) => {\n\t\t\t\t\t\tassert.ok(completedTaskId === taskId, \"taskId should match\");\n\t\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t\t!taskManager1EventFired,\n\t\t\t\t\t\t\t\"Should only fire completed event once on taskManager1\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttaskManager1EventFired = true;\n\t\t\t\t\t});\n\t\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1EventFired,\n\t\t\t\t\t\t\"Should have raised completed event on taskManager1\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"Disconnect/Reconnect\", () => {\n\t\tlet containerRuntimeFactory: MockContainerRuntimeFactoryForReconnection;\n\t\tlet containerRuntime1: MockContainerRuntimeForReconnection;\n\t\tlet containerRuntime2: MockContainerRuntimeForReconnection;\n\t\tlet taskManager1: TaskManager;\n\t\tlet taskManager2: TaskManager;\n\n\t\tbeforeEach(async () => {\n\t\t\tcontainerRuntimeFactory = new MockContainerRuntimeFactoryForReconnection();\n\n\t\t\t// Create the first TaskManager.\n\t\t\tconst dataStoreRuntime1 = new MockFluidDataStoreRuntime();\n\t\t\tcontainerRuntime1 = containerRuntimeFactory.createContainerRuntime(dataStoreRuntime1);\n\t\t\tconst services1 = {\n\t\t\t\tdeltaConnection: dataStoreRuntime1.createDeltaConnection(),\n\t\t\t\tobjectStorage: new MockStorage(),\n\t\t\t};\n\t\t\ttaskManager1 = new TaskManager(\n\t\t\t\t\"task-manager-1\",\n\t\t\t\tdataStoreRuntime1,\n\t\t\t\tTaskManagerFactory.Attributes,\n\t\t\t);\n\t\t\ttaskManager1.connect(services1);\n\n\t\t\t// Create the second TaskManager.\n\t\t\tconst dataStoreRuntime2 = new MockFluidDataStoreRuntime();\n\t\t\tcontainerRuntime2 = containerRuntimeFactory.createContainerRuntime(dataStoreRuntime2);\n\t\t\tconst services2 = {\n\t\t\t\tdeltaConnection: dataStoreRuntime2.createDeltaConnection(),\n\t\t\t\tobjectStorage: new MockStorage(),\n\t\t\t};\n\t\t\ttaskManager2 = new TaskManager(\n\t\t\t\t\"task-manager-2\",\n\t\t\t\tdataStoreRuntime2,\n\t\t\t\tTaskManagerFactory.Attributes,\n\t\t\t);\n\t\t\ttaskManager2.connect(services2);\n\t\t});\n\n\t\tit(\"Can create a TaskManager while disconnected\", () => {\n\t\t\tcontainerRuntime1.connected = false;\n\t\t\tassert.ok(taskManager1, \"Could not create a task manager\");\n\t\t\tassert.ok(taskManager1.isAttached(), \"TaskManager should be attached\");\n\t\t\tassert.ok(!taskManager1.connected, \"TaskManager should be disconnected\");\n\t\t});\n\n\t\tdescribe(\"Behavior transitioning to disconnect\", () => {\n\t\t\tdescribe(\"Volunteering for a task\", () => {\n\t\t\t\tit(\"Disconnect while assigned: Raises a lost event and loses the task assignment\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tconst isAssigned = await volunteerTaskP;\n\t\t\t\t\tassert.ok(isAssigned, \"Should resolve true\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\n\t\t\t\t\tlet lostRaised = false;\n\t\t\t\t\ttaskManager1.once(\"lost\", () => {\n\t\t\t\t\t\tlostRaised = true;\n\t\t\t\t\t});\n\n\t\t\t\t\tcontainerRuntime1.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t\tassert.ok(lostRaised, \"Should have raised a lost event\");\n\t\t\t\t});\n\n\t\t\t\tit(\"Disconnect while queued: Rejects the volunteerForTask promise and exits the queue\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tconst volunteerTaskP2 = taskManager2.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tconst isAssigned = await volunteerTaskP1;\n\t\t\t\t\tassert.ok(isAssigned, \"Should resolve true\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 Should be assigned\");\n\t\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager2.assigned(taskId),\n\t\t\t\t\t\t\"Task manager 2 should not be assigned\",\n\t\t\t\t\t);\n\n\t\t\t\t\tcontainerRuntime2.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait assert.rejects(volunteerTaskP2, \"Should have rejected the P2 promise\");\n\t\t\t\t\tassert.ok(!taskManager2.queued(taskId), \"Task manager 2 should not be queued\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager2.assigned(taskId),\n\t\t\t\t\t\t\"Task manager 2 should not be assigned\",\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tit(\"Disconnect while queued: Removed from the queue for other clients\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\ttaskManager2.subscribeToTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP1;\n\t\t\t\t\tconst clientId1 = containerRuntime1.clientId;\n\t\t\t\t\tconst clientId2 = containerRuntime2.clientId;\n\n\t\t\t\t\tassert.deepEqual(\n\t\t\t\t\t\t(taskManager1 as any).taskQueues.get(taskId),\n\t\t\t\t\t\t[clientId1, clientId2],\n\t\t\t\t\t\t\"Task queue should have both clients\",\n\t\t\t\t\t);\n\n\t\t\t\t\tcontainerRuntime2.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\tassert.deepEqual(\n\t\t\t\t\t\t(taskManager1 as any).taskQueues.get(taskId),\n\t\t\t\t\t\t[clientId1],\n\t\t\t\t\t\t\"Task queue should only have client 1\",\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tit(\"Disconnect while pending: Rejects the volunteerForTask promise\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntime1.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait assert.rejects(volunteerTaskP, \"Should have rejected the promise\");\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Subscribing to a task\", () => {});\n\n\t\t\tdescribe(\"Completing tasks\", () => {});\n\t\t});\n\n\t\tdescribe(\"Behavior while disconnected\", () => {\n\t\t\tdescribe(\"Volunteering for a task\", () => {\n\t\t\t\tit(\"Immediately rejects attempts to lock task and throws on abandon\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tcontainerRuntime1.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t\tawait assert.rejects(volunteerTaskP);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Subscribing to a task\", () => {\n\t\t\t\tit(\"Can subscribe while disconnected\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tcontainerRuntime1.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\n\t\t\t\t\tcontainerRuntime1.connected = true;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tit(\"Can abandon subscription while disconnected\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tcontainerRuntime1.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\tcontainerRuntime1.connected = true;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should not be subscribed\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Completing tasks\", () => {\n\t\t\t\tit(\"Immediately throws on attempt to complete task\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tcontainerRuntime1.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\tassert.throws(() => {\n\t\t\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\t\t}, \"Should throw error\");\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Behavior transitioning to connected\", () => {\n\t\t\tdescribe(\"Volunteering for a task\", () => {\n\t\t\t\tit(\"Does not re-attempt to enter the queue for un-ack'd ops\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntime1.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait assert.rejects(volunteerTaskP, \"Should have rejected the promise\");\n\t\t\t\t\tcontainerRuntime1.connected = true;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Subscribing to a task\", () => {\n\t\t\t\tit(\"Does re-attempt to enter the queue when subscribed\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\tcontainerRuntime1.connected = false;\n\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Task manager 1 should not be queued\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1.assigned(taskId),\n\t\t\t\t\t\t\"Task manager 1 should not be assigned\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\n\t\t\t\t\tcontainerRuntime1.connected = true;\n\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1.assigned(taskId),\n\t\t\t\t\t\t\"Task manager 1 should not be assigned\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Completing tasks\", () => {});\n\t\t});\n\t});\n});\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
use_current_InterfaceDeclaration_ITaskManager(get_old_InterfaceDeclaration_ITaskManager());
|
|
2
|
+
use_old_InterfaceDeclaration_ITaskManager(get_current_InterfaceDeclaration_ITaskManager());
|
|
3
|
+
use_current_InterfaceDeclaration_ITaskManagerEvents(get_old_InterfaceDeclaration_ITaskManagerEvents());
|
|
4
|
+
use_old_InterfaceDeclaration_ITaskManagerEvents(get_current_InterfaceDeclaration_ITaskManagerEvents());
|
|
5
|
+
use_current_TypeAliasDeclaration_TaskEventListener(get_old_TypeAliasDeclaration_TaskEventListener());
|
|
6
|
+
use_old_TypeAliasDeclaration_TaskEventListener(get_current_TypeAliasDeclaration_TaskEventListener());
|
|
7
|
+
use_current_ClassDeclaration_TaskManager(get_old_ClassDeclaration_TaskManager());
|
|
8
|
+
use_old_ClassDeclaration_TaskManager(
|
|
9
|
+
// @ts-expect-error compatibility expected to be broken
|
|
10
|
+
get_current_ClassDeclaration_TaskManager());
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=validateTaskManagerPrevious.generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateTaskManagerPrevious.generated.js","sourceRoot":"","sources":["../../../src/test/types/validateTaskManagerPrevious.generated.ts"],"names":[],"mappings":"AAgCA,6CAA6C,CACzC,yCAAyC,EAAE,CAAC,CAAC;AAWjD,yCAAyC,CACrC,6CAA6C,EAAE,CAAC,CAAC;AAWrD,mDAAmD,CAC/C,+CAA+C,EAAE,CAAC,CAAC;AAWvD,+CAA+C,CAC3C,mDAAmD,EAAE,CAAC,CAAC;AAW3D,kDAAkD,CAC9C,8CAA8C,EAAE,CAAC,CAAC;AAWtD,8CAA8C,CAC1C,kDAAkD,EAAE,CAAC,CAAC;AAW1D,wCAAwC,CACpC,oCAAoC,EAAE,CAAC,CAAC;AAW5C,oCAAoC;AAChC,uDAAuD;AACvD,wCAAwC,EAAE,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n/*\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.\n * Generated by fluid-type-test-generator in @fluidframework/build-tools.\n */\nimport type * as old from \"@fluidframework/task-manager-previous\";\nimport type * as current from \"../../index.js\";\n\n\n// See 'build-tools/src/type-test-generator/compatibility.ts' for more information.\ntype TypeOnly<T> = T extends number\n\t? number\n\t: T extends string\n\t? string\n\t: T extends boolean | bigint | symbol\n\t? T\n\t: {\n\t\t\t[P in keyof T]: TypeOnly<T[P]>;\n\t };\n\n/*\n* Validate forward compat by using old type in place of current type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"InterfaceDeclaration_ITaskManager\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_ITaskManager():\n TypeOnly<old.ITaskManager>;\ndeclare function use_current_InterfaceDeclaration_ITaskManager(\n use: TypeOnly<current.ITaskManager>): void;\nuse_current_InterfaceDeclaration_ITaskManager(\n get_old_InterfaceDeclaration_ITaskManager());\n\n/*\n* Validate back compat by using current type in place of old type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"InterfaceDeclaration_ITaskManager\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_ITaskManager():\n TypeOnly<current.ITaskManager>;\ndeclare function use_old_InterfaceDeclaration_ITaskManager(\n use: TypeOnly<old.ITaskManager>): void;\nuse_old_InterfaceDeclaration_ITaskManager(\n get_current_InterfaceDeclaration_ITaskManager());\n\n/*\n* Validate forward compat by using old type in place of current type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"InterfaceDeclaration_ITaskManagerEvents\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_ITaskManagerEvents():\n TypeOnly<old.ITaskManagerEvents>;\ndeclare function use_current_InterfaceDeclaration_ITaskManagerEvents(\n use: TypeOnly<current.ITaskManagerEvents>): void;\nuse_current_InterfaceDeclaration_ITaskManagerEvents(\n get_old_InterfaceDeclaration_ITaskManagerEvents());\n\n/*\n* Validate back compat by using current type in place of old type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"InterfaceDeclaration_ITaskManagerEvents\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_ITaskManagerEvents():\n TypeOnly<current.ITaskManagerEvents>;\ndeclare function use_old_InterfaceDeclaration_ITaskManagerEvents(\n use: TypeOnly<old.ITaskManagerEvents>): void;\nuse_old_InterfaceDeclaration_ITaskManagerEvents(\n get_current_InterfaceDeclaration_ITaskManagerEvents());\n\n/*\n* Validate forward compat by using old type in place of current type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"TypeAliasDeclaration_TaskEventListener\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_TypeAliasDeclaration_TaskEventListener():\n TypeOnly<old.TaskEventListener>;\ndeclare function use_current_TypeAliasDeclaration_TaskEventListener(\n use: TypeOnly<current.TaskEventListener>): void;\nuse_current_TypeAliasDeclaration_TaskEventListener(\n get_old_TypeAliasDeclaration_TaskEventListener());\n\n/*\n* Validate back compat by using current type in place of old type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"TypeAliasDeclaration_TaskEventListener\": {\"backCompat\": false}\n*/\ndeclare function get_current_TypeAliasDeclaration_TaskEventListener():\n TypeOnly<current.TaskEventListener>;\ndeclare function use_old_TypeAliasDeclaration_TaskEventListener(\n use: TypeOnly<old.TaskEventListener>): void;\nuse_old_TypeAliasDeclaration_TaskEventListener(\n get_current_TypeAliasDeclaration_TaskEventListener());\n\n/*\n* Validate forward compat by using old type in place of current type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"ClassDeclaration_TaskManager\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_ClassDeclaration_TaskManager():\n TypeOnly<old.TaskManager>;\ndeclare function use_current_ClassDeclaration_TaskManager(\n use: TypeOnly<current.TaskManager>): void;\nuse_current_ClassDeclaration_TaskManager(\n get_old_ClassDeclaration_TaskManager());\n\n/*\n* Validate back compat by using current type in place of old type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"ClassDeclaration_TaskManager\": {\"backCompat\": false}\n*/\ndeclare function get_current_ClassDeclaration_TaskManager():\n TypeOnly<current.TaskManager>;\ndeclare function use_old_ClassDeclaration_TaskManager(\n use: TypeOnly<old.TaskManager>): void;\nuse_old_ClassDeclaration_TaskManager(\n // @ts-expect-error compatibility expected to be broken\n get_current_ClassDeclaration_TaskManager());\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluidframework/task-manager",
|
|
3
|
-
"version": "2.0.0-rc.
|
|
3
|
+
"version": "2.0.0-rc.2.0.0",
|
|
4
4
|
"description": "Distributed data structure for queueing exclusive tasks",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -11,60 +11,40 @@
|
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"author": "Microsoft and contributors",
|
|
13
13
|
"sideEffects": false,
|
|
14
|
+
"type": "module",
|
|
14
15
|
"exports": {
|
|
15
16
|
".": {
|
|
16
17
|
"import": {
|
|
17
|
-
"types": "./lib/index.d.
|
|
18
|
-
"default": "./lib/index.
|
|
18
|
+
"types": "./lib/index.d.ts",
|
|
19
|
+
"default": "./lib/index.js"
|
|
19
20
|
},
|
|
20
21
|
"require": {
|
|
21
22
|
"types": "./dist/index.d.ts",
|
|
22
23
|
"default": "./dist/index.js"
|
|
23
24
|
}
|
|
24
25
|
},
|
|
25
|
-
"./
|
|
26
|
-
"import": {
|
|
27
|
-
"types": "./lib/task-manager-alpha.d.mts",
|
|
28
|
-
"default": "./lib/index.mjs"
|
|
29
|
-
},
|
|
30
|
-
"require": {
|
|
31
|
-
"types": "./dist/task-manager-alpha.d.ts",
|
|
32
|
-
"default": "./dist/index.js"
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
"./beta": {
|
|
26
|
+
"./public": {
|
|
36
27
|
"import": {
|
|
37
|
-
"types": "./lib/task-manager-
|
|
38
|
-
"default": "./lib/index.
|
|
28
|
+
"types": "./lib/task-manager-public.d.ts",
|
|
29
|
+
"default": "./lib/index.js"
|
|
39
30
|
},
|
|
40
31
|
"require": {
|
|
41
|
-
"types": "./dist/task-manager-
|
|
32
|
+
"types": "./dist/task-manager-public.d.ts",
|
|
42
33
|
"default": "./dist/index.js"
|
|
43
34
|
}
|
|
44
35
|
},
|
|
45
36
|
"./internal": {
|
|
46
37
|
"import": {
|
|
47
|
-
"types": "./lib/index.d.
|
|
48
|
-
"default": "./lib/index.
|
|
38
|
+
"types": "./lib/index.d.ts",
|
|
39
|
+
"default": "./lib/index.js"
|
|
49
40
|
},
|
|
50
41
|
"require": {
|
|
51
42
|
"types": "./dist/index.d.ts",
|
|
52
43
|
"default": "./dist/index.js"
|
|
53
44
|
}
|
|
54
|
-
},
|
|
55
|
-
"./public": {
|
|
56
|
-
"import": {
|
|
57
|
-
"types": "./lib/task-manager-public.d.mts",
|
|
58
|
-
"default": "./lib/index.mjs"
|
|
59
|
-
},
|
|
60
|
-
"require": {
|
|
61
|
-
"types": "./dist/task-manager-public.d.ts",
|
|
62
|
-
"default": "./dist/index.js"
|
|
63
|
-
}
|
|
64
45
|
}
|
|
65
46
|
},
|
|
66
47
|
"main": "dist/index.js",
|
|
67
|
-
"module": "lib/index.mjs",
|
|
68
48
|
"types": "dist/index.d.ts",
|
|
69
49
|
"c8": {
|
|
70
50
|
"all": true,
|
|
@@ -87,35 +67,35 @@
|
|
|
87
67
|
"temp-directory": "nyc/.nyc_output"
|
|
88
68
|
},
|
|
89
69
|
"dependencies": {
|
|
90
|
-
"@
|
|
91
|
-
"@fluidframework/container-
|
|
92
|
-
"@fluidframework/
|
|
93
|
-
"@fluidframework/core-
|
|
94
|
-
"@fluidframework/
|
|
95
|
-
"@fluidframework/
|
|
96
|
-
"@fluidframework/
|
|
97
|
-
"@fluidframework/
|
|
98
|
-
"@fluidframework/
|
|
99
|
-
"
|
|
70
|
+
"@fluid-internal/client-utils": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0",
|
|
71
|
+
"@fluidframework/container-definitions": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0",
|
|
72
|
+
"@fluidframework/container-runtime-definitions": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0",
|
|
73
|
+
"@fluidframework/core-interfaces": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0",
|
|
74
|
+
"@fluidframework/core-utils": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0",
|
|
75
|
+
"@fluidframework/datastore-definitions": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0",
|
|
76
|
+
"@fluidframework/driver-utils": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0",
|
|
77
|
+
"@fluidframework/protocol-definitions": "^3.2.0",
|
|
78
|
+
"@fluidframework/runtime-definitions": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0",
|
|
79
|
+
"@fluidframework/shared-object-base": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0"
|
|
100
80
|
},
|
|
101
81
|
"devDependencies": {
|
|
102
82
|
"@arethetypeswrong/cli": "^0.13.3",
|
|
103
|
-
"@fluid-
|
|
104
|
-
"@fluid-private/test-
|
|
105
|
-
"@fluid-
|
|
83
|
+
"@fluid-internal/mocha-test-setup": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0",
|
|
84
|
+
"@fluid-private/stochastic-test-utils": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0",
|
|
85
|
+
"@fluid-private/test-dds-utils": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0",
|
|
86
|
+
"@fluid-tools/build-cli": "^0.34.0",
|
|
106
87
|
"@fluidframework/build-common": "^2.0.3",
|
|
107
|
-
"@fluidframework/build-tools": "^0.
|
|
108
|
-
"@fluidframework/eslint-config-fluid": "^
|
|
109
|
-
"@fluidframework/mocha-test-setup": ">=2.0.0-rc.1.0.3 <2.0.0-rc.1.1.0",
|
|
88
|
+
"@fluidframework/build-tools": "^0.34.0",
|
|
89
|
+
"@fluidframework/eslint-config-fluid": "^4.0.0",
|
|
110
90
|
"@fluidframework/task-manager-previous": "npm:@fluidframework/task-manager@2.0.0-internal.8.0.0",
|
|
111
|
-
"@fluidframework/test-runtime-utils": ">=2.0.0-rc.
|
|
112
|
-
"@microsoft/api-extractor": "^7.
|
|
91
|
+
"@fluidframework/test-runtime-utils": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0",
|
|
92
|
+
"@microsoft/api-extractor": "^7.42.3",
|
|
113
93
|
"@types/mocha": "^9.1.1",
|
|
114
94
|
"@types/node": "^18.19.0",
|
|
115
95
|
"c8": "^8.0.1",
|
|
116
96
|
"copyfiles": "^2.4.1",
|
|
117
97
|
"cross-env": "^7.0.3",
|
|
118
|
-
"eslint": "~8.
|
|
98
|
+
"eslint": "~8.55.0",
|
|
119
99
|
"mocha": "^10.2.0",
|
|
120
100
|
"mocha-json-output-reporter": "^2.0.1",
|
|
121
101
|
"mocha-junit-reporter": "^1.18.0",
|
|
@@ -124,7 +104,6 @@
|
|
|
124
104
|
"prettier": "~3.0.3",
|
|
125
105
|
"replace-in-file": "^6.3.5",
|
|
126
106
|
"rimraf": "^4.4.0",
|
|
127
|
-
"tsc-multi": "^1.1.0",
|
|
128
107
|
"typescript": "~5.1.6"
|
|
129
108
|
},
|
|
130
109
|
"fluidBuild": {
|
|
@@ -140,19 +119,25 @@
|
|
|
140
119
|
}
|
|
141
120
|
},
|
|
142
121
|
"typeValidation": {
|
|
143
|
-
"broken": {
|
|
122
|
+
"broken": {
|
|
123
|
+
"ClassDeclaration_TaskManager": {
|
|
124
|
+
"backCompat": false
|
|
125
|
+
}
|
|
126
|
+
}
|
|
144
127
|
},
|
|
145
128
|
"scripts": {
|
|
146
129
|
"api": "fluid-build . --task api",
|
|
147
|
-
"api-extractor:commonjs": "api-extractor run --
|
|
148
|
-
"api-extractor:esnext": "api-extractor run --
|
|
130
|
+
"api-extractor:commonjs": "api-extractor run --config ./api-extractor-cjs.json",
|
|
131
|
+
"api-extractor:esnext": "api-extractor run --local",
|
|
149
132
|
"build": "fluid-build . --task build",
|
|
150
133
|
"build:commonjs": "fluid-build . --task commonjs",
|
|
151
134
|
"build:compile": "fluid-build . --task compile",
|
|
152
135
|
"build:docs": "fluid-build . --task api",
|
|
153
|
-
"build:esnext": "tsc
|
|
136
|
+
"build:esnext": "tsc --project ./tsconfig.json",
|
|
154
137
|
"build:genver": "gen-version",
|
|
155
|
-
"build:test": "
|
|
138
|
+
"build:test": "npm run build:test:esm && npm run build:test:cjs",
|
|
139
|
+
"build:test:cjs": "fluid-tsc commonjs --project ./src/test/tsconfig.cjs.json",
|
|
140
|
+
"build:test:esm": "tsc --project ./src/test/tsconfig.json",
|
|
156
141
|
"check:are-the-types-wrong": "attw --pack . --entrypoints .",
|
|
157
142
|
"check:release-tags": "api-extractor run --local --config ./api-extractor-lint.json",
|
|
158
143
|
"ci:build:docs": "api-extractor run",
|
|
@@ -166,9 +151,11 @@
|
|
|
166
151
|
"prettier:fix": "prettier --write . --cache --ignore-path ../../../.prettierignore",
|
|
167
152
|
"test": "npm run test:mocha",
|
|
168
153
|
"test:coverage": "c8 npm test",
|
|
169
|
-
"test:mocha": "
|
|
154
|
+
"test:mocha": "npm run test:mocha:esm && echo skipping cjs to avoid overhead - npm run test:mocha:cjs",
|
|
155
|
+
"test:mocha:cjs": "mocha --recursive \"dist/test/**/*.spec.*js\" --exit",
|
|
156
|
+
"test:mocha:esm": "mocha --recursive \"lib/test/**/*.spec.*js\" --exit",
|
|
170
157
|
"test:mocha:verbose": "cross-env FLUID_TEST_VERBOSE=1 npm run test:mocha",
|
|
171
|
-
"tsc": "tsc",
|
|
158
|
+
"tsc": "fluid-tsc commonjs --project ./tsconfig.cjs.json && copyfiles -f ../../../common/build/build-common/src/cjs/package.json ./dist",
|
|
172
159
|
"typetests:gen": "fluid-type-test-generator",
|
|
173
160
|
"typetests:prepare": "flub typetests --dir . --reset --previous --normalize"
|
|
174
161
|
}
|
package/src/index.ts
CHANGED
|
@@ -10,5 +10,5 @@
|
|
|
10
10
|
* @packageDocumentation
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
export { ITaskManager, ITaskManagerEvents, TaskEventListener } from "./interfaces";
|
|
14
|
-
export { TaskManager } from "./taskManager";
|
|
13
|
+
export { ITaskManager, ITaskManagerEvents, TaskEventListener } from "./interfaces.js";
|
|
14
|
+
export { TaskManager } from "./taskManager.js";
|
package/src/packageVersion.ts
CHANGED
package/src/taskManager.ts
CHANGED
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { EventEmitter } from "
|
|
7
|
-
|
|
8
|
-
import { assert } from "@fluidframework/core-utils";
|
|
6
|
+
import { EventEmitter } from "@fluid-internal/client-utils";
|
|
7
|
+
import { assert, unreachableCase } from "@fluidframework/core-utils";
|
|
9
8
|
import { ISequencedDocumentMessage, MessageType } from "@fluidframework/protocol-definitions";
|
|
10
9
|
import {
|
|
11
10
|
IChannelAttributes,
|
|
@@ -21,8 +20,8 @@ import {
|
|
|
21
20
|
SharedObject,
|
|
22
21
|
} from "@fluidframework/shared-object-base";
|
|
23
22
|
import { ReadOnlyInfo } from "@fluidframework/container-definitions";
|
|
24
|
-
import { TaskManagerFactory } from "./taskManagerFactory";
|
|
25
|
-
import { ITaskManager, ITaskManagerEvents } from "./interfaces";
|
|
23
|
+
import { TaskManagerFactory } from "./taskManagerFactory.js";
|
|
24
|
+
import { ITaskManager, ITaskManagerEvents } from "./interfaces.js";
|
|
26
25
|
|
|
27
26
|
/**
|
|
28
27
|
* Description of a task manager operation
|
|
@@ -770,7 +769,23 @@ export class TaskManager extends SharedObject<ITaskManagerEvents> implements ITa
|
|
|
770
769
|
}
|
|
771
770
|
}
|
|
772
771
|
|
|
773
|
-
|
|
774
|
-
|
|
772
|
+
protected applyStashedOp(content: any): void {
|
|
773
|
+
const taskOp: ITaskManagerOperation = content;
|
|
774
|
+
switch (taskOp.type) {
|
|
775
|
+
case "abandon": {
|
|
776
|
+
this.abandon(taskOp.taskId);
|
|
777
|
+
break;
|
|
778
|
+
}
|
|
779
|
+
case "complete": {
|
|
780
|
+
this.complete(taskOp.taskId);
|
|
781
|
+
break;
|
|
782
|
+
}
|
|
783
|
+
case "volunteer": {
|
|
784
|
+
this.subscribeToTask(taskOp.taskId);
|
|
785
|
+
break;
|
|
786
|
+
}
|
|
787
|
+
default:
|
|
788
|
+
unreachableCase(taskOp);
|
|
789
|
+
}
|
|
775
790
|
}
|
|
776
791
|
}
|
|
@@ -9,9 +9,9 @@ import {
|
|
|
9
9
|
IChannelServices,
|
|
10
10
|
IChannelFactory,
|
|
11
11
|
} from "@fluidframework/datastore-definitions";
|
|
12
|
-
import { TaskManager } from "./taskManager";
|
|
13
|
-
import { ITaskManager } from "./interfaces";
|
|
14
|
-
import { pkgVersion } from "./packageVersion";
|
|
12
|
+
import { TaskManager } from "./taskManager.js";
|
|
13
|
+
import { ITaskManager } from "./interfaces.js";
|
|
14
|
+
import { pkgVersion } from "./packageVersion.js";
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* The factory that defines the task queue
|
package/tsconfig.json
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"extends":
|
|
3
|
-
"../../../common/build/build-common/tsconfig.base.json",
|
|
4
|
-
"../../../common/build/build-common/tsconfig.cjs.json",
|
|
5
|
-
],
|
|
2
|
+
"extends": "../../../common/build/build-common/tsconfig.node16.json",
|
|
6
3
|
"include": ["src/**/*"],
|
|
7
4
|
"exclude": ["src/test/**/*"],
|
|
8
5
|
"compilerOptions": {
|
|
9
6
|
"rootDir": "./src",
|
|
10
|
-
"outDir": "./
|
|
7
|
+
"outDir": "./lib",
|
|
11
8
|
},
|
|
12
9
|
}
|
package/lib/index.d.mts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
export { ITaskManager, ITaskManagerEvents, TaskEventListener } from "./interfaces.mjs";
|
|
6
|
-
export { TaskManager } from "./taskManager.mjs";
|
|
7
|
-
//# sourceMappingURL=index.d.mts.map
|
package/lib/index.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;OASI,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE;OACvD,EAAE,WAAW,EAAE"}
|
package/lib/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAUI,EAAE,WAAW,EAAE","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Contains a distributed data structure, {@link ITaskManager}, to track the queues of clients that want to\n * exclusively run tasks.\n *\n * @packageDocumentation\n */\n\nexport { ITaskManager, ITaskManagerEvents, TaskEventListener } from \"./interfaces\";\nexport { TaskManager } from \"./taskManager\";\n"]}
|
package/lib/interfaces.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.mts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAEI,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,oCAAoC;AAEvF;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC9D;;;;;;OAMG;IACH,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,OAAE;IAEjD;;;;OAIG;IACH,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB,OAAE;IAElD;;;;;;OAMG;IACH,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,OAAE;CAC7C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FG;AACH,MAAM,WAAW,YAAa,SAAQ,aAAa,CAAC,kBAAkB,CAAC;IACtE;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnD;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtC;;;OAGG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAElC;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAEhC;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAEpC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC;CACxB"}
|
package/lib/interfaces.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.mjs","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ISharedObject, ISharedObjectEvents } from \"@fluidframework/shared-object-base\";\n\n/**\n * Describes the event listener format for {@link ITaskManagerEvents} events.\n *\n * @param taskId - The unique identifier of the related task.\n * @internal\n */\nexport type TaskEventListener = (taskId: string) => void;\n\n/**\n * Events emitted by {@link TaskManager}.\n * @internal\n */\nexport interface ITaskManagerEvents extends ISharedObjectEvents {\n\t/**\n\t * Fires when a task has been exclusively assigned to the client.\n\t *\n\t * @remarks Does not account for known pending ops, but instead only reflects the current state.\n\t *\n\t * @eventProperty\n\t */\n\t(event: \"assigned\", listener: TaskEventListener);\n\n\t/**\n\t * Fires when a task the client is queued for is completed.\n\t *\n\t * @eventProperty\n\t */\n\t(event: \"completed\", listener: TaskEventListener);\n\n\t/**\n\t * Fires when the task assignment is lost by the local client.\n\t *\n\t * @remarks This could be due to the client disconnecting or by manually calling {@link ITaskManager.abandon}.\n\t *\n\t * @eventProperty\n\t */\n\t(event: \"lost\", listener: TaskEventListener);\n}\n\n/**\n * A distributed data structure that tracks queues of clients that want to exclusively run a task.\n *\n * @example Creation\n *\n * To create a {@link TaskManager}, call the static create method:\n *\n * ```typescript\n * const taskManager = TaskManager.create(this.runtime, id);\n * ```\n *\n * @example Usage\n *\n * To volunteer for a task, use the {@link ITaskManager.volunteerForTask} method.\n * This returns a Promise that will resolve once the client has acquired exclusive rights to run the task,\n * or reject if the client is removed from the queue without acquiring the rights.\n *\n * ```typescript\n * taskManager.volunteerForTask(\"NameOfTask\")\n * .then(() => { doTheTask(); })\n * .catch((err) => { console.error(err); });\n * ```\n *\n * Alternatively, you can indefinitely volunteer for a task with the synchronous {@link ITaskManager.subscribeToTask}\n * method. This method does not return a value, therefore you need to rely on eventing to know when you have acquired\n * the rights to run the task (see below).\n *\n * ```typescript\n * taskManager.subscribeToTask(\"NameOfTask\");\n * ```\n *\n * To check if the local client is currently subscribed to a task, use the {@link ITaskManager.subscribed} method.\n *\n * ```typescript\n * if (taskManager.subscribed(\"NameOfTask\")) {\n * console.log(\"This client is currently subscribed to the task.\");\n * }\n * ```\n *\n * To release the rights to the task, use the {@link ITaskManager.abandon} method.\n * The next client in the queue will then get the rights to run the task.\n *\n * ```typescript\n * taskManager.abandon(\"NameOfTask\");\n * ```\n *\n * To inspect your state in the queue, you can use the {@link ITaskManager.queued} and {@link ITaskManager.assigned}\n * methods.\n *\n * ```typescript\n * if (taskManager.queued(\"NameOfTask\")) {\n * console.log(\"This client is somewhere in the queue, potentially even having the task assignment.\");\n * }\n *\n * if (taskManager.assigned(\"NameOfTask\")) {\n * console.log(\"This client currently has the rights to run the task\");\n * }\n * ```\n *\n * To signal to other connected clients that a task is completed, use the {@link ITaskManager.complete} method.\n * This will release all clients from the queue and emit the \"completed\" event.\n *\n * ```typescript\n * taskManager.complete(\"NameOfTask\");\n * ```\n *\n * @example Eventing\n *\n * `ITaskManager` will emit events when a task is assigned to the client, when the task assignment is lost,\n * and when a task was completed by another client.\n *\n * ```typescript\n * taskManager.on(\"assigned\", (taskId: string) => {\n * console.log(`Client was assigned task: ${taskId}`);\n * });\n *\n * taskManager.on(\"lost\", (taskId: string) => {\n * console.log(`Client released task: ${taskId}`);\n * });\n *\n * taskManager.on(\"completed\", (taskId: string) => {\n * console.log(`Another client completed task: ${taskId}`);\n * });\n * ```\n *\n * These can be useful if the logic to volunteer for a task is separated from the logic to perform the task, such as\n * when using {@link ITaskManager.subscribeToTask}.\n *\n * See {@link ITaskManagerEvents} for more details.\n * @internal\n */\nexport interface ITaskManager extends ISharedObject<ITaskManagerEvents> {\n\t/**\n\t * Volunteer for the task. Returns a promise that resolves `true` if the task is assigned to the local client and\n\t * `false` if the task was completed by another client. It rejects if the local client abandoned the task or\n\t * disconnected while in queue.\n\t * @param taskId - Identifier for the task\n\t */\n\tvolunteerForTask(taskId: string): Promise<boolean>;\n\n\t/**\n\t * Continuously volunteer for the task. Watch the \"assigned\" event to determine if the task is assigned.\n\t * The local client will automatically re-enter the queue if it disconnects.\n\t * @param taskId - Identifier for the task\n\t */\n\tsubscribeToTask(taskId: string): void;\n\n\t/**\n\t * Exit the queue, releasing the task if currently assigned.\n\t * @param taskId - Identifier for the task\n\t */\n\tabandon(taskId: string): void;\n\n\t/**\n\t * Check whether this client is the current assignee for the task and there is no outstanding abandon op that\n\t * would abandon the assignment.\n\t * @param taskId - Identifier for the task\n\t */\n\tassigned(taskId: string): boolean;\n\n\t/**\n\t * Check whether this client is either the current assignee, in queue, or we expect they will be in queue after\n\t * outstanding ops have been ack'd.\n\t * @param taskId - Identifier for the task\n\t */\n\tqueued(taskId: string): boolean;\n\n\t/**\n\t * Check whether this client is currently subscribed to the task.\n\t * @param taskId - Identifier for the task\n\t */\n\tsubscribed(taskId: string): boolean;\n\n\t/**\n\t * Marks a task as completed and releases all clients from its queue.\n\t * @param taskId - Identifier for the task\n\t */\n\tcomplete(taskId: string): void;\n\n\t/**\n\t * Check whether this client can currently volunteer for a task.\n\t */\n\tcanVolunteer(): boolean;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"packageVersion.d.mts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,iCAAiC,CAAC;AACtD,eAAO,MAAM,UAAU,mBAAmB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"packageVersion.mjs","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,8BAA8B,CAAC;AACtD,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/task-manager\";\nexport const pkgVersion = \"2.0.0-rc.1.0.3\";\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"taskManager.d.mts","sourceRoot":"","sources":["../src/taskManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAKI,EAAE,yBAAyB,EAAe,MAAM,sCAAsC;OACtF,EACN,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,MAAM,uCAAuC;OACvC,EAAE,qBAAqB,EAAE,MAAM,qCAAqC;OAEpE,EAEN,gBAAgB,EAChB,YAAY,EACZ,MAAM,oCAAoC;OAGpC,EAAE,YAAY,EAAE,kBAAkB,EAAE;AAqC3C;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,YAAY,CAAC,kBAAkB,CAAE,YAAW,YAAY;IACxF;;;;;;OAMG;WACW,MAAM,CAAC,OAAO,EAAE,sBAAsB,EAAE,EAAE,CAAC,EAAE,MAAM;IAIjE;;;;OAIG;WACW,UAAU,IAAI,eAAe;IAI3C;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAG/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAE9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoC;IAEjE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoC;IAEnE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoC;IAEtE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoC;IAErE,OAAO,CAAC,SAAS,CAAc;IAC/B;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAsC;IAEvE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0B;IAE1D;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAoC;IAE1E;;OAEG;IACH,OAAO,KAAK,QAAQ,GAEnB;IAED;;OAEG;IACH,OAAO,KAAK,YAAY,GAEvB;IAED;;;;;;OAMG;gBACS,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,kBAAkB;IAwHvF,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACU,gBAAgB,CAAC,MAAM,EAAE,MAAM;IAwF5C;;OAEG;IACI,eAAe,CAAC,MAAM,EAAE,MAAM;IA6ErC;;OAEG;IACI,OAAO,CAAC,MAAM,EAAE,MAAM;IAwB7B;;OAEG;IACI,QAAQ,CAAC,MAAM,EAAE,MAAM;IAa9B;;OAEG;IACI,MAAM,CAAC,MAAM,EAAE,MAAM;IAgB5B;;OAEG;IACI,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI1C;;OAEG;IACI,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAmBrC;;OAEG;IACI,YAAY,IAAI,OAAO;IAQ9B;;;;OAIG;IACH,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,gBAAgB,GAAG,qBAAqB;IAuB5E;;OAEG;cACa,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxE,KAAK;IACL,SAAS,CAAC,mBAAmB;IAE7B;;OAEG;IACH,SAAS,CAAC,YAAY;IAItB;;OAEG;IACH,SAAS,CAAC,SAAS;IAKnB;;;OAGG;IACH,SAAS,CAAC,YAAY;IAEtB;;;;;;;OAOG;IACH,SAAS,CAAC,WAAW,CACpB,OAAO,EAAE,yBAAyB,EAClC,KAAK,EAAE,OAAO,EACd,eAAe,EAAE,OAAO;IAyBzB,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,qBAAqB;IAsB7B,OAAO,CAAC,yBAAyB;IAMjC;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAerC,OAAO,CAAC,uBAAuB;IAiBxB,cAAc;CAGrB"}
|