@cloud-copilot/iam-lens 0.1.109 → 0.1.111

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.
Files changed (59) hide show
  1. package/dist/cjs/collect/collect.d.ts +1 -1
  2. package/dist/cjs/collect/collect.d.ts.map +1 -1
  3. package/dist/cjs/collect/collect.js +2 -59
  4. package/dist/cjs/collect/collect.js.map +1 -1
  5. package/dist/cjs/index.d.ts +1 -1
  6. package/dist/cjs/index.d.ts.map +1 -1
  7. package/dist/cjs/index.js.map +1 -1
  8. package/dist/cjs/test-datasets/testClient.d.ts +6 -0
  9. package/dist/cjs/test-datasets/testClient.d.ts.map +1 -1
  10. package/dist/cjs/test-datasets/testClient.js +21 -3
  11. package/dist/cjs/test-datasets/testClient.js.map +1 -1
  12. package/dist/cjs/utils/dynamicImport.d.ts +31 -0
  13. package/dist/cjs/utils/dynamicImport.d.ts.map +1 -0
  14. package/dist/cjs/utils/dynamicImport.js +64 -0
  15. package/dist/cjs/utils/dynamicImport.js.map +1 -0
  16. package/dist/cjs/whoCan/WhoCanProcessor.d.ts +37 -8
  17. package/dist/cjs/whoCan/WhoCanProcessor.d.ts.map +1 -1
  18. package/dist/cjs/whoCan/WhoCanProcessor.js +116 -34
  19. package/dist/cjs/whoCan/WhoCanProcessor.js.map +1 -1
  20. package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.js +82 -30
  21. package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.js.map +1 -1
  22. package/dist/cjs/whoCan/whoCan.d.ts +7 -0
  23. package/dist/cjs/whoCan/whoCan.d.ts.map +1 -1
  24. package/dist/cjs/whoCan/whoCan.js +1 -0
  25. package/dist/cjs/whoCan/whoCan.js.map +1 -1
  26. package/dist/cjs/whoCan/workerBootstrapPlugin.d.ts +17 -0
  27. package/dist/cjs/whoCan/workerBootstrapPlugin.d.ts.map +1 -0
  28. package/dist/cjs/whoCan/workerBootstrapPlugin.js +3 -0
  29. package/dist/cjs/whoCan/workerBootstrapPlugin.js.map +1 -0
  30. package/dist/esm/collect/collect.d.ts +1 -1
  31. package/dist/esm/collect/collect.d.ts.map +1 -1
  32. package/dist/esm/collect/collect.js +1 -58
  33. package/dist/esm/collect/collect.js.map +1 -1
  34. package/dist/esm/index.d.ts +1 -1
  35. package/dist/esm/index.d.ts.map +1 -1
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/test-datasets/testClient.d.ts +6 -0
  38. package/dist/esm/test-datasets/testClient.d.ts.map +1 -1
  39. package/dist/esm/test-datasets/testClient.js +22 -4
  40. package/dist/esm/test-datasets/testClient.js.map +1 -1
  41. package/dist/esm/utils/dynamicImport.d.ts +31 -0
  42. package/dist/esm/utils/dynamicImport.d.ts.map +1 -0
  43. package/dist/esm/utils/dynamicImport.js +60 -0
  44. package/dist/esm/utils/dynamicImport.js.map +1 -0
  45. package/dist/esm/whoCan/WhoCanProcessor.d.ts +37 -8
  46. package/dist/esm/whoCan/WhoCanProcessor.d.ts.map +1 -1
  47. package/dist/esm/whoCan/WhoCanProcessor.js +117 -34
  48. package/dist/esm/whoCan/WhoCanProcessor.js.map +1 -1
  49. package/dist/esm/whoCan/WhoCanWorkerThreadWorker.js +84 -31
  50. package/dist/esm/whoCan/WhoCanWorkerThreadWorker.js.map +1 -1
  51. package/dist/esm/whoCan/whoCan.d.ts +7 -0
  52. package/dist/esm/whoCan/whoCan.d.ts.map +1 -1
  53. package/dist/esm/whoCan/whoCan.js +1 -0
  54. package/dist/esm/whoCan/whoCan.js.map +1 -1
  55. package/dist/esm/whoCan/workerBootstrapPlugin.d.ts +17 -0
  56. package/dist/esm/whoCan/workerBootstrapPlugin.d.ts.map +1 -0
  57. package/dist/esm/whoCan/workerBootstrapPlugin.js +2 -0
  58. package/dist/esm/whoCan/workerBootstrapPlugin.js.map +1 -0
  59. package/package.json +1 -1
@@ -16,7 +16,7 @@ export declare function loadCollectConfigs(configPaths: string[]): Promise<TopLe
16
16
  * and must return an `IamCollectClient` (or subclass).
