@ms-cloudpack/api-server 0.59.0 → 0.60.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/apis/ensurePackageBundled.d.ts +13 -7
- package/lib/apis/ensurePackageBundled.d.ts.map +1 -1
- package/lib/apis/ensurePackageBundled.js +8 -4
- package/lib/apis/ensurePackageBundled.js.map +1 -1
- package/lib/apis/syncUpload.d.ts +5 -2
- package/lib/apis/syncUpload.d.ts.map +1 -1
- package/lib/apis/syncUpload.js +1 -0
- package/lib/apis/syncUpload.js.map +1 -1
- package/lib/common/createApiContext.d.ts +29 -0
- package/lib/common/createApiContext.d.ts.map +1 -0
- package/lib/common/createApiContext.js +62 -0
- package/lib/common/createApiContext.js.map +1 -0
- package/lib/data/busSources.d.ts +18 -292
- package/lib/data/busSources.d.ts.map +1 -1
- package/lib/index.d.ts +3 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/types/Context.d.ts +5 -3
- package/lib/types/Context.d.ts.map +1 -1
- package/lib/types/Context.js.map +1 -1
- package/lib/types/TaskDescription.d.ts +14 -224
- package/lib/types/TaskDescription.d.ts.map +1 -1
- package/lib/types/TaskDescription.js +2 -2
- package/lib/types/TaskDescription.js.map +1 -1
- package/lib/types/TaskEndDescription.d.ts +14 -224
- package/lib/types/TaskEndDescription.d.ts.map +1 -1
- package/lib/types/TaskList.d.ts +18 -292
- package/lib/types/TaskList.d.ts.map +1 -1
- package/lib/types/TaskMessage.d.ts +11 -108
- package/lib/types/TaskMessage.d.ts.map +1 -1
- package/lib/types/TaskMessage.js +3 -2
- package/lib/types/TaskMessage.js.map +1 -1
- package/lib/types/TaskMessageLocation.d.ts +6 -13
- package/lib/types/TaskMessageLocation.d.ts.map +1 -1
- package/lib/types/TaskMessageLocation.js +2 -1
- package/lib/types/TaskMessageLocation.js.map +1 -1
- package/lib/utilities/TaskRunner.d.ts +22 -11
- package/lib/utilities/TaskRunner.d.ts.map +1 -1
- package/lib/utilities/TaskRunner.js +24 -25
- package/lib/utilities/TaskRunner.js.map +1 -1
- package/lib/utilities/matchingZodObject.d.ts +4 -0
- package/lib/utilities/matchingZodObject.d.ts.map +1 -1
- package/lib/utilities/matchingZodObject.js +4 -0
- package/lib/utilities/matchingZodObject.js.map +1 -1
- package/lib/utilities/writeStubForDensityEntries.d.ts.map +1 -1
- package/lib/utilities/writeStubForDensityEntries.js +2 -1
- package/lib/utilities/writeStubForDensityEntries.js.map +1 -1
- package/package.json +2 -2
- package/lib/common/createPartialApiContext.d.ts +0 -17
- package/lib/common/createPartialApiContext.d.ts.map +0 -1
- package/lib/common/createPartialApiContext.js +0 -163
- package/lib/common/createPartialApiContext.js.map +0 -1
- package/lib/types/TaskOptions.d.ts +0 -6
- package/lib/types/TaskOptions.d.ts.map +0 -1
- package/lib/types/TaskOptions.js +0 -2
- package/lib/types/TaskOptions.js.map +0 -1
- package/lib/types/TaskResponse.d.ts +0 -337
- package/lib/types/TaskResponse.d.ts.map +0 -1
- package/lib/types/TaskResponse.js +0 -8
- package/lib/types/TaskResponse.js.map +0 -1
- package/lib/types/TaskResult.d.ts +0 -233
- package/lib/types/TaskResult.d.ts.map +0 -1
- package/lib/types/TaskResult.js +0 -7
- package/lib/types/TaskResult.js.map +0 -1
- package/lib/types/TaskRunnerContext.d.ts +0 -3
- package/lib/types/TaskRunnerContext.d.ts.map +0 -1
- package/lib/types/TaskRunnerContext.js +0 -2
- package/lib/types/TaskRunnerContext.js.map +0 -1
- package/lib/types/Timings.d.ts +0 -20
- package/lib/types/Timings.d.ts.map +0 -1
- package/lib/types/Timings.js +0 -5
- package/lib/types/Timings.js.map +0 -1
|
@@ -2,33 +2,38 @@ import PQueue from 'p-queue';
|
|
|
2
2
|
import { getDefaultTaskStats } from './getDefaultTaskStats.js';
|
|
3
3
|
import { taskListSource, taskStatsSource } from '../index.browser.js';
|
|
4
4
|
/**
|
|
5
|
-
* TaskRunner
|
|
6
|
-
*
|
|
5
|
+
* TaskRunner tracks the status of tasks, manages concurrency, allows reusing task results,
|
|
6
|
+
* and sends notifications about task status to the data bus (currently just used for `start`).
|
|
7
|
+
*
|
|
8
|
+
* NOTE: To enable data bus notifications, you must call `connectToBus()`.
|
|
9
|
+
* `createApiContext` does this with the `taskRunner` passed in.
|
|
7
10
|
*/
|
|
8
11
|
export class TaskRunner {
|
|
9
|
-
constructor(
|
|
10
|
-
this._context = context;
|
|
12
|
+
constructor() {
|
|
11
13
|
this._queue = new PQueue({ concurrency: 10 });
|
|
12
14
|
this._taskStats = getDefaultTaskStats();
|
|
13
15
|
this._pendingTasks = new Map();
|
|
14
16
|
this._completedTasks = new Map();
|
|
15
17
|
this._requiresRerun = new Set();
|
|
16
18
|
this._prevTasks = new Map();
|
|
17
|
-
if (this._context) {
|
|
18
|
-
const { bus, session } = this._context;
|
|
19
|
-
bus.publish([session.id, 'status'], this._taskStats);
|
|
20
|
-
}
|
|
21
19
|
}
|
|
22
20
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
|
|
21
|
+
* Connects the TaskRunner to the data bus. Tasks will still run without this, but they won't
|
|
22
|
+
* send any notifications to a client (which only matters if a client is listening, e.g.
|
|
23
|
+
* the browser while running `start`).
|
|
24
|
+
*/
|
|
25
|
+
connectToBus(bus) {
|
|
26
|
+
this._bus = bus;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Enqueue a task and return its result promise.
|
|
30
|
+
*
|
|
31
|
+
* If a task with the same `id` was already added, it returns either the previous result
|
|
32
|
+
* (if completed) or the promise (if pending). Pass `options.rerun` to force re-running.
|
|
27
33
|
*/
|
|
28
34
|
add(task, options) {
|
|
29
35
|
const { name, id, execute } = task;
|
|
30
|
-
const { rerun,
|
|
31
|
-
watch?.();
|
|
36
|
+
const { rerun, priority } = options || {};
|
|
32
37
|
if (!this._prevTasks.get(id)) {
|
|
33
38
|
this._prevTasks.set(id, task);
|
|
34
39
|
}
|
|
@@ -98,8 +103,6 @@ export class TaskRunner {
|
|
|
98
103
|
if (this._pendingTasks.has(id)) {
|
|
99
104
|
this._pendingTasks.delete(id);
|
|
100
105
|
this._taskStats.remainingTasks = this._pendingTasks.size;
|
|
101
|
-
const { bus, session } = this._context || {};
|
|
102
|
-
bus && session && bus.publish([session.id, 'status'], this._taskStats);
|
|
103
106
|
}
|
|
104
107
|
this._completedTasks.delete(id);
|
|
105
108
|
}
|
|
@@ -108,11 +111,7 @@ export class TaskRunner {
|
|
|
108
111
|
*/
|
|
109
112
|
clear() {
|
|
110
113
|
this._taskStats = getDefaultTaskStats();
|
|
111
|
-
|
|
112
|
-
const { bus, session } = this._context;
|
|
113
|
-
bus.publish([session.id, 'status'], this._taskStats);
|
|
114
|
-
bus.publish(taskListSource, { tasks: [] });
|
|
115
|
-
}
|
|
114
|
+
this._bus?.publish(taskListSource, { tasks: [] });
|
|
116
115
|
for (const id of this._prevTasks.keys()) {
|
|
117
116
|
this.remove(id);
|
|
118
117
|
}
|
|
@@ -129,9 +128,9 @@ export class TaskRunner {
|
|
|
129
128
|
* Internal method to report the start of a task to the bus.
|
|
130
129
|
*/
|
|
131
130
|
_reportStart(id, description) {
|
|
132
|
-
if (!this.
|
|
131
|
+
if (!this._bus)
|
|
133
132
|
return;
|
|
134
|
-
const
|
|
133
|
+
const bus = this._bus;
|
|
135
134
|
const { tasks } = bus.getData(taskListSource.path) || { tasks: [] };
|
|
136
135
|
const index = tasks.findIndex((t) => t.id === id);
|
|
137
136
|
const previousDescription = tasks[index];
|
|
@@ -163,9 +162,9 @@ export class TaskRunner {
|
|
|
163
162
|
* Internal method to report the end of a task to the bus.
|
|
164
163
|
*/
|
|
165
164
|
_reportEnd(id, description) {
|
|
166
|
-
if (!this.
|
|
165
|
+
if (!this._bus)
|
|
167
166
|
return;
|
|
168
|
-
const
|
|
167
|
+
const bus = this._bus;
|
|
169
168
|
const { tasks } = bus.getData(taskListSource.path) || { tasks: [] };
|
|
170
169
|
const index = tasks.findIndex((t) => t.id === id);
|
|
171
170
|
const previousDescription = tasks[index];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskRunner.js","sourceRoot":"","sources":["../../src/utilities/TaskRunner.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TaskStartDescription } from '../types/TaskStartDescription.js';\nimport type { TaskEndDescription } from '../types/TaskEndDescription.js';\nimport type { TaskOptions } from '../types/TaskOptions.js';\nimport type { Task } from '../types/Task.js';\nimport type { TaskRunnerContext } from '../types/TaskRunnerContext.js';\nimport type { TaskStats } from '../types/TaskStats.js';\nimport type { TaskList } from '../types/TaskList.js';\nimport PQueue from 'p-queue';\nimport { getDefaultTaskStats } from './getDefaultTaskStats.js';\nimport { taskListSource, taskStatsSource, type TaskDescription } from '../index.browser.js';\n\n/**\n * TaskRunner class manages the state of Tasks.\n * This class is to be called by the api server.\n */\nexport class TaskRunner {\n // Context is used to publish task status to the bus,\n // so it is optional, as it is not needed during init or testing.\n private _context: TaskRunnerContext | undefined;\n private _queue: PQueue;\n private _taskStats: TaskStats;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _pendingTasks: Map<string, Promise<any>>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _completedTasks: Map<string, any>;\n private _requiresRerun: Set<string>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _prevTasks: Map<string, Task<any>>;\n\n constructor(context?: TaskRunnerContext) {\n this._context = context;\n this._queue = new PQueue({ concurrency: 10 });\n this._taskStats = getDefaultTaskStats();\n this._pendingTasks = new Map();\n this._completedTasks = new Map();\n this._requiresRerun = new Set();\n this._prevTasks = new Map();\n\n if (this._context) {\n const { bus, session } = this._context;\n bus.publish([session.id, 'status'], this._taskStats);\n }\n }\n\n /**\n * The add method enqueues a Task and returns its Promise.\n * If a Task with the same id has already been processed,\n * it returns either the result or the promise.\n * Rerun flag forces the Task to be run again.\n */\n add<TReturn>(task: Task<TReturn>, options?: TaskOptions): Promise<TReturn> {\n const { name, id, execute } = task;\n const { rerun, watch, priority } = options || {};\n\n watch?.();\n\n if (!this._prevTasks.get(id)) {\n this._prevTasks.set(id, task);\n }\n\n // Check if we are already completed the task with that id.\n const action = this._completedTasks.get(id) as TReturn | undefined;\n if (action !== undefined && !rerun) {\n return Promise.resolve(action);\n }\n\n // Check if we are already running the task with that id.\n const pending = this._pendingTasks.get(id) as Promise<TReturn> | undefined;\n if (pending !== undefined) {\n if (rerun) {\n this._requiresRerun.add(id);\n }\n return pending;\n }\n\n const resultPromise: Promise<TReturn> = (async () => {\n let taskResult: TReturn | undefined;\n\n do {\n // Delete from rerun list (if present).\n this._requiresRerun.delete(id);\n\n taskResult = await this._queue.add(\n execute,\n // Removes void from return type.\n // Read more on: https://github.com/sindresorhus/p-queue/issues/175\n { throwOnTimeout: true, priority },\n );\n } while (this._requiresRerun.has(id));\n\n // Delete from pending list.\n this._pendingTasks.delete(id);\n if (task.getEndDescription) {\n this._reportEnd(id, task.getEndDescription(taskResult));\n }\n\n // Extra check to ensure that the task returned a value.\n // It should never throw, if it does we have a bug.\n if (taskResult === undefined) {\n throw new Error(`Task \"${name}:${id}\" returned undefined, without throwing an error, which was unexpected.`);\n }\n\n // Update finished Tasks.\n this._completedTasks.set(id, taskResult);\n\n return taskResult;\n })();\n\n this._pendingTasks.set(id, resultPromise);\n this._completedTasks.delete(id);\n if (task.getStartDescription) {\n this._reportStart(id, task.getStartDescription());\n }\n\n return resultPromise;\n }\n\n /**\n * The remove method disposes a task if available\n * and then removes it from the TaskRunner.\n *\n * This is useful when the state of a task needs to be cleared.\n *\n * It is intended to be used by the api server\n * to clear the TaskRunner's state before reloading the page.\n */\n remove(id: string): void {\n this._prevTasks\n .get(id)\n ?.dispose?.()\n .catch(() => {\n console.debug(`Error disposing task: ${id}`);\n });\n this._prevTasks.get(id)?.onDispose?.();\n this._prevTasks.delete(id);\n this._requiresRerun.delete(id);\n if (this._pendingTasks.has(id)) {\n this._pendingTasks.delete(id);\n this._taskStats.remainingTasks = this._pendingTasks.size;\n const { bus, session } = this._context || {};\n bus && session && bus.publish([session.id, 'status'], this._taskStats);\n }\n this._completedTasks.delete(id);\n }\n /**\n * The clear method disposes all tasks and clears the TaskRunner.\n */\n clear(): void {\n this._taskStats = getDefaultTaskStats();\n if (this._context) {\n const { bus, session } = this._context;\n bus.publish([session.id, 'status'], this._taskStats);\n bus.publish(taskListSource, { tasks: [] });\n }\n for (const id of this._prevTasks.keys()) {\n this.remove(id);\n }\n }\n\n /** Pauses the TaskRunner (for testing). */\n _pause(): void {\n this._queue.pause();\n }\n\n /** Starts or resumes the TaskRunner (for testing). */\n _start(): void {\n this._queue.start();\n }\n\n /**\n * Internal method to report the start of a task to the bus.\n */\n private _reportStart(id: string, description: TaskStartDescription): void {\n if (!this._context) return;\n const { bus } = this._context;\n const { tasks } = bus.getData<TaskList>(taskListSource.path) || { tasks: [] };\n const index = tasks.findIndex((t) => t.id === id);\n const previousDescription = tasks[index];\n const now = new Date().getTime();\n\n if (!previousDescription) {\n this._taskStats.totalTasks++;\n }\n\n if (previousDescription?.status === 'complete') {\n this._taskStats.totalErrors -= previousDescription.errors?.length || 0;\n this._taskStats.totalWarnings -= previousDescription.warnings?.length || 0;\n }\n\n this._taskStats.remainingTasks = this._pendingTasks.size;\n this._taskStats.status = 'pending';\n\n const task: TaskDescription = {\n ...description,\n status: 'pending',\n startTime: now,\n };\n if (index === -1) {\n tasks.push(task);\n } else {\n tasks[index] = task;\n }\n\n bus.publish(taskStatsSource, this._taskStats);\n bus.publish(taskListSource, { tasks });\n }\n\n /**\n * Internal method to report the end of a task to the bus.\n */\n private _reportEnd(id: string, description: TaskEndDescription): void {\n if (!this._context) return;\n const { bus } = this._context;\n const { tasks } = bus.getData<TaskList>(taskListSource.path) || { tasks: [] };\n const index = tasks.findIndex((t) => t.id === id);\n const previousDescription = tasks[index];\n const now = new Date().getTime();\n\n if (previousDescription) {\n this._taskStats.remainingTasks = this._pendingTasks.size;\n this._taskStats.totalErrors += description?.errors?.length || 0;\n this._taskStats.totalWarnings += description?.warnings?.length || 0;\n\n tasks[index] = {\n ...previousDescription,\n ...description,\n status: 'complete',\n durationMilliseconds: now - previousDescription.startTime,\n lastUpdated: now,\n };\n\n if (this._taskStats.remainingTasks === 0) {\n this._taskStats.status = 'idle';\n }\n\n bus.publish(taskStatsSource, this._taskStats);\n bus.publish(taskListSource, { tasks });\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"TaskRunner.js","sourceRoot":"","sources":["../../src/utilities/TaskRunner.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TaskStartDescription } from '../types/TaskStartDescription.js';\nimport type { TaskEndDescription } from '../types/TaskEndDescription.js';\nimport type { Task } from '../types/Task.js';\nimport type { TaskStats } from '../types/TaskStats.js';\nimport type { TaskList } from '../types/TaskList.js';\nimport PQueue from 'p-queue';\nimport { getDefaultTaskStats } from './getDefaultTaskStats.js';\nimport { taskListSource, taskStatsSource, type TaskDescription } from '../index.browser.js';\nimport type { DataBus } from '@ms-cloudpack/data-bus';\n\n/**\n * TaskRunner tracks the status of tasks, manages concurrency, allows reusing task results,\n * and sends notifications about task status to the data bus (currently just used for `start`).\n *\n * NOTE: To enable data bus notifications, you must call `connectToBus()`.\n * `createApiContext` does this with the `taskRunner` passed in.\n */\nexport class TaskRunner {\n private _bus: DataBus | undefined;\n private _queue: PQueue;\n private _taskStats: TaskStats;\n private _pendingTasks: Map<string, Promise<unknown>>;\n private _completedTasks: Map<string, unknown>;\n private _requiresRerun: Set<string>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _prevTasks: Map<string, Task<any>>;\n\n constructor() {\n this._queue = new PQueue({ concurrency: 10 });\n this._taskStats = getDefaultTaskStats();\n this._pendingTasks = new Map();\n this._completedTasks = new Map();\n this._requiresRerun = new Set();\n this._prevTasks = new Map();\n }\n\n /**\n * Connects the TaskRunner to the data bus. Tasks will still run without this, but they won't\n * send any notifications to a client (which only matters if a client is listening, e.g.\n * the browser while running `start`).\n */\n public connectToBus(bus: DataBus): void {\n this._bus = bus;\n }\n\n /**\n * Enqueue a task and return its result promise.\n *\n * If a task with the same `id` was already added, it returns either the previous result\n * (if completed) or the promise (if pending). Pass `options.rerun` to force re-running.\n */\n add<TReturn>(\n task: Task<TReturn>,\n options?: {\n rerun?: boolean;\n priority?: number;\n },\n ): Promise<TReturn> {\n const { name, id, execute } = task;\n const { rerun, priority } = options || {};\n\n if (!this._prevTasks.get(id)) {\n this._prevTasks.set(id, task);\n }\n\n // Check if we are already completed the task with that id.\n const action = this._completedTasks.get(id) as TReturn | undefined;\n if (action !== undefined && !rerun) {\n return Promise.resolve(action);\n }\n\n // Check if we are already running the task with that id.\n const pending = this._pendingTasks.get(id) as Promise<TReturn> | undefined;\n if (pending !== undefined) {\n if (rerun) {\n this._requiresRerun.add(id);\n }\n return pending;\n }\n\n const resultPromise: Promise<TReturn> = (async () => {\n let taskResult: TReturn | undefined;\n\n do {\n // Delete from rerun list (if present).\n this._requiresRerun.delete(id);\n\n taskResult = await this._queue.add(\n execute,\n // Removes void from return type.\n // Read more on: https://github.com/sindresorhus/p-queue/issues/175\n { throwOnTimeout: true, priority },\n );\n } while (this._requiresRerun.has(id));\n\n // Delete from pending list.\n this._pendingTasks.delete(id);\n if (task.getEndDescription) {\n this._reportEnd(id, task.getEndDescription(taskResult));\n }\n\n // Extra check to ensure that the task returned a value.\n // It should never throw, if it does we have a bug.\n if (taskResult === undefined) {\n throw new Error(`Task \"${name}:${id}\" returned undefined, without throwing an error, which was unexpected.`);\n }\n\n // Update finished Tasks.\n this._completedTasks.set(id, taskResult);\n\n return taskResult;\n })();\n\n this._pendingTasks.set(id, resultPromise);\n this._completedTasks.delete(id);\n if (task.getStartDescription) {\n this._reportStart(id, task.getStartDescription());\n }\n\n return resultPromise;\n }\n\n /**\n * The remove method disposes a task if available\n * and then removes it from the TaskRunner.\n *\n * This is useful when the state of a task needs to be cleared.\n *\n * It is intended to be used by the api server\n * to clear the TaskRunner's state before reloading the page.\n */\n remove(id: string): void {\n this._prevTasks\n .get(id)\n ?.dispose?.()\n .catch(() => {\n console.debug(`Error disposing task: ${id}`);\n });\n this._prevTasks.get(id)?.onDispose?.();\n this._prevTasks.delete(id);\n this._requiresRerun.delete(id);\n if (this._pendingTasks.has(id)) {\n this._pendingTasks.delete(id);\n this._taskStats.remainingTasks = this._pendingTasks.size;\n }\n this._completedTasks.delete(id);\n }\n /**\n * The clear method disposes all tasks and clears the TaskRunner.\n */\n clear(): void {\n this._taskStats = getDefaultTaskStats();\n this._bus?.publish(taskListSource, { tasks: [] });\n\n for (const id of this._prevTasks.keys()) {\n this.remove(id);\n }\n }\n\n /** Pauses the TaskRunner (for testing). */\n _pause(): void {\n this._queue.pause();\n }\n\n /** Starts or resumes the TaskRunner (for testing). */\n _start(): void {\n this._queue.start();\n }\n\n /**\n * Internal method to report the start of a task to the bus.\n */\n private _reportStart(id: string, description: TaskStartDescription): void {\n if (!this._bus) return;\n\n const bus = this._bus;\n const { tasks } = bus.getData<TaskList>(taskListSource.path) || { tasks: [] };\n const index = tasks.findIndex((t) => t.id === id);\n const previousDescription = tasks[index];\n const now = new Date().getTime();\n\n if (!previousDescription) {\n this._taskStats.totalTasks++;\n }\n\n if (previousDescription?.status === 'complete') {\n this._taskStats.totalErrors -= previousDescription.errors?.length || 0;\n this._taskStats.totalWarnings -= previousDescription.warnings?.length || 0;\n }\n\n this._taskStats.remainingTasks = this._pendingTasks.size;\n this._taskStats.status = 'pending';\n\n const task: TaskDescription = {\n ...description,\n status: 'pending',\n startTime: now,\n };\n if (index === -1) {\n tasks.push(task);\n } else {\n tasks[index] = task;\n }\n\n bus.publish(taskStatsSource, this._taskStats);\n bus.publish(taskListSource, { tasks });\n }\n\n /**\n * Internal method to report the end of a task to the bus.\n */\n private _reportEnd(id: string, description: TaskEndDescription): void {\n if (!this._bus) return;\n\n const bus = this._bus;\n const { tasks } = bus.getData<TaskList>(taskListSource.path) || { tasks: [] };\n const index = tasks.findIndex((t) => t.id === id);\n const previousDescription = tasks[index];\n const now = new Date().getTime();\n\n if (previousDescription) {\n this._taskStats.remainingTasks = this._pendingTasks.size;\n this._taskStats.totalErrors += description?.errors?.length || 0;\n this._taskStats.totalWarnings += description?.warnings?.length || 0;\n\n tasks[index] = {\n ...previousDescription,\n ...description,\n status: 'complete',\n durationMilliseconds: now - previousDescription.startTime,\n lastUpdated: now,\n };\n\n if (this._taskStats.remainingTasks === 0) {\n this._taskStats.status = 'idle';\n }\n\n bus.publish(taskStatsSource, this._taskStats);\n bus.publish(taskListSource, { tasks });\n }\n }\n}\n"]}
|
|
@@ -9,6 +9,10 @@ type MatchingZodShape<T extends object> = {
|
|
|
9
9
|
type MatchingZodObject<T extends object> = z.ZodObject<MatchingZodShape<T>, 'strict', z.ZodTypeAny, T, T>;
|
|
10
10
|
/**
|
|
11
11
|
* Get a Zod object that strictly matches the expected type, including any optional properties.
|
|
12
|
+
*
|
|
13
|
+
* Defining TS types first and using this helper to ensure matching zod objects (rather than
|
|
14
|
+
* defining the zod type first and using `infer`) helps reduce type explosion in intellisense
|
|
15
|
+
* and API reports, and allows reusing types that are already defined elsewhere.
|
|
12
16
|
*/
|
|
13
17
|
export declare function matchingZodObject<Expected extends object>(shape: MatchingZodShape<Expected>): MatchingZodObject<Expected>;
|
|
14
18
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matchingZodObject.d.ts","sourceRoot":"","sources":["../../src/utilities/matchingZodObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,KAAK,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI;KACvC,CAAC,IAAI,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1C,CAAC;AAEF,KAAK,iBAAiB,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE1G
|
|
1
|
+
{"version":3,"file":"matchingZodObject.d.ts","sourceRoot":"","sources":["../../src/utilities/matchingZodObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,KAAK,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI;KACvC,CAAC,IAAI,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1C,CAAC;AAEF,KAAK,iBAAiB,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE1G;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,SAAS,MAAM,EACvD,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GAChC,iBAAiB,CAAC,QAAQ,CAAC,CAG7B"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
/**
|
|
3
3
|
* Get a Zod object that strictly matches the expected type, including any optional properties.
|
|
4
|
+
*
|
|
5
|
+
* Defining TS types first and using this helper to ensure matching zod objects (rather than
|
|
6
|
+
* defining the zod type first and using `infer`) helps reduce type explosion in intellisense
|
|
7
|
+
* and API reports, and allows reusing types that are already defined elsewhere.
|
|
4
8
|
*/
|
|
5
9
|
export function matchingZodObject(shape) {
|
|
6
10
|
// Cast the return value to convert back to the original type with optional properties
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matchingZodObject.js","sourceRoot":"","sources":["../../src/utilities/matchingZodObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB
|
|
1
|
+
{"version":3,"file":"matchingZodObject.js","sourceRoot":"","sources":["../../src/utilities/matchingZodObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAiC;IAEjC,sFAAsF;IACtF,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAiC,CAAC;AACjE,CAAC","sourcesContent":["import { z } from 'zod';\n\n/**\n * Zod shape object matching type `T`, with any optional properties remapped to required properties\n * with type `originalType | undefined`.\n */\ntype MatchingZodShape<T extends object> = {\n [k in keyof Required<T>]: z.ZodType<T[k]>;\n};\n\ntype MatchingZodObject<T extends object> = z.ZodObject<MatchingZodShape<T>, 'strict', z.ZodTypeAny, T, T>;\n\n/**\n * Get a Zod object that strictly matches the expected type, including any optional properties.\n *\n * Defining TS types first and using this helper to ensure matching zod objects (rather than\n * defining the zod type first and using `infer`) helps reduce type explosion in intellisense\n * and API reports, and allows reusing types that are already defined elsewhere.\n */\nexport function matchingZodObject<Expected extends object>(\n shape: MatchingZodShape<Expected>,\n): MatchingZodObject<Expected> {\n // Cast the return value to convert back to the original type with optional properties\n return z.object(shape).strict() as MatchingZodObject<Expected>;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writeStubForDensityEntries.d.ts","sourceRoot":"","sources":["../../src/utilities/writeStubForDensityEntries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"writeStubForDensityEntries.d.ts","sourceRoot":"","sources":["../../src/utilities/writeStubForDensityEntries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;AASpC,wBAAsB,0BAA0B,CAAC,MAAM,EAAE;IACvD,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,aAAa,CAAC;KACvB,CAAC;IACF,OAAO,EAAE;QACP,QAAQ,EAAE,uBAAuB,CAAC;QAClC,MAAM,EAAE,eAAe,CAAC;KACzB,CAAC;CACH,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAqE3B"}
|
|
@@ -3,6 +3,7 @@ import { writeFile } from 'fs/promises';
|
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import { toNormalizedEntryKey } from '@ms-cloudpack/bundler';
|
|
5
5
|
import { flattenExportsMap, getExportsMap } from '@ms-cloudpack/package-utilities';
|
|
6
|
+
import { slash } from '@ms-cloudpack/path-string-parsing';
|
|
6
7
|
const errorSource = 'density-entry-stub';
|
|
7
8
|
export async function writeStubForDensityEntries(params) {
|
|
8
9
|
const { options, context } = params;
|
|
@@ -53,7 +54,7 @@ export async function writeStubForDensityEntries(params) {
|
|
|
53
54
|
type: outputFile.exports ? 'object' : 'other',
|
|
54
55
|
keys: outputFile.exports ?? [],
|
|
55
56
|
},
|
|
56
|
-
importStatement: `const moduleExport = requireDensityModule("${moduleId}");`,
|
|
57
|
+
importStatement: `const moduleExport = requireDensityModule("${slash(moduleId)}");`,
|
|
57
58
|
});
|
|
58
59
|
await writeFile(path.join(result.outputPath, outputFile.outputPath), stub);
|
|
59
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writeStubForDensityEntries.js","sourceRoot":"","sources":["../../src/utilities/writeStubForDensityEntries.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"writeStubForDensityEntries.js","sourceRoot":"","sources":["../../src/utilities/writeStubForDensityEntries.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n BundleMessage,\n BundlerResult,\n CloudpackConfig,\n PackageDefinitionsCache,\n} from '@ms-cloudpack/common-types';\nimport { generateESMStubFromExports } from '@ms-cloudpack/esm-stub-utilities';\nimport { writeFile } from 'fs/promises';\nimport path from 'path';\nimport { toNormalizedEntryKey } from '@ms-cloudpack/bundler';\nimport { flattenExportsMap, getExportsMap } from '@ms-cloudpack/package-utilities';\nimport { slash } from '@ms-cloudpack/path-string-parsing';\n\nconst errorSource = 'density-entry-stub';\nexport async function writeStubForDensityEntries(params: {\n options: {\n packageName: string;\n packagePath: string;\n result: BundlerResult;\n };\n context: {\n packages: PackageDefinitionsCache;\n config: CloudpackConfig;\n };\n}): Promise<BundleMessage[]> {\n const { options, context } = params;\n const { packagePath, packageName, result } = options;\n const exportsMap = await getExportsMap({ packagePath }, context);\n const densityCondition = ['density'];\n const densityExportsMap = flattenExportsMap(exportsMap, {\n requiredConditions: densityCondition,\n conditions: densityCondition,\n });\n\n if (Object.keys(densityExportsMap).length === 0) {\n return [];\n }\n\n if (!result.outputFiles) {\n return [\n {\n source: errorSource,\n text: `No output files found in the result. package name:${packageName}, package path:${packagePath}`,\n },\n ];\n }\n\n if (!result.outputPath) {\n return [\n {\n source: errorSource,\n text: `No output path found in the result. package name:${packageName}, package path:${packagePath}`,\n },\n ];\n }\n\n const errors: BundleMessage[] = [];\n\n // find the corresponding output file from the result for each external entry\n for (const [key, value] of Object.entries(densityExportsMap)) {\n try {\n const entryPath = toNormalizedEntryKey(value);\n const outputFile = result.outputFiles.find((o) => o.outputPath === value);\n if (!outputFile) {\n errors.push({\n text: `No output file found for external entry: ${entryPath}, package name:${packageName}, package path:${packagePath}`,\n source: errorSource,\n });\n continue;\n }\n\n const moduleId = key === '.' ? options.packageName : path.join(packageName, entryPath);\n\n // generate new stab file for the external entry by using output.exports\n // found the output file. This file need to be replaced.\n const stub = generateESMStubFromExports({\n export: {\n type: outputFile.exports ? 'object' : 'other',\n keys: outputFile.exports ?? [],\n },\n importStatement: `const moduleExport = requireDensityModule(\"${slash(moduleId)}\");`,\n });\n\n await writeFile(path.join(result.outputPath, outputFile.outputPath), stub);\n } catch (e) {\n errors.push({\n text: `Error while creating stub for external entry: ${e}, package name:${packageName}, package path:${packagePath}`,\n source: errorSource,\n });\n }\n }\n\n return errors;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ms-cloudpack/api-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.60.1",
|
|
4
4
|
"description": "An implementation of the API server that does interacts with a task scheduler.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"@ms-cloudpack/data-bus": "^0.4.3",
|
|
35
35
|
"@ms-cloudpack/esm-stub-utilities": "^0.14.8",
|
|
36
36
|
"@ms-cloudpack/file-watcher": "^0.2.0",
|
|
37
|
-
"@ms-cloudpack/import-map": "^0.8.
|
|
37
|
+
"@ms-cloudpack/import-map": "^0.8.31",
|
|
38
38
|
"@ms-cloudpack/json-utilities": "^0.1.10",
|
|
39
39
|
"@ms-cloudpack/package-hashes": "^0.7.28",
|
|
40
40
|
"@ms-cloudpack/package-utilities": "^11.3.4",
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { TaskReporter } from '@ms-cloudpack/task-reporter';
|
|
2
|
-
import type { TelemetryClient } from '@ms-cloudpack/telemetry';
|
|
3
|
-
import type { Context } from '../types/Context.js';
|
|
4
|
-
import type { TaskRunner } from '../utilities/TaskRunner.js';
|
|
5
|
-
import type { CreateSessionOptions } from './createSession.js';
|
|
6
|
-
import type { LoginMethod } from '@ms-cloudpack/remote-cache';
|
|
7
|
-
export interface LazyApiContextOptions extends CreateSessionOptions {
|
|
8
|
-
reporter: TaskReporter;
|
|
9
|
-
appPath: string;
|
|
10
|
-
telemetryClient: TelemetryClient;
|
|
11
|
-
taskRunner?: TaskRunner;
|
|
12
|
-
remoteCacheClientLoginMethod?: LoginMethod;
|
|
13
|
-
}
|
|
14
|
-
export declare function createPartialApiContext<TKeys extends Exclude<keyof Context, 'dispose'>, TReturn extends Pick<Context, TKeys | 'dispose' | 'reporter' | 'telemetryClient'>>(options: LazyApiContextOptions & {
|
|
15
|
-
items: (false | undefined | null | TKeys)[];
|
|
16
|
-
}): Promise<TReturn>;
|
|
17
|
-
//# sourceMappingURL=createPartialApiContext.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createPartialApiContext.d.ts","sourceRoot":"","sources":["../../src/common/createPartialApiContext.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,4BAA4B,CAAC;AAOjF,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,4BAA4B,CAAC,EAAE,WAAW,CAAC;CAC5C;AAiJD,wBAAsB,uBAAuB,CAC3C,KAAK,SAAS,OAAO,CAAC,MAAM,OAAO,EAAE,SAAS,CAAC,EAC/C,OAAO,SAAS,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,iBAAiB,CAAC,EACjF,OAAO,EAAE,qBAAqB,GAAG;IAAE,KAAK,EAAE,CAAC,KAAK,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBpG"}
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
-
};
|
|
7
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
-
};
|
|
12
|
-
var _LazyApiContext_bus, _LazyApiContext_watcher, _LazyApiContext_packages, _LazyApiContext_taskRunner, _LazyApiContext_session, _LazyApiContext_packageHashes, _LazyApiContext_remoteCacheClient;
|
|
13
|
-
import { createRemoteCacheClient } from '../utilities/createRemoteCacheClient.js';
|
|
14
|
-
class LazyApiContext {
|
|
15
|
-
constructor(options) {
|
|
16
|
-
this.options = options;
|
|
17
|
-
_LazyApiContext_bus.set(this, void 0);
|
|
18
|
-
_LazyApiContext_watcher.set(this, void 0);
|
|
19
|
-
_LazyApiContext_packages.set(this, void 0);
|
|
20
|
-
_LazyApiContext_taskRunner.set(this, void 0);
|
|
21
|
-
_LazyApiContext_session.set(this, void 0);
|
|
22
|
-
_LazyApiContext_packageHashes.set(this, void 0);
|
|
23
|
-
_LazyApiContext_remoteCacheClient.set(this, void 0);
|
|
24
|
-
const { taskRunner } = options;
|
|
25
|
-
if (taskRunner) {
|
|
26
|
-
__classPrivateFieldSet(this, _LazyApiContext_taskRunner, Promise.resolve(taskRunner), "f");
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
get telemetryClient() {
|
|
30
|
-
return Promise.resolve(this.options.telemetryClient);
|
|
31
|
-
}
|
|
32
|
-
get bus() {
|
|
33
|
-
if (!__classPrivateFieldGet(this, _LazyApiContext_bus, "f")) {
|
|
34
|
-
const createDataBusLazy = async () => {
|
|
35
|
-
const { createDataBus } = await import('@ms-cloudpack/data-bus');
|
|
36
|
-
return createDataBus();
|
|
37
|
-
};
|
|
38
|
-
__classPrivateFieldSet(this, _LazyApiContext_bus, createDataBusLazy(), "f");
|
|
39
|
-
}
|
|
40
|
-
return __classPrivateFieldGet(this, _LazyApiContext_bus, "f");
|
|
41
|
-
}
|
|
42
|
-
get watcher() {
|
|
43
|
-
if (!__classPrivateFieldGet(this, _LazyApiContext_watcher, "f")) {
|
|
44
|
-
const createWatcherLazy = async () => {
|
|
45
|
-
const { createWatcher } = await import('@ms-cloudpack/file-watcher');
|
|
46
|
-
return createWatcher({
|
|
47
|
-
type: this.options?.config?.features?.enableWatcherInFork ? 'fork' : 'default',
|
|
48
|
-
});
|
|
49
|
-
};
|
|
50
|
-
__classPrivateFieldSet(this, _LazyApiContext_watcher, createWatcherLazy(), "f");
|
|
51
|
-
}
|
|
52
|
-
return __classPrivateFieldGet(this, _LazyApiContext_watcher, "f");
|
|
53
|
-
}
|
|
54
|
-
get reporter() {
|
|
55
|
-
return Promise.resolve(this.options.reporter);
|
|
56
|
-
}
|
|
57
|
-
get packages() {
|
|
58
|
-
if (!__classPrivateFieldGet(this, _LazyApiContext_packages, "f")) {
|
|
59
|
-
const createPackageDefinitionsLazy = async () => {
|
|
60
|
-
const { createPackageDefinitions } = await import('@ms-cloudpack/config');
|
|
61
|
-
return createPackageDefinitions({ config: this.options.config });
|
|
62
|
-
};
|
|
63
|
-
__classPrivateFieldSet(this, _LazyApiContext_packages, createPackageDefinitionsLazy(), "f");
|
|
64
|
-
}
|
|
65
|
-
return __classPrivateFieldGet(this, _LazyApiContext_packages, "f");
|
|
66
|
-
}
|
|
67
|
-
get packageHashes() {
|
|
68
|
-
if (!__classPrivateFieldGet(this, _LazyApiContext_packageHashes, "f")) {
|
|
69
|
-
const createPackageHashesLazy = async () => {
|
|
70
|
-
const { PackageHashes } = await import('@ms-cloudpack/package-hashes');
|
|
71
|
-
return new PackageHashes({
|
|
72
|
-
cwd: this.options.appPath,
|
|
73
|
-
context: {
|
|
74
|
-
config: this.options.config,
|
|
75
|
-
packages: await this.packages,
|
|
76
|
-
resolveMap: (await this.session).resolveMap,
|
|
77
|
-
},
|
|
78
|
-
});
|
|
79
|
-
};
|
|
80
|
-
__classPrivateFieldSet(this, _LazyApiContext_packageHashes, createPackageHashesLazy(), "f");
|
|
81
|
-
}
|
|
82
|
-
return __classPrivateFieldGet(this, _LazyApiContext_packageHashes, "f");
|
|
83
|
-
}
|
|
84
|
-
get taskRunner() {
|
|
85
|
-
if (!__classPrivateFieldGet(this, _LazyApiContext_taskRunner, "f")) {
|
|
86
|
-
const createTaskRunnerLazy = async () => {
|
|
87
|
-
const { TaskRunner } = await import('../utilities/TaskRunner.js');
|
|
88
|
-
return new TaskRunner({
|
|
89
|
-
bus: await this.bus,
|
|
90
|
-
reporter: await this.reporter,
|
|
91
|
-
session: await this.session,
|
|
92
|
-
});
|
|
93
|
-
};
|
|
94
|
-
__classPrivateFieldSet(this, _LazyApiContext_taskRunner, createTaskRunnerLazy(), "f");
|
|
95
|
-
}
|
|
96
|
-
return __classPrivateFieldGet(this, _LazyApiContext_taskRunner, "f");
|
|
97
|
-
}
|
|
98
|
-
get session() {
|
|
99
|
-
if (!__classPrivateFieldGet(this, _LazyApiContext_session, "f")) {
|
|
100
|
-
const createSessionLazy = async () => {
|
|
101
|
-
const { createSession } = await import('./createSession.js');
|
|
102
|
-
return createSession(this.options, {
|
|
103
|
-
reporter: await this.reporter,
|
|
104
|
-
packages: await this.packages,
|
|
105
|
-
telemetryClient: await this.telemetryClient,
|
|
106
|
-
});
|
|
107
|
-
};
|
|
108
|
-
__classPrivateFieldSet(this, _LazyApiContext_session, createSessionLazy(), "f");
|
|
109
|
-
}
|
|
110
|
-
return __classPrivateFieldGet(this, _LazyApiContext_session, "f");
|
|
111
|
-
}
|
|
112
|
-
get remoteCacheClient() {
|
|
113
|
-
if (!__classPrivateFieldGet(this, _LazyApiContext_remoteCacheClient, "f")) {
|
|
114
|
-
const createRemoteCacheClientLazy = async () => {
|
|
115
|
-
if (!this.options.remoteCacheClientLoginMethod) {
|
|
116
|
-
throw new Error('remoteCacheClientLoginMethod is required to create api context with remote cache');
|
|
117
|
-
}
|
|
118
|
-
return createRemoteCacheClient({
|
|
119
|
-
ctx: {
|
|
120
|
-
session: await this.session,
|
|
121
|
-
reporter: await this.reporter,
|
|
122
|
-
telemetryClient: await this.telemetryClient,
|
|
123
|
-
},
|
|
124
|
-
input: {
|
|
125
|
-
loginMethod: this.options.remoteCacheClientLoginMethod,
|
|
126
|
-
},
|
|
127
|
-
});
|
|
128
|
-
};
|
|
129
|
-
__classPrivateFieldSet(this, _LazyApiContext_remoteCacheClient, createRemoteCacheClientLazy(), "f");
|
|
130
|
-
}
|
|
131
|
-
return __classPrivateFieldGet(this, _LazyApiContext_remoteCacheClient, "f");
|
|
132
|
-
}
|
|
133
|
-
async dispose() {
|
|
134
|
-
if (__classPrivateFieldGet(this, _LazyApiContext_watcher, "f")) {
|
|
135
|
-
const watcher = await __classPrivateFieldGet(this, _LazyApiContext_watcher, "f");
|
|
136
|
-
await watcher.dispose();
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
_LazyApiContext_bus = new WeakMap(), _LazyApiContext_watcher = new WeakMap(), _LazyApiContext_packages = new WeakMap(), _LazyApiContext_taskRunner = new WeakMap(), _LazyApiContext_session = new WeakMap(), _LazyApiContext_packageHashes = new WeakMap(), _LazyApiContext_remoteCacheClient = new WeakMap();
|
|
141
|
-
export async function createPartialApiContext(options) {
|
|
142
|
-
const { reporter, telemetryClient, items } = options;
|
|
143
|
-
return telemetryClient.tracer.startActiveSpan('CREATE_PARTIAL_API_CONTEXT', async (span) => {
|
|
144
|
-
const lazyContext = new LazyApiContext(options);
|
|
145
|
-
const result = {
|
|
146
|
-
reporter,
|
|
147
|
-
telemetryClient,
|
|
148
|
-
dispose: () => {
|
|
149
|
-
return lazyContext.dispose();
|
|
150
|
-
},
|
|
151
|
-
};
|
|
152
|
-
for (const item of items) {
|
|
153
|
-
if (item) {
|
|
154
|
-
result[item] = (await lazyContext[item]);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
span.setAttributes({
|
|
158
|
-
items: items.filter((item) => !!item).join(','),
|
|
159
|
-
});
|
|
160
|
-
return result;
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
//# sourceMappingURL=createPartialApiContext.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createPartialApiContext.js","sourceRoot":"","sources":["../../src/common/createPartialApiContext.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache, PackageHashesCache, Session } from '@ms-cloudpack/common-types';\nimport type { DataBus } from '@ms-cloudpack/data-bus';\nimport type { Watcher } from '@ms-cloudpack/file-watcher';\nimport type { TaskReporter } from '@ms-cloudpack/task-reporter';\nimport type { TelemetryClient } from '@ms-cloudpack/telemetry';\nimport type { Context } from '../types/Context.js';\nimport type { TaskRunner } from '../utilities/TaskRunner.js';\nimport type { CreateSessionOptions } from './createSession.js';\nimport type { LoginMethod, RemoteCacheClient } from '@ms-cloudpack/remote-cache';\nimport { createRemoteCacheClient } from '../utilities/createRemoteCacheClient.js';\n\ntype PromisifyProperties<T> = {\n [K in keyof T]: T[K] extends (...args: unknown[]) => unknown ? T[K] : Promise<T[K]>;\n};\n\nexport interface LazyApiContextOptions extends CreateSessionOptions {\n reporter: TaskReporter;\n appPath: string;\n telemetryClient: TelemetryClient;\n taskRunner?: TaskRunner;\n remoteCacheClientLoginMethod?: LoginMethod;\n}\n\nclass LazyApiContext implements PromisifyProperties<Context> {\n #bus: Promise<DataBus> | undefined;\n #watcher: Promise<Watcher> | undefined;\n #packages: Promise<PackageDefinitionsCache> | undefined;\n #taskRunner: Promise<TaskRunner> | undefined;\n #session: Promise<Session> | undefined;\n #packageHashes: Promise<PackageHashesCache> | undefined;\n #remoteCacheClient: Promise<RemoteCacheClient | undefined> | undefined;\n\n constructor(private readonly options: LazyApiContextOptions) {\n const { taskRunner } = options;\n if (taskRunner) {\n this.#taskRunner = Promise.resolve(taskRunner);\n }\n }\n\n public get telemetryClient(): Promise<TelemetryClient> {\n return Promise.resolve(this.options.telemetryClient);\n }\n\n public get bus(): Promise<DataBus> {\n if (!this.#bus) {\n const createDataBusLazy = async () => {\n const { createDataBus } = await import('@ms-cloudpack/data-bus');\n return createDataBus();\n };\n this.#bus = createDataBusLazy();\n }\n\n return this.#bus;\n }\n\n public get watcher(): Promise<Watcher> {\n if (!this.#watcher) {\n const createWatcherLazy = async () => {\n const { createWatcher } = await import('@ms-cloudpack/file-watcher');\n return createWatcher({\n type: this.options?.config?.features?.enableWatcherInFork ? 'fork' : 'default',\n });\n };\n this.#watcher = createWatcherLazy();\n }\n\n return this.#watcher;\n }\n\n public get reporter(): Promise<TaskReporter> {\n return Promise.resolve(this.options.reporter);\n }\n\n public get packages(): Promise<PackageDefinitionsCache> {\n if (!this.#packages) {\n const createPackageDefinitionsLazy = async () => {\n const { createPackageDefinitions } = await import('@ms-cloudpack/config');\n return createPackageDefinitions({ config: this.options.config });\n };\n this.#packages = createPackageDefinitionsLazy();\n }\n\n return this.#packages;\n }\n\n public get packageHashes(): Promise<PackageHashesCache> {\n if (!this.#packageHashes) {\n const createPackageHashesLazy = async () => {\n const { PackageHashes } = await import('@ms-cloudpack/package-hashes');\n return new PackageHashes({\n cwd: this.options.appPath,\n context: {\n config: this.options.config,\n packages: await this.packages,\n resolveMap: (await this.session).resolveMap,\n },\n });\n };\n this.#packageHashes = createPackageHashesLazy();\n }\n\n return this.#packageHashes;\n }\n\n public get taskRunner(): Promise<TaskRunner> {\n if (!this.#taskRunner) {\n const createTaskRunnerLazy = async () => {\n const { TaskRunner } = await import('../utilities/TaskRunner.js');\n return new TaskRunner({\n bus: await this.bus,\n reporter: await this.reporter,\n session: await this.session,\n });\n };\n this.#taskRunner = createTaskRunnerLazy();\n }\n return this.#taskRunner;\n }\n\n public get session(): Promise<Session> {\n if (!this.#session) {\n const createSessionLazy = async () => {\n const { createSession } = await import('./createSession.js');\n return createSession(this.options, {\n reporter: await this.reporter,\n packages: await this.packages,\n telemetryClient: await this.telemetryClient,\n });\n };\n this.#session = createSessionLazy();\n }\n\n return this.#session;\n }\n\n public get remoteCacheClient(): Promise<RemoteCacheClient | undefined> {\n if (!this.#remoteCacheClient) {\n const createRemoteCacheClientLazy = async () => {\n if (!this.options.remoteCacheClientLoginMethod) {\n throw new Error('remoteCacheClientLoginMethod is required to create api context with remote cache');\n }\n\n return createRemoteCacheClient({\n ctx: {\n session: await this.session,\n reporter: await this.reporter,\n telemetryClient: await this.telemetryClient,\n },\n input: {\n loginMethod: this.options.remoteCacheClientLoginMethod,\n },\n });\n };\n this.#remoteCacheClient = createRemoteCacheClientLazy();\n }\n return this.#remoteCacheClient;\n }\n\n public async dispose(): Promise<void> {\n if (this.#watcher) {\n const watcher = await this.#watcher;\n await watcher.dispose();\n }\n }\n}\n\nexport async function createPartialApiContext<\n TKeys extends Exclude<keyof Context, 'dispose'>,\n TReturn extends Pick<Context, TKeys | 'dispose' | 'reporter' | 'telemetryClient'>,\n>(options: LazyApiContextOptions & { items: (false | undefined | null | TKeys)[] }): Promise<TReturn> {\n const { reporter, telemetryClient, items } = options;\n return telemetryClient.tracer.startActiveSpan('CREATE_PARTIAL_API_CONTEXT', async (span) => {\n const lazyContext = new LazyApiContext(options);\n\n const result = {\n reporter,\n telemetryClient,\n dispose: () => {\n return lazyContext.dispose();\n },\n } as TReturn;\n\n for (const item of items) {\n if (item) {\n result[item] = (await lazyContext[item]) as TReturn[TKeys];\n }\n }\n\n span.setAttributes({\n items: items.filter((item) => !!item).join(','),\n });\n\n return result;\n });\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TaskOptions.d.ts","sourceRoot":"","sources":["../../src/types/TaskOptions.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
package/lib/types/TaskOptions.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TaskOptions.js","sourceRoot":"","sources":["../../src/types/TaskOptions.ts"],"names":[],"mappings":"","sourcesContent":["export interface TaskOptions {\n rerun?: boolean;\n watch?: () => void;\n priority?: number;\n}\n"]}
|