@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/bun.js CHANGED
@@ -154,7 +154,10 @@ var TransformRegistry = {
154
154
  }
155
155
  };
156
156
  var TRANSFORM_DEFS = createServiceToken("transform.defs");
157
- globalServiceRegistry.registerIfAbsent(TRANSFORM_DEFS, () => TransformRegistry.all, true);
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 ServiceRegistry2,
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 ServiceRegistry2(globalServiceRegistry3.container.createChildContainer());
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, resolver) {
6475
- return createPolicyEnforcer(createProfilePolicy(profile), resolver);
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 createServiceToken5, globalServiceRegistry as globalServiceRegistry4 } from "@workglow/util";
8062
- var JOB_QUEUE_FACTORY = createServiceToken5("taskgraph.jobQueueFactory");
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.setupDatabase();
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.setupDatabase();
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 createServiceToken6,
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 = createServiceToken6("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
- registerInputResolver("tasks", resolveTaskFromRegistry);
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 createServiceToken7, EventEmitter as EventEmitter7 } from "@workglow/util";
8533
- var TASK_GRAPH_REPOSITORY = createServiceToken7("taskgraph.taskGraphRepository");
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=A9439182B246991E64756E2164756E21
9005
+ //# debugId=896F2287B3DD5F3464756E2164756E21