17
17
  */
18
18
  export interface ClientFactoryPlugin {
19
- /** Package name (e.g. '@cloud-copilot/iam-scenario') or absolute path — resolved via require() */
19
+ /** Package name (e.g. '@my-org/my-factory') or absolute path — resolved via require() */
20
20
  module: string;
21
21
  /** Name of the exported factory function */
22
22
  factoryExport: string;
@@ -1 +1 @@
1
- {"version":3,"file":"collect.d.ts","sourceRoot":"","sources":["../../../src/collect/collect.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAE5E;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAEzF;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IAClC,kGAAkG;IAClG,MAAM,EAAE,MAAM,CAAA;IACd,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAA;IACrB,yEAAyE;IACzE,IAAI,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,oBAAqB,SAAQ,uBAAuB;IACnE,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;CAC1C;AA6DD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EAAE,EACzB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CAwB3B"}
1
+ {"version":3,"file":"collect.d.ts","sourceRoot":"","sources":["../../../src/collect/collect.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAG5E;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAEzF;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IAClC,yFAAyF;IACzF,MAAM,EAAE,MAAM,CAAA;IACd,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAA;IACrB,yEAAyE;IACzE,IAAI,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,oBAAqB,SAAQ,uBAAuB;IACnE,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;CAC1C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EAAE,EACzB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CAwB3B"}
@@ -5,6 +5,7 @@ exports.getCollectClient = getCollectClient;
5
5
  const iam_collect_1 = require("@cloud-copilot/iam-collect");
6
6
  const module_1 = require("module");
7
7
  const client_js_1 = require("./client.js");
8
+ const dynamicImport_js_1 = require("../utils/dynamicImport.js");
8
9
  /**
9
10
  * Load IAM collect configs from the specified paths.
10
11
  *
@@ -14,64 +15,6 @@ const client_js_1 = require("./client.js");
14
15
  async function loadCollectConfigs(configPaths) {
15
16
  return (0, iam_collect_1.loadConfigFiles)(configPaths);
16
17
  }
17
- /**
18
- * Normalize a module namespace object so that named exports are accessible as
19
- * top-level properties regardless of whether the underlying module is ESM or
20
- * CJS. When `import()` loads a CJS module the entire `module.exports` object
21
- * is placed on the `default` property of the namespace, so this helper merges
22
- * `default` back into the top level.
23
- *
24
- * @param mod - The raw module namespace returned by `import()` or `require()`.
25
- * @returns A flat record with all named exports accessible as top-level keys.
26
- */
27
- function normalizeModule(mod) {
28
- if (mod.default && typeof mod.default === 'object' && !Array.isArray(mod.default)) {
29
- return { ...mod, ...mod.default };
30
- }
31
- return mod;
32
- }
33
- /**
34
- * Dynamically load a module by name or path, handling both ESM and CJS
35
- * runtime contexts and both ESM and CJS target modules.
36
- *
37
- * Resolution strategy:
38
- * 1. Try a bare `import()` first — this works when the module is resolvable
39
- * from the current file (e.g. it is a direct dependency) or when a bundler /
40
- * test runner (vitest, etc.) intercepts module resolution.
41
- * 2. If that fails with a "not found" error, fall back to `createRequire`
42
- * rooted at `process.cwd()`. This handles the case where the plugin package
43
- * lives in the consuming project's `node_modules` rather than iam-lens's
44
- * own. `createRequire` works in both ESM and CJS contexts and always uses
45
- * the CJS resolution algorithm, which reliably finds packages regardless of
46
- * the caller's module type.
47
- *
48
- * @param modulePath - Package name or absolute path to import.
49
- * @returns The exports object of the imported module with normalised keys.
50
- */
51
- async function dynamicImport(modulePath) {
52
- try {
53
- const mod = (await Promise.resolve(`${modulePath}`).then(s => require(s)));
54
- return normalizeModule(mod);
55
- }
56
- catch (err) {
57
- const code = err.code;
58
- if (code !== 'ERR_MODULE_NOT_FOUND' && code !== 'MODULE_NOT_FOUND') {
59
- throw err;
60
- }
61
- }
62
- // Bare import failed — use createRequire to load from cwd's node_modules.
63
- // createRequire works in both ESM and CJS contexts and handles both CJS and
64
- // ESM target modules (for ESM targets it will load the CJS entry when one
65
- // exists, which is acceptable for plugin loading).
66
- const _require = (0, module_1.createRequire)(process.cwd() + '/');
67
- // eslint-disable-next-line @typescript-eslint/no-require-imports
68
- const mod = _require(modulePath);
69
- // Some environments (e.g. vitest SSR) wrap require() results in a Proxy with
70
- // lazy getters where property access returns undefined despite keys being
71
- // visible. Spreading into a plain object materialises all values.
72
- const plain = { ...mod };
73
- return normalizeModule(plain);
74
- }
75
18
  /**
76
19
  * Get a collect client for the specified partition using the provided configs.
77
20
  *
@@ -91,7 +34,7 @@ async function getCollectClient(configs, partition, options) {
91
34
  const store = (0, iam_collect_1.createStorageClient)(configs, partition, true);
92
35
  if (!clientFactoryPlugin)
93
36
  return new client_js_1.IamCollectClient(store, clientOptions);
94
- const mod = await dynamicImport(clientFactoryPlugin.module);
37
+ const mod = await (0, dynamicImport_js_1.dynamicImport)(clientFactoryPlugin.module);
95
38
  let factory = mod[clientFactoryPlugin.factoryExport];
96
39
  // Some environments (e.g. vitest SSR) wrap import() results in a Proxy where
97
40
  // Object.keys() returns the correct keys but property access returns undefined.
@@ -1 +1 @@
1
- {"version":3,"file":"collect.js","sourceRoot":"","sources":["../../../src/collect/collect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"collect.js","sourceRoot":"","sources":["../../../src/collect/collect.ts"],"names":[],"mappings":";;AAeA,gDAEC;AAqCD,4CA4BC;AAlFD,4DAImC;AACnC,mCAAsC;AACtC,2CAA4E;AAC5E,gEAAyD;AAEzD;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CAAC,WAAqB;IAC5D,OAAO,IAAA,6BAAe,EAAC,WAAW,CAAC,CAAA;AACrC,CAAC;AAuBD;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,gBAAgB,CACpC,OAAyB,EACzB,SAAiB,EACjB,OAA8B;IAE9B,MAAM,EAAE,mBAAmB,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;IAC/D,MAAM,KAAK,GAAG,IAAA,iCAAmB,EAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;IAC3D,IAAI,CAAC,mBAAmB;QAAE,OAAO,IAAI,4BAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;IAC3E,MAAM,GAAG,GAAG,MAAM,IAAA,gCAAa,EAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAC3D,IAAI,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAA;IACpD,6EAA6E;IAC7E,gFAAgF;IAChF,0EAA0E;IAC1E,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7E,MAAM,QAAQ,GAAG,IAAA,sBAAa,EAAC,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAA4B,CAAA;QAChF,OAAO,GAAG,QAAQ,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAA;IACvD,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,mBAAmB,mBAAmB,CAAC,aAAa,0BAA0B,mBAAmB,CAAC,MAAM,GAAG,CAC5G,CAAA;IACH,CAAC;SAAM,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,mBAAmB,mBAAmB,CAAC,aAAa,gBAAgB,mBAAmB,CAAC,MAAM,qBAAqB,CACpH,CAAA;IACH,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,mBAAmB,CAAC,IAAI,CAAqB,CAAA;AACpF,CAAC"}
@@ -6,6 +6,6 @@ export { makePrincipalIndex } from './principalIndex/makePrincipalIndex.js';
6
6
  export type { ContextKeys } from './simulate/contextKeys.js';
7
7
  export { simulateRequest, type SimulationRequest } from './simulate/simulate.js';
8
8
  export { whoCan, type WhoCanPrincipalScope, type ResourceAccessRequest, type WhoCanAllowed, type WhoCanResponse } from './whoCan/whoCan.js';
9
- export { WhoCanProcessor, type WhoCanProcessorConfig, type WhoCanProcessorRequest, type WhoCanSettledEvent, type WhoCanSettledSuccess, type WhoCanSettledError } from './whoCan/WhoCanProcessor.js';
9
+ export { WhoCanProcessor, type WhoCanProcessorConfig, type WhoCanProcessorRequest, type WhoCanSettledEvent, type WhoCanSettledSuccess, type WhoCanSettledError, type WorkerBootstrapPlugin } from './whoCan/WhoCanProcessor.js';
10
10
  export { type LightRequestAnalysis, type LightResourceAnalysis, type LightResourceAnalysisWithPattern, type SingleResourceLightRequestAnalysis, type WildcardResourceLightRequestAnalysis } from './whoCan/requestAnalysis.js';
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC7B,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,qBAAqB,EACrB,aAAa,EACb,cAAc,EACf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAA;AAC3E,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAChF,OAAO,EACL,MAAM,EACN,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,gCAAgC,EACrC,KAAK,kCAAkC,EACvC,KAAK,oCAAoC,EAC1C,MAAM,6BAA6B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC7B,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,qBAAqB,EACrB,aAAa,EACb,cAAc,EACf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAA;AAC3E,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAChF,OAAO,EACL,MAAM,EACN,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC3B,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,gCAAgC,EACrC,KAAK,kCAAkC,EACvC,KAAK,oCAAoC,EAC1C,MAAM,6BAA6B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,iDAM4B;AAL1B,6GAAA,gBAAgB,OAAA;AAChB,kHAAA,qBAAqB,OAAA;AACrB,4GAAA,eAAe,OAAA;AAYjB,mDAK6B;AAJ3B,8GAAA,gBAAgB,OAAA;AAChB,gHAAA,kBAAkB,OAAA;AAIpB,kEAAqF;AAA5E,+GAAA,YAAY,OAAA;AACrB,gFAA2E;AAAlE,2HAAA,kBAAkB,OAAA;AAE3B,sDAAgF;AAAvE,8GAAA,eAAe,OAAA;AACxB,gDAM2B;AALzB,mGAAA,MAAM,OAAA;AAMR,kEAOoC;AANlC,qHAAA,eAAe,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,iDAM4B;AAL1B,6GAAA,gBAAgB,OAAA;AAChB,kHAAA,qBAAqB,OAAA;AACrB,4GAAA,eAAe,OAAA;AAYjB,mDAK6B;AAJ3B,8GAAA,gBAAgB,OAAA;AAChB,gHAAA,kBAAkB,OAAA;AAIpB,kEAAqF;AAA5E,+GAAA,YAAY,OAAA;AACrB,gFAA2E;AAAlE,2HAAA,kBAAkB,OAAA;AAE3B,sDAAgF;AAAvE,8GAAA,eAAe,OAAA;AACxB,gDAM2B;AALzB,mGAAA,MAAM,OAAA;AAMR,kEAQoC;AAPlC,qHAAA,eAAe,OAAA"}
@@ -7,5 +7,11 @@ import { IamCollectClient } from '../collect/client.js';
7
7
  * @returns IamCollectClient instance configured for the specified dataset
8
8
  */
9
9
  export declare function getTestDatasetClient(dataSetId: string): Promise<IamCollectClient>;
10
+ /**
11
+ * Get TopLevelConfig array for a test dataset.
12
+ *
13
+ * @param dataSetId - The numeric ID suffix of the dataset
14
+ * @returns Configuration array pointing to the dataset's file storage
15
+ */
10
16
  export declare function getTestDatasetConfigs(dataSetId: string): TopLevelConfig[];
11
17
  //# sourceMappingURL=testClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"testClient.d.ts","sourceRoot":"","sources":["../../../src/test-datasets/testClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAGhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAGvD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoBvF;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE,CAUzE"}
1
+ {"version":3,"file":"testClient.d.ts","sourceRoot":"","sources":["../../../src/test-datasets/testClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAIhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAgBvD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoBvF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE,CAUzE"}
@@ -4,7 +4,19 @@ exports.getTestDatasetClient = getTestDatasetClient;
4
4
  exports.getTestDatasetConfigs = getTestDatasetConfigs;
5
5
  const fs_1 = require("fs");
6
6
  const path_1 = require("path");
7
+ const url_1 = require("url");
7
8
  const collect_js_1 = require("../collect/collect.js");
9
+ // @ts-ignore
10
+ const __dirname = (0, path_1.dirname)((0, url_1.fileURLToPath)(import.meta.url));
11
+ /**
12
+ * Resolves the absolute path for a test dataset directory.
13
+ *
14
+ * @param dataSetId - The numeric ID suffix of the dataset (e.g. "1" for iam-data-1)
15
+ * @returns Absolute path to the dataset directory
16
+ */
17
+ function datasetPath(dataSetId) {
18
+ return (0, path_1.resolve)((0, path_1.join)(__dirname, `iam-data-${dataSetId}`));
19
+ }
8
20
  /**
9
21
  * Get an IAMCollectClient for a test database
10
22
  *
@@ -12,7 +24,7 @@ const collect_js_1 = require("../collect/collect.js");
12
24
  * @returns IamCollectClient instance configured for the specified dataset
13
25
  */
14
26
  async function getTestDatasetClient(dataSetId) {
15
- const path = (0, path_1.resolve)((0, path_1.join)('./src', 'test-datasets', `iam-data-${dataSetId}`));
27
+ const path = datasetPath(dataSetId);
16
28
  if (!(0, fs_1.existsSync)(path)) {
17
29
  throw new Error(`Test dataset with ID ${dataSetId} does not exist at path ${path}. Someone messed up.`);
18
30
  }
@@ -21,18 +33,24 @@ async function getTestDatasetClient(dataSetId) {
21
33
  iamCollectVersion: '0.0.0',
22
34
  storage: {
23
35
  type: 'file',
24
- path: (0, path_1.resolve)((0, path_1.join)('./src', 'test-datasets', `iam-data-${dataSetId}`))
36
+ path
25
37
  }
26
38
  }
27
39
  ], 'aws');
28
40
  }
41
+ /**
42
+ * Get TopLevelConfig array for a test dataset.
43
+ *
44
+ * @param dataSetId - The numeric ID suffix of the dataset
45
+ * @returns Configuration array pointing to the dataset's file storage
46
+ */
29
47
  function getTestDatasetConfigs(dataSetId) {
30
48
  return [
31
49
  {
32
50
  iamCollectVersion: '0.0.0',
33
51
  storage: {
34
52
  type: 'file',
35
- path: (0, path_1.resolve)((0, path_1.join)('./src', 'test-datasets', `iam-data-${dataSetId}`))
53
+ path: datasetPath(dataSetId)
36
54
  }
37
55
  }
38
56
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"testClient.js","sourceRoot":"","sources":["../../../src/test-datasets/testClient.ts"],"names":[],"mappings":";;AAYA,oDAoBC;AAED,sDAUC;AA3CD,2BAA+B;AAC/B,+BAAoC;AAEpC,sDAAwD;AAExD;;;;;GAKG;AACI,KAAK,UAAU,oBAAoB,CAAC,SAAiB;IAC1D,MAAM,IAAI,GAAG,IAAA,cAAO,EAAC,IAAA,WAAI,EAAC,OAAO,EAAE,eAAe,EAAE,YAAY,SAAS,EAAE,CAAC,CAAC,CAAA;IAC7E,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,wBAAwB,SAAS,2BAA2B,IAAI,sBAAsB,CACvF,CAAA;IACH,CAAC;IAED,OAAO,IAAA,6BAAgB,EACrB;QACE;YACE,iBAAiB,EAAE,OAAO;YAC1B,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAA,cAAO,EAAC,IAAA,WAAI,EAAC,OAAO,EAAE,eAAe,EAAE,YAAY,SAAS,EAAE,CAAC,CAAC;aACvE;SACF;KACF,EACD,KAAK,CACN,CAAA;AACH,CAAC;AAED,SAAgB,qBAAqB,CAAC,SAAiB;IACrD,OAAO;QACL;YACE,iBAAiB,EAAE,OAAO;YAC1B,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAA,cAAO,EAAC,IAAA,WAAI,EAAC,OAAO,EAAE,eAAe,EAAE,YAAY,SAAS,EAAE,CAAC,CAAC;aACvE;SACF;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"testClient.js","sourceRoot":"","sources":["../../../src/test-datasets/testClient.ts"],"names":[],"mappings":";;AA0BA,oDAoBC;AAQD,sDAUC;AA/DD,2BAA+B;AAC/B,+BAA6C;AAC7C,6BAAmC;AAEnC,sDAAwD;AAExD,aAAa;AACb,MAAM,SAAS,GAAG,IAAA,cAAO,EAAC,IAAA,mBAAa,EAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAEzD;;;;;GAKG;AACH,SAAS,WAAW,CAAC,SAAiB;IACpC,OAAO,IAAA,cAAO,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,YAAY,SAAS,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,oBAAoB,CAAC,SAAiB;IAC1D,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;IACnC,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,wBAAwB,SAAS,2BAA2B,IAAI,sBAAsB,CACvF,CAAA;IACH,CAAC;IAED,OAAO,IAAA,6BAAgB,EACrB;QACE;YACE,iBAAiB,EAAE,OAAO;YAC1B,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI;aACL;SACF;KACF,EACD,KAAK,CACN,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,SAAiB;IACrD,OAAO;QACL;YACE,iBAAiB,EAAE,OAAO;YAC1B,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC;aAC7B;SACF;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Normalize a module namespace object so that named exports are accessible as
3
+ * top-level properties regardless of whether the underlying module is ESM or
4
+ * CJS. When `import()` loads a CJS module the entire `module.exports` object
5
+ * is placed on the `default` property of the namespace, so this helper merges
6
+ * `default` back into the top level.
7
+ *
8
+ * @param mod - The raw module namespace returned by `import()` or `require()`.
9
+ * @returns A flat record with all named exports accessible as top-level keys.
10
+ */
11
+ export declare function normalizeModule(mod: Record<string, unknown>): Record<string, unknown>;
12
+ /**
13
+ * Dynamically load a module by name or path, handling both ESM and CJS
14
+ * runtime contexts and both ESM and CJS target modules.
15
+ *
16
+ * Resolution strategy:
17
+ * 1. Try a bare `import()` first — this works when the module is resolvable
18
+ * from the current file (e.g. it is a direct dependency) or when a bundler /
19
+ * test runner (vitest, etc.) intercepts module resolution.
20
+ * 2. If that fails with a "not found" error, fall back to `createRequire`
21
+ * rooted at `process.cwd()`. This handles the case where the plugin package
22
+ * lives in the consuming project's `node_modules` rather than iam-lens's
23
+ * own. `createRequire` works in both ESM and CJS contexts and always uses
24
+ * the CJS resolution algorithm, which reliably finds packages regardless of
25
+ * the caller's module type.
26
+ *
27
+ * @param modulePath - Package name or absolute path to import.
28
+ * @returns The exports object of the imported module with normalised keys.
29
+ */
30
+ export declare function dynamicImport(modulePath: string): Promise<Record<string, unknown>>;
31
+ //# sourceMappingURL=dynamicImport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamicImport.d.ts","sourceRoot":"","sources":["../../../src/utils/dynamicImport.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKrF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAsBxF"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeModule = normalizeModule;
4
+ exports.dynamicImport = dynamicImport;
5
+ const module_1 = require("module");
6
+ /**
7
+ * Normalize a module namespace object so that named exports are accessible as
8
+ * top-level properties regardless of whether the underlying module is ESM or
9
+ * CJS. When `import()` loads a CJS module the entire `module.exports` object
10
+ * is placed on the `default` property of the namespace, so this helper merges
11
+ * `default` back into the top level.
12
+ *
13
+ * @param mod - The raw module namespace returned by `import()` or `require()`.
14
+ * @returns A flat record with all named exports accessible as top-level keys.
15
+ */
16
+ function normalizeModule(mod) {
17
+ if (mod.default && typeof mod.default === 'object' && !Array.isArray(mod.default)) {
18
+ return { ...mod, ...mod.default };
19
+ }
20
+ return mod;
21
+ }
22
+ /**
23
+ * Dynamically load a module by name or path, handling both ESM and CJS
24
+ * runtime contexts and both ESM and CJS target modules.
25
+ *
26
+ * Resolution strategy:
27
+ * 1. Try a bare `import()` first — this works when the module is resolvable
28
+ * from the current file (e.g. it is a direct dependency) or when a bundler /
29
+ * test runner (vitest, etc.) intercepts module resolution.
30
+ * 2. If that fails with a "not found" error, fall back to `createRequire`
31
+ * rooted at `process.cwd()`. This handles the case where the plugin package
32
+ * lives in the consuming project's `node_modules` rather than iam-lens's
33
+ * own. `createRequire` works in both ESM and CJS contexts and always uses
34
+ * the CJS resolution algorithm, which reliably finds packages regardless of
35
+ * the caller's module type.
36
+ *
37
+ * @param modulePath - Package name or absolute path to import.
38
+ * @returns The exports object of the imported module with normalised keys.
39
+ */
40
+ async function dynamicImport(modulePath) {
41
+ try {
42
+ const mod = (await Promise.resolve(`${modulePath}`).then(s => require(s)));
43
+ return normalizeModule(mod);
44
+ }
45
+ catch (err) {
46
+ const code = err.code;
47
+ if (code !== 'ERR_MODULE_NOT_FOUND' && code !== 'MODULE_NOT_FOUND') {
48
+ throw err;
49
+ }
50
+ }
51
+ // Bare import failed — use createRequire to load from cwd's node_modules.
52
+ // createRequire works in both ESM and CJS contexts and handles both CJS and
53
+ // ESM target modules (for ESM targets it will load the CJS entry when one
54
+ // exists, which is acceptable for plugin loading).
55
+ const _require = (0, module_1.createRequire)(process.cwd() + '/');
56
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
57
+ const mod = _require(modulePath);
58
+ // Some environments (e.g. vitest SSR) wrap require() results in a Proxy with
59
+ // lazy getters where property access returns undefined despite keys being
60
+ // visible. Spreading into a plain object materialises all values.
61
+ const plain = { ...mod };
62
+ return normalizeModule(plain);
63
+ }
64
+ //# sourceMappingURL=dynamicImport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamicImport.js","sourceRoot":"","sources":["../../../src/utils/dynamicImport.ts"],"names":[],"mappings":";;AAYA,0CAKC;AAoBD,sCAsBC;AA3DD,mCAAsC;AAEtC;;;;;;;;;GASG;AACH,SAAgB,eAAe,CAAC,GAA4B;IAC1D,IAAI,GAAG,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAClF,OAAO,EAAE,GAAG,GAAG,EAAE,GAAI,GAAG,CAAC,OAAmC,EAAE,CAAA;IAChE,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACI,KAAK,UAAU,aAAa,CAAC,UAAkB;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,yBAAa,UAAU,yBAAC,CAA4B,CAAA;QACjE,OAAO,eAAe,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,IAAI,GAAI,GAAyB,CAAC,IAAI,CAAA;QAC5C,IAAI,IAAI,KAAK,sBAAsB,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACnE,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC;IACD,0EAA0E;IAC1E,4EAA4E;IAC5E,0EAA0E;IAC1E,mDAAmD;IACnD,MAAM,QAAQ,GAAG,IAAA,sBAAa,EAAC,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAA;IACnD,iEAAiE;IACjE,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAA4B,CAAA;IAC3D,6EAA6E;IAC7E,0EAA0E;IAC1E,kEAAkE;IAClE,MAAM,KAAK,GAAG,EAAE,GAAG,GAAG,EAAE,CAAA;IACxB,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;AAC/B,CAAC"}
@@ -3,6 +3,8 @@ import { type ClientFactoryPlugin } from '../collect/collect.js';
3
3
  import { type S3AbacOverride } from '../utils/s3Abac.js';
4
4
  import { type LightRequestAnalysis } from './requestAnalysis.js';
5
5
  import { type WhoCanPrincipalScope, type WhoCanResponse } from './whoCan.js';
6
+ import { type WorkerBootstrapPlugin } from './workerBootstrapPlugin.js';
7
+ export type { WorkerBootstrapPlugin } from './workerBootstrapPlugin.js';
6
8
  /**
7
9
  * Configuration for creating a WhoCanProcessor. These settings are fixed
8
10
  * for the lifetime of the processor and baked into worker threads at creation time.
@@ -41,6 +43,13 @@ export interface WhoCanProcessorConfig {
41
43
  };
42
44
  /** Optional plugin to wrap the collect client with a custom implementation. */
43
45
  clientFactoryPlugin?: ClientFactoryPlugin;
46
+ /**
47
+ * Optional plugin that runs once per worker thread at startup before any work
48
+ * is processed. Use this for loading instrumentation, initializing logging
49
+ * context, or other worker-lifetime setup. If the bootstrap function throws,
50
+ * the worker fails and the processor surfaces the error.
51
+ */
52
+ workerBootstrapPlugin?: WorkerBootstrapPlugin;
44
53
  /** An override for S3 ABAC being enabled when checking access to S3 Bucket resources. */
45
54
  s3AbacOverride?: S3AbacOverride;
46
55
  /** Whether workers should collect grant details for allowed simulations. */
@@ -54,6 +63,15 @@ export interface WhoCanProcessorConfig {
54
63
  * status, and either the result or the error.
55
64
  */
56
65
  onRequestSettled: (event: WhoCanSettledEvent) => Promise<void>;
66
+ /**
67
+ * Optional async callback invoked when an `onRequestSettled` callback throws or rejects.
68
+ * If this callback itself throws, the error is silently ignored. If not provided, a
69
+ * warning is logged indicating that a settlement callback failed with no handler defined.
70
+ *
71
+ * @param event - The settlement event that was being delivered when the error occurred.
72
+ * @param error - The error thrown by the `onRequestSettled` callback.
73
+ */
74
+ onSettlementFailure?: (event: WhoCanSettledEvent, error: Error) => Promise<void>;
57
75
  /**
58
76
  * Whether the processor should ignore an existing principal index. Use this with testing.
59
77
  */
@@ -142,11 +160,18 @@ export declare class WhoCanProcessor {
142
160
  private draining;
143
161
  private preparationQueue;
144
162
  private idleWaiters;
145
- private settledCallbackErrors;
146
163
  private mainThreadWorker;
147
164
  private fatalError?;
148
165
  private shutdownPromise?;
149
166
  private constructor();
167
+ /**
168
+ * Waits for every worker to post a `{ type: 'ready' }` message. If any
169
+ * worker fails (error, non-zero exit, or explicit `startupError` message)
170
+ * the remaining workers are terminated and the returned promise rejects.
171
+ *
172
+ * @param workers - The worker instances to wait on.
173
+ */
174
+ private static awaitWorkersReady;
150
175
  /**
151
176
  * Creates a new WhoCanProcessor with worker threads, a shared cache, and
152
177
  * lifetime-scoped message routing. The processor is ready to accept requests
@@ -176,8 +201,7 @@ export declare class WhoCanProcessor {
176
201
  * While draining, new calls to {@link enqueueWhoCan} will throw. Once
177
202
  * the drain completes, the processor re-opens for new enqueues.
178
203
  *
179
- * @returns a promise that resolves when idle, or rejects if a worker crashes
180
- * or an onRequestSettled callback throws/rejects.
204
+ * @returns a promise that resolves when idle, or rejects if a worker crashes.
181
205
  */
182
206
  waitForIdle(): Promise<void>;
183
207
  /**
@@ -313,8 +337,8 @@ export declare class WhoCanProcessor {
313
337
  */
314
338
  private settleRequestAsError;
315
339
  /**
316
- * Invokes the onRequestSettled callback and accumulates any errors for
317
- * later surfacing via waitForIdle.
340
+ * Invokes the onRequestSettled callback and routes any errors through
341
+ * {@link handleSettlementFailure}.
318
342
  *
319
343
  * @param event - The settlement event to deliver.
320
344
  */
@@ -356,10 +380,15 @@ export declare class WhoCanProcessor {
356
380
  */
357
381
  private checkIdle;
358
382
  /**
359
- * If any onRequestSettled callbacks threw, throws the first error.
360
- * Called after waitForIdle resolves to surface callback errors.
383
+ * Handles an error thrown by the `onRequestSettled` callback. If the
384
+ * `onSettlementFailure` callback is defined, it is invoked with the event
385
+ * and error; any error it throws is silently ignored. If not defined, a
386
+ * warning is logged.
387
+ *
388
+ * @param event - The settlement event that was being delivered.
389
+ * @param err - The raw error thrown by the `onRequestSettled` callback.
361
390
  */
362
- private rejectIfSettledCallbackErrors;
391
+ private handleSettlementFailure;
363
392
  /**
364
393
  * Handles an unexpected worker failure by marking the processor as dead,
365
394
  * terminating remaining workers, and rejecting all active and pending requests.
@@ -1 +1 @@
1
- {"version":3,"file":"WhoCanProcessor.d.ts","sourceRoot":"","sources":["../../../src/whoCan/WhoCanProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAGhE,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,uBAAuB,CAAA;AAIlF,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAOxD,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,cAAc,EAKpB,MAAM,aAAa,CAAA;AAapB;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,uDAAuD;IACvD,cAAc,EAAE,cAAc,EAAE,CAAA;IAEhC,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAA;IAEjB,MAAM,CAAC,EAAE;QACP;;WAEG;QACH,aAAa,CAAC,EAAE,MAAM,CAAA;QAEtB;;WAEG;QACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;QAE9B;;;;WAIG;QACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;QAE7B;;;WAGG;QACH,sBAAsB,CAAC,EAAE,MAAM,CAAA;QAE/B;;;;WAIG;QACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;KAC/B,CAAA;IAED,+EAA+E;IAC/E,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IAEzC,yFAAyF;IACzF,cAAc,CAAC,EAAE,cAAc,CAAA;IAE/B,4EAA4E;IAC5E,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAE7B;;;;;;;OAOG;IACH,gBAAgB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAE9D;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,8CAA8C;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,uCAAuC;IACvC,OAAO,EAAE,MAAM,EAAE,CAAA;IAEjB,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAA;IAEhE,4DAA4D;IAC5D,cAAc,CAAC,EAAE,oBAAoB,CAAA;IAErC,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC7B;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,GAAG,kBAAkB,CAAA;AAE1E;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,MAAM,EAAE,WAAW,CAAA;IAEnB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAA;IAEjB,8CAA8C;IAC9C,OAAO,EAAE,sBAAsB,CAAA;IAE/B,0CAA0C;IAC1C,MAAM,EAAE,cAAc,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,MAAM,EAAE,UAAU,CAAA;IAElB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAA;IAEjB,8CAA8C;IAC9C,OAAO,EAAE,sBAAsB,CAAA;IAE/B,iDAAiD;IACjD,KAAK,EAAE,KAAK,CAAA;CACb;AAoHD;;;;;;;;;;;GAWG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,WAAW,CAAQ;IAG3B,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,kBAAkB,CAAe;IACzC,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,oBAAoB,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAQ;IAGxB,OAAO,CAAC,gBAAgB,CAAyB;IAGjD,OAAO,CAAC,WAAW,CAAgE;IACnF,OAAO,CAAC,qBAAqB,CAAc;IAG3C,OAAO,CAAC,gBAAgB,CAAmE;IAG3F,OAAO,CAAC,UAAU,CAAC,CAAO;IAG1B,OAAO,CAAC,eAAe,CAAC,CAAe;IAEvC,OAAO;IAYP;;;;;;;;OAQG;WACU,MAAM,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;IAwC5E;;;;;;;;;;OAUG;IACH,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM;IActD;;;;;;;;;OASG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BlC;;;;;OAKG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAU/B;;;OAGG;YACW,eAAe;IAiE7B;;;;;OAKG;IACH,OAAO,CAAC,8BAA8B;IAkBtC;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IA8B9B;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAWjC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;;;OAIG;YACW,gBAAgB;IAwB9B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IA6B1B;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;;;;;OAMG;YACW,sBAAsB;IA4PpC;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAiC9B;;;;;;;;OAQG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAmB/B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IA2B9B;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;;;;OAKG;YACW,qBAAqB;IAQnC;;;;;;;OAOG;YACW,+BAA+B;IAQ7C;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;;;OAIG;IACH,OAAO,CAAC,MAAM;IAId;;;OAGG;IACH,OAAO,CAAC,SAAS;IAgBjB;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAYrC;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;CAqC5B"}
1
+ {"version":3,"file":"WhoCanProcessor.d.ts","sourceRoot":"","sources":["../../../src/whoCan/WhoCanProcessor.ts"],"names":[],"mappings":"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"}