@workglow/task-graph 0.2.30 → 0.2.32
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/dist/browser.js +135 -18
- package/dist/browser.js.map +9 -8
- package/dist/bun.js +135 -18
- package/dist/bun.js.map +9 -8
- package/dist/node.js +135 -18
- package/dist/node.js.map +9 -8
- package/dist/task/EntitlementProfile.d.ts +136 -0
- package/dist/task/EntitlementProfile.d.ts.map +1 -0
- package/dist/task/EntitlementProfiles.d.ts +6 -6
- package/dist/task/EntitlementProfiles.d.ts.map +1 -1
- package/dist/task/TaskRegistry.d.ts +5 -0
- package/dist/task/TaskRegistry.d.ts.map +1 -1
- package/dist/task/index.d.ts +1 -0
- package/dist/task/index.d.ts.map +1 -1
- package/dist/task-graph/TransformRegistry.d.ts +6 -0
- package/dist/task-graph/TransformRegistry.d.ts.map +1 -1
- package/package.json +7 -7
package/dist/bun.js
CHANGED
|
@@ -154,7 +154,10 @@ var TransformRegistry = {
|
|
|
154
154
|
}
|
|
155
155
|
};
|
|
156
156
|
var TRANSFORM_DEFS = createServiceToken("transform.defs");
|
|
157
|
-
|
|
157
|
+
function registerTransformDefaults(registry = globalServiceRegistry) {
|
|
158
|
+
registry.registerIfAbsent(TRANSFORM_DEFS, () => TransformRegistry.all, true);
|
|
159
|
+
}
|
|
160
|
+
registerTransformDefaults();
|
|
158
161
|
|
|
159
162
|
// src/task-graph/Dataflow.ts
|
|
160
163
|
var DATAFLOW_ALL_PORTS = "*";
|
|
@@ -1282,7 +1285,7 @@ import {
|
|
|
1282
1285
|
getTelemetryProvider as getTelemetryProvider2,
|
|
1283
1286
|
globalServiceRegistry as globalServiceRegistry3,
|
|
1284
1287
|
ResourceScope as ResourceScope2,
|
|
1285
|
-
ServiceRegistry as
|
|
1288
|
+
ServiceRegistry as ServiceRegistry3,
|
|
1286
1289
|
SpanStatusCode as SpanStatusCode2,
|
|
1287
1290
|
uuid4 as uuid44
|
|
1288
1291
|
} from "@workglow/util";
|
|
@@ -3937,7 +3940,7 @@ class TaskGraphRunner {
|
|
|
3937
3940
|
if (config?.registry !== undefined) {
|
|
3938
3941
|
this.registry = config.registry;
|
|
3939
3942
|
} else if (this.registry === undefined) {
|
|
3940
|
-
this.registry = new
|
|
3943
|
+
this.registry = new ServiceRegistry3(globalServiceRegistry3.container.createChildContainer());
|
|
3941
3944
|
}
|
|
3942
3945
|
if (config?.resourceScope !== undefined) {
|
|
3943
3946
|
this.resourceScope = config.resourceScope;
|
|
@@ -6437,6 +6440,111 @@ function registerBuiltInTransforms() {
|
|
|
6437
6440
|
for (const t of all)
|
|
6438
6441
|
TransformRegistry.registerTransform(t);
|
|
6439
6442
|
}
|
|
6443
|
+
// src/task/EntitlementProfile.ts
|
|
6444
|
+
import { createServiceToken as createServiceToken5 } from "@workglow/util";
|
|
6445
|
+
var STATIC_SIGNAL_SOURCE = Object.freeze({
|
|
6446
|
+
subscribe(_listener) {
|
|
6447
|
+
return () => {};
|
|
6448
|
+
}
|
|
6449
|
+
});
|
|
6450
|
+
function createPolicyProfile(name, policy, options = {}) {
|
|
6451
|
+
const enforcer = createPolicyEnforcer(policy, options.resolver);
|
|
6452
|
+
const signalSource = options.signalSource ?? STATIC_SIGNAL_SOURCE;
|
|
6453
|
+
const listeners = new Set;
|
|
6454
|
+
const lastOutcome = new Map;
|
|
6455
|
+
const lastEntitlement = new Map;
|
|
6456
|
+
let disposed = false;
|
|
6457
|
+
function key(e) {
|
|
6458
|
+
const resources = e.resources === undefined ? null : [...e.resources].sort();
|
|
6459
|
+
return `${e.id}|${JSON.stringify(resources)}`;
|
|
6460
|
+
}
|
|
6461
|
+
async function evaluate(e) {
|
|
6462
|
+
if (e.optional)
|
|
6463
|
+
return "granted";
|
|
6464
|
+
const denials = await enforcer.checkAll({ entitlements: [e] });
|
|
6465
|
+
return denials.length === 0 ? "granted" : "denied";
|
|
6466
|
+
}
|
|
6467
|
+
async function emitFlipFor(e) {
|
|
6468
|
+
const k = key(e);
|
|
6469
|
+
const previous = lastOutcome.get(k);
|
|
6470
|
+
if (previous === undefined)
|
|
6471
|
+
return;
|
|
6472
|
+
const current = await evaluate(e);
|
|
6473
|
+
if (disposed)
|
|
6474
|
+
return;
|
|
6475
|
+
if (current === previous)
|
|
6476
|
+
return;
|
|
6477
|
+
lastOutcome.set(k, current);
|
|
6478
|
+
const event = {
|
|
6479
|
+
kind: current === "granted" ? "granted" : "revoked",
|
|
6480
|
+
entitlement: e
|
|
6481
|
+
};
|
|
6482
|
+
for (const l of listeners) {
|
|
6483
|
+
try {
|
|
6484
|
+
l(event);
|
|
6485
|
+
} catch (err) {
|
|
6486
|
+
console.error(`[EntitlementProfile:${name}] listener threw:`, err);
|
|
6487
|
+
}
|
|
6488
|
+
}
|
|
6489
|
+
}
|
|
6490
|
+
function safeEmitFlipFor(e) {
|
|
6491
|
+
emitFlipFor(e).catch((err) => {
|
|
6492
|
+
console.error(`[EntitlementProfile:${name}] error evaluating signal:`, err);
|
|
6493
|
+
});
|
|
6494
|
+
}
|
|
6495
|
+
const sourceUnsub = signalSource.subscribe((signal) => {
|
|
6496
|
+
if (disposed)
|
|
6497
|
+
return;
|
|
6498
|
+
if (signal.kind === "reload") {
|
|
6499
|
+
for (const [, e] of lastEntitlement) {
|
|
6500
|
+
safeEmitFlipFor(e);
|
|
6501
|
+
}
|
|
6502
|
+
} else {
|
|
6503
|
+
safeEmitFlipFor(signal.entitlement);
|
|
6504
|
+
}
|
|
6505
|
+
});
|
|
6506
|
+
const profile = {
|
|
6507
|
+
name,
|
|
6508
|
+
checkAll: enforcer.checkAll.bind(enforcer),
|
|
6509
|
+
checkTask: enforcer.checkTask.bind(enforcer),
|
|
6510
|
+
surface: () => policy.grant,
|
|
6511
|
+
async requestEntitlement(required) {
|
|
6512
|
+
if (required.optional) {
|
|
6513
|
+
return { outcome: "granted", entitlement: required };
|
|
6514
|
+
}
|
|
6515
|
+
const denials = await enforcer.checkAll({ entitlements: [required] });
|
|
6516
|
+
const k = key(required);
|
|
6517
|
+
lastEntitlement.set(k, required);
|
|
6518
|
+
if (denials.length === 0) {
|
|
6519
|
+
lastOutcome.set(k, "granted");
|
|
6520
|
+
return { outcome: "granted", entitlement: required };
|
|
6521
|
+
}
|
|
6522
|
+
lastOutcome.set(k, "denied");
|
|
6523
|
+
return { outcome: "denied", denial: denials[0] };
|
|
6524
|
+
},
|
|
6525
|
+
subscribe(listener) {
|
|
6526
|
+
listeners.add(listener);
|
|
6527
|
+
let unsubbed = false;
|
|
6528
|
+
return () => {
|
|
6529
|
+
if (unsubbed)
|
|
6530
|
+
return;
|
|
6531
|
+
unsubbed = true;
|
|
6532
|
+
listeners.delete(listener);
|
|
6533
|
+
};
|
|
6534
|
+
},
|
|
6535
|
+
async dispose() {
|
|
6536
|
+
if (disposed)
|
|
6537
|
+
return;
|
|
6538
|
+
disposed = true;
|
|
6539
|
+
sourceUnsub();
|
|
6540
|
+
listeners.clear();
|
|
6541
|
+
lastOutcome.clear();
|
|
6542
|
+
lastEntitlement.clear();
|
|
6543
|
+
}
|
|
6544
|
+
};
|
|
6545
|
+
return profile;
|
|
6546
|
+
}
|
|
6547
|
+
var ENTITLEMENT_PROFILE = createServiceToken5("workglow.entitlementProfile");
|
|
6440
6548
|
// src/task/EntitlementProfiles.ts
|
|
6441
6549
|
var BROWSER_GRANTS = [
|
|
6442
6550
|
{ id: Entitlements.NETWORK_HTTP },
|
|
@@ -6471,8 +6579,8 @@ var PROFILE_GRANTS = {
|
|
|
6471
6579
|
function createProfilePolicy(profile) {
|
|
6472
6580
|
return { deny: [], grant: PROFILE_GRANTS[profile], ask: [] };
|
|
6473
6581
|
}
|
|
6474
|
-
function createProfileEnforcer(profile,
|
|
6475
|
-
return
|
|
6582
|
+
function createProfileEnforcer(profile, options) {
|
|
6583
|
+
return createPolicyProfile(profile, createProfilePolicy(profile), options);
|
|
6476
6584
|
}
|
|
6477
6585
|
function getProfileGrants(profile) {
|
|
6478
6586
|
return PROFILE_GRANTS[profile];
|
|
@@ -8058,15 +8166,15 @@ import {
|
|
|
8058
8166
|
JobQueueServer
|
|
8059
8167
|
} from "@workglow/job-queue";
|
|
8060
8168
|
import { InMemoryQueueStorage } from "@workglow/job-queue";
|
|
8061
|
-
import { createServiceToken as
|
|
8062
|
-
var JOB_QUEUE_FACTORY =
|
|
8169
|
+
import { createServiceToken as createServiceToken6, globalServiceRegistry as globalServiceRegistry4 } from "@workglow/util";
|
|
8170
|
+
var JOB_QUEUE_FACTORY = createServiceToken6("taskgraph.jobQueueFactory");
|
|
8063
8171
|
var defaultJobQueueFactory = async ({
|
|
8064
8172
|
queueName,
|
|
8065
8173
|
jobClass,
|
|
8066
8174
|
options
|
|
8067
8175
|
}) => {
|
|
8068
8176
|
const storage = options?.storage ?? new InMemoryQueueStorage(queueName);
|
|
8069
|
-
await storage.
|
|
8177
|
+
await storage.migrate();
|
|
8070
8178
|
const server = new JobQueueServer(jobClass, {
|
|
8071
8179
|
storage,
|
|
8072
8180
|
queueName,
|
|
@@ -8100,7 +8208,7 @@ function createJobQueueFactoryWithOptions(defaultOptions = {}) {
|
|
|
8100
8208
|
...options ?? {}
|
|
8101
8209
|
};
|
|
8102
8210
|
const storage = mergedOptions.storage ?? new InMemoryQueueStorage(queueName);
|
|
8103
|
-
await storage.
|
|
8211
|
+
await storage.migrate();
|
|
8104
8212
|
const server = new JobQueueServer(jobClass, {
|
|
8105
8213
|
storage,
|
|
8106
8214
|
queueName,
|
|
@@ -8324,7 +8432,7 @@ queueMicrotask(() => {
|
|
|
8324
8432
|
});
|
|
8325
8433
|
// src/task/TaskRegistry.ts
|
|
8326
8434
|
import {
|
|
8327
|
-
createServiceToken as
|
|
8435
|
+
createServiceToken as createServiceToken7,
|
|
8328
8436
|
getLogger as getLogger9,
|
|
8329
8437
|
globalServiceRegistry as globalServiceRegistry5,
|
|
8330
8438
|
registerInputCompactor,
|
|
@@ -8364,8 +8472,7 @@ var TaskRegistry = {
|
|
|
8364
8472
|
registerTask,
|
|
8365
8473
|
unregisterTask
|
|
8366
8474
|
};
|
|
8367
|
-
var TASK_CONSTRUCTORS =
|
|
8368
|
-
globalServiceRegistry5.registerIfAbsent(TASK_CONSTRUCTORS, () => TaskRegistry.all, true);
|
|
8475
|
+
var TASK_CONSTRUCTORS = createServiceToken7("task.constructors");
|
|
8369
8476
|
function getGlobalTaskConstructors() {
|
|
8370
8477
|
return globalServiceRegistry5.get(TASK_CONSTRUCTORS);
|
|
8371
8478
|
}
|
|
@@ -8392,8 +8499,7 @@ function resolveTaskFromRegistry(id, _format, registry) {
|
|
|
8392
8499
|
...configSchema ? { configSchema } : {}
|
|
8393
8500
|
};
|
|
8394
8501
|
}
|
|
8395
|
-
|
|
8396
|
-
registerInputCompactor("tasks", (value, _format, registry) => {
|
|
8502
|
+
function compactTask(value, _format, registry) {
|
|
8397
8503
|
if (typeof value === "object" && value !== null && "name" in value) {
|
|
8398
8504
|
const name = value.name;
|
|
8399
8505
|
if (typeof name !== "string")
|
|
@@ -8403,7 +8509,13 @@ registerInputCompactor("tasks", (value, _format, registry) => {
|
|
|
8403
8509
|
return ctor ? name : undefined;
|
|
8404
8510
|
}
|
|
8405
8511
|
return;
|
|
8406
|
-
}
|
|
8512
|
+
}
|
|
8513
|
+
function registerTaskDefaults(registry = globalServiceRegistry5) {
|
|
8514
|
+
registry.registerIfAbsent(TASK_CONSTRUCTORS, () => TaskRegistry.all, true);
|
|
8515
|
+
registerInputResolver("tasks", resolveTaskFromRegistry, registry);
|
|
8516
|
+
registerInputCompactor("tasks", compactTask, registry);
|
|
8517
|
+
}
|
|
8518
|
+
registerTaskDefaults();
|
|
8407
8519
|
|
|
8408
8520
|
// src/task/TaskJSON.ts
|
|
8409
8521
|
var createSingleTaskFromJSON = (item, registry, options) => {
|
|
@@ -8529,8 +8641,8 @@ var registerBaseTasks = () => {
|
|
|
8529
8641
|
return tasks;
|
|
8530
8642
|
};
|
|
8531
8643
|
// src/storage/TaskGraphRepository.ts
|
|
8532
|
-
import { createServiceToken as
|
|
8533
|
-
var TASK_GRAPH_REPOSITORY =
|
|
8644
|
+
import { createServiceToken as createServiceToken8, EventEmitter as EventEmitter7 } from "@workglow/util";
|
|
8645
|
+
var TASK_GRAPH_REPOSITORY = createServiceToken8("taskgraph.taskGraphRepository");
|
|
8534
8646
|
|
|
8535
8647
|
class TaskGraphRepository {
|
|
8536
8648
|
type = "TaskGraphRepository";
|
|
@@ -8713,6 +8825,8 @@ export {
|
|
|
8713
8825
|
resolveIterationBound,
|
|
8714
8826
|
resetMethodNameCache,
|
|
8715
8827
|
removeIterationProperties,
|
|
8828
|
+
registerTransformDefaults,
|
|
8829
|
+
registerTaskDefaults,
|
|
8716
8830
|
registerPortCodec,
|
|
8717
8831
|
registerJobQueueFactory,
|
|
8718
8832
|
registerBuiltInTransforms,
|
|
@@ -8778,6 +8892,7 @@ export {
|
|
|
8778
8892
|
createScopedEnforcer,
|
|
8779
8893
|
createProfilePolicy,
|
|
8780
8894
|
createProfileEnforcer,
|
|
8895
|
+
createPolicyProfile,
|
|
8781
8896
|
createPolicyEnforcer,
|
|
8782
8897
|
createJobQueueFactoryWithOptions,
|
|
8783
8898
|
createGraphFromGraphJSON,
|
|
@@ -8842,6 +8957,7 @@ export {
|
|
|
8842
8957
|
TASK_CONSTRUCTORS,
|
|
8843
8958
|
StreamPump,
|
|
8844
8959
|
StreamProcessor,
|
|
8960
|
+
STATIC_SIGNAL_SOURCE,
|
|
8845
8961
|
SERVER_GRANTS,
|
|
8846
8962
|
RunScheduler,
|
|
8847
8963
|
RunContext,
|
|
@@ -8867,6 +8983,7 @@ export {
|
|
|
8867
8983
|
Entitlements,
|
|
8868
8984
|
EdgeMaterializer,
|
|
8869
8985
|
ENTITLEMENT_RESOLVER,
|
|
8986
|
+
ENTITLEMENT_PROFILE,
|
|
8870
8987
|
ENTITLEMENT_ENFORCER,
|
|
8871
8988
|
EMPTY_POLICY,
|
|
8872
8989
|
EMPTY_ENTITLEMENTS,
|
|
@@ -8885,4 +9002,4 @@ export {
|
|
|
8885
9002
|
BROWSER_GRANTS
|
|
8886
9003
|
};
|
|
8887
9004
|
|
|
8888
|
-
//# debugId=
|
|
9005
|
+
//# debugId=896F2287B3DD5F3464756E2164756E21
|