@mcpmake/core 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analyzer/dom-parser.d.ts +7 -0
- package/dist/analyzer/dom-parser.d.ts.map +1 -1
- package/dist/analyzer/dom-parser.js +31 -5
- package/dist/analyzer/dom-parser.js.map +1 -1
- package/dist/analyzer/goal-crawler.d.ts.map +1 -1
- package/dist/analyzer/goal-crawler.js +3 -2
- package/dist/analyzer/goal-crawler.js.map +1 -1
- package/dist/analyzer/semantic-analyzer.d.ts.map +1 -1
- package/dist/analyzer/semantic-analyzer.js +3 -2
- package/dist/analyzer/semantic-analyzer.js.map +1 -1
- package/dist/analyzer/site-crawler.d.ts.map +1 -1
- package/dist/analyzer/site-crawler.js +40 -8
- package/dist/analyzer/site-crawler.js.map +1 -1
- package/dist/emitter/index.d.ts.map +1 -1
- package/dist/emitter/index.js +113 -6
- package/dist/emitter/index.js.map +1 -1
- package/dist/emitter/project-scaffolder.d.ts +13 -0
- package/dist/emitter/project-scaffolder.d.ts.map +1 -1
- package/dist/emitter/project-scaffolder.js +29 -0
- package/dist/emitter/project-scaffolder.js.map +1 -1
- package/dist/emitter/python-template-loader.d.ts.map +1 -1
- package/dist/emitter/python-template-loader.js +10 -0
- package/dist/emitter/python-template-loader.js.map +1 -1
- package/dist/emitter/python-templates/server.py.hbs +78 -8
- package/dist/emitter/site-templates/browser-manager.ts.hbs +81 -32
- package/dist/emitter/site-templates/server-main-http.ts.hbs +25 -7
- package/dist/emitter/site-templates/tool-handler-form.ts.hbs +10 -8
- package/dist/emitter/template-loader.d.ts.map +1 -1
- package/dist/emitter/template-loader.js +9 -0
- package/dist/emitter/template-loader.js.map +1 -1
- package/dist/emitter/templates/auth-provider.ts.hbs +81 -20
- package/dist/emitter/templates/config.ts.hbs +7 -0
- package/dist/emitter/templates/env.example.hbs +6 -0
- package/dist/emitter/templates/http-executor.ts.hbs +150 -7
- package/dist/emitter/templates/server-main-http.ts.hbs +60 -4
- package/dist/emitter/templates/tool-handler.ts.hbs +37 -2
- package/dist/emitter/templates/tool-test.ts.hbs +9 -1
- package/dist/emitter/worker-templates/config.ts.hbs +7 -0
- package/dist/emitter/worker-templates/tool-handler.ts.hbs +37 -2
- package/dist/emitter/worker-templates/worker.ts.hbs +33 -2
- package/dist/generator/spec-generator.d.ts.map +1 -1
- package/dist/generator/spec-generator.js +44 -5
- package/dist/generator/spec-generator.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/parser/operation-extractor.d.ts.map +1 -1
- package/dist/parser/operation-extractor.js +12 -1
- package/dist/parser/operation-extractor.js.map +1 -1
- package/dist/parser/overlay-loader.d.ts.map +1 -1
- package/dist/parser/overlay-loader.js +11 -2
- package/dist/parser/overlay-loader.js.map +1 -1
- package/dist/parser/schema-converter.d.ts +13 -2
- package/dist/parser/schema-converter.d.ts.map +1 -1
- package/dist/parser/schema-converter.js +30 -19
- package/dist/parser/schema-converter.js.map +1 -1
- package/dist/pricing.d.ts +5 -1
- package/dist/pricing.d.ts.map +1 -1
- package/dist/pricing.js +7 -3
- package/dist/pricing.js.map +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +6 -21
- package/dist/providers/index.js.map +1 -1
- package/dist/recorder/browser-recorder.d.ts.map +1 -1
- package/dist/recorder/browser-recorder.js +39 -7
- package/dist/recorder/browser-recorder.js.map +1 -1
- package/dist/site-transformer/selector-healer.d.ts.map +1 -1
- package/dist/site-transformer/selector-healer.js +2 -1
- package/dist/site-transformer/selector-healer.js.map +1 -1
- package/dist/site-transformer/tool-generator.d.ts.map +1 -1
- package/dist/site-transformer/tool-generator.js +90 -22
- package/dist/site-transformer/tool-generator.js.map +1 -1
- package/dist/transformer/auth-detector.d.ts.map +1 -1
- package/dist/transformer/auth-detector.js +11 -4
- package/dist/transformer/auth-detector.js.map +1 -1
- package/dist/transformer/llm-namer.d.ts.map +1 -1
- package/dist/transformer/llm-namer.js +35 -10
- package/dist/transformer/llm-namer.js.map +1 -1
- package/dist/transformer/naming.d.ts.map +1 -1
- package/dist/transformer/naming.js +17 -9
- package/dist/transformer/naming.js.map +1 -1
- package/dist/transformer/resource-builder.d.ts.map +1 -1
- package/dist/transformer/resource-builder.js +13 -6
- package/dist/transformer/resource-builder.js.map +1 -1
- package/dist/transformer/stainless-translator.d.ts +6 -0
- package/dist/transformer/stainless-translator.d.ts.map +1 -1
- package/dist/transformer/stainless-translator.js +18 -1
- package/dist/transformer/stainless-translator.js.map +1 -1
- package/dist/transformer/tool-builder.d.ts.map +1 -1
- package/dist/transformer/tool-builder.js +111 -13
- package/dist/transformer/tool-builder.js.map +1 -1
- package/dist/types/index.d.ts +72 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/site.d.ts +19 -1
- package/dist/types/site.d.ts.map +1 -1
- package/dist/utils/model-resolver.d.ts +21 -0
- package/dist/utils/model-resolver.d.ts.map +1 -0
- package/dist/utils/model-resolver.js +64 -0
- package/dist/utils/model-resolver.js.map +1 -0
- package/dist/utils/sanitize.d.ts +62 -0
- package/dist/utils/sanitize.d.ts.map +1 -1
- package/dist/utils/sanitize.js +141 -0
- package/dist/utils/sanitize.js.map +1 -1
- package/package.json +1 -1
package/dist/types/site.d.ts
CHANGED
|
@@ -20,6 +20,14 @@ export interface SelectorSet {
|
|
|
20
20
|
humanLabel?: string;
|
|
21
21
|
}
|
|
22
22
|
export type FormFieldType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'search' | 'select' | 'checkbox' | 'radio' | 'textarea' | 'hidden' | 'file' | 'date' | 'datetime-local' | 'color' | 'range' | 'other';
|
|
23
|
+
/** A single <option> from a <select>, preserving both the user-visible label
|
|
24
|
+
* and the wire value submitted to the server (they routinely differ). */
|
|
25
|
+
export interface SelectOption {
|
|
26
|
+
/** Visible option text shown to the user */
|
|
27
|
+
label: string;
|
|
28
|
+
/** Value attribute actually submitted / matched by Playwright's selectOption */
|
|
29
|
+
value: string;
|
|
30
|
+
}
|
|
23
31
|
export interface FormFieldDescriptor {
|
|
24
32
|
/** Form field name attribute */
|
|
25
33
|
name: string;
|
|
@@ -33,10 +41,20 @@ export interface FormFieldDescriptor {
|
|
|
33
41
|
placeholder?: string;
|
|
34
42
|
/** Whether the field is required */
|
|
35
43
|
required: boolean;
|
|
36
|
-
/** Options for <select>, radio groups, and datalists */
|
|
44
|
+
/** Options for <select>, radio groups, and datalists (visible labels). */
|
|
37
45
|
options?: string[];
|
|
46
|
+
/** Option label/value pairs for <select> fields (value drives Playwright). */
|
|
47
|
+
optionPairs?: SelectOption[];
|
|
38
48
|
/** Default or current value */
|
|
39
49
|
defaultValue?: string;
|
|
50
|
+
/**
|
|
51
|
+
* Stable, deduplicated MCP input key for this field. Derived from `name`
|
|
52
|
+
* but guaranteed to be a valid, unique JS identifier within the form so the
|
|
53
|
+
* generated schema property and the generated handler agree on one key. The
|
|
54
|
+
* handler still drives the DOM via `selector`, so the original `name` is not
|
|
55
|
+
* needed at fill time. Set by the site tool-generator.
|
|
56
|
+
*/
|
|
57
|
+
inputKey?: string;
|
|
40
58
|
}
|
|
41
59
|
export interface FormDescriptor {
|
|
42
60
|
/** Generated stable ID for this form */
|
package/dist/types/site.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../src/types/site.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIlE,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,IAAI,GACJ,YAAY,GACZ,MAAM,GACN,MAAM,GACN,UAAU,GACV,OAAO,CAAC;AAEZ,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,6CAA6C;IAC7C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,OAAO,GACP,UAAU,GACV,QAAQ,GACR,KAAK,GACL,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,OAAO,GACP,UAAU,GACV,QAAQ,GACR,MAAM,GACN,MAAM,GACN,gBAAgB,GAChB,OAAO,GACP,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,SAAS,EAAE,aAAa,CAAC;IACzB,kCAAkC;IAClC,QAAQ,EAAE,WAAW,CAAC;IACtB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,QAAQ,EAAE,OAAO,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../src/types/site.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Model tiers used across the generator. Each maps to a preferred undated alias
|
|
4
|
+
* plus a name pattern used to auto-pick a replacement if that alias is ever
|
|
5
|
+
* retired.
|
|
6
|
+
*/
|
|
7
|
+
export type ModelTier = 'balanced' | 'fast';
|
|
8
|
+
/**
|
|
9
|
+
* Resolve a usable model id for a tier against the live Models API, so a retired
|
|
10
|
+
* model id can never silently 404 the way a hardcoded snapshot does.
|
|
11
|
+
*
|
|
12
|
+
* Resolution order:
|
|
13
|
+
* 1. An explicit `override` (e.g. a `--model` CLI flag) wins, unchecked — the
|
|
14
|
+
* caller knows what they want, and a bad id surfaces as a clear API error
|
|
15
|
+
* rather than being second-guessed here.
|
|
16
|
+
* 2. The tier's preferred alias, **if** the Models API lists it.
|
|
17
|
+
* 3. Otherwise the newest served model whose id/name matches the tier.
|
|
18
|
+
* 4. If the Models API can't be reached, the preferred alias as a last resort.
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveModel(client: Anthropic, tier: ModelTier, override?: string): Promise<string>;
|
|
21
|
+
//# sourceMappingURL=model-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/model-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAG/C;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAqB5C;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,SAAS,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAsCjB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { logger } from './logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Preferred (undated) alias per tier. Undated aliases track the latest snapshot,
|
|
4
|
+
* but a whole family can still be retired — so the alias is only used when the
|
|
5
|
+
* live Models API confirms it exists (see {@link resolveModel}).
|
|
6
|
+
*/
|
|
7
|
+
const PREFERRED = {
|
|
8
|
+
balanced: 'claude-sonnet-4-6',
|
|
9
|
+
fast: 'claude-haiku-4-5',
|
|
10
|
+
};
|
|
11
|
+
const TIER_PATTERN = {
|
|
12
|
+
balanced: /sonnet/i,
|
|
13
|
+
fast: /haiku/i,
|
|
14
|
+
};
|
|
15
|
+
// Resolved once per tier per process: the served-model list rarely changes
|
|
16
|
+
// mid-run, and we don't want a Models API round-trip before every call.
|
|
17
|
+
const cache = new Map();
|
|
18
|
+
/**
|
|
19
|
+
* Resolve a usable model id for a tier against the live Models API, so a retired
|
|
20
|
+
* model id can never silently 404 the way a hardcoded snapshot does.
|
|
21
|
+
*
|
|
22
|
+
* Resolution order:
|
|
23
|
+
* 1. An explicit `override` (e.g. a `--model` CLI flag) wins, unchecked — the
|
|
24
|
+
* caller knows what they want, and a bad id surfaces as a clear API error
|
|
25
|
+
* rather than being second-guessed here.
|
|
26
|
+
* 2. The tier's preferred alias, **if** the Models API lists it.
|
|
27
|
+
* 3. Otherwise the newest served model whose id/name matches the tier.
|
|
28
|
+
* 4. If the Models API can't be reached, the preferred alias as a last resort.
|
|
29
|
+
*/
|
|
30
|
+
export async function resolveModel(client, tier, override) {
|
|
31
|
+
if (override)
|
|
32
|
+
return override;
|
|
33
|
+
const cached = cache.get(tier);
|
|
34
|
+
if (cached)
|
|
35
|
+
return cached;
|
|
36
|
+
const preferred = PREFERRED[tier];
|
|
37
|
+
let choice = preferred;
|
|
38
|
+
try {
|
|
39
|
+
const models = [];
|
|
40
|
+
for await (const m of client.models.list()) {
|
|
41
|
+
models.push({ id: m.id, display_name: m.display_name, created_at: m.created_at });
|
|
42
|
+
}
|
|
43
|
+
if (!models.some((m) => m.id === preferred)) {
|
|
44
|
+
const pattern = TIER_PATTERN[tier];
|
|
45
|
+
const newest = models
|
|
46
|
+
.filter((m) => pattern.test(m.id) || pattern.test(m.display_name))
|
|
47
|
+
// RFC 3339 timestamps sort correctly as strings (ISO 8601, newest last).
|
|
48
|
+
.sort((a, b) => b.created_at.localeCompare(a.created_at))[0];
|
|
49
|
+
if (newest) {
|
|
50
|
+
logger.warn(`Preferred model "${preferred}" unavailable; using "${newest.id}"`);
|
|
51
|
+
choice = newest.id;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
logger.warn(`Preferred model "${preferred}" unavailable and no ${tier} model found; trying it anyway`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
logger.warn(`Could not list models (${err instanceof Error ? err.message : err}); using "${preferred}"`);
|
|
60
|
+
}
|
|
61
|
+
cache.set(tier, choice);
|
|
62
|
+
return choice;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=model-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-resolver.js","sourceRoot":"","sources":["../../src/utils/model-resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AASrC;;;;GAIG;AACH,MAAM,SAAS,GAA8B;IAC3C,QAAQ,EAAE,mBAAmB;IAC7B,IAAI,EAAE,kBAAkB;CACzB,CAAC;AAEF,MAAM,YAAY,GAA8B;IAC9C,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,QAAQ;CACf,CAAC;AAEF,2EAA2E;AAC3E,wEAAwE;AACxE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;AAE3C;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAiB,EACjB,IAAe,EACf,QAAiB;IAEjB,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,MAAM,GAAG,SAAS,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,MAAM,GAA+D,EAAE,CAAC;QAC9E,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM;iBAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBAClE,yEAAyE;iBACxE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,oBAAoB,SAAS,yBAAyB,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;gBAChF,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CACT,oBAAoB,SAAS,wBAAwB,IAAI,gCAAgC,CAC1F,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CACT,0BAA0B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,aAAa,SAAS,GAAG,CAC5F,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/utils/sanitize.d.ts
CHANGED
|
@@ -13,6 +13,68 @@ export declare function escapeTemplateLiteral(str: string): string;
|
|
|
13
13
|
* Strips anything that isn't alphanumeric, underscore, or hyphen.
|
|
14
14
|
*/
|
|
15
15
|
export declare function sanitizeIdentifier(str: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Sanitize an HTTP header name (e.g. an apiKey scheme `name`) for safe embedding
|
|
18
|
+
* in a string literal. Real header names are RFC 7230 tokens; in practice API
|
|
19
|
+
* key headers are `[A-Za-z0-9-]` (plus `_`). Stripping everything else removes
|
|
20
|
+
* quotes/backticks/newlines that could break out of the generated literal.
|
|
21
|
+
*/
|
|
22
|
+
export declare function sanitizeHeaderName(str: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Sanitize an environment-variable name. It is emitted both as a quoted string
|
|
25
|
+
* and as a bare member access (`process.env.<NAME>` / `env.<NAME>`), so it must
|
|
26
|
+
* be a valid JS/POSIX identifier. Strips invalid chars and prefixes `_` when the
|
|
27
|
+
* result would start with a digit or be empty.
|
|
28
|
+
*/
|
|
29
|
+
export declare function sanitizeEnvVarName(str: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Resolve OpenAPI server-variable placeholders (`{var}`) in a server URL from
|
|
32
|
+
* their declared defaults, then validate the result is a real http(s) URL.
|
|
33
|
+
*
|
|
34
|
+
* OpenAPI server URLs may carry variables — `https://{region}.api.test/{version}`
|
|
35
|
+
* — with a `variables` map giving each a `default`. Substituting them here keeps
|
|
36
|
+
* the URL semantically intact instead of stripping the braces (which would corrupt
|
|
37
|
+
* the path, e.g. `{version}` → empty). Variables without a known default are left
|
|
38
|
+
* as-is; the subsequent per-sink escaper neutralizes any residual unsafe chars.
|
|
39
|
+
*/
|
|
40
|
+
export declare function resolveServerUrl(url: string, variables?: Record<string, {
|
|
41
|
+
default?: string;
|
|
42
|
+
} | undefined>): string;
|
|
43
|
+
/**
|
|
44
|
+
* Escape a base URL for safe embedding in a string literal across multiple
|
|
45
|
+
* target languages without mutating its semantics. Unlike a strip-based
|
|
46
|
+
* approach, this preserves every character that is legal in a URL (including
|
|
47
|
+
* `$`, `{`, `}`, `~`, etc. that appear in real paths such as `/v1/$metadata`)
|
|
48
|
+
* and only neutralizes the characters that could break out of, or inject into,
|
|
49
|
+
* the literal it is embedded in:
|
|
50
|
+
* - backslash, single/double quote, backtick → backslash-escaped
|
|
51
|
+
* - `${` (TS template-literal interpolation) → broken with a backslash
|
|
52
|
+
* - CR/LF (could inject extra dotenv/TOML lines) → backslash-escaped
|
|
53
|
+
* The same escaped form is safe in a TS single/double-quote string, a TS
|
|
54
|
+
* backtick literal, a Python double-quote string, a TOML basic string, and a
|
|
55
|
+
* single-line dotenv value. Validation/variable-resolution happens upstream in
|
|
56
|
+
* the emitter via {@link resolveServerUrl}.
|
|
57
|
+
*/
|
|
58
|
+
export declare function sanitizeUrlLiteral(str: string): string;
|
|
59
|
+
/**
|
|
60
|
+
* Validate a request-body media type against the RFC media-type grammar
|
|
61
|
+
* (`type/subtype`, optional parameters). The OpenAPI `content` map key is
|
|
62
|
+
* attacker-influenced and is interpolated into a string literal, so a value
|
|
63
|
+
* that is not a well-formed media type is replaced with `application/json`
|
|
64
|
+
* (the universal safe default) rather than trusted. The returned value is
|
|
65
|
+
* still escaped at the literal sink by {@link escapeStringLiteral}.
|
|
66
|
+
*/
|
|
67
|
+
export declare function sanitizeMediaType(str: string): string;
|
|
68
|
+
/**
|
|
69
|
+
* Escape a string for safe embedding in a double-quoted Python string literal.
|
|
70
|
+
* Escapes backslashes, double quotes, and newlines.
|
|
71
|
+
*/
|
|
72
|
+
export declare function escapePyString(str: string): string;
|
|
73
|
+
/**
|
|
74
|
+
* Convert an arbitrary parameter name into a valid, non-keyword Python
|
|
75
|
+
* identifier for use as a function argument or local variable name.
|
|
76
|
+
*/
|
|
77
|
+
export declare function sanitizePyIdentifier(str: string): string;
|
|
16
78
|
/**
|
|
17
79
|
* Validate that a URL path template contains only safe characters.
|
|
18
80
|
* Allows: alphanumeric, /, {, }, -, _, .
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/utils/sanitize.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKpD;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEnD"}
|
|
1
|
+
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/utils/sanitize.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,GAC3D,MAAM,CAUR;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAStD;AAMD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMlD;AA0CD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKpD;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEnD"}
|
package/dist/utils/sanitize.js
CHANGED
|
@@ -19,6 +19,147 @@ export function escapeTemplateLiteral(str) {
|
|
|
19
19
|
export function sanitizeIdentifier(str) {
|
|
20
20
|
return str.replace(/[^a-zA-Z0-9_\-]/g, '');
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Sanitize an HTTP header name (e.g. an apiKey scheme `name`) for safe embedding
|
|
24
|
+
* in a string literal. Real header names are RFC 7230 tokens; in practice API
|
|
25
|
+
* key headers are `[A-Za-z0-9-]` (plus `_`). Stripping everything else removes
|
|
26
|
+
* quotes/backticks/newlines that could break out of the generated literal.
|
|
27
|
+
*/
|
|
28
|
+
export function sanitizeHeaderName(str) {
|
|
29
|
+
return str.replace(/[^A-Za-z0-9_\-]/g, '');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Sanitize an environment-variable name. It is emitted both as a quoted string
|
|
33
|
+
* and as a bare member access (`process.env.<NAME>` / `env.<NAME>`), so it must
|
|
34
|
+
* be a valid JS/POSIX identifier. Strips invalid chars and prefixes `_` when the
|
|
35
|
+
* result would start with a digit or be empty.
|
|
36
|
+
*/
|
|
37
|
+
export function sanitizeEnvVarName(str) {
|
|
38
|
+
const cleaned = str.replace(/[^A-Za-z0-9_]/g, '');
|
|
39
|
+
return /^[A-Za-z_]/.test(cleaned) ? cleaned : `_${cleaned}`;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Resolve OpenAPI server-variable placeholders (`{var}`) in a server URL from
|
|
43
|
+
* their declared defaults, then validate the result is a real http(s) URL.
|
|
44
|
+
*
|
|
45
|
+
* OpenAPI server URLs may carry variables — `https://{region}.api.test/{version}`
|
|
46
|
+
* — with a `variables` map giving each a `default`. Substituting them here keeps
|
|
47
|
+
* the URL semantically intact instead of stripping the braces (which would corrupt
|
|
48
|
+
* the path, e.g. `{version}` → empty). Variables without a known default are left
|
|
49
|
+
* as-is; the subsequent per-sink escaper neutralizes any residual unsafe chars.
|
|
50
|
+
*/
|
|
51
|
+
export function resolveServerUrl(url, variables) {
|
|
52
|
+
if (!url)
|
|
53
|
+
return url;
|
|
54
|
+
let resolved = url;
|
|
55
|
+
if (variables) {
|
|
56
|
+
resolved = resolved.replace(/\{([^{}]+)\}/g, (match, name) => {
|
|
57
|
+
const def = variables[name]?.default;
|
|
58
|
+
return typeof def === 'string' ? def : match;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return resolved;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Escape a base URL for safe embedding in a string literal across multiple
|
|
65
|
+
* target languages without mutating its semantics. Unlike a strip-based
|
|
66
|
+
* approach, this preserves every character that is legal in a URL (including
|
|
67
|
+
* `$`, `{`, `}`, `~`, etc. that appear in real paths such as `/v1/$metadata`)
|
|
68
|
+
* and only neutralizes the characters that could break out of, or inject into,
|
|
69
|
+
* the literal it is embedded in:
|
|
70
|
+
* - backslash, single/double quote, backtick → backslash-escaped
|
|
71
|
+
* - `${` (TS template-literal interpolation) → broken with a backslash
|
|
72
|
+
* - CR/LF (could inject extra dotenv/TOML lines) → backslash-escaped
|
|
73
|
+
* The same escaped form is safe in a TS single/double-quote string, a TS
|
|
74
|
+
* backtick literal, a Python double-quote string, a TOML basic string, and a
|
|
75
|
+
* single-line dotenv value. Validation/variable-resolution happens upstream in
|
|
76
|
+
* the emitter via {@link resolveServerUrl}.
|
|
77
|
+
*/
|
|
78
|
+
export function sanitizeUrlLiteral(str) {
|
|
79
|
+
return str
|
|
80
|
+
.replace(/\\/g, '\\\\')
|
|
81
|
+
.replace(/`/g, '\\`')
|
|
82
|
+
.replace(/'/g, "\\'")
|
|
83
|
+
.replace(/"/g, '\\"')
|
|
84
|
+
.replace(/\$\{/g, '\\${')
|
|
85
|
+
.replace(/\r/g, '\\r')
|
|
86
|
+
.replace(/\n/g, '\\n');
|
|
87
|
+
}
|
|
88
|
+
/** RFC 6838 / RFC 7231 media-type token: `type/subtype` with optional params. */
|
|
89
|
+
const MEDIA_TYPE_RE = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.+-]*\/[A-Za-z0-9][A-Za-z0-9!#$&^_.+-]*(\s*;\s*[^\s;]+)*$/;
|
|
90
|
+
/**
|
|
91
|
+
* Validate a request-body media type against the RFC media-type grammar
|
|
92
|
+
* (`type/subtype`, optional parameters). The OpenAPI `content` map key is
|
|
93
|
+
* attacker-influenced and is interpolated into a string literal, so a value
|
|
94
|
+
* that is not a well-formed media type is replaced with `application/json`
|
|
95
|
+
* (the universal safe default) rather than trusted. The returned value is
|
|
96
|
+
* still escaped at the literal sink by {@link escapeStringLiteral}.
|
|
97
|
+
*/
|
|
98
|
+
export function sanitizeMediaType(str) {
|
|
99
|
+
return MEDIA_TYPE_RE.test(str.trim()) ? str.trim() : 'application/json';
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Escape a string for safe embedding in a double-quoted Python string literal.
|
|
103
|
+
* Escapes backslashes, double quotes, and newlines.
|
|
104
|
+
*/
|
|
105
|
+
export function escapePyString(str) {
|
|
106
|
+
return str
|
|
107
|
+
.replace(/\\/g, '\\\\')
|
|
108
|
+
.replace(/"/g, '\\"')
|
|
109
|
+
.replace(/\n/g, '\\n')
|
|
110
|
+
.replace(/\r/g, '\\r');
|
|
111
|
+
}
|
|
112
|
+
const PY_KEYWORDS = new Set([
|
|
113
|
+
'False',
|
|
114
|
+
'None',
|
|
115
|
+
'True',
|
|
116
|
+
'and',
|
|
117
|
+
'as',
|
|
118
|
+
'assert',
|
|
119
|
+
'async',
|
|
120
|
+
'await',
|
|
121
|
+
'break',
|
|
122
|
+
'class',
|
|
123
|
+
'continue',
|
|
124
|
+
'def',
|
|
125
|
+
'del',
|
|
126
|
+
'elif',
|
|
127
|
+
'else',
|
|
128
|
+
'except',
|
|
129
|
+
'finally',
|
|
130
|
+
'for',
|
|
131
|
+
'from',
|
|
132
|
+
'global',
|
|
133
|
+
'if',
|
|
134
|
+
'import',
|
|
135
|
+
'in',
|
|
136
|
+
'is',
|
|
137
|
+
'lambda',
|
|
138
|
+
'nonlocal',
|
|
139
|
+
'not',
|
|
140
|
+
'or',
|
|
141
|
+
'pass',
|
|
142
|
+
'raise',
|
|
143
|
+
'return',
|
|
144
|
+
'try',
|
|
145
|
+
'while',
|
|
146
|
+
'with',
|
|
147
|
+
'yield',
|
|
148
|
+
'match',
|
|
149
|
+
'case',
|
|
150
|
+
]);
|
|
151
|
+
/**
|
|
152
|
+
* Convert an arbitrary parameter name into a valid, non-keyword Python
|
|
153
|
+
* identifier for use as a function argument or local variable name.
|
|
154
|
+
*/
|
|
155
|
+
export function sanitizePyIdentifier(str) {
|
|
156
|
+
let id = str.replace(/[^A-Za-z0-9_]/g, '_');
|
|
157
|
+
if (!/^[A-Za-z_]/.test(id))
|
|
158
|
+
id = `_${id}`;
|
|
159
|
+
if (PY_KEYWORDS.has(id))
|
|
160
|
+
id = `${id}_`;
|
|
161
|
+
return id || '_param';
|
|
162
|
+
}
|
|
22
163
|
/**
|
|
23
164
|
* Validate that a URL path template contains only safe characters.
|
|
24
165
|
* Allows: alphanumeric, /, {, }, -, _, .
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../src/utils/sanitize.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAClG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAClF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO,GAAG,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,GAAG;SACP,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;AAE1E;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC"}
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../src/utils/sanitize.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAClG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAClF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAClD,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;AAC9D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAW,EACX,SAA4D;IAE5D,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC;IACrB,IAAI,QAAQ,GAAG,GAAG,CAAC;IACnB,IAAI,SAAS,EAAE,CAAC;QACd,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;YACnE,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;YACrC,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,GAAG;SACP,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;SACxB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,iFAAiF;AACjF,MAAM,aAAa,GACjB,uFAAuF,CAAC;AAE1F;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,GAAG;SACP,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,OAAO;IACP,MAAM;IACN,MAAM;IACN,KAAK;IACL,IAAI;IACJ,QAAQ;IACR,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,UAAU;IACV,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,QAAQ;IACR,SAAS;IACT,KAAK;IACL,MAAM;IACN,QAAQ;IACR,IAAI;IACJ,QAAQ;IACR,IAAI;IACJ,IAAI;IACJ,QAAQ;IACR,UAAU;IACV,KAAK;IACL,IAAI;IACJ,MAAM;IACN,OAAO;IACP,QAAQ;IACR,KAAK;IACL,OAAO;IACP,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;CACP,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAC5C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC;IAC1C,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC;IACvC,OAAO,EAAE,IAAI,QAAQ,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO,GAAG,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,GAAG;SACP,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;AAE1E;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC"}
|
package/package.json
CHANGED