@marktoflow/core 2.0.0-alpha.15 → 2.0.0-alpha.16
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 +24 -365
- package/dist/built-in-operations.d.ts +10 -0
- package/dist/built-in-operations.d.ts.map +1 -1
- package/dist/built-in-operations.js +386 -1
- package/dist/built-in-operations.js.map +1 -1
- package/dist/credentials.d.ts +60 -1
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +229 -4
- package/dist/credentials.js.map +1 -1
- package/dist/engine.d.ts +36 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +462 -21
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/models.d.ts +399 -6
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +60 -1
- package/dist/models.js.map +1 -1
- package/dist/oauth-manager.d.ts +128 -0
- package/dist/oauth-manager.d.ts.map +1 -0
- package/dist/oauth-manager.js +291 -0
- package/dist/oauth-manager.js.map +1 -0
- package/dist/oauth-refresh.d.ts +37 -0
- package/dist/oauth-refresh.d.ts.map +1 -0
- package/dist/oauth-refresh.js +76 -0
- package/dist/oauth-refresh.js.map +1 -0
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +19 -0
- package/dist/parser.js.map +1 -1
- package/dist/sdk-registry.d.ts +7 -1
- package/dist/sdk-registry.d.ts.map +1 -1
- package/dist/sdk-registry.js +38 -9
- package/dist/sdk-registry.js.map +1 -1
- package/dist/secret-providers/index.d.ts +12 -0
- package/dist/secret-providers/index.d.ts.map +1 -0
- package/dist/secret-providers/index.js +11 -0
- package/dist/secret-providers/index.js.map +1 -0
- package/dist/secret-providers/providers/aws.d.ts +32 -0
- package/dist/secret-providers/providers/aws.d.ts.map +1 -0
- package/dist/secret-providers/providers/aws.js +118 -0
- package/dist/secret-providers/providers/aws.js.map +1 -0
- package/dist/secret-providers/providers/azure.d.ts +40 -0
- package/dist/secret-providers/providers/azure.d.ts.map +1 -0
- package/dist/secret-providers/providers/azure.js +170 -0
- package/dist/secret-providers/providers/azure.js.map +1 -0
- package/dist/secret-providers/providers/env.d.ts +26 -0
- package/dist/secret-providers/providers/env.d.ts.map +1 -0
- package/dist/secret-providers/providers/env.js +59 -0
- package/dist/secret-providers/providers/env.js.map +1 -0
- package/dist/secret-providers/providers/vault.d.ts +39 -0
- package/dist/secret-providers/providers/vault.d.ts.map +1 -0
- package/dist/secret-providers/providers/vault.js +180 -0
- package/dist/secret-providers/providers/vault.js.map +1 -0
- package/dist/secret-providers/secret-manager.d.ts +72 -0
- package/dist/secret-providers/secret-manager.d.ts.map +1 -0
- package/dist/secret-providers/secret-manager.js +226 -0
- package/dist/secret-providers/secret-manager.js.map +1 -0
- package/dist/secret-providers/types.d.ts +105 -0
- package/dist/secret-providers/types.d.ts.map +1 -0
- package/dist/secret-providers/types.js +8 -0
- package/dist/secret-providers/types.js.map +1 -0
- package/dist/secrets/index.d.ts +12 -0
- package/dist/secrets/index.d.ts.map +1 -0
- package/dist/secrets/index.js +11 -0
- package/dist/secrets/index.js.map +1 -0
- package/dist/secrets/providers/aws.d.ts +32 -0
- package/dist/secrets/providers/aws.d.ts.map +1 -0
- package/dist/secrets/providers/aws.js +118 -0
- package/dist/secrets/providers/aws.js.map +1 -0
- package/dist/secrets/providers/azure.d.ts +40 -0
- package/dist/secrets/providers/azure.d.ts.map +1 -0
- package/dist/secrets/providers/azure.js +170 -0
- package/dist/secrets/providers/azure.js.map +1 -0
- package/dist/secrets/providers/env.d.ts +26 -0
- package/dist/secrets/providers/env.d.ts.map +1 -0
- package/dist/secrets/providers/env.js +59 -0
- package/dist/secrets/providers/env.js.map +1 -0
- package/dist/secrets/providers/vault.d.ts +39 -0
- package/dist/secrets/providers/vault.d.ts.map +1 -0
- package/dist/secrets/providers/vault.js +180 -0
- package/dist/secrets/providers/vault.js.map +1 -0
- package/dist/secrets/secret-manager.d.ts +72 -0
- package/dist/secrets/secret-manager.d.ts.map +1 -0
- package/dist/secrets/secret-manager.js +226 -0
- package/dist/secrets/secret-manager.js.map +1 -0
- package/dist/secrets/types.d.ts +105 -0
- package/dist/secrets/types.d.ts.map +1 -0
- package/dist/secrets/types.js +8 -0
- package/dist/secrets/types.js.map +1 -0
- package/package.json +1 -1
- package/dist/expression-helpers.d.ts +0 -309
- package/dist/expression-helpers.d.ts.map +0 -1
- package/dist/expression-helpers.js +0 -697
- package/dist/expression-helpers.js.map +0 -1
- package/dist/pipeline-parser.d.ts +0 -38
- package/dist/pipeline-parser.d.ts.map +0 -1
- package/dist/pipeline-parser.js +0 -219
- package/dist/pipeline-parser.js.map +0 -1
- package/dist/regex-operators.d.ts +0 -86
- package/dist/regex-operators.d.ts.map +0 -1
- package/dist/regex-operators.js +0 -383
- package/dist/regex-operators.js.map +0 -1
- package/dist/version.d.ts +0 -8
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -8
- package/dist/version.js.map +0 -1
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret Manager
|
|
3
|
+
*
|
|
4
|
+
* Coordinates access to external secret managers with caching support.
|
|
5
|
+
*/
|
|
6
|
+
export class SecretNotFoundError extends Error {
|
|
7
|
+
constructor(message) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = 'SecretNotFoundError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class SecretProviderError extends Error {
|
|
13
|
+
constructor(message) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.name = 'SecretProviderError';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export class SecretManager {
|
|
19
|
+
providers = new Map();
|
|
20
|
+
cache = new Map();
|
|
21
|
+
options;
|
|
22
|
+
constructor(options) {
|
|
23
|
+
this.options = {
|
|
24
|
+
providers: options.providers,
|
|
25
|
+
defaultCacheTTL: options.defaultCacheTTL ?? 300, // 5 minutes
|
|
26
|
+
referencePrefix: options.referencePrefix ?? 'secret:',
|
|
27
|
+
throwOnNotFound: options.throwOnNotFound ?? true,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Register a secret provider
|
|
32
|
+
*/
|
|
33
|
+
registerProvider(type, provider) {
|
|
34
|
+
this.providers.set(type, provider);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Initialize all configured providers
|
|
38
|
+
*/
|
|
39
|
+
async initialize() {
|
|
40
|
+
for (const [type, provider] of this.providers.entries()) {
|
|
41
|
+
try {
|
|
42
|
+
await provider.initialize();
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
throw new SecretProviderError(`Failed to initialize ${type} provider: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get a secret from the appropriate provider
|
|
51
|
+
*/
|
|
52
|
+
async getSecret(reference) {
|
|
53
|
+
const parsed = this.parseReference(reference);
|
|
54
|
+
// Check cache first
|
|
55
|
+
if (this.options.providers.find((p) => p.cacheEnabled !== false)) {
|
|
56
|
+
const cached = this.getCached(reference);
|
|
57
|
+
if (cached) {
|
|
58
|
+
return cached;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Get provider
|
|
62
|
+
const provider = this.providers.get(parsed.provider);
|
|
63
|
+
if (!provider) {
|
|
64
|
+
throw new SecretProviderError(`Provider '${parsed.provider}' not configured`);
|
|
65
|
+
}
|
|
66
|
+
// Fetch secret
|
|
67
|
+
try {
|
|
68
|
+
const secret = await provider.getSecret(parsed.path);
|
|
69
|
+
// Extract key if specified
|
|
70
|
+
if (parsed.key && typeof secret.value === 'object') {
|
|
71
|
+
const keyValue = this.extractKey(secret.value, parsed.key);
|
|
72
|
+
secret.value = keyValue;
|
|
73
|
+
}
|
|
74
|
+
// Cache the secret
|
|
75
|
+
this.cacheSecret(reference, secret);
|
|
76
|
+
return secret;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (this.options.throwOnNotFound) {
|
|
80
|
+
throw new SecretNotFoundError(`Secret not found: ${reference} - ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
81
|
+
}
|
|
82
|
+
// Return empty secret if not throwing
|
|
83
|
+
return { value: '' };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Parse a secret reference
|
|
88
|
+
* Formats:
|
|
89
|
+
* ${secret:vault://path/to/secret}
|
|
90
|
+
* ${secret:aws://secret-name}
|
|
91
|
+
* ${secret:azure://secret-name}
|
|
92
|
+
* ${secret:vault://path/to/secret#key}
|
|
93
|
+
*/
|
|
94
|
+
parseReference(reference) {
|
|
95
|
+
// Remove ${secret: and } if present
|
|
96
|
+
let cleaned = reference.trim();
|
|
97
|
+
if (cleaned.startsWith('${')) {
|
|
98
|
+
cleaned = cleaned.slice(2, -1);
|
|
99
|
+
}
|
|
100
|
+
if (cleaned.startsWith(this.options.referencePrefix)) {
|
|
101
|
+
cleaned = cleaned.slice(this.options.referencePrefix.length);
|
|
102
|
+
}
|
|
103
|
+
// Parse provider://path#key format
|
|
104
|
+
const match = cleaned.match(/^([^:]+):\/\/([^#]+)(#(.+))?$/);
|
|
105
|
+
if (!match) {
|
|
106
|
+
throw new SecretProviderError(`Invalid secret reference format: ${reference}`);
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
raw: reference,
|
|
110
|
+
provider: match[1],
|
|
111
|
+
path: match[2],
|
|
112
|
+
key: match[4],
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Extract a key from a JSON secret
|
|
117
|
+
*/
|
|
118
|
+
extractKey(value, key) {
|
|
119
|
+
const parts = key.split('.');
|
|
120
|
+
let current = value;
|
|
121
|
+
for (const part of parts) {
|
|
122
|
+
if (typeof current === 'object' && current !== null && part in current) {
|
|
123
|
+
current = current[part];
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
throw new SecretNotFoundError(`Key '${key}' not found in secret`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (typeof current === 'string') {
|
|
130
|
+
return current;
|
|
131
|
+
}
|
|
132
|
+
if (typeof current === 'number' || typeof current === 'boolean') {
|
|
133
|
+
return String(current);
|
|
134
|
+
}
|
|
135
|
+
return JSON.stringify(current);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get secret from cache if not expired
|
|
139
|
+
*/
|
|
140
|
+
getCached(reference) {
|
|
141
|
+
const cached = this.cache.get(reference);
|
|
142
|
+
if (!cached)
|
|
143
|
+
return null;
|
|
144
|
+
if (cached.expiresAt < new Date()) {
|
|
145
|
+
this.cache.delete(reference);
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
return cached.value;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Cache a secret
|
|
152
|
+
*/
|
|
153
|
+
cacheSecret(reference, secret) {
|
|
154
|
+
const now = new Date();
|
|
155
|
+
const ttl = this.options.defaultCacheTTL * 1000; // Convert to ms
|
|
156
|
+
const expiresAt = new Date(now.getTime() + ttl);
|
|
157
|
+
this.cache.set(reference, {
|
|
158
|
+
value: secret,
|
|
159
|
+
fetchedAt: now,
|
|
160
|
+
expiresAt,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Clear cache
|
|
165
|
+
*/
|
|
166
|
+
clearCache() {
|
|
167
|
+
this.cache.clear();
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Clear expired cache entries
|
|
171
|
+
*/
|
|
172
|
+
clearExpiredCache() {
|
|
173
|
+
const now = new Date();
|
|
174
|
+
for (const [key, cached] of this.cache.entries()) {
|
|
175
|
+
if (cached.expiresAt < now) {
|
|
176
|
+
this.cache.delete(key);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Check if a reference looks like a secret reference
|
|
182
|
+
*/
|
|
183
|
+
static isSecretReference(value) {
|
|
184
|
+
return value.includes('secret:') && value.includes('://');
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Replace secret references in a string
|
|
188
|
+
*/
|
|
189
|
+
async resolveSecrets(value) {
|
|
190
|
+
// Find all secret references
|
|
191
|
+
const regex = /\$\{secret:[^}]+\}/g;
|
|
192
|
+
const matches = value.match(regex);
|
|
193
|
+
if (!matches) {
|
|
194
|
+
return value;
|
|
195
|
+
}
|
|
196
|
+
let result = value;
|
|
197
|
+
for (const match of matches) {
|
|
198
|
+
try {
|
|
199
|
+
const secret = await this.getSecret(match);
|
|
200
|
+
const secretValue = typeof secret.value === 'string' ? secret.value : JSON.stringify(secret.value);
|
|
201
|
+
result = result.replace(match, secretValue);
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
if (this.options.throwOnNotFound) {
|
|
205
|
+
throw error;
|
|
206
|
+
}
|
|
207
|
+
// Replace with empty string if not throwing
|
|
208
|
+
result = result.replace(match, '');
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return result;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Clean up resources
|
|
215
|
+
*/
|
|
216
|
+
async destroy() {
|
|
217
|
+
for (const provider of this.providers.values()) {
|
|
218
|
+
if (provider.destroy) {
|
|
219
|
+
await provider.destroy();
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
this.providers.clear();
|
|
223
|
+
this.cache.clear();
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=secret-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-manager.js","sourceRoot":"","sources":["../../src/secrets/secret-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External Secrets Management Types
|
|
3
|
+
*
|
|
4
|
+
* Provides integration with external secret managers like HashiCorp Vault,
|
|
5
|
+
* AWS Secrets Manager, Azure Key Vault, etc.
|
|
6
|
+
*/
|
|
7
|
+
export interface SecretMetadata {
|
|
8
|
+
version?: string;
|
|
9
|
+
createdAt?: Date;
|
|
10
|
+
updatedAt?: Date;
|
|
11
|
+
expiresAt?: Date;
|
|
12
|
+
tags?: Record<string, string>;
|
|
13
|
+
}
|
|
14
|
+
export interface Secret {
|
|
15
|
+
value: string | Record<string, unknown>;
|
|
16
|
+
metadata?: SecretMetadata;
|
|
17
|
+
}
|
|
18
|
+
export interface SecretProviderConfig {
|
|
19
|
+
type: 'vault' | 'aws' | 'azure' | 'gcp' | 'env';
|
|
20
|
+
cacheEnabled?: boolean;
|
|
21
|
+
cacheTTL?: number;
|
|
22
|
+
config?: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
export interface VaultConfig {
|
|
25
|
+
address: string;
|
|
26
|
+
token?: string;
|
|
27
|
+
namespace?: string;
|
|
28
|
+
roleId?: string;
|
|
29
|
+
secretId?: string;
|
|
30
|
+
kvVersion?: 1 | 2;
|
|
31
|
+
mountPath?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface AWSSecretsManagerConfig {
|
|
34
|
+
region?: string;
|
|
35
|
+
accessKeyId?: string;
|
|
36
|
+
secretAccessKey?: string;
|
|
37
|
+
sessionToken?: string;
|
|
38
|
+
useIAMRole?: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface AzureKeyVaultConfig {
|
|
41
|
+
vaultUrl: string;
|
|
42
|
+
tenantId?: string;
|
|
43
|
+
clientId?: string;
|
|
44
|
+
clientSecret?: string;
|
|
45
|
+
useManagedIdentity?: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface GCPSecretManagerConfig {
|
|
48
|
+
projectId: string;
|
|
49
|
+
credentials?: string | Record<string, unknown>;
|
|
50
|
+
useADC?: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Secret Provider Interface
|
|
54
|
+
*
|
|
55
|
+
* All secret managers must implement this interface
|
|
56
|
+
*/
|
|
57
|
+
export interface SecretProvider {
|
|
58
|
+
/**
|
|
59
|
+
* Get a secret by path/name
|
|
60
|
+
*/
|
|
61
|
+
getSecret(path: string): Promise<Secret>;
|
|
62
|
+
/**
|
|
63
|
+
* Check if a secret exists
|
|
64
|
+
*/
|
|
65
|
+
exists(path: string): Promise<boolean>;
|
|
66
|
+
/**
|
|
67
|
+
* List secrets at a path (optional)
|
|
68
|
+
*/
|
|
69
|
+
listSecrets?(path: string): Promise<string[]>;
|
|
70
|
+
/**
|
|
71
|
+
* Initialize the provider
|
|
72
|
+
*/
|
|
73
|
+
initialize(): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Clean up resources
|
|
76
|
+
*/
|
|
77
|
+
destroy?(): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Secret Cache Entry
|
|
81
|
+
*/
|
|
82
|
+
export interface CachedSecret {
|
|
83
|
+
value: Secret;
|
|
84
|
+
fetchedAt: Date;
|
|
85
|
+
expiresAt: Date;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Secret Manager Options
|
|
89
|
+
*/
|
|
90
|
+
export interface SecretManagerOptions {
|
|
91
|
+
providers: SecretProviderConfig[];
|
|
92
|
+
defaultCacheTTL?: number;
|
|
93
|
+
referencePrefix?: string;
|
|
94
|
+
throwOnNotFound?: boolean;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Parse result for secret references
|
|
98
|
+
*/
|
|
99
|
+
export interface SecretReference {
|
|
100
|
+
raw: string;
|
|
101
|
+
provider: string;
|
|
102
|
+
path: string;
|
|
103
|
+
key?: string;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/secrets/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/secrets/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
package/package.json
CHANGED
|
@@ -1,309 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Expression Helper Library for marktoflow
|
|
3
|
-
*
|
|
4
|
-
* Provides pipeline-style filters for template expressions:
|
|
5
|
-
* {{ value | filter1 | filter2(arg) | filter3 }}
|
|
6
|
-
*
|
|
7
|
-
* Categories:
|
|
8
|
-
* - String helpers: split, join, trim, upper, lower, slugify, prefix, suffix
|
|
9
|
-
* - Array helpers: first, last, nth, map, filter, unique, count, sum
|
|
10
|
-
* - Object helpers: path, keys, values, merge, pick, omit
|
|
11
|
-
* - Date helpers: now, format_date, add_days, subtract_days
|
|
12
|
-
* - Logic helpers: default, or, and, not
|
|
13
|
-
* - Validation helpers: is_array, is_object, is_empty, is_null
|
|
14
|
-
*/
|
|
15
|
-
export type HelperFunction = (value: unknown, ...args: unknown[]) => unknown;
|
|
16
|
-
export interface HelperRegistry {
|
|
17
|
-
[name: string]: HelperFunction;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Split string by delimiter
|
|
21
|
-
* Usage: {{ "a,b,c" | split(',') }} → ['a', 'b', 'c']
|
|
22
|
-
*/
|
|
23
|
-
export declare function split(value: unknown, delimiter?: string): string[];
|
|
24
|
-
/**
|
|
25
|
-
* Join array elements
|
|
26
|
-
* Usage: {{ ['a', 'b', 'c'] | join(', ') }} → "a, b, c"
|
|
27
|
-
*/
|
|
28
|
-
export declare function join(value: unknown, separator?: string): string;
|
|
29
|
-
/**
|
|
30
|
-
* Trim whitespace
|
|
31
|
-
* Usage: {{ " hello " | trim }} → "hello"
|
|
32
|
-
*/
|
|
33
|
-
export declare function trim(value: unknown): string;
|
|
34
|
-
/**
|
|
35
|
-
* Convert to uppercase
|
|
36
|
-
* Usage: {{ "hello" | upper }} → "HELLO"
|
|
37
|
-
*/
|
|
38
|
-
export declare function upper(value: unknown): string;
|
|
39
|
-
/**
|
|
40
|
-
* Convert to lowercase
|
|
41
|
-
* Usage: {{ "HELLO" | lower }} → "hello"
|
|
42
|
-
*/
|
|
43
|
-
export declare function lower(value: unknown): string;
|
|
44
|
-
/**
|
|
45
|
-
* Convert to title case
|
|
46
|
-
* Usage: {{ "hello world" | title }} → "Hello World"
|
|
47
|
-
*/
|
|
48
|
-
export declare function title(value: unknown): string;
|
|
49
|
-
/**
|
|
50
|
-
* Capitalize first letter
|
|
51
|
-
* Usage: {{ "hello" | capitalize }} → "Hello"
|
|
52
|
-
*/
|
|
53
|
-
export declare function capitalize(value: unknown): string;
|
|
54
|
-
/**
|
|
55
|
-
* Convert to URL-friendly slug
|
|
56
|
-
* Usage: {{ "Hello World!" | slugify }} → "hello-world"
|
|
57
|
-
*/
|
|
58
|
-
export declare function slugify(value: unknown): string;
|
|
59
|
-
/**
|
|
60
|
-
* Add prefix to string
|
|
61
|
-
* Usage: {{ "hello" | prefix('@') }} → "@hello"
|
|
62
|
-
*/
|
|
63
|
-
export declare function prefix(value: unknown, prefixStr: string): string;
|
|
64
|
-
/**
|
|
65
|
-
* Add suffix to string
|
|
66
|
-
* Usage: {{ "hello" | suffix('!') }} → "hello!"
|
|
67
|
-
*/
|
|
68
|
-
export declare function suffix(value: unknown, suffixStr: string): string;
|
|
69
|
-
/**
|
|
70
|
-
* Replace all occurrences
|
|
71
|
-
* Usage: {{ "hello world" | replace('world', 'there') }} → "hello there"
|
|
72
|
-
*/
|
|
73
|
-
export declare function replace(value: unknown, search: string, replaceWith: string): string;
|
|
74
|
-
/**
|
|
75
|
-
* Truncate string to length
|
|
76
|
-
* Usage: {{ "hello world" | truncate(5) }} → "hello..."
|
|
77
|
-
*/
|
|
78
|
-
export declare function truncate(value: unknown, length: number, ellipsis?: string): string;
|
|
79
|
-
/**
|
|
80
|
-
* Extract substring
|
|
81
|
-
* Usage: {{ "hello world" | substring(0, 5) }} → "hello"
|
|
82
|
-
*/
|
|
83
|
-
export declare function substring(value: unknown, start: number, end?: number): string;
|
|
84
|
-
/**
|
|
85
|
-
* Check if string/array contains value
|
|
86
|
-
* Usage: {{ "hello world" | contains('world') }} → true
|
|
87
|
-
*/
|
|
88
|
-
export declare function contains(value: unknown, search: unknown): boolean;
|
|
89
|
-
/**
|
|
90
|
-
* Get first element
|
|
91
|
-
* Usage: {{ [1, 2, 3] | first }} → 1
|
|
92
|
-
*/
|
|
93
|
-
export declare function first(value: unknown): unknown;
|
|
94
|
-
/**
|
|
95
|
-
* Get last element
|
|
96
|
-
* Usage: {{ [1, 2, 3] | last }} → 3
|
|
97
|
-
*/
|
|
98
|
-
export declare function last(value: unknown): unknown;
|
|
99
|
-
/**
|
|
100
|
-
* Get nth element (0-indexed)
|
|
101
|
-
* Usage: {{ [1, 2, 3] | nth(1) }} → 2
|
|
102
|
-
*/
|
|
103
|
-
export declare function nth(value: unknown, index: number): unknown;
|
|
104
|
-
/**
|
|
105
|
-
* Get array length or object property count
|
|
106
|
-
* Usage: {{ [1, 2, 3] | count }} → 3
|
|
107
|
-
*/
|
|
108
|
-
export declare function count(value: unknown): number;
|
|
109
|
-
/**
|
|
110
|
-
* Sum array of numbers
|
|
111
|
-
* Usage: {{ [1, 2, 3] | sum }} → 6
|
|
112
|
-
*/
|
|
113
|
-
export declare function sum(value: unknown): number;
|
|
114
|
-
/**
|
|
115
|
-
* Get unique values
|
|
116
|
-
* Usage: {{ [1, 2, 2, 3] | unique }} → [1, 2, 3]
|
|
117
|
-
*/
|
|
118
|
-
export declare function unique(value: unknown): unknown[];
|
|
119
|
-
/**
|
|
120
|
-
* Flatten array one level
|
|
121
|
-
* Usage: {{ [[1, 2], [3, 4]] | flatten }} → [1, 2, 3, 4]
|
|
122
|
-
*/
|
|
123
|
-
export declare function flatten(value: unknown): unknown[];
|
|
124
|
-
/**
|
|
125
|
-
* Reverse array
|
|
126
|
-
* Usage: {{ [1, 2, 3] | reverse }} → [3, 2, 1]
|
|
127
|
-
*/
|
|
128
|
-
export declare function reverse(value: unknown): unknown[];
|
|
129
|
-
/**
|
|
130
|
-
* Sort array
|
|
131
|
-
* Usage: {{ [3, 1, 2] | sort }} → [1, 2, 3]
|
|
132
|
-
* Usage: {{ [3, 1, 2] | sort(true) }} → [3, 2, 1]
|
|
133
|
-
*/
|
|
134
|
-
export declare function sort(value: unknown, reverse?: boolean): unknown[];
|
|
135
|
-
/**
|
|
136
|
-
* Get array slice
|
|
137
|
-
* Usage: {{ [1, 2, 3, 4, 5] | slice(1, 3) }} → [2, 3]
|
|
138
|
-
*/
|
|
139
|
-
export declare function slice(value: unknown, start: number, end?: number): unknown[];
|
|
140
|
-
/**
|
|
141
|
-
* Get value at path
|
|
142
|
-
* Usage: {{ obj | path('user.name') }} → obj.user.name
|
|
143
|
-
*/
|
|
144
|
-
export declare function path(value: unknown, pathStr: string): unknown;
|
|
145
|
-
/**
|
|
146
|
-
* Get object keys
|
|
147
|
-
* Usage: {{ {a: 1, b: 2} | keys }} → ['a', 'b']
|
|
148
|
-
*/
|
|
149
|
-
export declare function keys(value: unknown): string[];
|
|
150
|
-
/**
|
|
151
|
-
* Get object values
|
|
152
|
-
* Usage: {{ {a: 1, b: 2} | values }} → [1, 2]
|
|
153
|
-
*/
|
|
154
|
-
export declare function values(value: unknown): unknown[];
|
|
155
|
-
/**
|
|
156
|
-
* Get object entries (key-value pairs)
|
|
157
|
-
* Usage: {{ {a: 1, b: 2} | entries }} → [['a', 1], ['b', 2]]
|
|
158
|
-
*/
|
|
159
|
-
export declare function entries(value: unknown): [string, unknown][];
|
|
160
|
-
/**
|
|
161
|
-
* Pick specific keys from object
|
|
162
|
-
* Usage: {{ {a: 1, b: 2, c: 3} | pick('a', 'c') }} → {a: 1, c: 3}
|
|
163
|
-
*/
|
|
164
|
-
export declare function pick(value: unknown, ...keysToPick: string[]): Record<string, unknown>;
|
|
165
|
-
/**
|
|
166
|
-
* Omit specific keys from object
|
|
167
|
-
* Usage: {{ {a: 1, b: 2, c: 3} | omit('b') }} → {a: 1, c: 3}
|
|
168
|
-
*/
|
|
169
|
-
export declare function omit(value: unknown, ...keysToOmit: string[]): Record<string, unknown>;
|
|
170
|
-
/**
|
|
171
|
-
* Merge objects
|
|
172
|
-
* Usage: {{ {a: 1} | merge({b: 2}) }} → {a: 1, b: 2}
|
|
173
|
-
*/
|
|
174
|
-
export declare function merge(value: unknown, ...objects: unknown[]): Record<string, unknown>;
|
|
175
|
-
/**
|
|
176
|
-
* Get current timestamp
|
|
177
|
-
* Usage: {{ now() }} → 1706745600000
|
|
178
|
-
*/
|
|
179
|
-
export declare function now(): number;
|
|
180
|
-
/**
|
|
181
|
-
* Format date
|
|
182
|
-
* Usage: {{ timestamp | format_date('YYYY-MM-DD') }} → "2025-01-31"
|
|
183
|
-
*/
|
|
184
|
-
export declare function format_date(value: unknown, format?: string): string;
|
|
185
|
-
/**
|
|
186
|
-
* Add days to date
|
|
187
|
-
* Usage: {{ timestamp | add_days(7) }} → timestamp + 7 days
|
|
188
|
-
*/
|
|
189
|
-
export declare function add_days(value: unknown, days: number): number;
|
|
190
|
-
/**
|
|
191
|
-
* Subtract days from date
|
|
192
|
-
* Usage: {{ timestamp | subtract_days(7) }} → timestamp - 7 days
|
|
193
|
-
*/
|
|
194
|
-
export declare function subtract_days(value: unknown, days: number): number;
|
|
195
|
-
/**
|
|
196
|
-
* Get date difference in days (date1 - date2)
|
|
197
|
-
* Usage: {{ date1 | diff_days(date2) }} → number of days
|
|
198
|
-
*/
|
|
199
|
-
export declare function diff_days(value: unknown, compareDate: unknown): number;
|
|
200
|
-
/**
|
|
201
|
-
* Return default value if input is null/undefined
|
|
202
|
-
* Usage: {{ null | default('N/A') }} → "N/A"
|
|
203
|
-
*/
|
|
204
|
-
export declare function defaultValue(value: unknown, defaultVal: unknown): unknown;
|
|
205
|
-
/**
|
|
206
|
-
* Return first truthy value
|
|
207
|
-
* Usage: {{ null | or('fallback') }} → "fallback"
|
|
208
|
-
*/
|
|
209
|
-
export declare function or(value: unknown, ...alternatives: unknown[]): unknown;
|
|
210
|
-
/**
|
|
211
|
-
* Check if all values are truthy
|
|
212
|
-
* Usage: {{ true | and(1, 'value') }} → true
|
|
213
|
-
*/
|
|
214
|
-
export declare function and(value: unknown, ...values: unknown[]): boolean;
|
|
215
|
-
/**
|
|
216
|
-
* Negate boolean value
|
|
217
|
-
* Usage: {{ true | not }} → false
|
|
218
|
-
*/
|
|
219
|
-
export declare function not(value: unknown): boolean;
|
|
220
|
-
/**
|
|
221
|
-
* Ternary operator
|
|
222
|
-
* Usage: {{ condition | ternary('yes', 'no') }}
|
|
223
|
-
*/
|
|
224
|
-
export declare function ternary(condition: unknown, trueVal: unknown, falseVal: unknown): unknown;
|
|
225
|
-
/**
|
|
226
|
-
* Check if value is array
|
|
227
|
-
* Usage: {{ value | is_array }} → true/false
|
|
228
|
-
*/
|
|
229
|
-
export declare function is_array(value: unknown): boolean;
|
|
230
|
-
/**
|
|
231
|
-
* Check if value is object
|
|
232
|
-
* Usage: {{ value | is_object }} → true/false
|
|
233
|
-
*/
|
|
234
|
-
export declare function is_object(value: unknown): boolean;
|
|
235
|
-
/**
|
|
236
|
-
* Check if value is string
|
|
237
|
-
* Usage: {{ value | is_string }} → true/false
|
|
238
|
-
*/
|
|
239
|
-
export declare function is_string(value: unknown): boolean;
|
|
240
|
-
/**
|
|
241
|
-
* Check if value is number
|
|
242
|
-
* Usage: {{ value | is_number }} → true/false
|
|
243
|
-
*/
|
|
244
|
-
export declare function is_number(value: unknown): boolean;
|
|
245
|
-
/**
|
|
246
|
-
* Check if value is empty
|
|
247
|
-
* Usage: {{ value | is_empty }} → true/false
|
|
248
|
-
*/
|
|
249
|
-
export declare function is_empty(value: unknown): boolean;
|
|
250
|
-
/**
|
|
251
|
-
* Check if value is null
|
|
252
|
-
* Usage: {{ value | is_null }} → true/false
|
|
253
|
-
*/
|
|
254
|
-
export declare function is_null(value: unknown): boolean;
|
|
255
|
-
/**
|
|
256
|
-
* Parse JSON string
|
|
257
|
-
* Usage: {{ '{"a":1}' | parse_json }} → {a: 1}
|
|
258
|
-
*/
|
|
259
|
-
export declare function parse_json(value: unknown): unknown;
|
|
260
|
-
/**
|
|
261
|
-
* Stringify to JSON
|
|
262
|
-
* Usage: {{ {a: 1} | to_json }} → '{"a":1}'
|
|
263
|
-
*/
|
|
264
|
-
export declare function to_json(value: unknown, pretty?: boolean): string;
|
|
265
|
-
/**
|
|
266
|
-
* Absolute value
|
|
267
|
-
* Usage: {{ -5 | abs }} → 5
|
|
268
|
-
*/
|
|
269
|
-
export declare function abs(value: unknown): number;
|
|
270
|
-
/**
|
|
271
|
-
* Round to nearest integer
|
|
272
|
-
* Usage: {{ 3.7 | round }} → 4
|
|
273
|
-
*/
|
|
274
|
-
export declare function round(value: unknown, decimals?: number): number;
|
|
275
|
-
/**
|
|
276
|
-
* Round down
|
|
277
|
-
* Usage: {{ 3.7 | floor }} → 3
|
|
278
|
-
*/
|
|
279
|
-
export declare function floor(value: unknown): number;
|
|
280
|
-
/**
|
|
281
|
-
* Round up
|
|
282
|
-
* Usage: {{ 3.1 | ceil }} → 4
|
|
283
|
-
*/
|
|
284
|
-
export declare function ceil(value: unknown): number;
|
|
285
|
-
/**
|
|
286
|
-
* Get minimum value
|
|
287
|
-
* Usage: {{ [1, 2, 3] | min }} → 1
|
|
288
|
-
* Usage: {{ 5 | min(3) }} → 3
|
|
289
|
-
*/
|
|
290
|
-
export declare function min(value: unknown, ...values: unknown[]): number;
|
|
291
|
-
/**
|
|
292
|
-
* Get maximum value
|
|
293
|
-
* Usage: {{ [1, 2, 3] | max }} → 3
|
|
294
|
-
* Usage: {{ 3 | max(5) }} → 5
|
|
295
|
-
*/
|
|
296
|
-
export declare function max(value: unknown, ...values: unknown[]): number;
|
|
297
|
-
/**
|
|
298
|
-
* Global registry of all helper functions
|
|
299
|
-
*/
|
|
300
|
-
export declare const HELPER_REGISTRY: HelperRegistry;
|
|
301
|
-
/**
|
|
302
|
-
* Apply a helper function to a value
|
|
303
|
-
*/
|
|
304
|
-
export declare function applyHelper(helperName: string, value: unknown, args: unknown[]): unknown;
|
|
305
|
-
/**
|
|
306
|
-
* Check if a helper exists
|
|
307
|
-
*/
|
|
308
|
-
export declare function hasHelper(helperName: string): boolean;
|
|
309
|
-
//# sourceMappingURL=expression-helpers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"expression-helpers.d.ts","sourceRoot":"","sources":["../src/expression-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AAE7E,MAAM,WAAW,cAAc;IAC7B,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;CAChC;AAMD;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,EAAE,CAGvE;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,CAKpE;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE3C;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE5C;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE5C;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAG5C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGjD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK9C;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEnF;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAc,GAAG,MAAM,CAIzF;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAQjE;AAMD;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK7C;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK5C;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAK1D;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAgB5C;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAG1C;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,CAGhD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,CAGjD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,CAGjD;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,OAAe,GAAG,OAAO,EAAE,CAOxE;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,CAG5E;AAMD;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAgB7D;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAK7C;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,CAKhD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAK3D;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAerF;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBrF;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAcpF;AAMD;;;GAGG;AACH,wBAAgB,GAAG,IAAI,MAAM,CAE5B;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,GAAE,MAAqB,GAAG,MAAM,CAyBjF;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAK7D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKlE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,GAAG,MAAM,CAMtE;AAMD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAKzE;AAED;;;GAGG;AACH,wBAAgB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,OAAO,EAAE,GAAG,OAAO,CAMtE;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAMjE;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE3C;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAExF;AAMD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEhD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEjD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEjD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEjD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMhD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE/C;AAMD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMlD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,GAAE,OAAe,GAAG,MAAM,CAEvE;AAMD;;;GAGG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE1C;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,CAIlE;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE5C;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAMhE;AAED;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAMhE;AAMD;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,cAuE7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAMxF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAErD"}
|