@pipeline-builder/ai-core 3.4.42 → 3.4.66

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/README.md CHANGED
@@ -2,47 +2,45 @@
2
2
 
3
3
  📖 **[View documentation](https://mwashburn160.github.io/pipeline-builder/)**
4
4
 
5
- Shared AI provider registry for [Pipeline Builder](https://mwashburn160.github.io/pipeline-builder/): lazily initializes SDK wrappers from environment variables and exposes model resolution helpers used by AI-assisted pipeline and plugin generation.
5
+ Shared AI provider registry for [Pipeline Builder](https://mwashburn160.github.io/pipeline-builder/): lazily initialized SDK wrappers for Anthropic, OpenAI, Google, xAI, and Bedrock used by AI-assisted pipeline and plugin generation.
6
6
 
7
- ## Supported Providers
7
+ > Internal workspace package — consumed by other packages via `workspace:*`. **ESM only** (the `ai` SDK v6 is ESM-only).
8
8
 
9
- | Provider | Env Variable | SDK |
10
- |---|---|---|
11
- | Anthropic | `ANTHROPIC_API_KEY` | `@ai-sdk/anthropic` |
12
- | OpenAI | `OPENAI_API_KEY` | `@ai-sdk/openai` |
13
- | Google | `GOOGLE_GENERATIVE_AI_API_KEY` | `@ai-sdk/google` |
14
- | xAI (Grok) | `XAI_API_KEY` | `@ai-sdk/xai` |
15
- | Amazon Bedrock | `AWS_ACCESS_KEY_ID` | `@ai-sdk/amazon-bedrock` |
9
+ ## Responsibilities
16
10
 
17
- ## Usage
11
+ - Lazily initializes a registry of AI SDK provider wrappers from environment variables — only providers with a configured API key are registered.
12
+ - Resolves a Vercel AI SDK `LanguageModel` for a given provider + model, validating against the static provider catalog.
13
+ - Supports a one-off model created from a caller-supplied API key (not cached in the registry).
14
+ - Re-exports the `ai` SDK helpers consumers need so they don't add a separate dependency.
18
15
 
19
- ```typescript
20
- import {
21
- getAvailableProviders,
22
- getProviderModels,
23
- resolveModel,
24
- createModelWithKey,
25
- } from '@pipeline-builder/ai-core';
16
+ Providers and their env vars: Anthropic (`ANTHROPIC_API_KEY`), OpenAI (`OPENAI_API_KEY`), Google (`GOOGLE_GENERATIVE_AI_API_KEY`), xAI (`XAI_API_KEY`), and Amazon Bedrock (authenticates via the runtime IAM role).
26
17
 
27
- // List providers with configured API keys
28
- const providers = getAvailableProviders();
18
+ ## Key exports
29
19
 
30
- // Get models for a provider (static catalog, no env vars needed)
31
- const models = getProviderModels('anthropic');
20
+ | Export | Purpose |
21
+ |---|---|
22
+ | `getAvailableProviders()` | Returns provider info for providers with a configured API key |
23
+ | `getProviderModels(providerId)` | Returns the model list for a provider from the static catalog (no env var needed) |
24
+ | `resolveModel(providerId, modelId)` | Returns a `LanguageModel` from the registry; throws if the provider is unconfigured or the model is unknown |
25
+ | `createModelWithKey(providerId, modelId, apiKey)` | Creates a one-off `LanguageModel` from a custom key (not cached) |
26
+ | `ProviderEntry` (type) | A registered provider: its info plus a `createModel` factory |
27
+ | `LanguageModel` (type), `generateText`, `streamText`, `Output` | Re-exported from the [`ai`](https://www.npmjs.com/package/ai) SDK |
32
28
 
33
- // Resolve a model from the registry (requires env var)
34
- const model = resolveModel('anthropic', 'claude-sonnet-4-20250514');
29
+ ## Usage
35
30
 
36
- // Create a one-off model with a custom API key
37
- const custom = createModelWithKey('openai', 'gpt-4o', 'sk-...');
31
+ ```typescript
32
+ import { resolveModel, generateText } from '@pipeline-builder/ai-core';
33
+
34
+ const model = resolveModel('anthropic', 'claude-sonnet-4-20250514');
35
+ const { text } = await generateText({ model, prompt: 'Generate a pipeline spec…' });
38
36
  ```
39
37
 
40
- ## API
38
+ ## Development
41
39
 
42
- - `getAvailableProviders()` — Returns providers with configured env vars
43
- - `getProviderModels(providerId)` — Returns model list from static catalog
44
- - `resolveModel(providerId, modelId)` — Returns a `LanguageModel` from the registry
45
- - `createModelWithKey(providerId, modelId, apiKey)` — Creates a temporary `LanguageModel` (not cached)
40
+ ```bash
41
+ pnpm build # projen build (compile + lint + test + package)
42
+ pnpm test # run the Jest test suite
43
+ ```
46
44
 
47
45
  ## License
48
46
 
package/lib/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { getAvailableProviders, getProviderModels, resolveModel, createModelWithKey, } from './provider-registry';
2
- export type { ProviderEntry } from './provider-registry';
1
+ export { getAvailableProviders, getProviderModels, resolveModel, createModelWithKey, } from './provider-registry.js';
2
+ export type { ProviderEntry } from './provider-registry.js';
3
3
  export type { LanguageModel } from 'ai';
4
4
  export { generateText, streamText, Output } from 'ai';
package/lib/index.js CHANGED
@@ -1,15 +1,5 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // SPDX-License-Identifier: Apache-2.0
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.Output = exports.streamText = exports.generateText = exports.createModelWithKey = exports.resolveModel = exports.getProviderModels = exports.getAvailableProviders = void 0;
6
- var provider_registry_1 = require("./provider-registry");
7
- Object.defineProperty(exports, "getAvailableProviders", { enumerable: true, get: function () { return provider_registry_1.getAvailableProviders; } });
8
- Object.defineProperty(exports, "getProviderModels", { enumerable: true, get: function () { return provider_registry_1.getProviderModels; } });
9
- Object.defineProperty(exports, "resolveModel", { enumerable: true, get: function () { return provider_registry_1.resolveModel; } });
10
- Object.defineProperty(exports, "createModelWithKey", { enumerable: true, get: function () { return provider_registry_1.createModelWithKey; } });
11
- var ai_1 = require("ai");
12
- Object.defineProperty(exports, "generateText", { enumerable: true, get: function () { return ai_1.generateText; } });
13
- Object.defineProperty(exports, "streamText", { enumerable: true, get: function () { return ai_1.streamText; } });
14
- Object.defineProperty(exports, "Output", { enumerable: true, get: function () { return ai_1.Output; } });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7OztBQUV0Qyx5REFLNkI7QUFKM0IsMEhBQUEscUJBQXFCLE9BQUE7QUFDckIsc0hBQUEsaUJBQWlCLE9BQUE7QUFDakIsaUhBQUEsWUFBWSxPQUFBO0FBQ1osdUhBQUEsa0JBQWtCLE9BQUE7QUFPcEIseUJBQXNEO0FBQTdDLGtHQUFBLFlBQVksT0FBQTtBQUFFLGdHQUFBLFVBQVUsT0FBQTtBQUFFLDRGQUFBLE1BQU0sT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQge1xuICBnZXRBdmFpbGFibGVQcm92aWRlcnMsXG4gIGdldFByb3ZpZGVyTW9kZWxzLFxuICByZXNvbHZlTW9kZWwsXG4gIGNyZWF0ZU1vZGVsV2l0aEtleSxcbn0gZnJvbSAnLi9wcm92aWRlci1yZWdpc3RyeSc7XG5cbmV4cG9ydCB0eXBlIHsgUHJvdmlkZXJFbnRyeSB9IGZyb20gJy4vcHJvdmlkZXItcmVnaXN0cnknO1xuXG4vLyBSZS1leHBvcnQgQUkgU0RLIHR5cGVzIGNvbnN1bWVycyBjb21tb25seSBuZWVkXG5leHBvcnQgdHlwZSB7IExhbmd1YWdlTW9kZWwgfSBmcm9tICdhaSc7XG5leHBvcnQgeyBnZW5lcmF0ZVRleHQsIHN0cmVhbVRleHQsIE91dHB1dCB9IGZyb20gJ2FpJztcbiJdfQ==
3
+ export { getAvailableProviders, getProviderModels, resolveModel, createModelWithKey, } from './provider-registry.js';
4
+ export { generateText, streamText, Output } from 'ai';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osa0JBQWtCLEdBQ25CLE1BQU0sd0JBQXdCLENBQUM7QUFNaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCB7XG4gIGdldEF2YWlsYWJsZVByb3ZpZGVycyxcbiAgZ2V0UHJvdmlkZXJNb2RlbHMsXG4gIHJlc29sdmVNb2RlbCxcbiAgY3JlYXRlTW9kZWxXaXRoS2V5LFxufSBmcm9tICcuL3Byb3ZpZGVyLXJlZ2lzdHJ5LmpzJztcblxuZXhwb3J0IHR5cGUgeyBQcm92aWRlckVudHJ5IH0gZnJvbSAnLi9wcm92aWRlci1yZWdpc3RyeS5qcyc7XG5cbi8vIFJlLWV4cG9ydCBBSSBTREsgdHlwZXMgY29uc3VtZXJzIGNvbW1vbmx5IG5lZWRcbmV4cG9ydCB0eXBlIHsgTGFuZ3VhZ2VNb2RlbCB9IGZyb20gJ2FpJztcbmV4cG9ydCB7IGdlbmVyYXRlVGV4dCwgc3RyZWFtVGV4dCwgT3V0cHV0IH0gZnJvbSAnYWknO1xuIl19
@@ -1,17 +1,11 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // SPDX-License-Identifier: Apache-2.0
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.getAvailableProviders = getAvailableProviders;
6
- exports.getProviderModels = getProviderModels;
7
- exports.resolveModel = resolveModel;
8
- exports.createModelWithKey = createModelWithKey;
9
- const amazon_bedrock_1 = require("@ai-sdk/amazon-bedrock");
10
- const anthropic_1 = require("@ai-sdk/anthropic");
11
- const google_1 = require("@ai-sdk/google");
12
- const openai_1 = require("@ai-sdk/openai");
13
- const xai_1 = require("@ai-sdk/xai");
14
- const api_core_1 = require("@pipeline-builder/api-core");
3
+ import { createAmazonBedrock } from '@ai-sdk/amazon-bedrock';
4
+ import { createAnthropic } from '@ai-sdk/anthropic';
5
+ import { createGoogleGenerativeAI } from '@ai-sdk/google';
6
+ import { createOpenAI } from '@ai-sdk/openai';
7
+ import { createXai } from '@ai-sdk/xai';
8
+ import { AI_PROVIDER_CATALOG, AI_PROVIDER_ENV_VARS, getAIProviderModels, } from '@pipeline-builder/api-core';
15
9
  const registry = new Map();
16
10
  let initialized = false;
17
11
  /**
@@ -26,14 +20,14 @@ function initRegistry() {
26
20
  // is passed); other providers take an API key. The factory signature
27
21
  // accepts an optional key so both shapes share one type.
28
22
  const factories = {
29
- 'anthropic': (key) => (0, anthropic_1.createAnthropic)({ apiKey: key }),
30
- 'openai': (key) => (0, openai_1.createOpenAI)({ apiKey: key }),
31
- 'google': (key) => (0, google_1.createGoogleGenerativeAI)({ apiKey: key }),
32
- 'xai': (key) => (0, xai_1.createXai)({ apiKey: key }),
33
- 'amazon-bedrock': () => (0, amazon_bedrock_1.createAmazonBedrock)(),
23
+ 'anthropic': (key) => createAnthropic({ apiKey: key }),
24
+ 'openai': (key) => createOpenAI({ apiKey: key }),
25
+ 'google': (key) => createGoogleGenerativeAI({ apiKey: key }),
26
+ 'xai': (key) => createXai({ apiKey: key }),
27
+ 'amazon-bedrock': () => createAmazonBedrock(),
34
28
  };
35
- for (const [id, info] of Object.entries(api_core_1.AI_PROVIDER_CATALOG)) {
36
- const envVar = api_core_1.AI_PROVIDER_ENV_VARS[id];
29
+ for (const [id, info] of Object.entries(AI_PROVIDER_CATALOG)) {
30
+ const envVar = AI_PROVIDER_ENV_VARS[id];
37
31
  const apiKey = envVar ? process.env[envVar] : undefined;
38
32
  if (apiKey && factories[id]) {
39
33
  const provider = factories[id](apiKey);
@@ -46,7 +40,7 @@ function initRegistry() {
46
40
  *
47
41
  * @returns Array of configured provider info with model lists
48
42
  */
49
- function getAvailableProviders() {
43
+ export function getAvailableProviders() {
50
44
  initRegistry();
51
45
  return Array.from(registry.values()).map((e) => e.info);
52
46
  }
@@ -56,8 +50,8 @@ function getAvailableProviders() {
56
50
  * @param providerId - Provider identifier
57
51
  * @returns Array of models, or empty array if provider is unknown
58
52
  */
59
- function getProviderModels(providerId) {
60
- return (0, api_core_1.getAIProviderModels)(providerId);
53
+ export function getProviderModels(providerId) {
54
+ return getAIProviderModels(providerId);
61
55
  }
62
56
  /**
63
57
  * Resolve a LanguageModel from the registry for a configured provider.
@@ -67,7 +61,7 @@ function getProviderModels(providerId) {
67
61
  * @returns LanguageModel instance
68
62
  * @throws Error if provider is not configured or model is invalid
69
63
  */
70
- function resolveModel(providerId, modelId) {
64
+ export function resolveModel(providerId, modelId) {
71
65
  initRegistry();
72
66
  const entry = registry.get(providerId);
73
67
  if (!entry) {
@@ -88,27 +82,27 @@ function resolveModel(providerId, modelId) {
88
82
  * @returns LanguageModel instance
89
83
  * @throws Error if provider or model is unknown
90
84
  */
91
- function createModelWithKey(providerId, modelId, apiKey) {
92
- const models = (0, api_core_1.getAIProviderModels)(providerId);
85
+ export function createModelWithKey(providerId, modelId, apiKey) {
86
+ const models = getAIProviderModels(providerId);
93
87
  if (models.length === 0) {
94
- throw new Error(`Unknown AI provider "${providerId}". Supported: ${Object.keys(api_core_1.AI_PROVIDER_CATALOG).join(', ')}`);
88
+ throw new Error(`Unknown AI provider "${providerId}". Supported: ${Object.keys(AI_PROVIDER_CATALOG).join(', ')}`);
95
89
  }
96
90
  if (!models.some((m) => m.id === modelId)) {
97
91
  throw new Error(`Model "${modelId}" is not available for provider "${providerId}". Available: ${models.map((m) => m.id).join(', ')}`);
98
92
  }
99
93
  switch (providerId) {
100
94
  case 'anthropic':
101
- return (0, anthropic_1.createAnthropic)({ apiKey })(modelId);
95
+ return createAnthropic({ apiKey })(modelId);
102
96
  case 'openai':
103
- return (0, openai_1.createOpenAI)({ apiKey })(modelId);
97
+ return createOpenAI({ apiKey })(modelId);
104
98
  case 'google':
105
- return (0, google_1.createGoogleGenerativeAI)({ apiKey })(modelId);
99
+ return createGoogleGenerativeAI({ apiKey })(modelId);
106
100
  case 'xai':
107
- return (0, xai_1.createXai)({ apiKey })(modelId);
101
+ return createXai({ apiKey })(modelId);
108
102
  case 'amazon-bedrock':
109
- return (0, amazon_bedrock_1.createAmazonBedrock)()(modelId);
103
+ return createAmazonBedrock()(modelId);
110
104
  default:
111
105
  throw new Error(`Unsupported AI provider "${providerId}"`);
112
106
  }
113
107
  }
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItcmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmlkZXItcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBNkR0QyxzREFHQztBQVFELDhDQUVDO0FBVUQsb0NBV0M7QUFXRCxnREF1QkM7QUEvSEQsMkRBQTZEO0FBQzdELGlEQUFvRDtBQUNwRCwyQ0FBMEQ7QUFDMUQsMkNBQThDO0FBQzlDLHFDQUF3QztBQUN4Qyx5REFNb0M7QUFXcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7QUFDbEQsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBRXhCOzs7R0FHRztBQUNILFNBQVMsWUFBWTtJQUNuQixJQUFJLFdBQVc7UUFBRSxPQUFPO0lBQ3hCLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFFbkIseUVBQXlFO0lBQ3pFLHFFQUFxRTtJQUNyRSx5REFBeUQ7SUFDekQsTUFBTSxTQUFTLEdBQXlFO1FBQ3RGLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBQSwyQkFBZSxFQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ3RELFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBQSxxQkFBWSxFQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2hELFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBQSxpQ0FBd0IsRUFBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUM1RCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUEsZUFBUyxFQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUEsb0NBQW1CLEdBQUU7S0FDOUMsQ0FBQztJ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QUFpQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4SSxDQUFDO0lBRUQsUUFBUSxVQUFVLEVBQUUsQ0FBQztRQUNuQixLQUFLLFdBQVc7WUFDZCxPQUFPLElBQUEsMkJBQWUsRUFBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsS0FBSyxRQUFRO1lBQ1gsT0FBTyxJQUFBLHFCQUFZLEVBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLEtBQUssUUFBUTtZQUNYLE9BQU8sSUFBQSxpQ0FBd0IsRUFBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsS0FBSyxLQUFLO1lBQ1IsT0FBTyxJQUFBLGVBQVMsRUFBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsS0FBSyxnQkFBZ0I7WUFDbkIsT0FBTyxJQUFBLG9DQUFtQixHQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEM7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUFtYXpvbkJlZHJvY2sgfSBmcm9tICdAYWktc2RrL2FtYXpvbi1iZWRyb2NrJztcbmltcG9ydCB7IGNyZWF0ZUFudGhyb3BpYyB9IGZyb20gJ0BhaS1zZGsvYW50aHJvcGljJztcbmltcG9ydCB7IGNyZWF0ZUdvb2dsZUdlbmVyYXRpdmVBSSB9IGZyb20gJ0BhaS1zZGsvZ29vZ2xlJztcbmltcG9ydCB7IGNyZWF0ZU9wZW5BSSB9IGZyb20gJ0BhaS1zZGsvb3BlbmFpJztcbmltcG9ydCB7IGNyZWF0ZVhhaSB9IGZyb20gJ0BhaS1zZGsveGFpJztcbmltcG9ydCB7XG4gIEFJX1BST1ZJREVSX0NBVEFMT0csXG4gIEFJX1BST1ZJREVSX0VOVl9WQVJTLFxuICBnZXRBSVByb3ZpZGVyTW9kZWxzLFxuICB0eXBlIEFJUHJvdmlkZXJJbmZvLFxuICB0eXBlIEFJTW9kZWxJbmZvLFxufSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IExhbmd1YWdlTW9kZWwgfSBmcm9tICdhaSc7XG5cbi8vIFByb3ZpZGVyIFJlZ2lzdHJ5XG5cbi8qKiBSZWdpc3RlcmVkIHByb3ZpZGVyIHdpdGggbW9kZWwgZmFjdG9yeSBmdW5jdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZXJFbnRyeSB7XG4gIGluZm86IEFJUHJvdmlkZXJJbmZvO1xuICBjcmVhdGVNb2RlbDogKG1vZGVsSWQ6IHN0cmluZykgPT4gTGFuZ3VhZ2VNb2RlbDtcbn1cblxuY29uc3QgcmVnaXN0cnkgPSBuZXcgTWFwPHN0cmluZywgUHJvdmlkZXJFbnRyeT4oKTtcbmxldCBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4vKipcbiAqIExhemlseSBpbml0aWFsaXplIHRoZSBwcm92aWRlciByZWdpc3RyeSBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqIE9ubHkgcHJvdmlkZXJzIHdpdGggY29uZmlndXJlZCBBUEkga2V5cyBhcmUgcmVnaXN0ZXJlZC5cbiAqL1xuZnVuY3Rpb24gaW5pdFJlZ2lzdHJ5KCk6IHZvaWQge1xuICBpZiAoaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gIC8vIEJlZHJvY2sgYXV0aGVudGljYXRlcyB2aWEgdGhlIElBTSByb2xlIGF0dGFjaGVkIHRvIHRoZSBydW50aW1lIChubyBrZXlcbiAgLy8gaXMgcGFzc2VkKTsgb3RoZXIgcHJvdmlkZXJzIHRha2UgYW4gQVBJIGtleS4gVGhlIGZhY3Rvcnkgc2lnbmF0dXJlXG4gIC8vIGFjY2VwdHMgYW4gb3B0aW9uYWwga2V5IHNvIGJvdGggc2hhcGVzIHNoYXJlIG9uZSB0eXBlLlxuICBjb25zdCBmYWN0b3JpZXM6IFJlY29yZDxzdHJpbmcsIChrZXk/OiBzdHJpbmcpID0+IChtb2RlbElkOiBzdHJpbmcpID0+IExhbmd1YWdlTW9kZWw+ID0ge1xuICAgICdhbnRocm9waWMnOiAoa2V5KSA9PiBjcmVhdGVBbnRocm9waWMoeyBhcGlLZXk6IGtleSB9KSxcbiAgICAnb3BlbmFpJzogKGtleSkgPT4gY3JlYXRlT3BlbkFJKHsgYXBpS2V5OiBrZXkgfSksXG4gICAgJ2dvb2dsZSc6IChrZXkpID0+IGNyZWF0ZUdvb2dsZUdlbmVyYXRpdmVBSSh7IGFwaUtleToga2V5IH0pLFxuICAgICd4YWknOiAoa2V5KSA9PiBjcmVhdGVYYWkoeyBhcGlLZXk6IGtleSB9KSxcbiAgICAnYW1hem9uLWJlZHJvY2snOiAoKSA9PiBjcmVhdGVBbWF6b25CZWRyb2NrKCksXG4gIH07XG5cbiAgZm9yIChjb25zdCBbaWQsIGluZm9dIG9mIE9iamVjdC5lbnRyaWVzKEFJX1BST1ZJREVSX0NBVEFMT0cpKSB7XG4gICAgY29uc3QgZW52VmFyID0gQUlfUFJPVklERVJfRU5WX1ZBUlNbaWRdO1xuICAgIGNvbnN0IGFwaUtleSA9IGVudlZhciA/IHByb2Nlc3MuZW52W2VudlZhcl0gOiB1bmRlZmluZWQ7XG4gICAgaWYgKGFwaUtleSAmJiBmYWN0b3JpZXNbaWRdKSB7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGZhY3Rvcmllc1tpZF0oYXBpS2V5KTtcbiAgICAgIHJlZ2lzdHJ5LnNldChpZCwgeyBpbmZvLCBjcmVhdGVNb2RlbDogcHJvdmlkZXIgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGlzdCBvZiBwcm92aWRlcnMgdGhhdCBoYXZlIEFQSSBrZXlzIGNvbmZpZ3VyZWQgdmlhIGVudiB2YXJzLlxuICpcbiAqIEByZXR1cm5zIEFycmF5IG9mIGNvbmZpZ3VyZWQgcHJvdmlkZXIgaW5mbyB3aXRoIG1vZGVsIGxpc3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmFpbGFibGVQcm92aWRlcnMoKTogQUlQcm92aWRlckluZm9bXSB7XG4gIGluaXRSZWdpc3RyeSgpO1xuICByZXR1cm4gQXJyYXkuZnJvbShyZWdpc3RyeS52YWx1ZXMoKSkubWFwKChlKSA9PiBlLmluZm8pO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG1vZGVsIGxpc3QgZm9yIGEgZ2l2ZW4gcHJvdmlkZXIgSUQgKHJlZ2FyZGxlc3Mgb2YgZW52IHZhciBjb25maWcpLlxuICpcbiAqIEBwYXJhbSBwcm92aWRlcklkIC0gUHJvdmlkZXIgaWRlbnRpZmllclxuICogQHJldHVybnMgQXJyYXkgb2YgbW9kZWxzLCBvciBlbXB0eSBhcnJheSBpZiBwcm92aWRlciBpcyB1bmtub3duXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm92aWRlck1vZGVscyhwcm92aWRlcklkOiBzdHJpbmcpOiBBSU1vZGVsSW5mb1tdIHtcbiAgcmV0dXJuIGdldEFJUHJvdmlkZXJNb2RlbHMocHJvdmlkZXJJZCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIExhbmd1YWdlTW9kZWwgZnJvbSB0aGUgcmVnaXN0cnkgZm9yIGEgY29uZmlndXJlZCBwcm92aWRlci5cbiAqXG4gKiBAcGFyYW0gcHJvdmlkZXJJZCAtIFByb3ZpZGVyIGlkZW50aWZpZXJcbiAqIEBwYXJhbSBtb2RlbElkIC0gTW9kZWwgaWRlbnRpZmllclxuICogQHJldHVybnMgTGFuZ3VhZ2VNb2RlbCBpbnN0YW5jZVxuICogQHRocm93cyBFcnJvciBpZiBwcm92aWRlciBpcyBub3QgY29uZmlndXJlZCBvciBtb2RlbCBpcyBpbnZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTW9kZWwocHJvdmlkZXJJZDogc3RyaW5nLCBtb2RlbElkOiBzdHJpbmcpOiBMYW5ndWFnZU1vZGVsIHtcbiAgaW5pdFJlZ2lzdHJ5KCk7XG4gIGNvbnN0IGVudHJ5ID0gcmVnaXN0cnkuZ2V0KHByb3ZpZGVySWQpO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBSSBwcm92aWRlciBcIiR7cHJvdmlkZXJJZH1cIiBpcyBub3QgY29uZmlndXJlZC4gU2V0IHRoZSBjb3JyZXNwb25kaW5nIEFQSSBrZXkgZW52aXJvbm1lbnQgdmFyaWFibGUuYCk7XG4gIH1cbiAgaWYgKCFlbnRyeS5pbmZvLm1vZGVscy5zb21lKChtKSA9PiBtLmlkID09PSBtb2RlbElkKSkge1xuICAgIGNvbnN0IGF2YWlsYWJsZSA9IGVudHJ5LmluZm8ubW9kZWxzLm1hcCgobSkgPT4gbS5pZCkuam9pbignLCAnKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsIFwiJHttb2RlbElkfVwiIGlzIG5vdCBhdmFpbGFibGUgZm9yIHByb3ZpZGVyIFwiJHtwcm92aWRlcklkfVwiLiBBdmFpbGFibGUgbW9kZWxzOiAke2F2YWlsYWJsZX1gKTtcbiAgfVxuICByZXR1cm4gZW50cnkuY3JlYXRlTW9kZWwobW9kZWxJZCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgdGVtcG9yYXJ5IExhbmd1YWdlTW9kZWwgdXNpbmcgYSBjdXN0b20gQVBJIGtleSAobm90IGNhY2hlZCBpbiByZWdpc3RyeSkuXG4gKlxuICogQHBhcmFtIHByb3ZpZGVySWQgLSBQcm92aWRlciBpZGVudGlmaWVyXG4gKiBAcGFyYW0gbW9kZWxJZCAtIE1vZGVsIGlkZW50aWZpZXJcbiAqIEBwYXJhbSBhcGlLZXkgLSBDdXN0b20gQVBJIGtleVxuICogQHJldHVybnMgTGFuZ3VhZ2VNb2RlbCBpbnN0YW5jZVxuICogQHRocm93cyBFcnJvciBpZiBwcm92aWRlciBvciBtb2RlbCBpcyB1bmtub3duXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbFdpdGhLZXkocHJvdmlkZXJJZDogc3RyaW5nLCBtb2RlbElkOiBzdHJpbmcsIGFwaUtleTogc3RyaW5nKTogTGFuZ3VhZ2VNb2RlbCB7XG4gIGNvbnN0IG1vZGVscyA9IGdldEFJUHJvdmlkZXJNb2RlbHMocHJvdmlkZXJJZCk7XG4gIGlmIChtb2RlbHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIEFJIHByb3ZpZGVyIFwiJHtwcm92aWRlcklkfVwiLiBTdXBwb3J0ZWQ6ICR7T2JqZWN0LmtleXMoQUlfUFJPVklERVJfQ0FUQUxPRykuam9pbignLCAnKX1gKTtcbiAgfVxuICBpZiAoIW1vZGVscy5zb21lKChtKSA9PiBtLmlkID09PSBtb2RlbElkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTW9kZWwgXCIke21vZGVsSWR9XCIgaXMgbm90IGF2YWlsYWJsZSBmb3IgcHJvdmlkZXIgXCIke3Byb3ZpZGVySWR9XCIuIEF2YWlsYWJsZTogJHttb2RlbHMubWFwKChtKSA9PiBtLmlkKS5qb2luKCcsICcpfWApO1xuICB9XG5cbiAgc3dpdGNoIChwcm92aWRlcklkKSB7XG4gICAgY2FzZSAnYW50aHJvcGljJzpcbiAgICAgIHJldHVybiBjcmVhdGVBbnRocm9waWMoeyBhcGlLZXkgfSkobW9kZWxJZCk7XG4gICAgY2FzZSAnb3BlbmFpJzpcbiAgICAgIHJldHVybiBjcmVhdGVPcGVuQUkoeyBhcGlLZXkgfSkobW9kZWxJZCk7XG4gICAgY2FzZSAnZ29vZ2xlJzpcbiAgICAgIHJldHVybiBjcmVhdGVHb29nbGVHZW5lcmF0aXZlQUkoeyBhcGlLZXkgfSkobW9kZWxJZCk7XG4gICAgY2FzZSAneGFpJzpcbiAgICAgIHJldHVybiBjcmVhdGVYYWkoeyBhcGlLZXkgfSkobW9kZWxJZCk7XG4gICAgY2FzZSAnYW1hem9uLWJlZHJvY2snOlxuICAgICAgcmV0dXJuIGNyZWF0ZUFtYXpvbkJlZHJvY2soKShtb2RlbElkKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBBSSBwcm92aWRlciBcIiR7cHJvdmlkZXJJZH1cImApO1xuICB9XG59XG4iXX0=
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItcmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmlkZXItcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsbUJBQW1CLEdBR3BCLE1BQU0sNEJBQTRCLENBQUM7QUFXcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7QUFDbEQsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBRXhCOzs7R0FHRztBQUNILFNBQVMsWUFBWTtJQUNuQixJQUFJLFdBQVc7UUFBRSxPQUFPO0lBQ3hCLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFFbkIseUVBQXlFO0lBQ3pFLHFFQUFxRTtJQUNyRSx5REFBeUQ7SUFDekQsTUFBTSxTQUFTLEdBQXlFO1FBQ3RGLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ3RELFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2hELFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsd0JBQXdCLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFD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LENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxPQUFPLG9DQUFvQyxVQUFVLGlCQUFpQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4SSxDQUFDO0lBRUQsUUFBUSxVQUFVLEVBQUUsQ0FBQztRQUNuQixLQUFLLFdBQVc7WUFDZCxPQUFPLGVBQWUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsS0FBSyxRQUFRO1lBQ1gsT0FBTyxZQUFZLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLEtBQUssUUFBUTtZQUNYLE9BQU8sd0JBQXdCLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELEtBQUssS0FBSztZQUNSLE9BQU8sU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QyxLQUFLLGdCQUFnQjtZQUNuQixPQUFPLG1CQUFtQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEM7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUFtYXpvbkJlZHJvY2sgfSBmcm9tICdAYWktc2RrL2FtYXpvbi1iZWRyb2NrJztcbmltcG9ydCB7IGNyZWF0ZUFudGhyb3BpYyB9IGZyb20gJ0BhaS1zZGsvYW50aHJvcGljJztcbmltcG9ydCB7IGNyZWF0ZUdvb2dsZUdlbmVyYXRpdmVBSSB9IGZyb20gJ0BhaS1zZGsvZ29vZ2xlJztcbmltcG9ydCB7IGNyZWF0ZU9wZW5BSSB9IGZyb20gJ0BhaS1zZGsvb3BlbmFpJztcbmltcG9ydCB7IGNyZWF0ZVhhaSB9IGZyb20gJ0BhaS1zZGsveGFpJztcbmltcG9ydCB7XG4gIEFJX1BST1ZJREVSX0NBVEFMT0csXG4gIEFJX1BST1ZJREVSX0VOVl9WQVJTLFxuICBnZXRBSVByb3ZpZGVyTW9kZWxzLFxuICB0eXBlIEFJUHJvdmlkZXJJbmZvLFxuICB0eXBlIEFJTW9kZWxJbmZvLFxufSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IExhbmd1YWdlTW9kZWwgfSBmcm9tICdhaSc7XG5cbi8vIFByb3ZpZGVyIFJlZ2lzdHJ5XG5cbi8qKiBSZWdpc3RlcmVkIHByb3ZpZGVyIHdpdGggbW9kZWwgZmFjdG9yeSBmdW5jdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZXJFbnRyeSB7XG4gIGluZm86IEFJUHJvdmlkZXJJbmZvO1xuICBjcmVhdGVNb2RlbDogKG1vZGVsSWQ6IHN0cmluZykgPT4gTGFuZ3VhZ2VNb2RlbDtcbn1cblxuY29uc3QgcmVnaXN0cnkgPSBuZXcgTWFwPHN0cmluZywgUHJvdmlkZXJFbnRyeT4oKTtcbmxldCBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4vKipcbiAqIExhemlseSBpbml0aWFsaXplIHRoZSBwcm92aWRlciByZWdpc3RyeSBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqIE9ubHkgcHJvdmlkZXJzIHdpdGggY29uZmlndXJlZCBBUEkga2V5cyBhcmUgcmVnaXN0ZXJlZC5cbiAqL1xuZnVuY3Rpb24gaW5pdFJlZ2lzdHJ5KCk6IHZvaWQge1xuICBpZiAoaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gIC8vIEJlZHJvY2sgYXV0aGVudGljYXRlcyB2aWEgdGhlIElBTSByb2xlIGF0dGFjaGVkIHRvIHRoZSBydW50aW1lIChubyBrZXlcbiAgLy8gaXMgcGFzc2VkKTsgb3RoZXIgcHJvdmlkZXJzIHRha2UgYW4gQVBJIGtleS4gVGhlIGZhY3Rvcnkgc2lnbmF0dXJlXG4gIC8vIGFjY2VwdHMgYW4gb3B0aW9uYWwga2V5IHNvIGJvdGggc2hhcGVzIHNoYXJlIG9uZSB0eXBlLlxuICBjb25zdCBmYWN0b3JpZXM6IFJlY29yZDxzdHJpbmcsIChrZXk/OiBzdHJpbmcpID0+IChtb2RlbElkOiBzdHJpbmcpID0+IExhbmd1YWdlTW9kZWw+ID0ge1xuICAgICdhbnRocm9waWMnOiAoa2V5KSA9PiBjcmVhdGVBbnRocm9waWMoeyBhcGlLZXk6IGtleSB9KSxcbiAgICAnb3BlbmFpJzogKGtleSkgPT4gY3JlYXRlT3BlbkFJKHsgYXBpS2V5OiBrZXkgfSksXG4gICAgJ2dvb2dsZSc6IChrZXkpID0+IGNyZWF0ZUdvb2dsZUdlbmVyYXRpdmVBSSh7IGFwaUtleToga2V5IH0pLFxuICAgICd4YWknOiAoa2V5KSA9PiBjcmVhdGVYYWkoeyBhcGlLZXk6IGtleSB9KSxcbiAgICAnYW1hem9uLWJlZHJvY2snOiAoKSA9PiBjcmVhdGVBbWF6b25CZWRyb2NrKCksXG4gIH07XG5cbiAgZm9yIChjb25zdCBbaWQsIGluZm9dIG9mIE9iamVjdC5lbnRyaWVzKEFJX1BST1ZJREVSX0NBVEFMT0cpKSB7XG4gICAgY29uc3QgZW52VmFyID0gQUlfUFJPVklERVJfRU5WX1ZBUlNbaWRdO1xuICAgIGNvbnN0IGFwaUtleSA9IGVudlZhciA/IHByb2Nlc3MuZW52W2VudlZhcl0gOiB1bmRlZmluZWQ7XG4gICAgaWYgKGFwaUtleSAmJiBmYWN0b3JpZXNbaWRdKSB7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGZhY3Rvcmllc1tpZF0oYXBpS2V5KTtcbiAgICAgIHJlZ2lzdHJ5LnNldChpZCwgeyBpbmZvLCBjcmVhdGVNb2RlbDogcHJvdmlkZXIgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGlzdCBvZiBwcm92aWRlcnMgdGhhdCBoYXZlIEFQSSBrZXlzIGNvbmZpZ3VyZWQgdmlhIGVudiB2YXJzLlxuICpcbiAqIEByZXR1cm5zIEFycmF5IG9mIGNvbmZpZ3VyZWQgcHJvdmlkZXIgaW5mbyB3aXRoIG1vZGVsIGxpc3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmFpbGFibGVQcm92aWRlcnMoKTogQUlQcm92aWRlckluZm9bXSB7XG4gIGluaXRSZWdpc3RyeSgpO1xuICByZXR1cm4gQXJyYXkuZnJvbShyZWdpc3RyeS52YWx1ZXMoKSkubWFwKChlKSA9PiBlLmluZm8pO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG1vZGVsIGxpc3QgZm9yIGEgZ2l2ZW4gcHJvdmlkZXIgSUQgKHJlZ2FyZGxlc3Mgb2YgZW52IHZhciBjb25maWcpLlxuICpcbiAqIEBwYXJhbSBwcm92aWRlcklkIC0gUHJvdmlkZXIgaWRlbnRpZmllclxuICogQHJldHVybnMgQXJyYXkgb2YgbW9kZWxzLCBvciBlbXB0eSBhcnJheSBpZiBwcm92aWRlciBpcyB1bmtub3duXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm92aWRlck1vZGVscyhwcm92aWRlcklkOiBzdHJpbmcpOiBBSU1vZGVsSW5mb1tdIHtcbiAgcmV0dXJuIGdldEFJUHJvdmlkZXJNb2RlbHMocHJvdmlkZXJJZCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIExhbmd1YWdlTW9kZWwgZnJvbSB0aGUgcmVnaXN0cnkgZm9yIGEgY29uZmlndXJlZCBwcm92aWRlci5cbiAqXG4gKiBAcGFyYW0gcHJvdmlkZXJJZCAtIFByb3ZpZGVyIGlkZW50aWZpZXJcbiAqIEBwYXJhbSBtb2RlbElkIC0gTW9kZWwgaWRlbnRpZmllclxuICogQHJldHVybnMgTGFuZ3VhZ2VNb2RlbCBpbnN0YW5jZVxuICogQHRocm93cyBFcnJvciBpZiBwcm92aWRlciBpcyBub3QgY29uZmlndXJlZCBvciBtb2RlbCBpcyBpbnZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTW9kZWwocHJvdmlkZXJJZDogc3RyaW5nLCBtb2RlbElkOiBzdHJpbmcpOiBMYW5ndWFnZU1vZGVsIHtcbiAgaW5pdFJlZ2lzdHJ5KCk7XG4gIGNvbnN0IGVudHJ5ID0gcmVnaXN0cnkuZ2V0KHByb3ZpZGVySWQpO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBSSBwcm92aWRlciBcIiR7cHJvdmlkZXJJZH1cIiBpcyBub3QgY29uZmlndXJlZC4gU2V0IHRoZSBjb3JyZXNwb25kaW5nIEFQSSBrZXkgZW52aXJvbm1lbnQgdmFyaWFibGUuYCk7XG4gIH1cbiAgaWYgKCFlbnRyeS5pbmZvLm1vZGVscy5zb21lKChtKSA9PiBtLmlkID09PSBtb2RlbElkKSkge1xuICAgIGNvbnN0IGF2YWlsYWJsZSA9IGVudHJ5LmluZm8ubW9kZWxzLm1hcCgobSkgPT4gbS5pZCkuam9pbignLCAnKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsIFwiJHttb2RlbElkfVwiIGlzIG5vdCBhdmFpbGFibGUgZm9yIHByb3ZpZGVyIFwiJHtwcm92aWRlcklkfVwiLiBBdmFpbGFibGUgbW9kZWxzOiAke2F2YWlsYWJsZX1gKTtcbiAgfVxuICByZXR1cm4gZW50cnkuY3JlYXRlTW9kZWwobW9kZWxJZCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgdGVtcG9yYXJ5IExhbmd1YWdlTW9kZWwgdXNpbmcgYSBjdXN0b20gQVBJIGtleSAobm90IGNhY2hlZCBpbiByZWdpc3RyeSkuXG4gKlxuICogQHBhcmFtIHByb3ZpZGVySWQgLSBQcm92aWRlciBpZGVudGlmaWVyXG4gKiBAcGFyYW0gbW9kZWxJZCAtIE1vZGVsIGlkZW50aWZpZXJcbiAqIEBwYXJhbSBhcGlLZXkgLSBDdXN0b20gQVBJIGtleVxuICogQHJldHVybnMgTGFuZ3VhZ2VNb2RlbCBpbnN0YW5jZVxuICogQHRocm93cyBFcnJvciBpZiBwcm92aWRlciBvciBtb2RlbCBpcyB1bmtub3duXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbFdpdGhLZXkocHJvdmlkZXJJZDogc3RyaW5nLCBtb2RlbElkOiBzdHJpbmcsIGFwaUtleTogc3RyaW5nKTogTGFuZ3VhZ2VNb2RlbCB7XG4gIGNvbnN0IG1vZGVscyA9IGdldEFJUHJvdmlkZXJNb2RlbHMocHJvdmlkZXJJZCk7XG4gIGlmIChtb2RlbHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIEFJIHByb3ZpZGVyIFwiJHtwcm92aWRlcklkfVwiLiBTdXBwb3J0ZWQ6ICR7T2JqZWN0LmtleXMoQUlfUFJPVklERVJfQ0FUQUxPRykuam9pbignLCAnKX1gKTtcbiAgfVxuICBpZiAoIW1vZGVscy5zb21lKChtKSA9PiBtLmlkID09PSBtb2RlbElkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTW9kZWwgXCIke21vZGVsSWR9XCIgaXMgbm90IGF2YWlsYWJsZSBmb3IgcHJvdmlkZXIgXCIke3Byb3ZpZGVySWR9XCIuIEF2YWlsYWJsZTogJHttb2RlbHMubWFwKChtKSA9PiBtLmlkKS5qb2luKCcsICcpfWApO1xuICB9XG5cbiAgc3dpdGNoIChwcm92aWRlcklkKSB7XG4gICAgY2FzZSAnYW50aHJvcGljJzpcbiAgICAgIHJldHVybiBjcmVhdGVBbnRocm9waWMoeyBhcGlLZXkgfSkobW9kZWxJZCk7XG4gICAgY2FzZSAnb3BlbmFpJzpcbiAgICAgIHJldHVybiBjcmVhdGVPcGVuQUkoeyBhcGlLZXkgfSkobW9kZWxJZCk7XG4gICAgY2FzZSAnZ29vZ2xlJzpcbiAgICAgIHJldHVybiBjcmVhdGVHb29nbGVHZW5lcmF0aXZlQUkoeyBhcGlLZXkgfSkobW9kZWxJZCk7XG4gICAgY2FzZSAneGFpJzpcbiAgICAgIHJldHVybiBjcmVhdGVYYWkoeyBhcGlLZXkgfSkobW9kZWxJZCk7XG4gICAgY2FzZSAnYW1hem9uLWJlZHJvY2snOlxuICAgICAgcmV0dXJuIGNyZWF0ZUFtYXpvbkJlZHJvY2soKShtb2RlbElkKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBBSSBwcm92aWRlciBcIiR7cHJvdmlkZXJJZH1cImApO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -6,28 +6,28 @@
6
6
  "url": "git+https://github.com/mwashburn160/pipeline-builder.git"
7
7
  },
8
8
  "devDependencies": {
9
+ "@jest/globals": "30.2.0",
9
10
  "@stylistic/eslint-plugin": "^2",
10
- "@types/jest": "30.0.0",
11
- "@types/node": "25.3.0",
11
+ "@types/node": "25.9.2",
12
12
  "@typescript-eslint/eslint-plugin": "^8",
13
13
  "@typescript-eslint/parser": "^8",
14
14
  "eslint": "^9",
15
15
  "eslint-import-resolver-typescript": "^4.4.4",
16
16
  "eslint-plugin-import": "^2.32.0",
17
- "jest": "30.0.0",
17
+ "jest": "30.4.2",
18
18
  "jest-junit": "^17",
19
19
  "ts-jest": "^29",
20
- "typescript": "5.9.3"
20
+ "typescript": "6.0.3"
21
21
  },
22
22
  "dependencies": {
23
- "@ai-sdk/amazon-bedrock": "4.0.64",
24
- "@ai-sdk/anthropic": "3.0.47",
25
- "@ai-sdk/google": "3.0.31",
26
- "@ai-sdk/openai": "3.0.31",
27
- "@ai-sdk/openai-compatible": "2.0.31",
28
- "@ai-sdk/xai": "3.0.59",
29
- "@pipeline-builder/api-core": "3.4.41",
30
- "ai": "6.0.99"
23
+ "@ai-sdk/amazon-bedrock": "4.0.113",
24
+ "@ai-sdk/anthropic": "3.0.81",
25
+ "@ai-sdk/google": "3.0.80",
26
+ "@ai-sdk/openai": "3.0.68",
27
+ "@ai-sdk/openai-compatible": "2.0.48",
28
+ "@ai-sdk/xai": "3.0.93",
29
+ "ai": "6.0.198",
30
+ "@pipeline-builder/api-core": "3.4.66"
31
31
  },
32
32
  "keywords": [
33
33
  "aws",
@@ -47,7 +47,7 @@
47
47
  "plugins",
48
48
  "typescript",
49
49
  "self-service",
50
- "multi-tenant",
50
+ "multi-team",
51
51
  "compliance",
52
52
  "automation",
53
53
  "infrastructure-as-code",
@@ -67,7 +67,11 @@
67
67
  "main": "lib/index.js",
68
68
  "license": "Apache-2.0",
69
69
  "homepage": "https://mwashburn160.github.io/pipeline-builder/",
70
- "version": "3.4.42",
70
+ "publishConfig": {
71
+ "access": "public",
72
+ "registry": "https://registry.npmjs.org/"
73
+ },
74
+ "version": "3.4.66",
71
75
  "bugs": {
72
76
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
73
77
  },
@@ -109,6 +113,7 @@
109
113
  "^.+\\.[t]sx?$": [
110
114
  "ts-jest",
111
115
  {
116
+ "useESM": true,
112
117
  "tsconfig": "tsconfig.dev.json",
113
118
  "diagnostics": {
114
119
  "ignoreCodes": [
@@ -118,11 +123,17 @@
118
123
  }
119
124
  ]
120
125
  },
126
+ "extensionsToTreatAsEsm": [
127
+ ".ts",
128
+ ".tsx"
129
+ ],
121
130
  "moduleNameMapper": {
122
- "^uuid$": "<rootDir>/../../jest-uuid-stub.js"
131
+ "^uuid$": "<rootDir>/../../jest-uuid-stub.js",
132
+ "^(\\.{1,2}/.*)\\.js$": "$1"
123
133
  }
124
134
  },
125
135
  "types": "lib/index.d.ts",
136
+ "type": "module",
126
137
  "//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"pnpm dlx projen\".",
127
138
  "scripts": {
128
139
  "build": "pnpm dlx projen build",