@nebutra/next-unicorn-skill 1.0.1 → 1.0.3
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/CHANGELOG.md +19 -0
- package/README.md +5 -1
- package/SKILL.md +69 -16
- package/dist/index.d.ts +70 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/schemas/output.schema.d.ts +483 -48
- package/dist/schemas/output.schema.d.ts.map +1 -1
- package/dist/schemas/output.schema.js +43 -0
- package/dist/schemas/output.schema.js.map +1 -1
- package/package.json +1 -1
- package/templates/summary-table.md +32 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,25 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.0.3] - 2026-02-09
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Gap Analysis** — AI agent can now identify capabilities the project is MISSING entirely, not just hand-rolled code to replace. New `GapRecommendation` type with `domain`, `description`, `recommendedLibrary`, and `priority` (critical/recommended/nice-to-have).
|
|
13
|
+
- New `gaps` option in `AnalyzeOptions` — AI agent provides gap recommendations alongside scanner-based detections.
|
|
14
|
+
- New `gapAnalysis` field in `OutputSchema` — gap recommendations appear in the output alongside `recommendedChanges`.
|
|
15
|
+
- New `GapRecommendationSchema` Zod schema with full validation.
|
|
16
|
+
- SKILL.md Step 2.5: Gap Analysis guidance for AI agents.
|
|
17
|
+
- 3 new gap analysis tests (202 total).
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- `LibraryRecommendation` enriched with optional `rationale`, `ecosystem`, `antiPatterns`, `alternatives` fields — AI agent can express ecosystem-level solutions (e.g., Lingui + TMS + compile-time extraction).
|
|
22
|
+
- `RecommendedChange.recommendedLibrary` output schema widened to match enriched `LibraryRecommendation`.
|
|
23
|
+
- SKILL.md Step 3 renamed "Recommend Solutions" — guides AI agent to think at ecosystem level.
|
|
24
|
+
- Summary table template updated to render rationale, ecosystem, anti-patterns, and alternatives.
|
|
25
|
+
- README updated with gap analysis, ecosystem recommendations features and API docs.
|
|
26
|
+
|
|
8
27
|
## [1.0.1] - 2026-02-09
|
|
9
28
|
|
|
10
29
|
### Changed
|
package/README.md
CHANGED
|
@@ -112,6 +112,8 @@ Or use as an **MCP SKILL** — provide [`SKILL.md`](./SKILL.md) to your AI agent
|
|
|
112
112
|
| Feature | Description |
|
|
113
113
|
|---------|-------------|
|
|
114
114
|
| **Pattern-based scanning** | Detects hand-rolled code across 68 Vibe Coding Domains (ISO 25010-aligned) |
|
|
115
|
+
| **Gap analysis** | AI agent identifies missing capabilities — not just hand-rolled code, but things you should have but don't (e.g., no error monitoring, no rate limiting, no event-driven workflows) |
|
|
116
|
+
| **Ecosystem-level recommendations** | Solutions include rationale, companion packages, anti-patterns, and alternatives — not just "use library X" |
|
|
115
117
|
| **Context7 verification** | Every recommendation verified against real, version-correct documentation |
|
|
116
118
|
| **7-dimension impact scoring** | Scalability, performance, security, maintainability, feature richness, UX, UI aesthetics |
|
|
117
119
|
| **Phased migration plans** | Low / medium / high risk phases with adapter strategies |
|
|
@@ -239,6 +241,7 @@ const logger = pino({
|
|
|
239
241
|
| `input` | `InputSchema` | Yes | Project metadata, goals, constraints, focus areas |
|
|
240
242
|
| `context7Client` | `Context7Client` | Yes | Context7 MCP client for doc verification |
|
|
241
243
|
| `recommender` | `Recommender` | Yes | Maps each detection → library recommendation (AI agent provides this) |
|
|
244
|
+
| `gaps` | `GapRecommendation[]` | No | Missing capabilities the project should have (AI agent identifies these) |
|
|
242
245
|
| `vulnClient` | `VulnerabilityClient` | No | OSV client for vulnerability scanning |
|
|
243
246
|
| `registryClient` | `RegistryClient` | No | Package registry client for auto-update |
|
|
244
247
|
| `platformClient` | `PlatformClient` | No | GitHub/GitLab client for PR creation |
|
|
@@ -252,7 +255,8 @@ Standalone scanner — returns detections and workspace info without recommendat
|
|
|
252
255
|
|
|
253
256
|
```jsonc
|
|
254
257
|
{
|
|
255
|
-
"recommendedChanges": [...], //
|
|
258
|
+
"recommendedChanges": [...], // Replacement recommendations with impact scores
|
|
259
|
+
"gapAnalysis": [...], // (optional) Missing capabilities with prioritized recs
|
|
256
260
|
"filesToDelete": [...], // Files to remove after migration
|
|
257
261
|
"linesSavedEstimate": 1250, // Total lines saved
|
|
258
262
|
"uxAudit": [...], // UX completeness (8 categories)
|
package/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: analyze-and-recommend-third-party-optimizations
|
|
3
3
|
description: Scans any codebase and identifies where hand-rolled implementations should be replaced by battle-tested third-party libraries, producing structured migration plans with Context7-verified recommendations
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.3
|
|
5
5
|
author: TsekaLuk
|
|
6
6
|
tags:
|
|
7
7
|
- code-analysis
|
|
@@ -20,17 +20,20 @@ tags:
|
|
|
20
20
|
|
|
21
21
|
## Purpose
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Two-pronged analysis: (1) detect hand-rolled code that should be replaced by libraries, and (2) identify missing capabilities the project should have. The scanner pre-filters; the AI agent provides unicorn-grade recommendations — ecosystem-level solutions with rationale, anti-patterns, and alternatives, verified via Context7 MCP.
|
|
24
24
|
|
|
25
25
|
## Architecture
|
|
26
26
|
|
|
27
27
|
```
|
|
28
|
-
Scanner (deterministic) → AI Agent (generative)
|
|
29
|
-
Regex patterns detect
|
|
30
|
-
hand-rolled code
|
|
28
|
+
Scanner (deterministic) → AI Agent (generative) → Pipeline (deterministic)
|
|
29
|
+
Regex patterns detect 1. Recommend replacements Score, plan, audit,
|
|
30
|
+
hand-rolled code 2. Identify capability gaps filter, serialize
|
|
31
|
+
using knowledge + Context7
|
|
31
32
|
```
|
|
32
33
|
|
|
33
|
-
**Key
|
|
34
|
+
**Key principles**:
|
|
35
|
+
- No hardcoded library recommendations — the AI agent evaluates project context dynamically
|
|
36
|
+
- Two analysis modes: **replacement** (hand-rolled code → library) and **gap** (missing capability → library)
|
|
34
37
|
|
|
35
38
|
## Standard Operating Procedure
|
|
36
39
|
|
|
@@ -53,17 +56,52 @@ Run `scanCodebase(input)` to walk the file tree and match against regex patterns
|
|
|
53
56
|
|
|
54
57
|
Detections contain **no library suggestions** — only what was detected and where.
|
|
55
58
|
|
|
56
|
-
### Step
|
|
59
|
+
### Step 2.5: Gap Analysis (AI Agent)
|
|
57
60
|
|
|
58
|
-
|
|
61
|
+
Beyond what the scanner detects (hand-rolled code), analyze what the project is **missing entirely**. Review `currentLibraries`, `languages`, `optimizationGoals`, and `priorityFocusAreas` to identify capability gaps.
|
|
59
62
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
Think at the level of unicorn-grade products:
|
|
64
|
+
- "No structured logging" → recommend pino + OpenTelemetry ecosystem
|
|
65
|
+
- "No error monitoring" → recommend Sentry with source maps + release health
|
|
66
|
+
- "No event-driven workflows" → recommend Inngest for reliable async tasks
|
|
67
|
+
- "Using nodemailer" → recommend Resend for modern transactional email
|
|
68
|
+
- "No rate limiting or bot protection" → recommend Arcjet as unified security layer
|
|
69
|
+
- "REST API without type safety" → recommend tRPC for end-to-end types
|
|
70
|
+
|
|
71
|
+
Provide each gap as a `GapRecommendation`:
|
|
72
|
+
```typescript
|
|
73
|
+
{
|
|
74
|
+
domain: string; // e.g., "observability"
|
|
75
|
+
description: string; // e.g., "No structured logging detected"
|
|
76
|
+
recommendedLibrary: { name, version, license, rationale?, ecosystem?, antiPatterns?, alternatives? };
|
|
77
|
+
priority: 'critical' | 'recommended' | 'nice-to-have';
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Pass gaps to `analyze()` via the `gaps` option. They appear in the output as `gapAnalysis`.
|
|
82
|
+
|
|
83
|
+
### Step 3: Recommend Solutions (AI Agent)
|
|
84
|
+
|
|
85
|
+
For each detection, recommend a **solution** — not just a library, but an ecosystem-level answer. Consider:
|
|
86
|
+
|
|
87
|
+
1. **Ecosystem composition** — recommend companion libraries that work together
|
|
88
|
+
(e.g., `@lingui/core` + `@lingui/macro` + `@lingui/cli` for compile-time i18n with TMS integration)
|
|
89
|
+
2. **Rationale** — explain WHY this specific choice fits this project's framework, runtime, and scale
|
|
90
|
+
3. **Anti-patterns** — what NOT to use and why (e.g., "Never use jsonwebtoken — no edge runtime support; use jose")
|
|
91
|
+
4. **Alternatives** — different solutions for different architectural contexts
|
|
92
|
+
5. **Context7 verification** — call `resolve-library-id` + `query-docs` to confirm the library exists and get latest version/docs
|
|
63
93
|
|
|
64
94
|
Return a `LibraryRecommendation` per detection:
|
|
65
95
|
```typescript
|
|
66
|
-
{
|
|
96
|
+
{
|
|
97
|
+
library: string; // required — primary package
|
|
98
|
+
version: string; // required
|
|
99
|
+
license: string; // required
|
|
100
|
+
rationale?: string; // recommended — WHY this choice
|
|
101
|
+
ecosystem?: Array<{...}>; // when solution involves multiple packages
|
|
102
|
+
antiPatterns?: string[]; // when common mistakes exist
|
|
103
|
+
alternatives?: Array<{...}>; // when architecture affects the choice
|
|
104
|
+
}
|
|
67
105
|
```
|
|
68
106
|
|
|
69
107
|
Return `null` to skip a detection (intentional custom code, false positive, etc.).
|
|
@@ -100,29 +138,44 @@ Filter by license allowlist, detect dependency conflicts, serialize to JSON.
|
|
|
100
138
|
|
|
101
139
|
```typescript
|
|
102
140
|
import { analyze, scanCodebase } from './src/index.js';
|
|
103
|
-
import type { Recommender } from './src/index.js';
|
|
141
|
+
import type { Recommender, GapRecommendation } from './src/index.js';
|
|
104
142
|
|
|
105
143
|
// Step 1: Scan standalone (for AI agent inspection)
|
|
106
144
|
const scanResult = await scanCodebase(validatedInput);
|
|
107
145
|
|
|
108
|
-
// Step 2: Full pipeline with recommender
|
|
146
|
+
// Step 2: Full pipeline with recommender + gap analysis
|
|
109
147
|
const recommender: Recommender = (detection) => ({
|
|
110
148
|
library: 'zustand',
|
|
111
149
|
version: '^5.0.0',
|
|
112
150
|
license: 'MIT',
|
|
151
|
+
rationale: 'Minimal state library — no providers, 1KB gzipped',
|
|
113
152
|
});
|
|
114
153
|
|
|
154
|
+
const gaps: GapRecommendation[] = [
|
|
155
|
+
{
|
|
156
|
+
domain: 'observability',
|
|
157
|
+
description: 'No structured logging detected',
|
|
158
|
+
recommendedLibrary: {
|
|
159
|
+
name: 'pino', version: '^9.0.0', license: 'MIT',
|
|
160
|
+
rationale: 'Fastest Node.js JSON logger with redaction and child loggers',
|
|
161
|
+
},
|
|
162
|
+
priority: 'critical',
|
|
163
|
+
},
|
|
164
|
+
];
|
|
165
|
+
|
|
115
166
|
const result = await analyze({
|
|
116
167
|
input: inputJson,
|
|
117
168
|
context7Client: myContext7Client,
|
|
118
|
-
recommender,
|
|
169
|
+
recommender,
|
|
170
|
+
gaps, // AI agent identifies missing capabilities
|
|
119
171
|
});
|
|
120
172
|
```
|
|
121
173
|
|
|
122
174
|
## Output Artifacts
|
|
123
175
|
|
|
124
176
|
Single `OutputSchema` JSON containing:
|
|
125
|
-
- `recommendedChanges` — recommendations with scores, verification
|
|
177
|
+
- `recommendedChanges` — replacement recommendations with scores, verification, adapter strategies
|
|
178
|
+
- `gapAnalysis` (optional) — missing capabilities with prioritized recommendations
|
|
126
179
|
- `filesToDelete` — file paths to remove after migration
|
|
127
180
|
- `linesSavedEstimate` — total lines saved
|
|
128
181
|
- `uxAudit` — UX completeness checklist
|
package/dist/index.d.ts
CHANGED
|
@@ -18,18 +18,42 @@ import type { VulnerabilityClient } from './security/osv-client.js';
|
|
|
18
18
|
import type { RegistryClient } from './updater/registry-client.js';
|
|
19
19
|
import type { PlatformClient } from './pr-creator/platform-client.js';
|
|
20
20
|
import type { GitOperations } from './pr-creator/git-operations.js';
|
|
21
|
-
export declare const VERSION = "1.0.
|
|
21
|
+
export declare const VERSION = "1.0.3";
|
|
22
22
|
/**
|
|
23
23
|
* A library recommendation provided by the AI agent (or caller).
|
|
24
24
|
* The scanner detects WHAT is hand-rolled; the recommender decides WHAT to use.
|
|
25
|
+
*
|
|
26
|
+
* Required fields give the pipeline what it needs for scoring/filtering.
|
|
27
|
+
* Optional fields let the AI agent express ecosystem-level solutions —
|
|
28
|
+
* rationale, companion packages, anti-patterns, and alternatives.
|
|
25
29
|
*/
|
|
26
30
|
export interface LibraryRecommendation {
|
|
27
|
-
/**
|
|
31
|
+
/** Primary library name (e.g., "@lingui/core", "zustand") */
|
|
28
32
|
library: string;
|
|
29
|
-
/** Version constraint (e.g., "^
|
|
33
|
+
/** Version constraint (e.g., "^4.0.0") */
|
|
30
34
|
version: string;
|
|
31
35
|
/** SPDX license identifier (e.g., "MIT") */
|
|
32
36
|
license: string;
|
|
37
|
+
/** WHY this library — the AI agent's reasoning for this specific choice */
|
|
38
|
+
rationale?: string;
|
|
39
|
+
/** Companion libraries that form a cohesive solution */
|
|
40
|
+
ecosystem?: Array<{
|
|
41
|
+
/** Package name */
|
|
42
|
+
library: string;
|
|
43
|
+
/** Version constraint */
|
|
44
|
+
version: string;
|
|
45
|
+
/** Role in the solution (e.g., "CI/CD message extraction") */
|
|
46
|
+
role: string;
|
|
47
|
+
}>;
|
|
48
|
+
/** What NOT to use, and why */
|
|
49
|
+
antiPatterns?: string[];
|
|
50
|
+
/** Alternative solutions for different architectural contexts */
|
|
51
|
+
alternatives?: Array<{
|
|
52
|
+
/** Package name */
|
|
53
|
+
library: string;
|
|
54
|
+
/** When to prefer this alternative (e.g., "Next.js App Router with server components") */
|
|
55
|
+
when: string;
|
|
56
|
+
}>;
|
|
33
57
|
}
|
|
34
58
|
/**
|
|
35
59
|
* Function that provides library recommendations for detections.
|
|
@@ -39,6 +63,43 @@ export interface LibraryRecommendation {
|
|
|
39
63
|
* In programmatic/test mode: the caller provides a deterministic function.
|
|
40
64
|
*/
|
|
41
65
|
export type Recommender = (detection: Detection) => LibraryRecommendation | null;
|
|
66
|
+
/**
|
|
67
|
+
* A capability gap identified by the AI agent — something the project
|
|
68
|
+
* SHOULD have but DOESN'T. Unlike scanner detections (which find hand-rolled
|
|
69
|
+
* code to replace), gaps identify missing capabilities entirely.
|
|
70
|
+
*
|
|
71
|
+
* Examples:
|
|
72
|
+
* - "No structured logging" → recommend pino
|
|
73
|
+
* - "No error monitoring" → recommend Sentry
|
|
74
|
+
* - "No rate limiting" → recommend Arcjet
|
|
75
|
+
* - "No event-driven workflows" → recommend Inngest
|
|
76
|
+
*/
|
|
77
|
+
export interface GapRecommendation {
|
|
78
|
+
/** The Vibe Coding domain this gap belongs to */
|
|
79
|
+
domain: string;
|
|
80
|
+
/** What capability is missing (e.g., "No structured logging detected") */
|
|
81
|
+
description: string;
|
|
82
|
+
/** The recommended solution */
|
|
83
|
+
recommendedLibrary: {
|
|
84
|
+
name: string;
|
|
85
|
+
version: string;
|
|
86
|
+
license: string;
|
|
87
|
+
documentationUrl?: string;
|
|
88
|
+
rationale?: string;
|
|
89
|
+
ecosystem?: Array<{
|
|
90
|
+
library: string;
|
|
91
|
+
version: string;
|
|
92
|
+
role: string;
|
|
93
|
+
}>;
|
|
94
|
+
antiPatterns?: string[];
|
|
95
|
+
alternatives?: Array<{
|
|
96
|
+
library: string;
|
|
97
|
+
when: string;
|
|
98
|
+
}>;
|
|
99
|
+
};
|
|
100
|
+
/** How important is filling this gap */
|
|
101
|
+
priority: 'critical' | 'recommended' | 'nice-to-have';
|
|
102
|
+
}
|
|
42
103
|
export interface AnalyzeOptions {
|
|
43
104
|
/** Raw input to be validated against InputSchema */
|
|
44
105
|
input: unknown;
|
|
@@ -50,6 +111,12 @@ export interface AnalyzeOptions {
|
|
|
50
111
|
* which library best fits each detected pattern based on project context.
|
|
51
112
|
*/
|
|
52
113
|
recommender: Recommender;
|
|
114
|
+
/**
|
|
115
|
+
* Gap recommendations from the AI agent — capabilities the project should
|
|
116
|
+
* have but doesn't. The scanner finds "you hand-rolled X"; gaps find
|
|
117
|
+
* "you're missing Y entirely" (e.g., no error monitoring, no rate limiting).
|
|
118
|
+
*/
|
|
119
|
+
gaps?: GapRecommendation[];
|
|
53
120
|
/** Optional — if provided, enables vulnerability scanning */
|
|
54
121
|
vulnClient?: VulnerabilityClient;
|
|
55
122
|
/** Optional — if provided, enables auto-update recommendations */
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EACL,YAAY,EAIb,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAgB,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAEL,KAAK,sBAAsB,EAE5B,MAAM,sCAAsC,CAAC;AAG9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAOnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAMpE,eAAO,MAAM,OAAO,UAAU,CAAC;AAM/B
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -29,7 +29,7 @@ import { executePRPlans } from './pr-creator/pr-executor.js';
|
|
|
29
29
|
// ---------------------------------------------------------------------------
|
|
30
30
|
// Version
|
|
31
31
|
// ---------------------------------------------------------------------------
|
|
32
|
-
export const VERSION = '1.0.
|
|
32
|
+
export const VERSION = '1.0.3';
|
|
33
33
|
export { scanCodebase } from './analyzer/scanner.js';
|
|
34
34
|
export { getPatternCatalog } from './analyzer/pattern-catalog.js';
|
|
35
35
|
// ---------------------------------------------------------------------------
|
|
@@ -126,6 +126,10 @@ export async function analyze(options) {
|
|
|
126
126
|
version: rec.version,
|
|
127
127
|
license: rec.license,
|
|
128
128
|
documentationUrl: verification.documentationUrl,
|
|
129
|
+
rationale: rec.rationale,
|
|
130
|
+
ecosystem: rec.ecosystem,
|
|
131
|
+
antiPatterns: rec.antiPatterns,
|
|
132
|
+
alternatives: rec.alternatives,
|
|
129
133
|
},
|
|
130
134
|
domain: detection.domain,
|
|
131
135
|
impactScores: scoringOutput.scores,
|
|
@@ -263,6 +267,8 @@ export async function analyze(options) {
|
|
|
263
267
|
deletionChecklist: migrationPlan.deletionChecklist,
|
|
264
268
|
peerDependencyWarnings: peerWarnings,
|
|
265
269
|
},
|
|
270
|
+
// Gap analysis — capabilities the project should have but doesn't
|
|
271
|
+
gapAnalysis: options.gaps && options.gaps.length > 0 ? options.gaps : undefined,
|
|
266
272
|
// Phase 2 optional sections
|
|
267
273
|
vulnerabilityReport,
|
|
268
274
|
updatePlan,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAOxD,OAAO,EAAE,YAAY,EAAmC,MAAM,uBAAuB,CAAC;AACtF,OAAO,EACL,wBAAwB,GAEzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EACL,eAAe,EACf,yBAAyB,GAE1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EACL,qBAAqB,GAGtB,MAAM,sCAAsC,CAAC;AAI9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAI7D,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|