superskill 0.2.2 → 0.2.4
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/.claude-plugin/marketplace.json +23 -0
- package/.claude-plugin/plugin.json +12 -0
- package/.mcp.json +9 -0
- package/LICENSE-COMMERCIAL.md +46 -0
- package/dist/setup/configure.js +21 -1
- package/dist/setup/configure.js.map +1 -1
- package/dist/setup/teardown.js +13 -5
- package/dist/setup/teardown.js.map +1 -1
- package/package.json +7 -1
- package/dist/commands/brainstorm.test.d.ts +0 -1
- package/dist/commands/brainstorm.test.js +0 -110
- package/dist/commands/brainstorm.test.js.map +0 -1
- package/dist/commands/context.test.d.ts +0 -1
- package/dist/commands/context.test.js +0 -230
- package/dist/commands/context.test.js.map +0 -1
- package/dist/commands/decide.test.d.ts +0 -1
- package/dist/commands/decide.test.js +0 -109
- package/dist/commands/decide.test.js.map +0 -1
- package/dist/commands/graph.test.d.ts +0 -1
- package/dist/commands/graph.test.js +0 -215
- package/dist/commands/graph.test.js.map +0 -1
- package/dist/commands/learn.test.d.ts +0 -1
- package/dist/commands/learn.test.js +0 -241
- package/dist/commands/learn.test.js.map +0 -1
- package/dist/commands/read.test.d.ts +0 -1
- package/dist/commands/read.test.js +0 -48
- package/dist/commands/read.test.js.map +0 -1
- package/dist/commands/resume.test.d.ts +0 -1
- package/dist/commands/resume.test.js +0 -243
- package/dist/commands/resume.test.js.map +0 -1
- package/dist/commands/search.test.d.ts +0 -1
- package/dist/commands/search.test.js +0 -61
- package/dist/commands/search.test.js.map +0 -1
- package/dist/commands/session.test.d.ts +0 -1
- package/dist/commands/session.test.js +0 -231
- package/dist/commands/session.test.js.map +0 -1
- package/dist/commands/skill/index.test.d.ts +0 -1
- package/dist/commands/skill/index.test.js +0 -137
- package/dist/commands/skill/index.test.js.map +0 -1
- package/dist/commands/skill/install.test.d.ts +0 -1
- package/dist/commands/skill/install.test.js +0 -225
- package/dist/commands/skill/install.test.js.map +0 -1
- package/dist/commands/skill/list.test.d.ts +0 -1
- package/dist/commands/skill/list.test.js +0 -101
- package/dist/commands/skill/list.test.js.map +0 -1
- package/dist/commands/skill/schema.test.d.ts +0 -1
- package/dist/commands/skill/schema.test.js +0 -142
- package/dist/commands/skill/schema.test.js.map +0 -1
- package/dist/commands/skill/validate.test.d.ts +0 -1
- package/dist/commands/skill/validate.test.js +0 -171
- package/dist/commands/skill/validate.test.js.map +0 -1
- package/dist/commands/task.test.d.ts +0 -1
- package/dist/commands/task.test.js +0 -395
- package/dist/commands/task.test.js.map +0 -1
- package/dist/commands/todo.test.d.ts +0 -1
- package/dist/commands/todo.test.js +0 -324
- package/dist/commands/todo.test.js.map +0 -1
- package/dist/commands/write.test.d.ts +0 -1
- package/dist/commands/write.test.js +0 -79
- package/dist/commands/write.test.js.map +0 -1
- package/dist/config.test.d.ts +0 -1
- package/dist/config.test.js +0 -147
- package/dist/config.test.js.map +0 -1
- package/dist/core/executor.test.d.ts +0 -1
- package/dist/core/executor.test.js +0 -206
- package/dist/core/executor.test.js.map +0 -1
- package/dist/core/registry.test.d.ts +0 -1
- package/dist/core/registry.test.js +0 -213
- package/dist/core/registry.test.js.map +0 -1
- package/dist/integration/coordination.test.d.ts +0 -1
- package/dist/integration/coordination.test.js +0 -286
- package/dist/integration/coordination.test.js.map +0 -1
- package/dist/integration/project-artifacts.test.d.ts +0 -1
- package/dist/integration/project-artifacts.test.js +0 -275
- package/dist/integration/project-artifacts.test.js.map +0 -1
- package/dist/integration/registry-graph.test.d.ts +0 -1
- package/dist/integration/registry-graph.test.js +0 -157
- package/dist/integration/registry-graph.test.js.map +0 -1
- package/dist/integration/vault-lifecycle.test.d.ts +0 -1
- package/dist/integration/vault-lifecycle.test.js +0 -183
- package/dist/integration/vault-lifecycle.test.js.map +0 -1
- package/dist/lib/auto-number.test.d.ts +0 -1
- package/dist/lib/auto-number.test.js +0 -88
- package/dist/lib/auto-number.test.js.map +0 -1
- package/dist/lib/auto-profile.test.d.ts +0 -1
- package/dist/lib/auto-profile.test.js +0 -227
- package/dist/lib/auto-profile.test.js.map +0 -1
- package/dist/lib/escape-regex.test.d.ts +0 -1
- package/dist/lib/escape-regex.test.js +0 -27
- package/dist/lib/escape-regex.test.js.map +0 -1
- package/dist/lib/frontmatter.test.d.ts +0 -1
- package/dist/lib/frontmatter.test.js +0 -192
- package/dist/lib/frontmatter.test.js.map +0 -1
- package/dist/lib/project-detector.test.d.ts +0 -1
- package/dist/lib/project-detector.test.js +0 -117
- package/dist/lib/project-detector.test.js.map +0 -1
- package/dist/lib/safe-external-path.test.d.ts +0 -1
- package/dist/lib/safe-external-path.test.js +0 -99
- package/dist/lib/safe-external-path.test.js.map +0 -1
- package/dist/lib/search-engine.test.d.ts +0 -1
- package/dist/lib/search-engine.test.js +0 -120
- package/dist/lib/search-engine.test.js.map +0 -1
- package/dist/lib/session-registry.test.d.ts +0 -1
- package/dist/lib/session-registry.test.js +0 -199
- package/dist/lib/session-registry.test.js.map +0 -1
- package/dist/lib/stack-detector.test.d.ts +0 -1
- package/dist/lib/stack-detector.test.js +0 -110
- package/dist/lib/stack-detector.test.js.map +0 -1
- package/dist/lib/token-estimator.test.d.ts +0 -1
- package/dist/lib/token-estimator.test.js +0 -65
- package/dist/lib/token-estimator.test.js.map +0 -1
- package/dist/lib/tool-detector.test.d.ts +0 -1
- package/dist/lib/tool-detector.test.js +0 -170
- package/dist/lib/tool-detector.test.js.map +0 -1
- package/dist/lib/vault-fs.test.d.ts +0 -1
- package/dist/lib/vault-fs.test.js +0 -210
- package/dist/lib/vault-fs.test.js.map +0 -1
- package/dist/setup/configure.test.d.ts +0 -1
- package/dist/setup/configure.test.js +0 -112
- package/dist/setup/configure.test.js.map +0 -1
- package/dist/setup/detect.test.d.ts +0 -1
- package/dist/setup/detect.test.js +0 -44
- package/dist/setup/detect.test.js.map +0 -1
- package/dist/setup/instructions.test.d.ts +0 -1
- package/dist/setup/instructions.test.js +0 -84
- package/dist/setup/instructions.test.js.map +0 -1
- package/dist/setup/json-config.test.d.ts +0 -1
- package/dist/setup/json-config.test.js +0 -92
- package/dist/setup/json-config.test.js.map +0 -1
- package/dist/setup/setup-integration.test.d.ts +0 -1
- package/dist/setup/setup-integration.test.js +0 -72
- package/dist/setup/setup-integration.test.js.map +0 -1
- package/dist/setup/teardown.test.d.ts +0 -1
- package/dist/setup/teardown.test.js +0 -105
- package/dist/setup/teardown.test.js.map +0 -1
- package/dist/setup/toml-config.test.d.ts +0 -1
- package/dist/setup/toml-config.test.js +0 -49
- package/dist/setup/toml-config.test.js.map +0 -1
- package/dist/test-helpers.test.d.ts +0 -1
- package/dist/test-helpers.test.js +0 -90
- package/dist/test-helpers.test.js.map +0 -1
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
2
|
-
import { mkdtemp, writeFile, rm } from "fs/promises";
|
|
3
|
-
import { join } from "path";
|
|
4
|
-
import { tmpdir } from "os";
|
|
5
|
-
import { autoDetect, getRelevantDomains } from "./auto-profile.js";
|
|
6
|
-
async function mkTmp() {
|
|
7
|
-
return mkdtemp(join(tmpdir(), "auto-profile-"));
|
|
8
|
-
}
|
|
9
|
-
function withEnv(overrides, fn) {
|
|
10
|
-
const original = {};
|
|
11
|
-
for (const key of Object.keys(overrides)) {
|
|
12
|
-
original[key] = process.env[key];
|
|
13
|
-
if (overrides[key] === undefined) {
|
|
14
|
-
delete process.env[key];
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
process.env[key] = overrides[key];
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
const restore = () => {
|
|
21
|
-
for (const key of Object.keys(original)) {
|
|
22
|
-
if (original[key] === undefined) {
|
|
23
|
-
delete process.env[key];
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
process.env[key] = original[key];
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
const result = fn();
|
|
31
|
-
if (result instanceof Promise) {
|
|
32
|
-
return result.finally(restore);
|
|
33
|
-
}
|
|
34
|
-
restore();
|
|
35
|
-
return result;
|
|
36
|
-
}
|
|
37
|
-
describe("autoDetect", () => {
|
|
38
|
-
let dir;
|
|
39
|
-
beforeEach(async () => {
|
|
40
|
-
dir = await mkTmp();
|
|
41
|
-
});
|
|
42
|
-
afterEach(async () => {
|
|
43
|
-
await rm(dir, { recursive: true, force: true });
|
|
44
|
-
});
|
|
45
|
-
it("returns ecc-first for a Go project", async () => {
|
|
46
|
-
await writeFile(join(dir, "go.mod"), `module example.com/app\n\ngo 1.21\n`);
|
|
47
|
-
const config = await autoDetect(dir);
|
|
48
|
-
expect(config.profile).toBe("ecc-first");
|
|
49
|
-
expect(config.detectedStack.primary).toBe("go");
|
|
50
|
-
});
|
|
51
|
-
it("returns ecc-first for a Python project", async () => {
|
|
52
|
-
await writeFile(join(dir, "requirements.txt"), `flask==2.3.0\n`);
|
|
53
|
-
const config = await autoDetect(dir);
|
|
54
|
-
expect(config.profile).toBe("ecc-first");
|
|
55
|
-
expect(config.detectedStack.languages).toContain("python");
|
|
56
|
-
});
|
|
57
|
-
it("returns ecc-first for a Django project", async () => {
|
|
58
|
-
await writeFile(join(dir, "requirements.txt"), `Django==4.2.0\n`);
|
|
59
|
-
const config = await autoDetect(dir);
|
|
60
|
-
expect(config.profile).toBe("ecc-first");
|
|
61
|
-
expect(config.detectedStack.frameworks).toContain("django");
|
|
62
|
-
});
|
|
63
|
-
it("returns ecc-first for a React TypeScript project", async () => {
|
|
64
|
-
await writeFile(join(dir, "package.json"), JSON.stringify({ dependencies: { react: "^18.0.0", "react-dom": "^18.0.0" } }));
|
|
65
|
-
const config = await autoDetect(dir);
|
|
66
|
-
expect(config.profile).toBe("ecc-first");
|
|
67
|
-
expect(config.detectedStack.frameworks).toContain("react");
|
|
68
|
-
});
|
|
69
|
-
it("returns superpowers-first for an empty/unknown project", async () => {
|
|
70
|
-
const config = await autoDetect(dir);
|
|
71
|
-
expect(config.profile).toBe("superpowers-first");
|
|
72
|
-
expect(config.detectedStack.primary).toBe("unknown");
|
|
73
|
-
});
|
|
74
|
-
it("returns full size for context >= 500k (e.g. claude-opus-4-6)", async () => {
|
|
75
|
-
await writeFile(join(dir, "go.mod"), `module example.com/app\n\ngo 1.21\n`);
|
|
76
|
-
await withEnv({ CLAUDE_CODE: "1", ANTHROPIC_MODEL: "claude-opus-4-6" }, async () => {
|
|
77
|
-
const config = await autoDetect(dir);
|
|
78
|
-
expect(config.size).toBe("full");
|
|
79
|
-
expect(config.detectedTool.contextWindow).toBe(1_000_000);
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
it("returns standard size for context 100k-499k (e.g. claude-sonnet-4-6)", async () => {
|
|
83
|
-
await writeFile(join(dir, "go.mod"), `module example.com/app\n\ngo 1.21\n`);
|
|
84
|
-
await withEnv({ CLAUDE_CODE: "1", ANTHROPIC_MODEL: "claude-sonnet-4-6" }, async () => {
|
|
85
|
-
const config = await autoDetect(dir);
|
|
86
|
-
expect(config.size).toBe("standard");
|
|
87
|
-
expect(config.detectedTool.contextWindow).toBe(200_000);
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
it("returns compact size for context < 100k", async () => {
|
|
91
|
-
await writeFile(join(dir, "go.mod"), `module example.com/app\n\ngo 1.21\n`);
|
|
92
|
-
// Unknown tool → 128k, but let's test with a hypothetical small context
|
|
93
|
-
// We can't easily set context window below 100k without a known tool,
|
|
94
|
-
// so we test that unknown tool gets 128k → standard
|
|
95
|
-
const config = await autoDetect(dir);
|
|
96
|
-
// Default 128k → standard
|
|
97
|
-
expect(["standard", "compact"]).toContain(config.size);
|
|
98
|
-
});
|
|
99
|
-
it("includes reason string with stack and tool info", async () => {
|
|
100
|
-
await writeFile(join(dir, "go.mod"), `module example.com/app\n\ngo 1.21\n`);
|
|
101
|
-
await withEnv({ CLAUDE_CODE: "1" }, async () => {
|
|
102
|
-
const config = await autoDetect(dir);
|
|
103
|
-
expect(config.reason).toContain("go");
|
|
104
|
-
expect(config.reason).toContain("claude-code");
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
it("uses process.cwd() when no path provided", async () => {
|
|
108
|
-
// Just verify it doesn't throw — cwd may be any kind of project
|
|
109
|
-
const config = await autoDetect();
|
|
110
|
-
expect(config.profile).toBeDefined();
|
|
111
|
-
expect(config.size).toBeDefined();
|
|
112
|
-
});
|
|
113
|
-
it("detects Spring Boot as ecc-first", async () => {
|
|
114
|
-
await writeFile(join(dir, "pom.xml"), `<project><dependencies><dependency><groupId>org.springframework.boot</groupId></dependency></dependencies></project>`);
|
|
115
|
-
const config = await autoDetect(dir);
|
|
116
|
-
expect(config.profile).toBe("ecc-first");
|
|
117
|
-
expect(config.detectedStack.frameworks).toContain("spring-boot");
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
// ── helpers ──────────────────────────────────────────
|
|
121
|
-
function makeStack(overrides) {
|
|
122
|
-
return {
|
|
123
|
-
languages: [],
|
|
124
|
-
frameworks: [],
|
|
125
|
-
buildTools: [],
|
|
126
|
-
primary: "unknown",
|
|
127
|
-
...overrides,
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
const BASE_DOMAINS = [
|
|
131
|
-
"tdd", "code-review", "verification", "planning", "security", "debugging",
|
|
132
|
-
"meta", "git-workflow", "agent-orchestration", "agent-engineering",
|
|
133
|
-
"brainstorming", "shipping",
|
|
134
|
-
];
|
|
135
|
-
describe("getRelevantDomains", () => {
|
|
136
|
-
it("always includes base domains for any specific stack", () => {
|
|
137
|
-
const domains = getRelevantDomains(makeStack({ languages: ["go"], primary: "go" }));
|
|
138
|
-
for (const d of BASE_DOMAINS) {
|
|
139
|
-
expect(domains).toContain(d);
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
it("Go project includes go, api-design, backend-patterns and excludes django/spring/frontend", () => {
|
|
143
|
-
const domains = getRelevantDomains(makeStack({ languages: ["go"], primary: "go" }));
|
|
144
|
-
expect(domains).toContain("go");
|
|
145
|
-
expect(domains).toContain("api-design");
|
|
146
|
-
expect(domains).toContain("backend-patterns");
|
|
147
|
-
expect(domains).not.toContain("django");
|
|
148
|
-
expect(domains).not.toContain("spring-boot");
|
|
149
|
-
expect(domains).not.toContain("frontend-design");
|
|
150
|
-
expect(domains).not.toContain("3d-animation");
|
|
151
|
-
});
|
|
152
|
-
it("React project includes frontend-design and 3d-animation, excludes go/django/spring", () => {
|
|
153
|
-
const domains = getRelevantDomains(makeStack({
|
|
154
|
-
languages: ["typescript"],
|
|
155
|
-
frameworks: ["react"],
|
|
156
|
-
primary: "typescript",
|
|
157
|
-
}));
|
|
158
|
-
expect(domains).toContain("frontend-design");
|
|
159
|
-
expect(domains).toContain("3d-animation");
|
|
160
|
-
expect(domains).not.toContain("go");
|
|
161
|
-
expect(domains).not.toContain("django");
|
|
162
|
-
expect(domains).not.toContain("spring-boot");
|
|
163
|
-
});
|
|
164
|
-
it("Django project includes django, python, database", () => {
|
|
165
|
-
const domains = getRelevantDomains(makeStack({
|
|
166
|
-
languages: ["python"],
|
|
167
|
-
frameworks: ["django"],
|
|
168
|
-
primary: "python",
|
|
169
|
-
}));
|
|
170
|
-
expect(domains).toContain("django");
|
|
171
|
-
expect(domains).toContain("python");
|
|
172
|
-
expect(domains).toContain("database");
|
|
173
|
-
expect(domains).not.toContain("go");
|
|
174
|
-
expect(domains).not.toContain("spring-boot");
|
|
175
|
-
});
|
|
176
|
-
it("Spring Boot project includes spring-boot, java, database", () => {
|
|
177
|
-
const domains = getRelevantDomains(makeStack({
|
|
178
|
-
languages: ["java"],
|
|
179
|
-
frameworks: ["spring-boot"],
|
|
180
|
-
primary: "java",
|
|
181
|
-
}));
|
|
182
|
-
expect(domains).toContain("spring-boot");
|
|
183
|
-
expect(domains).toContain("java");
|
|
184
|
-
expect(domains).toContain("database");
|
|
185
|
-
expect(domains).not.toContain("django");
|
|
186
|
-
expect(domains).not.toContain("go");
|
|
187
|
-
});
|
|
188
|
-
it("unknown stack returns all domains (no filtering)", () => {
|
|
189
|
-
const allDomains = getRelevantDomains(makeStack({ primary: "unknown" }));
|
|
190
|
-
// Should include language-specific domains that would normally be filtered
|
|
191
|
-
expect(allDomains).toContain("go");
|
|
192
|
-
expect(allDomains).toContain("django");
|
|
193
|
-
expect(allDomains).toContain("spring-boot");
|
|
194
|
-
expect(allDomains).toContain("content-business");
|
|
195
|
-
expect(allDomains).toContain("3d-animation");
|
|
196
|
-
});
|
|
197
|
-
it("Java (non-Spring) project includes java but not spring-boot", () => {
|
|
198
|
-
const domains = getRelevantDomains(makeStack({
|
|
199
|
-
languages: ["java"],
|
|
200
|
-
frameworks: [],
|
|
201
|
-
primary: "java",
|
|
202
|
-
}));
|
|
203
|
-
expect(domains).toContain("java");
|
|
204
|
-
expect(domains).not.toContain("spring-boot");
|
|
205
|
-
});
|
|
206
|
-
it("Swift project includes swift", () => {
|
|
207
|
-
const domains = getRelevantDomains(makeStack({
|
|
208
|
-
languages: ["swift"],
|
|
209
|
-
primary: "swift",
|
|
210
|
-
}));
|
|
211
|
-
expect(domains).toContain("swift");
|
|
212
|
-
expect(domains).not.toContain("go");
|
|
213
|
-
});
|
|
214
|
-
it("C++ project includes cpp", () => {
|
|
215
|
-
const domains = getRelevantDomains(makeStack({
|
|
216
|
-
languages: ["cpp"],
|
|
217
|
-
primary: "cpp",
|
|
218
|
-
}));
|
|
219
|
-
expect(domains).toContain("cpp");
|
|
220
|
-
expect(domains).not.toContain("go");
|
|
221
|
-
});
|
|
222
|
-
it("content-business excluded when a specific tech stack is detected", () => {
|
|
223
|
-
const domains = getRelevantDomains(makeStack({ languages: ["go"], primary: "go" }));
|
|
224
|
-
expect(domains).not.toContain("content-business");
|
|
225
|
-
});
|
|
226
|
-
});
|
|
227
|
-
//# sourceMappingURL=auto-profile.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auto-profile.test.js","sourceRoot":"","sources":["../../src/lib/auto-profile.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { escapeRegex } from "./escape-regex.js";
|
|
3
|
-
describe("escapeRegex", () => {
|
|
4
|
-
const cases = [
|
|
5
|
-
{ name: "empty string", input: "", expected: "" },
|
|
6
|
-
{ name: "normal string", input: "hello", expected: "hello" },
|
|
7
|
-
{ name: "dot", input: "a.b", expected: "a\\.b" },
|
|
8
|
-
{ name: "asterisk", input: "a*b", expected: "a\\*b" },
|
|
9
|
-
{ name: "plus", input: "a+b", expected: "a\\+b" },
|
|
10
|
-
{ name: "question", input: "a?b", expected: "a\\?b" },
|
|
11
|
-
{ name: "caret", input: "a^b", expected: "a\\^b" },
|
|
12
|
-
{ name: "dollar", input: "a$b", expected: "a\\$b" },
|
|
13
|
-
{ name: "braces", input: "a{b}", expected: "a\\{b\\}" },
|
|
14
|
-
{ name: "parentheses", input: "a(b)", expected: "a\\(b\\)" },
|
|
15
|
-
{ name: "pipe", input: "a|b", expected: "a\\|b" },
|
|
16
|
-
{ name: "brackets", input: "a[b]", expected: "a\\[b\\]" },
|
|
17
|
-
{ name: "backslash", input: "a\\b", expected: "a\\\\b" },
|
|
18
|
-
{ name: "multiple special chars", input: "a.b*c+d?e^f$g{h}i(j)j|k[l]m\\n", expected: "a\\.b\\*c\\+d\\?e\\^f\\$g\\{h\\}i\\(j\\)j\\|k\\[l\\]m\\\\n" },
|
|
19
|
-
{ name: "regex pattern", input: ".*+?^${}()|[]\\", expected: "\\.\\*\\+\\?\\^\\$\\{\\}\\(\\)\\|\\[\\]\\\\" },
|
|
20
|
-
];
|
|
21
|
-
for (const c of cases) {
|
|
22
|
-
it(c.name, () => {
|
|
23
|
-
expect(escapeRegex(c.input)).toBe(c.expected);
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
//# sourceMappingURL=escape-regex.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"escape-regex.test.js","sourceRoot":"","sources":["../../src/lib/escape-regex.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,MAAM,KAAK,GAAG;QACZ,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACjD,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE;QAC5D,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE;QAChD,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE;QACrD,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE;QACjD,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE;QACrD,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE;QAClD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE;QACnD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE;QACvD,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE;QAC5D,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE;QACjD,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE;QACzD,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE;QACxD,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,gCAAgC,EAAE,QAAQ,EAAE,4DAA4D,EAAE;QACnJ,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,6CAA6C,EAAE;KAC7G,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE;YACd,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, vi, afterEach } from "vitest";
|
|
2
|
-
import { parseFrontmatter, serializeFrontmatter, createFrontmatter, mergeFrontmatter, validateFrontmatter } from "./frontmatter.js";
|
|
3
|
-
describe("parseFrontmatter", () => {
|
|
4
|
-
const cases = [
|
|
5
|
-
{
|
|
6
|
-
name: "with frontmatter",
|
|
7
|
-
input: "---\ntitle: Test\nstatus: active\n---\n\nContent here",
|
|
8
|
-
expectedData: { title: "Test", status: "active" },
|
|
9
|
-
expectedContent: "\nContent here",
|
|
10
|
-
},
|
|
11
|
-
{
|
|
12
|
-
name: "without frontmatter",
|
|
13
|
-
input: "# Just markdown\n\nNo frontmatter",
|
|
14
|
-
expectedData: {},
|
|
15
|
-
expectedContent: "# Just markdown\n\nNo frontmatter",
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
name: "empty string",
|
|
19
|
-
input: "",
|
|
20
|
-
expectedData: {},
|
|
21
|
-
expectedContent: "",
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
name: "only frontmatter dashes",
|
|
25
|
-
input: "---\n---\n",
|
|
26
|
-
expectedData: {},
|
|
27
|
-
expectedContent: "",
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
name: "malformed YAML",
|
|
31
|
-
input: "---\ninvalid: [unclosed\n---\nContent",
|
|
32
|
-
expectedData: {},
|
|
33
|
-
expectedContent: "---\ninvalid: [unclosed\n---\nContent",
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
name: "with array field",
|
|
37
|
-
input: "---\ntags:\n - tag1\n - tag2\n---\nContent",
|
|
38
|
-
expectedData: { tags: ["tag1", "tag2"] },
|
|
39
|
-
expectedContent: "Content",
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
name: "with nested object",
|
|
43
|
-
input: "---\nmeta:\n key: value\n---\nContent",
|
|
44
|
-
expectedData: { meta: { key: "value" } },
|
|
45
|
-
expectedContent: "Content",
|
|
46
|
-
},
|
|
47
|
-
];
|
|
48
|
-
for (const c of cases) {
|
|
49
|
-
it(c.name, () => {
|
|
50
|
-
const result = parseFrontmatter(c.input);
|
|
51
|
-
expect(result.data).toEqual(c.expectedData);
|
|
52
|
-
expect(result.content).toBe(c.expectedContent);
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
describe("serializeFrontmatter", () => {
|
|
57
|
-
it("serializes with content", () => {
|
|
58
|
-
const data = { type: "adr", status: "active" };
|
|
59
|
-
const content = "# My ADR\n\nContent";
|
|
60
|
-
const result = serializeFrontmatter(data, content);
|
|
61
|
-
expect(result).toContain("---");
|
|
62
|
-
expect(result).toContain("type: adr");
|
|
63
|
-
expect(result).toContain("status: active");
|
|
64
|
-
expect(result).toContain("# My ADR");
|
|
65
|
-
});
|
|
66
|
-
it("serializes with empty content", () => {
|
|
67
|
-
const data = { type: "task" };
|
|
68
|
-
const result = serializeFrontmatter(data, "");
|
|
69
|
-
expect(result).toContain("type: task");
|
|
70
|
-
});
|
|
71
|
-
it("serializes array fields", () => {
|
|
72
|
-
const data = { tags: ["a", "b"] };
|
|
73
|
-
const result = serializeFrontmatter(data, "content");
|
|
74
|
-
expect(result).toContain("tags:");
|
|
75
|
-
expect(result).toContain("- a");
|
|
76
|
-
expect(result).toContain("- b");
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
describe("createFrontmatter", () => {
|
|
80
|
-
beforeEach(() => {
|
|
81
|
-
vi.useFakeTimers();
|
|
82
|
-
vi.setSystemTime(new Date("2024-01-15"));
|
|
83
|
-
});
|
|
84
|
-
afterEach(() => {
|
|
85
|
-
vi.useRealTimers();
|
|
86
|
-
});
|
|
87
|
-
it("creates frontmatter with defaults", () => {
|
|
88
|
-
const result = createFrontmatter({});
|
|
89
|
-
expect(result.type).toBe("index");
|
|
90
|
-
expect(result.status).toBe("active");
|
|
91
|
-
expect(result.created).toBe("2024-01-15");
|
|
92
|
-
expect(result.updated).toBe("2024-01-15");
|
|
93
|
-
});
|
|
94
|
-
it("overrides defaults", () => {
|
|
95
|
-
const result = createFrontmatter({ type: "adr", status: "draft" });
|
|
96
|
-
expect(result.type).toBe("adr");
|
|
97
|
-
expect(result.status).toBe("draft");
|
|
98
|
-
});
|
|
99
|
-
it("preserves custom fields", () => {
|
|
100
|
-
const result = createFrontmatter({ custom: "value" });
|
|
101
|
-
expect(result.custom).toBe("value");
|
|
102
|
-
});
|
|
103
|
-
it("uses provided created date", () => {
|
|
104
|
-
const result = createFrontmatter({ created: "2023-12-01" });
|
|
105
|
-
expect(result.created).toBe("2023-12-01");
|
|
106
|
-
expect(result.updated).toBe("2024-01-15");
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
describe("mergeFrontmatter", () => {
|
|
110
|
-
beforeEach(() => {
|
|
111
|
-
vi.useFakeTimers();
|
|
112
|
-
vi.setSystemTime(new Date("2024-01-15"));
|
|
113
|
-
});
|
|
114
|
-
afterEach(() => {
|
|
115
|
-
vi.useRealTimers();
|
|
116
|
-
});
|
|
117
|
-
it("merges new fields", () => {
|
|
118
|
-
const existing = { type: "adr", status: "draft" };
|
|
119
|
-
const result = mergeFrontmatter(existing, { status: "active" });
|
|
120
|
-
expect(result.type).toBe("adr");
|
|
121
|
-
expect(result.status).toBe("active");
|
|
122
|
-
});
|
|
123
|
-
it("adds new fields", () => {
|
|
124
|
-
const existing = { type: "task" };
|
|
125
|
-
const result = mergeFrontmatter(existing, { tags: ["urgent"] });
|
|
126
|
-
expect(result.type).toBe("task");
|
|
127
|
-
expect(result.tags).toEqual(["urgent"]);
|
|
128
|
-
});
|
|
129
|
-
it("updates the updated timestamp", () => {
|
|
130
|
-
const existing = { type: "adr", updated: "2023-01-01" };
|
|
131
|
-
const result = mergeFrontmatter(existing, {});
|
|
132
|
-
expect(result.updated).toBe("2024-01-15");
|
|
133
|
-
});
|
|
134
|
-
it("preserves existing fields not in updates", () => {
|
|
135
|
-
const existing = { type: "adr", project: "test", created: "2023-01-01" };
|
|
136
|
-
const result = mergeFrontmatter(existing, { status: "done" });
|
|
137
|
-
expect(result.type).toBe("adr");
|
|
138
|
-
expect(result.project).toBe("test");
|
|
139
|
-
expect(result.created).toBe("2023-01-01");
|
|
140
|
-
expect(result.status).toBe("done");
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
describe("validateFrontmatter", () => {
|
|
144
|
-
it("returns empty array for valid frontmatter", () => {
|
|
145
|
-
const data = { type: "adr", status: "active" };
|
|
146
|
-
expect(validateFrontmatter(data)).toEqual([]);
|
|
147
|
-
});
|
|
148
|
-
it("returns error for invalid type", () => {
|
|
149
|
-
const data = { type: "invalid" };
|
|
150
|
-
const errors = validateFrontmatter(data);
|
|
151
|
-
expect(errors.length).toBe(1);
|
|
152
|
-
expect(errors[0]).toContain("Invalid type");
|
|
153
|
-
});
|
|
154
|
-
it("returns error for invalid status", () => {
|
|
155
|
-
const data = { status: "invalid" };
|
|
156
|
-
const errors = validateFrontmatter(data);
|
|
157
|
-
expect(errors.length).toBe(1);
|
|
158
|
-
expect(errors[0]).toContain("Invalid status");
|
|
159
|
-
});
|
|
160
|
-
it("returns error when tags is not array", () => {
|
|
161
|
-
const data = { tags: "not-array" };
|
|
162
|
-
const errors = validateFrontmatter(data);
|
|
163
|
-
expect(errors.length).toBe(1);
|
|
164
|
-
expect(errors[0]).toContain("Tags must be an array");
|
|
165
|
-
});
|
|
166
|
-
it("returns error when related is not array", () => {
|
|
167
|
-
const data = { related: "not-array" };
|
|
168
|
-
const errors = validateFrontmatter(data);
|
|
169
|
-
expect(errors.length).toBe(1);
|
|
170
|
-
expect(errors[0]).toContain("Related must be an array");
|
|
171
|
-
});
|
|
172
|
-
it("returns multiple errors", () => {
|
|
173
|
-
const data = { type: "bad", status: "worse", tags: "nope" };
|
|
174
|
-
const errors = validateFrontmatter(data);
|
|
175
|
-
expect(errors.length).toBe(3);
|
|
176
|
-
});
|
|
177
|
-
it("accepts all valid types", () => {
|
|
178
|
-
const validTypes = ["context", "adr", "brainstorm", "decision", "todo", "incident", "pattern", "evaluation", "index", "task", "learning", "session"];
|
|
179
|
-
for (const type of validTypes) {
|
|
180
|
-
const errors = validateFrontmatter({ type });
|
|
181
|
-
expect(errors).toEqual([]);
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
it("accepts all valid statuses", () => {
|
|
185
|
-
const validStatuses = ["active", "resolved", "deprecated", "draft", "backlog", "in-progress", "blocked", "done", "cancelled", "completed"];
|
|
186
|
-
for (const status of validStatuses) {
|
|
187
|
-
const errors = validateFrontmatter({ status });
|
|
188
|
-
expect(errors).toEqual([]);
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
});
|
|
192
|
-
//# sourceMappingURL=frontmatter.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.test.js","sourceRoot":"","sources":["../../src/lib/frontmatter.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
2
|
-
import { mkdir, writeFile, rm } from "fs/promises";
|
|
3
|
-
import { tmpdir } from "os";
|
|
4
|
-
import { join } from "path";
|
|
5
|
-
import { detectProject, invalidateProjectMapCache } from "./project-detector.js";
|
|
6
|
-
describe("project-detector", () => {
|
|
7
|
-
let vaultRoot;
|
|
8
|
-
let originalCwd;
|
|
9
|
-
beforeEach(async () => {
|
|
10
|
-
vaultRoot = join(tmpdir(), `project-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
11
|
-
await mkdir(vaultRoot, { recursive: true });
|
|
12
|
-
originalCwd = process.cwd();
|
|
13
|
-
invalidateProjectMapCache();
|
|
14
|
-
});
|
|
15
|
-
afterEach(async () => {
|
|
16
|
-
process.chdir(originalCwd);
|
|
17
|
-
await rm(vaultRoot, { recursive: true, force: true });
|
|
18
|
-
invalidateProjectMapCache();
|
|
19
|
-
});
|
|
20
|
-
describe("detectProject", () => {
|
|
21
|
-
it("returns null when no project-map.json", async () => {
|
|
22
|
-
const result = await detectProject("/nonexistent/path", vaultRoot);
|
|
23
|
-
expect(result).toBeNull();
|
|
24
|
-
});
|
|
25
|
-
it("detects project from exact cwd match in project-map.json", async () => {
|
|
26
|
-
const projectMap = { "/Users/test/myproject": "myproject" };
|
|
27
|
-
await writeFile(join(vaultRoot, "project-map.json"), JSON.stringify(projectMap));
|
|
28
|
-
invalidateProjectMapCache();
|
|
29
|
-
const result = await detectProject("/Users/test/myproject", vaultRoot);
|
|
30
|
-
expect(result).toBe("myproject");
|
|
31
|
-
});
|
|
32
|
-
it("detects project from subdirectory of mapped path", async () => {
|
|
33
|
-
const projectMap = { "/Users/test/myproject": "myproject" };
|
|
34
|
-
await writeFile(join(vaultRoot, "project-map.json"), JSON.stringify(projectMap));
|
|
35
|
-
invalidateProjectMapCache();
|
|
36
|
-
const result = await detectProject("/Users/test/myproject/src/components", vaultRoot);
|
|
37
|
-
expect(result).toBe("myproject");
|
|
38
|
-
});
|
|
39
|
-
it("returns null for unmapped path", async () => {
|
|
40
|
-
const projectMap = { "/Users/test/other": "other" };
|
|
41
|
-
await writeFile(join(vaultRoot, "project-map.json"), JSON.stringify(projectMap));
|
|
42
|
-
invalidateProjectMapCache();
|
|
43
|
-
const result = await detectProject("/Users/test/unmapped", vaultRoot);
|
|
44
|
-
expect(result).toBeNull();
|
|
45
|
-
});
|
|
46
|
-
it("handles invalid JSON in project-map.json", async () => {
|
|
47
|
-
await writeFile(join(vaultRoot, "project-map.json"), "not valid json {{{");
|
|
48
|
-
invalidateProjectMapCache();
|
|
49
|
-
const result = await detectProject("/any/path", vaultRoot);
|
|
50
|
-
expect(result).toBeNull();
|
|
51
|
-
});
|
|
52
|
-
it("handles non-object project-map.json", async () => {
|
|
53
|
-
await writeFile(join(vaultRoot, "project-map.json"), JSON.stringify(["array", "not", "object"]));
|
|
54
|
-
invalidateProjectMapCache();
|
|
55
|
-
const result = await detectProject("/any/path", vaultRoot);
|
|
56
|
-
expect(result).toBeNull();
|
|
57
|
-
});
|
|
58
|
-
it("strips .worktrees suffix from cwd", async () => {
|
|
59
|
-
const projectMap = { "/Users/test/myproject": "myproject" };
|
|
60
|
-
await writeFile(join(vaultRoot, "project-map.json"), JSON.stringify(projectMap));
|
|
61
|
-
invalidateProjectMapCache();
|
|
62
|
-
const result = await detectProject("/Users/test/myproject/.worktrees/feat-x", vaultRoot);
|
|
63
|
-
expect(result).toBe("myproject");
|
|
64
|
-
});
|
|
65
|
-
it("strips .claude/worktrees suffix from cwd", async () => {
|
|
66
|
-
const projectMap = { "/Users/test/myproject": "myproject" };
|
|
67
|
-
await writeFile(join(vaultRoot, "project-map.json"), JSON.stringify(projectMap));
|
|
68
|
-
invalidateProjectMapCache();
|
|
69
|
-
const result = await detectProject("/Users/test/myproject/.claude/worktrees/feat/name", vaultRoot);
|
|
70
|
-
expect(result).toBe("myproject");
|
|
71
|
-
});
|
|
72
|
-
it("strips .claude-worktrees suffix from cwd", async () => {
|
|
73
|
-
const projectMap = { "/Users/test/myproject": "myproject" };
|
|
74
|
-
await writeFile(join(vaultRoot, "project-map.json"), JSON.stringify(projectMap));
|
|
75
|
-
invalidateProjectMapCache();
|
|
76
|
-
const result = await detectProject("/Users/test/myproject/.claude-worktrees/feat-name", vaultRoot);
|
|
77
|
-
expect(result).toBe("myproject");
|
|
78
|
-
});
|
|
79
|
-
it("ignores non-string values in project-map.json", async () => {
|
|
80
|
-
const projectMap = {
|
|
81
|
-
"/Users/test/good": "good",
|
|
82
|
-
"/Users/test/bad": 123,
|
|
83
|
-
"/Users/test/also-bad": null
|
|
84
|
-
};
|
|
85
|
-
await writeFile(join(vaultRoot, "project-map.json"), JSON.stringify(projectMap));
|
|
86
|
-
invalidateProjectMapCache();
|
|
87
|
-
const goodResult = await detectProject("/Users/test/good", vaultRoot);
|
|
88
|
-
expect(goodResult).toBe("good");
|
|
89
|
-
const badResult = await detectProject("/Users/test/bad", vaultRoot);
|
|
90
|
-
expect(badResult).toBeNull();
|
|
91
|
-
});
|
|
92
|
-
it("caches project-map.json", async () => {
|
|
93
|
-
const projectMap = { "/Users/test/cached": "cached" };
|
|
94
|
-
await writeFile(join(vaultRoot, "project-map.json"), JSON.stringify(projectMap));
|
|
95
|
-
invalidateProjectMapCache();
|
|
96
|
-
await detectProject("/Users/test/cached", vaultRoot);
|
|
97
|
-
await writeFile(join(vaultRoot, "project-map.json"), JSON.stringify({ "/Users/test/other": "other" }));
|
|
98
|
-
const result = await detectProject("/Users/test/cached", vaultRoot);
|
|
99
|
-
expect(result).toBe("cached");
|
|
100
|
-
});
|
|
101
|
-
it("cache invalidates for different vault path", async () => {
|
|
102
|
-
const projectMap1 = { "/Users/test/path1": "project1" };
|
|
103
|
-
await writeFile(join(vaultRoot, "project-map.json"), JSON.stringify(projectMap1));
|
|
104
|
-
invalidateProjectMapCache();
|
|
105
|
-
const vaultRoot2 = join(tmpdir(), `project-test-2-${Date.now()}`);
|
|
106
|
-
await mkdir(vaultRoot2, { recursive: true });
|
|
107
|
-
const projectMap2 = { "/Users/test/path1": "project2" };
|
|
108
|
-
await writeFile(join(vaultRoot2, "project-map.json"), JSON.stringify(projectMap2));
|
|
109
|
-
const result1 = await detectProject("/Users/test/path1", vaultRoot);
|
|
110
|
-
const result2 = await detectProject("/Users/test/path1", vaultRoot2);
|
|
111
|
-
expect(result1).toBe("project1");
|
|
112
|
-
expect(result2).toBe("project2");
|
|
113
|
-
await rm(vaultRoot2, { recursive: true, force: true });
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
//# sourceMappingURL=project-detector.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project-detector.test.js","sourceRoot":"","sources":["../../src/lib/project-detector.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAM,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAEjF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,SAAiB,CAAC;IACtB,IAAI,WAAmB,CAAC;IAExB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChG,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC5B,yBAAyB,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3B,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,yBAAyB,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;YACnE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,UAAU,GAAG,EAAE,uBAAuB,EAAE,WAAW,EAAE,CAAC;YAC5D,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YACjF,yBAAyB,EAAE,CAAC;YAE5B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC;YACvE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,UAAU,GAAG,EAAE,uBAAuB,EAAE,WAAW,EAAE,CAAC;YAC5D,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YACjF,yBAAyB,EAAE,CAAC;YAE5B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,sCAAsC,EAAE,SAAS,CAAC,CAAC;YACtF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,UAAU,GAAG,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC;YACpD,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YACjF,yBAAyB,EAAE,CAAC;YAE5B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC;YACtE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,oBAAoB,CAAC,CAAC;YAC3E,yBAAyB,EAAE,CAAC;YAE5B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;YACjG,yBAAyB,EAAE,CAAC;YAE5B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,UAAU,GAAG,EAAE,uBAAuB,EAAE,WAAW,EAAE,CAAC;YAC5D,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YACjF,yBAAyB,EAAE,CAAC;YAE5B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,yCAAyC,EAAE,SAAS,CAAC,CAAC;YACzF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,UAAU,GAAG,EAAE,uBAAuB,EAAE,WAAW,EAAE,CAAC;YAC5D,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YACjF,yBAAyB,EAAE,CAAC;YAE5B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,mDAAmD,EAAE,SAAS,CAAC,CAAC;YACnG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,UAAU,GAAG,EAAE,uBAAuB,EAAE,WAAW,EAAE,CAAC;YAC5D,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YACjF,yBAAyB,EAAE,CAAC;YAE5B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,mDAAmD,EAAE,SAAS,CAAC,CAAC;YACnG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,UAAU,GAAG;gBACjB,kBAAkB,EAAE,MAAM;gBAC1B,iBAAiB,EAAE,GAAG;gBACtB,sBAAsB,EAAE,IAAI;aAC7B,CAAC;YACF,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YACjF,yBAAyB,EAAE,CAAC;YAE5B,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;YACtE,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEhC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;YACpE,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,MAAM,UAAU,GAAG,EAAE,oBAAoB,EAAE,QAAQ,EAAE,CAAC;YACtD,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YACjF,yBAAyB,EAAE,CAAC;YAE5B,MAAM,aAAa,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;YAErD,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAEvG,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;YACpE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,WAAW,GAAG,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC;YACxD,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YAClF,yBAAyB,EAAE,CAAC;YAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAClE,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,MAAM,WAAW,GAAG,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC;YACxD,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YAEnF,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;YACpE,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;YAErE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACjC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEjC,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|