@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/node.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";
|
|
@@ -8712,6 +8824,8 @@ export {
|
|
|
8712
8824
|
resolveIterationBound,
|
|
8713
8825
|
resetMethodNameCache,
|
|
8714
8826
|
removeIterationProperties,
|
|
8827
|
+
registerTransformDefaults,
|
|
8828
|
+
registerTaskDefaults,
|
|
8715
8829
|
registerPortCodec,
|
|
8716
8830
|
registerJobQueueFactory,
|
|
8717
8831
|
registerBuiltInTransforms,
|
|
@@ -8777,6 +8891,7 @@ export {
|
|
|
8777
8891
|
createScopedEnforcer,
|
|
8778
8892
|
createProfilePolicy,
|
|
8779
8893
|
createProfileEnforcer,
|
|
8894
|
+
createPolicyProfile,
|
|
8780
8895
|
createPolicyEnforcer,
|
|
8781
8896
|
createJobQueueFactoryWithOptions,
|
|
8782
8897
|
createGraphFromGraphJSON,
|
|
@@ -8841,6 +8956,7 @@ export {
|
|
|
8841
8956
|
TASK_CONSTRUCTORS,
|
|
8842
8957
|
StreamPump,
|
|
8843
8958
|
StreamProcessor,
|
|
8959
|
+
STATIC_SIGNAL_SOURCE,
|
|
8844
8960
|
SERVER_GRANTS,
|
|
8845
8961
|
RunScheduler,
|
|
8846
8962
|
RunContext,
|
|
@@ -8866,6 +8982,7 @@ export {
|
|
|
8866
8982
|
Entitlements,
|
|
8867
8983
|
EdgeMaterializer,
|
|
8868
8984
|
ENTITLEMENT_RESOLVER,
|
|
8985
|
+
ENTITLEMENT_PROFILE,
|
|
8869
8986
|
ENTITLEMENT_ENFORCER,
|
|
8870
8987
|
EMPTY_POLICY,
|
|
8871
8988
|
EMPTY_ENTITLEMENTS,
|
|
@@ -8884,4 +9001,4 @@ export {
|
|
|
8884
9001
|
BROWSER_GRANTS
|
|
8885
9002
|
};
|
|
8886
9003
|
|
|
8887
|
-
//# debugId=
|
|
9004
|
+
//# debugId=BF168934B50892FF64756E2164756E21
|