@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 CHANGED
@@ -153,7 +153,10 @@ var TransformRegistry = {
153
153
  }
154
154
  };
155
155
  var TRANSFORM_DEFS = createServiceToken("transform.defs");
156
- globalServiceRegistry.registerIfAbsent(TRANSFORM_DEFS, () => TransformRegistry.all, true);
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 ServiceRegistry2,
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 ServiceRegistry2(globalServiceRegistry3.container.createChildContainer());
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, resolver) {
6474
- return createPolicyEnforcer(createProfilePolicy(profile), resolver);
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 createServiceToken5, globalServiceRegistry as globalServiceRegistry4 } from "@workglow/util";
8061
- var JOB_QUEUE_FACTORY = createServiceToken5("taskgraph.jobQueueFactory");
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.setupDatabase();
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.setupDatabase();
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 createServiceToken6,
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 = createServiceToken6("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
- registerInputResolver("tasks", resolveTaskFromRegistry);
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 createServiceToken7, EventEmitter as EventEmitter7 } from "@workglow/util";
8532
- var TASK_GRAPH_REPOSITORY = createServiceToken7("taskgraph.taskGraphRepository");
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=04407601076D693064756E2164756E21
9641
+ //# debugId=2DFEBA289E537DDA64756E2164756E21