@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/browser.js
CHANGED
|
@@ -153,7 +153,10 @@ var TransformRegistry = {
|
|
|
153
153
|
}
|
|
154
154
|
};
|
|
155
155
|
var TRANSFORM_DEFS = createServiceToken("transform.defs");
|
|
156
|
-
|
|
156
|
+
function registerTransformDefaults(registry = globalServiceRegistry) {
|
|
157
|
+
registry.registerIfAbsent(TRANSFORM_DEFS, () => TransformRegistry.all, true);
|
|
158
|
+
}
|
|
159
|
+
registerTransformDefaults();
|
|
157
160
|
|
|
158
161
|
// src/task-graph/Dataflow.ts
|
|
159
162
|
var DATAFLOW_ALL_PORTS = "*";
|
|
@@ -1281,7 +1284,7 @@ import {
|
|
|
1281
1284
|
getTelemetryProvider as getTelemetryProvider2,
|
|
1282
1285
|
globalServiceRegistry as globalServiceRegistry3,
|
|
1283
1286
|
ResourceScope as ResourceScope2,
|
|
1284
|
-
ServiceRegistry as
|
|
1287
|
+
ServiceRegistry as ServiceRegistry3,
|
|
1285
1288
|
SpanStatusCode as SpanStatusCode2,
|
|
1286
1289
|
uuid4 as uuid44
|
|
1287
1290
|
} from "@workglow/util";
|
|
@@ -3936,7 +3939,7 @@ class TaskGraphRunner {
|
|
|
3936
3939
|
if (config?.registry !== undefined) {
|
|
3937
3940
|
this.registry = config.registry;
|
|
3938
3941
|
} else if (this.registry === undefined) {
|
|
3939
|
-
this.registry = new
|
|
3942
|
+
this.registry = new ServiceRegistry3(globalServiceRegistry3.container.createChildContainer());
|
|
3940
3943
|
}
|
|
3941
3944
|
if (config?.resourceScope !== undefined) {
|
|
3942
3945
|
this.resourceScope = config.resourceScope;
|
|
@@ -6436,6 +6439,111 @@ function registerBuiltInTransforms() {
|
|
|
6436
6439
|
for (const t of all)
|
|
6437
6440
|
TransformRegistry.registerTransform(t);
|
|
6438
6441
|
}
|
|
6442
|
+
// src/task/EntitlementProfile.ts
|
|
6443
|
+
import { createServiceToken as createServiceToken5 } from "@workglow/util";
|
|
6444
|
+
var STATIC_SIGNAL_SOURCE = Object.freeze({
|
|
6445
|
+
subscribe(_listener) {
|
|
6446
|
+
return () => {};
|
|
6447
|
+
}
|
|
6448
|
+
});
|
|
6449
|
+
function createPolicyProfile(name, policy, options = {}) {
|
|
6450
|
+
const enforcer = createPolicyEnforcer(policy, options.resolver);
|
|
6451
|
+
const signalSource = options.signalSource ?? STATIC_SIGNAL_SOURCE;
|
|
6452
|
+
const listeners = new Set;
|
|
6453
|
+
const lastOutcome = new Map;
|
|
6454
|
+
const lastEntitlement = new Map;
|
|
6455
|
+
let disposed = false;
|
|
6456
|
+
function key(e) {
|
|
6457
|
+
const resources = e.resources === undefined ? null : [...e.resources].sort();
|
|
6458
|
+
return `${e.id}|${JSON.stringify(resources)}`;
|
|
6459
|
+
}
|
|
6460
|
+
async function evaluate(e) {
|
|
6461
|
+
if (e.optional)
|
|
6462
|
+
return "granted";
|
|
6463
|
+
const denials = await enforcer.checkAll({ entitlements: [e] });
|
|
6464
|
+
return denials.length === 0 ? "granted" : "denied";
|
|
6465
|
+
}
|
|
6466
|
+
async function emitFlipFor(e) {
|
|
6467
|
+
const k = key(e);
|
|
6468
|
+
const previous = lastOutcome.get(k);
|
|
6469
|
+
if (previous === undefined)
|
|
6470
|
+
return;
|
|
6471
|
+
const current = await evaluate(e);
|
|
6472
|
+
if (disposed)
|
|
6473
|
+
return;
|
|
6474
|
+
if (current === previous)
|
|
6475
|
+
return;
|
|
6476
|
+
lastOutcome.set(k, current);
|
|
6477
|
+
const event = {
|
|
6478
|
+
kind: current === "granted" ? "granted" : "revoked",
|
|
6479
|
+
entitlement: e
|
|
6480
|
+
};
|
|
6481
|
+
for (const l of listeners) {
|
|
6482
|
+
try {
|
|
6483
|
+
l(event);
|
|
6484
|
+
} catch (err) {
|
|
6485
|
+
console.error(`[EntitlementProfile:${name}] listener threw:`, err);
|
|
6486
|
+
}
|
|
6487
|
+
}
|
|
6488
|
+
}
|
|
6489
|
+
function safeEmitFlipFor(e) {
|
|
6490
|
+
emitFlipFor(e).catch((err) => {
|
|
6491
|
+
console.error(`[EntitlementProfile:${name}] error evaluating signal:`, err);
|
|
6492
|
+
});
|
|
6493
|
+
}
|
|
6494
|
+
const sourceUnsub = signalSource.subscribe((signal) => {
|
|
6495
|
+
if (disposed)
|
|
6496
|
+
return;
|
|
6497
|
+
if (signal.kind === "reload") {
|
|
6498
|
+
for (const [, e] of lastEntitlement) {
|
|
6499
|
+
safeEmitFlipFor(e);
|
|
6500
|
+
}
|
|
6501
|
+
} else {
|
|
6502
|
+
safeEmitFlipFor(signal.entitlement);
|
|
6503
|
+
}
|
|
6504
|
+
});
|
|
6505
|
+
const profile = {
|
|
6506
|
+
name,
|
|
6507
|
+
checkAll: enforcer.checkAll.bind(enforcer),
|
|
6508
|
+
checkTask: enforcer.checkTask.bind(enforcer),
|
|
6509
|
+
surface: () => policy.grant,
|
|
6510
|
+
async requestEntitlement(required) {
|
|
6511
|
+
if (required.optional) {
|
|
6512
|
+
return { outcome: "granted", entitlement: required };
|
|
6513
|
+
}
|
|
6514
|
+
const denials = await enforcer.checkAll({ entitlements: [required] });
|
|
6515
|
+
const k = key(required);
|
|
6516
|
+
lastEntitlement.set(k, required);
|
|
6517
|
+
if (denials.length === 0) {
|
|
6518
|
+
lastOutcome.set(k, "granted");
|
|
6519
|
+
return { outcome: "granted", entitlement: required };
|
|
6520
|
+
}
|
|
6521
|
+
lastOutcome.set(k, "denied");
|
|
6522
|
+
return { outcome: "denied", denial: denials[0] };
|
|
6523
|
+
},
|
|
6524
|
+
subscribe(listener) {
|
|
6525
|
+
listeners.add(listener);
|
|
6526
|
+
let unsubbed = false;
|
|
6527
|
+
return () => {
|
|
6528
|
+
if (unsubbed)
|
|
6529
|
+
return;
|
|
6530
|
+
unsubbed = true;
|
|
6531
|
+
listeners.delete(listener);
|
|
6532
|
+
};
|
|
6533
|
+
},
|
|
6534
|
+
async dispose() {
|
|
6535
|
+
if (disposed)
|
|
6536
|
+
return;
|
|
6537
|
+
disposed = true;
|
|
6538
|
+
sourceUnsub();
|
|
6539
|
+
listeners.clear();
|
|
6540
|
+
lastOutcome.clear();
|
|
6541
|
+
lastEntitlement.clear();
|
|
6542
|
+
}
|
|
6543
|
+
};
|
|
6544
|
+
return profile;
|
|
6545
|
+
}
|
|
6546
|
+
var ENTITLEMENT_PROFILE = createServiceToken5("workglow.entitlementProfile");
|
|
6439
6547
|
// src/task/EntitlementProfiles.ts
|
|
6440
6548
|
var BROWSER_GRANTS = [
|
|
6441
6549
|
{ id: Entitlements.NETWORK_HTTP },
|
|
@@ -6470,8 +6578,8 @@ var PROFILE_GRANTS = {
|
|
|
6470
6578
|
function createProfilePolicy(profile) {
|
|
6471
6579
|
return { deny: [], grant: PROFILE_GRANTS[profile], ask: [] };
|
|
6472
6580
|
}
|
|
6473
|
-
function createProfileEnforcer(profile,
|
|
6474
|
-
return
|
|
6581
|
+
function createProfileEnforcer(profile, options) {
|
|
6582
|
+
return createPolicyProfile(profile, createProfilePolicy(profile), options);
|
|
6475
6583
|
}
|
|
6476
6584
|
function getProfileGrants(profile) {
|
|
6477
6585
|
return PROFILE_GRANTS[profile];
|
|
@@ -8057,15 +8165,15 @@ import {
|
|
|
8057
8165
|
JobQueueServer
|
|
8058
8166
|
} from "@workglow/job-queue";
|
|
8059
8167
|
import { InMemoryQueueStorage } from "@workglow/job-queue";
|
|
8060
|
-
import { createServiceToken as
|
|
8061
|
-
var JOB_QUEUE_FACTORY =
|
|
8168
|
+
import { createServiceToken as createServiceToken6, globalServiceRegistry as globalServiceRegistry4 } from "@workglow/util";
|
|
8169
|
+
var JOB_QUEUE_FACTORY = createServiceToken6("taskgraph.jobQueueFactory");
|
|
8062
8170
|
var defaultJobQueueFactory = async ({
|
|
8063
8171
|
queueName,
|
|
8064
8172
|
jobClass,
|
|
8065
8173
|
options
|
|
8066
8174
|
}) => {
|
|
8067
8175
|
const storage = options?.storage ?? new InMemoryQueueStorage(queueName);
|
|
8068
|
-
await storage.
|
|
8176
|
+
await storage.migrate();
|
|
8069
8177
|
const server = new JobQueueServer(jobClass, {
|
|
8070
8178
|
storage,
|
|
8071
8179
|
queueName,
|
|
@@ -8099,7 +8207,7 @@ function createJobQueueFactoryWithOptions(defaultOptions = {}) {
|
|
|
8099
8207
|
...options ?? {}
|
|
8100
8208
|
};
|
|
8101
8209
|
const storage = mergedOptions.storage ?? new InMemoryQueueStorage(queueName);
|
|
8102
|
-
await storage.
|
|
8210
|
+
await storage.migrate();
|
|
8103
8211
|
const server = new JobQueueServer(jobClass, {
|
|
8104
8212
|
storage,
|
|
8105
8213
|
queueName,
|
|
@@ -8323,7 +8431,7 @@ queueMicrotask(() => {
|
|
|
8323
8431
|
});
|
|
8324
8432
|
// src/task/TaskRegistry.ts
|
|
8325
8433
|
import {
|
|
8326
|
-
createServiceToken as
|
|
8434
|
+
createServiceToken as createServiceToken7,
|
|
8327
8435
|
getLogger as getLogger9,
|
|
8328
8436
|
globalServiceRegistry as globalServiceRegistry5,
|
|
8329
8437
|
registerInputCompactor,
|
|
@@ -8363,8 +8471,7 @@ var TaskRegistry = {
|
|
|
8363
8471
|
registerTask,
|
|
8364
8472
|
unregisterTask
|
|
8365
8473
|
};
|
|
8366
|
-
var TASK_CONSTRUCTORS =
|
|
8367
|
-
globalServiceRegistry5.registerIfAbsent(TASK_CONSTRUCTORS, () => TaskRegistry.all, true);
|
|
8474
|
+
var TASK_CONSTRUCTORS = createServiceToken7("task.constructors");
|
|
8368
8475
|
function getGlobalTaskConstructors() {
|
|
8369
8476
|
return globalServiceRegistry5.get(TASK_CONSTRUCTORS);
|
|
8370
8477
|
}
|
|
@@ -8391,8 +8498,7 @@ function resolveTaskFromRegistry(id, _format, registry) {
|
|
|
8391
8498
|
...configSchema ? { configSchema } : {}
|
|
8392
8499
|
};
|
|
8393
8500
|
}
|
|
8394
|
-
|
|
8395
|
-
registerInputCompactor("tasks", (value, _format, registry) => {
|
|
8501
|
+
function compactTask(value, _format, registry) {
|
|
8396
8502
|
if (typeof value === "object" && value !== null && "name" in value) {
|
|
8397
8503
|
const name = value.name;
|
|
8398
8504
|
if (typeof name !== "string")
|
|
@@ -8402,7 +8508,13 @@ registerInputCompactor("tasks", (value, _format, registry) => {
|
|
|
8402
8508
|
return ctor ? name : undefined;
|
|
8403
8509
|
}
|
|
8404
8510
|
return;
|
|
8405
|
-
}
|
|
8511
|
+
}
|
|
8512
|
+
function registerTaskDefaults(registry = globalServiceRegistry5) {
|
|
8513
|
+
registry.registerIfAbsent(TASK_CONSTRUCTORS, () => TaskRegistry.all, true);
|
|
8514
|
+
registerInputResolver("tasks", resolveTaskFromRegistry, registry);
|
|
8515
|
+
registerInputCompactor("tasks", compactTask, registry);
|
|
8516
|
+
}
|
|
8517
|
+
registerTaskDefaults();
|
|
8406
8518
|
|
|
8407
8519
|
// src/task/TaskJSON.ts
|
|
8408
8520
|
var createSingleTaskFromJSON = (item, registry, options) => {
|
|
@@ -8528,8 +8640,8 @@ var registerBaseTasks = () => {
|
|
|
8528
8640
|
return tasks;
|
|
8529
8641
|
};
|
|
8530
8642
|
// src/storage/TaskGraphRepository.ts
|
|
8531
|
-
import { createServiceToken as
|
|
8532
|
-
var TASK_GRAPH_REPOSITORY =
|
|
8643
|
+
import { createServiceToken as createServiceToken8, EventEmitter as EventEmitter7 } from "@workglow/util";
|
|
8644
|
+
var TASK_GRAPH_REPOSITORY = createServiceToken8("taskgraph.taskGraphRepository");
|
|
8533
8645
|
|
|
8534
8646
|
class TaskGraphRepository {
|
|
8535
8647
|
type = "TaskGraphRepository";
|
|
@@ -9347,6 +9459,8 @@ export {
|
|
|
9347
9459
|
resolveIterationBound,
|
|
9348
9460
|
resetMethodNameCache,
|
|
9349
9461
|
removeIterationProperties,
|
|
9462
|
+
registerTransformDefaults,
|
|
9463
|
+
registerTaskDefaults,
|
|
9350
9464
|
registerPortCodec,
|
|
9351
9465
|
registerJobQueueFactory,
|
|
9352
9466
|
registerBuiltInTransforms,
|
|
@@ -9414,6 +9528,7 @@ export {
|
|
|
9414
9528
|
createScopedEnforcer,
|
|
9415
9529
|
createProfilePolicy,
|
|
9416
9530
|
createProfileEnforcer,
|
|
9531
|
+
createPolicyProfile,
|
|
9417
9532
|
createPolicyEnforcer,
|
|
9418
9533
|
createJobQueueFactoryWithOptions,
|
|
9419
9534
|
createGraphFromGraphJSON,
|
|
@@ -9478,6 +9593,7 @@ export {
|
|
|
9478
9593
|
TASK_CONSTRUCTORS,
|
|
9479
9594
|
StreamPump,
|
|
9480
9595
|
StreamProcessor,
|
|
9596
|
+
STATIC_SIGNAL_SOURCE,
|
|
9481
9597
|
SERVER_GRANTS,
|
|
9482
9598
|
RunScheduler,
|
|
9483
9599
|
RunContext,
|
|
@@ -9503,6 +9619,7 @@ export {
|
|
|
9503
9619
|
Entitlements,
|
|
9504
9620
|
EdgeMaterializer,
|
|
9505
9621
|
ENTITLEMENT_RESOLVER,
|
|
9622
|
+
ENTITLEMENT_PROFILE,
|
|
9506
9623
|
ENTITLEMENT_ENFORCER,
|
|
9507
9624
|
EMPTY_POLICY,
|
|
9508
9625
|
EMPTY_ENTITLEMENTS,
|
|
@@ -9521,4 +9638,4 @@ export {
|
|
|
9521
9638
|
BROWSER_GRANTS
|
|
9522
9639
|
};
|
|
9523
9640
|
|
|
9524
|
-
//# debugId=
|
|
9641
|
+
//# debugId=2DFEBA289E537DDA64756E2164756E21
|