@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/node.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";
@@ -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=DAC45C811156BEA364756E2164756E21
9004
+ //# debugId=BF168934B50892FF64756E2164756E21