specforge-mcp 0.1.1 → 0.2.2

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.
Files changed (287) hide show
  1. package/README.md +31 -1
  2. package/dist/config/version.d.ts +2 -0
  3. package/dist/config/version.d.ts.map +1 -0
  4. package/dist/config/version.js +9 -0
  5. package/dist/config/version.js.map +1 -0
  6. package/dist/config/version.ts +11 -0
  7. package/dist/engine/detectors/library-detector-langs2.d.ts.map +1 -1
  8. package/dist/engine/detectors/library-detector-langs2.js.map +1 -1
  9. package/dist/engine/mermaid-generator.d.ts.map +1 -1
  10. package/dist/engine/mermaid-generator.js +12 -2
  11. package/dist/engine/mermaid-generator.js.map +1 -1
  12. package/dist/index.js +2 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/tools/create-spec-hu/hu-body-generators.d.ts.map +1 -1
  15. package/dist/tools/create-spec-hu/hu-body-generators.js +7 -1
  16. package/dist/tools/create-spec-hu/hu-body-generators.js.map +1 -1
  17. package/dist/tools/create-spec-tech/ficha-content.d.ts.map +1 -1
  18. package/dist/tools/create-spec-tech/ficha-content.js +4 -2
  19. package/dist/tools/create-spec-tech/ficha-content.js.map +1 -1
  20. package/dist/tools/create-spec.d.ts.map +1 -1
  21. package/dist/tools/create-spec.js +4 -3
  22. package/dist/tools/create-spec.js.map +1 -1
  23. package/dist/tools/register-spec-tools/core-spec-tools.d.ts.map +1 -1
  24. package/dist/tools/register-spec-tools/core-spec-tools.js +4 -0
  25. package/dist/tools/register-spec-tools/core-spec-tools.js.map +1 -1
  26. package/dist/types/spec/core.d.ts +1 -0
  27. package/dist/types/spec/core.d.ts.map +1 -1
  28. package/dist/types/spec/inputs.d.ts +1 -0
  29. package/dist/types/spec/inputs.d.ts.map +1 -1
  30. package/package.json +27 -18
  31. package/src/config/version.ts +11 -0
  32. package/dist/engine/agent-generator.test.d.ts +0 -2
  33. package/dist/engine/agent-generator.test.d.ts.map +0 -1
  34. package/dist/engine/agent-generator.test.js +0 -556
  35. package/dist/engine/agent-generator.test.js.map +0 -1
  36. package/dist/engine/analyzer.test.d.ts +0 -2
  37. package/dist/engine/analyzer.test.d.ts.map +0 -1
  38. package/dist/engine/analyzer.test.js +0 -1461
  39. package/dist/engine/analyzer.test.js.map +0 -1
  40. package/dist/engine/auditor.test.d.ts +0 -2
  41. package/dist/engine/auditor.test.d.ts.map +0 -1
  42. package/dist/engine/auditor.test.js +0 -2075
  43. package/dist/engine/auditor.test.js.map +0 -1
  44. package/dist/engine/doc-generator.test.d.ts +0 -2
  45. package/dist/engine/doc-generator.test.d.ts.map +0 -1
  46. package/dist/engine/doc-generator.test.js +0 -961
  47. package/dist/engine/doc-generator.test.js.map +0 -1
  48. package/dist/engine/estimator.test.d.ts +0 -2
  49. package/dist/engine/estimator.test.d.ts.map +0 -1
  50. package/dist/engine/estimator.test.js +0 -334
  51. package/dist/engine/estimator.test.js.map +0 -1
  52. package/dist/engine/skill-generator.test.d.ts +0 -2
  53. package/dist/engine/skill-generator.test.d.ts.map +0 -1
  54. package/dist/engine/skill-generator.test.js +0 -742
  55. package/dist/engine/skill-generator.test.js.map +0 -1
  56. package/dist/engine/validator.test.d.ts +0 -2
  57. package/dist/engine/validator.test.d.ts.map +0 -1
  58. package/dist/engine/validator.test.js +0 -2371
  59. package/dist/engine/validator.test.js.map +0 -1
  60. package/dist/engine/web-fetcher.test.d.ts +0 -2
  61. package/dist/engine/web-fetcher.test.d.ts.map +0 -1
  62. package/dist/engine/web-fetcher.test.js +0 -360
  63. package/dist/engine/web-fetcher.test.js.map +0 -1
  64. package/dist/i18n/index.test.d.ts +0 -2
  65. package/dist/i18n/index.test.d.ts.map +0 -1
  66. package/dist/i18n/index.test.js +0 -375
  67. package/dist/i18n/index.test.js.map +0 -1
  68. package/dist/index.test.d.ts +0 -2
  69. package/dist/index.test.d.ts.map +0 -1
  70. package/dist/index.test.js +0 -124
  71. package/dist/index.test.js.map +0 -1
  72. package/dist/resources/patterns.test.d.ts +0 -2
  73. package/dist/resources/patterns.test.d.ts.map +0 -1
  74. package/dist/resources/patterns.test.js +0 -142
  75. package/dist/resources/patterns.test.js.map +0 -1
  76. package/dist/resources/process.test.d.ts +0 -2
  77. package/dist/resources/process.test.d.ts.map +0 -1
  78. package/dist/resources/process.test.js +0 -48
  79. package/dist/resources/process.test.js.map +0 -1
  80. package/dist/resources/registry.test.d.ts +0 -2
  81. package/dist/resources/registry.test.d.ts.map +0 -1
  82. package/dist/resources/registry.test.js +0 -138
  83. package/dist/resources/registry.test.js.map +0 -1
  84. package/dist/resources/specs.test.d.ts +0 -2
  85. package/dist/resources/specs.test.d.ts.map +0 -1
  86. package/dist/resources/specs.test.js +0 -130
  87. package/dist/resources/specs.test.js.map +0 -1
  88. package/dist/resources/templates.test.d.ts +0 -2
  89. package/dist/resources/templates.test.d.ts.map +0 -1
  90. package/dist/resources/templates.test.js +0 -119
  91. package/dist/resources/templates.test.js.map +0 -1
  92. package/dist/smoke.test.d.ts +0 -2
  93. package/dist/smoke.test.d.ts.map +0 -1
  94. package/dist/smoke.test.js +0 -229
  95. package/dist/smoke.test.js.map +0 -1
  96. package/dist/storage/base-store.test.d.ts +0 -2
  97. package/dist/storage/base-store.test.d.ts.map +0 -1
  98. package/dist/storage/base-store.test.js +0 -180
  99. package/dist/storage/base-store.test.js.map +0 -1
  100. package/dist/storage/global-store.test.d.ts +0 -2
  101. package/dist/storage/global-store.test.d.ts.map +0 -1
  102. package/dist/storage/global-store.test.js +0 -327
  103. package/dist/storage/global-store.test.js.map +0 -1
  104. package/dist/storage/index.test.d.ts +0 -2
  105. package/dist/storage/index.test.d.ts.map +0 -1
  106. package/dist/storage/index.test.js +0 -56
  107. package/dist/storage/index.test.js.map +0 -1
  108. package/dist/storage/knowledge-store.test.d.ts +0 -2
  109. package/dist/storage/knowledge-store.test.d.ts.map +0 -1
  110. package/dist/storage/knowledge-store.test.js +0 -368
  111. package/dist/storage/knowledge-store.test.js.map +0 -1
  112. package/dist/storage/metrics-store.test.d.ts +0 -2
  113. package/dist/storage/metrics-store.test.d.ts.map +0 -1
  114. package/dist/storage/metrics-store.test.js +0 -212
  115. package/dist/storage/metrics-store.test.js.map +0 -1
  116. package/dist/storage/pattern-store.test.d.ts +0 -2
  117. package/dist/storage/pattern-store.test.d.ts.map +0 -1
  118. package/dist/storage/pattern-store.test.js +0 -224
  119. package/dist/storage/pattern-store.test.js.map +0 -1
  120. package/dist/storage/spec-store.test.d.ts +0 -2
  121. package/dist/storage/spec-store.test.d.ts.map +0 -1
  122. package/dist/storage/spec-store.test.js +0 -227
  123. package/dist/storage/spec-store.test.js.map +0 -1
  124. package/dist/tools/audit.test.d.ts +0 -2
  125. package/dist/tools/audit.test.d.ts.map +0 -1
  126. package/dist/tools/audit.test.js +0 -169
  127. package/dist/tools/audit.test.js.map +0 -1
  128. package/dist/tools/challenge-spec.test.d.ts +0 -2
  129. package/dist/tools/challenge-spec.test.d.ts.map +0 -1
  130. package/dist/tools/challenge-spec.test.js +0 -782
  131. package/dist/tools/challenge-spec.test.js.map +0 -1
  132. package/dist/tools/check-versions.test.d.ts +0 -2
  133. package/dist/tools/check-versions.test.d.ts.map +0 -1
  134. package/dist/tools/check-versions.test.js +0 -214
  135. package/dist/tools/check-versions.test.js.map +0 -1
  136. package/dist/tools/clarify-requirements.test.d.ts +0 -2
  137. package/dist/tools/clarify-requirements.test.d.ts.map +0 -1
  138. package/dist/tools/clarify-requirements.test.js +0 -161
  139. package/dist/tools/clarify-requirements.test.js.map +0 -1
  140. package/dist/tools/consult-docs.test.d.ts +0 -2
  141. package/dist/tools/consult-docs.test.d.ts.map +0 -1
  142. package/dist/tools/consult-docs.test.js +0 -140
  143. package/dist/tools/consult-docs.test.js.map +0 -1
  144. package/dist/tools/create-spec.test.d.ts +0 -2
  145. package/dist/tools/create-spec.test.d.ts.map +0 -1
  146. package/dist/tools/create-spec.test.js +0 -233
  147. package/dist/tools/create-spec.test.js.map +0 -1
  148. package/dist/tools/define-ui-contract.test.d.ts +0 -2
  149. package/dist/tools/define-ui-contract.test.d.ts.map +0 -1
  150. package/dist/tools/define-ui-contract.test.js +0 -479
  151. package/dist/tools/define-ui-contract.test.js.map +0 -1
  152. package/dist/tools/design-schema.test.d.ts +0 -2
  153. package/dist/tools/design-schema.test.d.ts.map +0 -1
  154. package/dist/tools/design-schema.test.js +0 -301
  155. package/dist/tools/design-schema.test.js.map +0 -1
  156. package/dist/tools/detect-agent.test.d.ts +0 -2
  157. package/dist/tools/detect-agent.test.d.ts.map +0 -1
  158. package/dist/tools/detect-agent.test.js +0 -133
  159. package/dist/tools/detect-agent.test.js.map +0 -1
  160. package/dist/tools/detect-drift.test.d.ts +0 -2
  161. package/dist/tools/detect-drift.test.d.ts.map +0 -1
  162. package/dist/tools/detect-drift.test.js +0 -312
  163. package/dist/tools/detect-drift.test.js.map +0 -1
  164. package/dist/tools/discover-mcps.test.d.ts +0 -2
  165. package/dist/tools/discover-mcps.test.d.ts.map +0 -1
  166. package/dist/tools/discover-mcps.test.js +0 -345
  167. package/dist/tools/discover-mcps.test.js.map +0 -1
  168. package/dist/tools/estimate.test.d.ts +0 -2
  169. package/dist/tools/estimate.test.d.ts.map +0 -1
  170. package/dist/tools/estimate.test.js +0 -137
  171. package/dist/tools/estimate.test.js.map +0 -1
  172. package/dist/tools/generate-adr.test.d.ts +0 -2
  173. package/dist/tools/generate-adr.test.d.ts.map +0 -1
  174. package/dist/tools/generate-adr.test.js +0 -206
  175. package/dist/tools/generate-adr.test.js.map +0 -1
  176. package/dist/tools/generate-checklist.test.d.ts +0 -2
  177. package/dist/tools/generate-checklist.test.d.ts.map +0 -1
  178. package/dist/tools/generate-checklist.test.js +0 -201
  179. package/dist/tools/generate-checklist.test.js.map +0 -1
  180. package/dist/tools/generate-docs.test.d.ts +0 -2
  181. package/dist/tools/generate-docs.test.d.ts.map +0 -1
  182. package/dist/tools/generate-docs.test.js +0 -183
  183. package/dist/tools/generate-docs.test.js.map +0 -1
  184. package/dist/tools/generate-execution-plan.test.d.ts +0 -2
  185. package/dist/tools/generate-execution-plan.test.d.ts.map +0 -1
  186. package/dist/tools/generate-execution-plan.test.js +0 -643
  187. package/dist/tools/generate-execution-plan.test.js.map +0 -1
  188. package/dist/tools/generate-rules.test.d.ts +0 -2
  189. package/dist/tools/generate-rules.test.d.ts.map +0 -1
  190. package/dist/tools/generate-rules.test.js +0 -148
  191. package/dist/tools/generate-rules.test.js.map +0 -1
  192. package/dist/tools/generate-skill.test.d.ts +0 -2
  193. package/dist/tools/generate-skill.test.d.ts.map +0 -1
  194. package/dist/tools/generate-skill.test.js +0 -138
  195. package/dist/tools/generate-skill.test.js.map +0 -1
  196. package/dist/tools/generate-sub-agent.test.d.ts +0 -2
  197. package/dist/tools/generate-sub-agent.test.d.ts.map +0 -1
  198. package/dist/tools/generate-sub-agent.test.js +0 -162
  199. package/dist/tools/generate-sub-agent.test.js.map +0 -1
  200. package/dist/tools/generate-tests.test.d.ts +0 -2
  201. package/dist/tools/generate-tests.test.d.ts.map +0 -1
  202. package/dist/tools/generate-tests.test.js +0 -222
  203. package/dist/tools/generate-tests.test.js.map +0 -1
  204. package/dist/tools/init-constitution.test.d.ts +0 -2
  205. package/dist/tools/init-constitution.test.d.ts.map +0 -1
  206. package/dist/tools/init-constitution.test.js +0 -398
  207. package/dist/tools/init-constitution.test.js.map +0 -1
  208. package/dist/tools/init-project.test.d.ts +0 -2
  209. package/dist/tools/init-project.test.d.ts.map +0 -1
  210. package/dist/tools/init-project.test.js +0 -158
  211. package/dist/tools/init-project.test.js.map +0 -1
  212. package/dist/tools/integrate-pm.test.d.ts +0 -2
  213. package/dist/tools/integrate-pm.test.d.ts.map +0 -1
  214. package/dist/tools/integrate-pm.test.js +0 -558
  215. package/dist/tools/integrate-pm.test.js.map +0 -1
  216. package/dist/tools/learn.test.d.ts +0 -2
  217. package/dist/tools/learn.test.d.ts.map +0 -1
  218. package/dist/tools/learn.test.js +0 -123
  219. package/dist/tools/learn.test.js.map +0 -1
  220. package/dist/tools/list-specs.test.d.ts +0 -2
  221. package/dist/tools/list-specs.test.d.ts.map +0 -1
  222. package/dist/tools/list-specs.test.js +0 -110
  223. package/dist/tools/list-specs.test.js.map +0 -1
  224. package/dist/tools/manage-context.test.d.ts +0 -2
  225. package/dist/tools/manage-context.test.d.ts.map +0 -1
  226. package/dist/tools/manage-context.test.js +0 -359
  227. package/dist/tools/manage-context.test.js.map +0 -1
  228. package/dist/tools/manage-git.test.d.ts +0 -2
  229. package/dist/tools/manage-git.test.d.ts.map +0 -1
  230. package/dist/tools/manage-git.test.js +0 -882
  231. package/dist/tools/manage-git.test.js.map +0 -1
  232. package/dist/tools/orchestrate.test.d.ts +0 -2
  233. package/dist/tools/orchestrate.test.d.ts.map +0 -1
  234. package/dist/tools/orchestrate.test.js +0 -1117
  235. package/dist/tools/orchestrate.test.js.map +0 -1
  236. package/dist/tools/reconcile-spec.test.d.ts +0 -2
  237. package/dist/tools/reconcile-spec.test.d.ts.map +0 -1
  238. package/dist/tools/reconcile-spec.test.js +0 -259
  239. package/dist/tools/reconcile-spec.test.js.map +0 -1
  240. package/dist/tools/register-platform-tools.test.d.ts +0 -2
  241. package/dist/tools/register-platform-tools.test.d.ts.map +0 -1
  242. package/dist/tools/register-platform-tools.test.js +0 -404
  243. package/dist/tools/register-platform-tools.test.js.map +0 -1
  244. package/dist/tools/register-spec-tools.test.d.ts +0 -2
  245. package/dist/tools/register-spec-tools.test.d.ts.map +0 -1
  246. package/dist/tools/register-spec-tools.test.js +0 -407
  247. package/dist/tools/register-spec-tools.test.js.map +0 -1
  248. package/dist/tools/reverse-engineer.test.d.ts +0 -2
  249. package/dist/tools/reverse-engineer.test.d.ts.map +0 -1
  250. package/dist/tools/reverse-engineer.test.js +0 -206
  251. package/dist/tools/reverse-engineer.test.js.map +0 -1
  252. package/dist/tools/schemas.d.ts +0 -20
  253. package/dist/tools/schemas.d.ts.map +0 -1
  254. package/dist/tools/schemas.js +0 -133
  255. package/dist/tools/schemas.js.map +0 -1
  256. package/dist/tools/schemas.test.d.ts +0 -2
  257. package/dist/tools/schemas.test.d.ts.map +0 -1
  258. package/dist/tools/schemas.test.js +0 -245
  259. package/dist/tools/schemas.test.js.map +0 -1
  260. package/dist/tools/set-locale.test.d.ts +0 -2
  261. package/dist/tools/set-locale.test.d.ts.map +0 -1
  262. package/dist/tools/set-locale.test.js +0 -74
  263. package/dist/tools/set-locale.test.js.map +0 -1
  264. package/dist/tools/suggest-mcps.test.d.ts +0 -2
  265. package/dist/tools/suggest-mcps.test.d.ts.map +0 -1
  266. package/dist/tools/suggest-mcps.test.js +0 -198
  267. package/dist/tools/suggest-mcps.test.js.map +0 -1
  268. package/dist/tools/suggest-stack.test.d.ts +0 -2
  269. package/dist/tools/suggest-stack.test.d.ts.map +0 -1
  270. package/dist/tools/suggest-stack.test.js +0 -181
  271. package/dist/tools/suggest-stack.test.js.map +0 -1
  272. package/dist/tools/suggest-tooling.test.d.ts +0 -2
  273. package/dist/tools/suggest-tooling.test.d.ts.map +0 -1
  274. package/dist/tools/suggest-tooling.test.js +0 -213
  275. package/dist/tools/suggest-tooling.test.js.map +0 -1
  276. package/dist/tools/summarize-spec.test.d.ts +0 -2
  277. package/dist/tools/summarize-spec.test.d.ts.map +0 -1
  278. package/dist/tools/summarize-spec.test.js +0 -180
  279. package/dist/tools/summarize-spec.test.js.map +0 -1
  280. package/dist/tools/update-status.test.d.ts +0 -2
  281. package/dist/tools/update-status.test.d.ts.map +0 -1
  282. package/dist/tools/update-status.test.js +0 -142
  283. package/dist/tools/update-status.test.js.map +0 -1
  284. package/dist/tools/validate.test.d.ts +0 -2
  285. package/dist/tools/validate.test.d.ts.map +0 -1
  286. package/dist/tools/validate.test.js +0 -137
  287. package/dist/tools/validate.test.js.map +0 -1
@@ -1,119 +0,0 @@
1
- // Tests for handleTemplatesResource
2
- import { describe, it, expect, vi } from 'vitest';
3
- vi.mock('../i18n/index.js', () => ({
4
- t: (key) => key,
5
- }));
6
- vi.mock('glob', () => ({
7
- glob: vi.fn(),
8
- }));
9
- vi.mock('node:fs/promises', () => ({
10
- readFile: vi.fn(),
11
- }));
12
- import { handleTemplatesResource, templatesResourceDefinition } from './templates.js';
13
- import { glob } from 'glob';
14
- import { readFile } from 'node:fs/promises';
15
- const mockGlob = vi.mocked(glob);
16
- const mockReadFile = vi.mocked(readFile);
17
- describe('handleTemplatesResource', () => {
18
- it('should return 6 built-in templates when no custom templates exist', async () => {
19
- mockGlob.mockResolvedValue([]);
20
- const result = await handleTemplatesResource();
21
- const parsed = JSON.parse(result);
22
- expect(parsed.builtIn).toBe(6);
23
- expect(parsed.custom).toBe(0);
24
- expect(parsed.count).toBe(6);
25
- expect(parsed.templates).toHaveLength(6);
26
- });
27
- it('should include all 6 built-in template types', async () => {
28
- mockGlob.mockResolvedValue([]);
29
- const result = await handleTemplatesResource();
30
- const parsed = JSON.parse(result);
31
- const ids = parsed.templates.map((t) => t.id);
32
- expect(ids).toContain('feature');
33
- expect(ids).toContain('refactor');
34
- expect(ids).toContain('bugfix');
35
- expect(ids).toContain('infra');
36
- expect(ids).toContain('docs');
37
- expect(ids).toContain('project');
38
- });
39
- it('should have source=built-in for all default templates', async () => {
40
- mockGlob.mockResolvedValue([]);
41
- const result = await handleTemplatesResource();
42
- const parsed = JSON.parse(result);
43
- for (const tmpl of parsed.templates) {
44
- expect(tmpl.source).toBe('built-in');
45
- }
46
- });
47
- it('should load custom templates and merge with built-in', async () => {
48
- mockGlob.mockResolvedValue(['data/global/templates/custom-api.json']);
49
- mockReadFile.mockResolvedValue(JSON.stringify({
50
- id: 'custom-api',
51
- name: 'Custom API Spec',
52
- description: 'Custom API template',
53
- type: 'feature',
54
- sections: ['metadata', 'interfaces'],
55
- source: 'will-be-overridden',
56
- }));
57
- const result = await handleTemplatesResource();
58
- const parsed = JSON.parse(result);
59
- expect(parsed.builtIn).toBe(6);
60
- expect(parsed.custom).toBe(1);
61
- expect(parsed.count).toBe(7);
62
- expect(parsed.templates).toHaveLength(7);
63
- const customTmpl = parsed.templates.find((t) => t.id === 'custom-api');
64
- expect(customTmpl).toBeDefined();
65
- expect(customTmpl.source).toBe('custom');
66
- });
67
- it('should skip malformed custom template files', async () => {
68
- mockGlob.mockResolvedValue([
69
- 'data/global/templates/good.json',
70
- 'data/global/templates/bad.json',
71
- ]);
72
- let callIdx = 0;
73
- mockReadFile.mockImplementation(() => {
74
- callIdx++;
75
- if (callIdx === 1) {
76
- return Promise.resolve(JSON.stringify({
77
- id: 'good-tmpl',
78
- name: 'Good Template',
79
- description: 'A good one',
80
- type: 'feature',
81
- sections: ['metadata'],
82
- }));
83
- }
84
- return Promise.resolve('{broken json');
85
- });
86
- const result = await handleTemplatesResource();
87
- const parsed = JSON.parse(result);
88
- expect(parsed.custom).toBe(1);
89
- expect(parsed.count).toBe(7);
90
- });
91
- it('should handle glob error for custom templates gracefully', async () => {
92
- mockGlob.mockRejectedValue(new Error('ENOENT'));
93
- const result = await handleTemplatesResource();
94
- const parsed = JSON.parse(result);
95
- // Should still return built-in templates
96
- expect(parsed.builtIn).toBe(6);
97
- expect(parsed.custom).toBe(0);
98
- expect(parsed.count).toBe(6);
99
- });
100
- it('should have sections array for each built-in template', async () => {
101
- mockGlob.mockResolvedValue([]);
102
- const result = await handleTemplatesResource();
103
- const parsed = JSON.parse(result);
104
- for (const tmpl of parsed.templates) {
105
- expect(Array.isArray(tmpl.sections)).toBe(true);
106
- expect(tmpl.sections.length).toBeGreaterThan(0);
107
- expect(tmpl.name).toBeDefined();
108
- expect(tmpl.description).toBeDefined();
109
- expect(tmpl.type).toBeDefined();
110
- }
111
- });
112
- it('should export resource definition', () => {
113
- expect(templatesResourceDefinition.uri).toBe('specforge://templates');
114
- expect(templatesResourceDefinition.name).toBe('Spec Templates');
115
- expect(templatesResourceDefinition.mimeType).toBe('application/json');
116
- expect(templatesResourceDefinition.description).toBe('resources.templates.description');
117
- });
118
- });
119
- //# sourceMappingURL=templates.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"templates.test.js","sourceRoot":"","sources":["../../src/resources/templates.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=smoke.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"smoke.test.d.ts","sourceRoot":"","sources":["../src/smoke.test.ts"],"names":[],"mappings":""}
@@ -1,229 +0,0 @@
1
- // smoke.test.ts — End-to-end smoke tests for the SpecForge MCP Server.
2
- //
3
- // PREREQUISITE: The server must be built before running these tests.
4
- // pnpm build (or: npm run build)
5
- //
6
- // These tests spawn the actual MCP server process (dist/index.js) and
7
- // communicate with it over stdio using JSON-RPC, verifying that the server
8
- // initializes correctly and exposes all expected tools and resources.
9
- /* eslint-disable @typescript-eslint/dot-notation */
10
- import { spawn } from 'node:child_process';
11
- import { resolve } from 'node:path';
12
- import { describe, it, expect, beforeAll, afterAll } from 'vitest';
13
- // ---------------------------------------------------------------------------
14
- // Constants
15
- // ---------------------------------------------------------------------------
16
- const SERVER_PATH = resolve(import.meta.dirname, '..', 'dist', 'index.js');
17
- const RESPONSE_TIMEOUT_MS = 5_000;
18
- const EXPECTED_TOOLS = [
19
- 'set_locale',
20
- 'init_project',
21
- 'init_constitution',
22
- 'clarify_requirements',
23
- 'create_spec',
24
- 'list_specs',
25
- 'update_status',
26
- 'estimate',
27
- 'reverse_engineer',
28
- 'validate',
29
- 'detect_drift',
30
- 'summarize_spec',
31
- 'generate_checklist',
32
- 'reconcile_spec',
33
- 'learn_pattern',
34
- 'audit',
35
- 'consult_docs',
36
- 'discover_mcps',
37
- 'suggest_mcps',
38
- 'generate_adr',
39
- 'design_schema',
40
- 'define_ui_contract',
41
- 'challenge_spec',
42
- 'generate_execution_plan',
43
- 'suggest_stack',
44
- 'check_versions',
45
- 'generate_skill',
46
- 'detect_agent',
47
- 'generate_sub_agent',
48
- 'generate_rules',
49
- 'suggest_tooling',
50
- 'generate_tests',
51
- 'generate_docs',
52
- 'manage_context',
53
- 'manage_git',
54
- 'orchestrate',
55
- 'integrate_pm',
56
- ];
57
- const EXPECTED_RESOURCE_NAMES = [
58
- 'SDD Process',
59
- 'Project Specs',
60
- 'Spec Templates',
61
- 'Learned Patterns',
62
- ];
63
- // ---------------------------------------------------------------------------
64
- // Helper: MCP Server process wrapper
65
- // ---------------------------------------------------------------------------
66
- let serverProcess = null;
67
- let requestId = 0;
68
- let buffer = '';
69
- /**
70
- * Sends a JSON-RPC request to the server and waits for the matching response.
71
- */
72
- function sendRequest(method, params = {}) {
73
- return new Promise((resolve, reject) => {
74
- if (!serverProcess?.stdin || !serverProcess.stdout) {
75
- reject(new Error('Server process is not running'));
76
- return;
77
- }
78
- requestId += 1;
79
- const id = requestId;
80
- const message = JSON.stringify({
81
- jsonrpc: '2.0',
82
- id,
83
- method,
84
- params,
85
- });
86
- const timeout = setTimeout(() => {
87
- reject(new Error(`Timed out waiting for response to "${method}" (id=${id})`));
88
- }, RESPONSE_TIMEOUT_MS);
89
- const onData = (chunk) => {
90
- buffer += chunk.toString();
91
- // Process all complete lines in the buffer
92
- let newlineIndex;
93
- while ((newlineIndex = buffer.indexOf('\n')) !== -1) {
94
- const line = buffer.slice(0, newlineIndex).trim();
95
- buffer = buffer.slice(newlineIndex + 1);
96
- if (!line) {
97
- continue;
98
- }
99
- try {
100
- const parsed = JSON.parse(line);
101
- if (parsed['id'] === id) {
102
- clearTimeout(timeout);
103
- serverProcess?.stdout?.off('data', onData);
104
- resolve(parsed);
105
- return;
106
- }
107
- }
108
- catch {
109
- // Not valid JSON yet — skip this line
110
- }
111
- }
112
- };
113
- serverProcess.stdout.on('data', onData);
114
- serverProcess.stdin.write(message + '\n');
115
- });
116
- }
117
- /**
118
- * Sends a JSON-RPC notification (no id, no response expected).
119
- */
120
- function sendNotification(method, params = {}) {
121
- if (!serverProcess?.stdin) {
122
- throw new Error('Server process is not running');
123
- }
124
- const message = JSON.stringify({
125
- jsonrpc: '2.0',
126
- method,
127
- params,
128
- });
129
- serverProcess.stdin.write(message + '\n');
130
- }
131
- // ---------------------------------------------------------------------------
132
- // Test suite
133
- // ---------------------------------------------------------------------------
134
- describe('SpecForge MCP Server — Smoke Tests', () => {
135
- let initResponse;
136
- beforeAll(async () => {
137
- // Spawn the MCP server as a child process
138
- serverProcess = spawn('node', [SERVER_PATH], {
139
- stdio: ['pipe', 'pipe', 'pipe'],
140
- env: { ...process.env, NODE_ENV: 'test' },
141
- });
142
- // Capture stderr for debugging (do not let it pollute test output)
143
- serverProcess.stderr?.on('data', (_chunk) => {
144
- // Uncomment for debugging: console.error('[server stderr]', _chunk.toString());
145
- });
146
- // Send the initialize handshake
147
- initResponse = await sendRequest('initialize', {
148
- protocolVersion: '2024-11-05',
149
- capabilities: {},
150
- clientInfo: { name: 'smoke-test', version: '0.1.0' },
151
- });
152
- // Complete the handshake with the initialized notification
153
- sendNotification('notifications/initialized');
154
- });
155
- afterAll(() => {
156
- if (serverProcess) {
157
- serverProcess.kill('SIGTERM');
158
- serverProcess = null;
159
- }
160
- });
161
- // -------------------------------------------------------------------------
162
- // 1. Server initialization
163
- // -------------------------------------------------------------------------
164
- it('should respond to initialize with protocolVersion', () => {
165
- const result = initResponse['result'];
166
- expect(result).toBeDefined();
167
- expect(result['protocolVersion']).toBe('2024-11-05');
168
- });
169
- it('should expose server capabilities in initialize response', () => {
170
- const result = initResponse['result'];
171
- const capabilities = result['capabilities'];
172
- expect(capabilities).toBeDefined();
173
- expect(capabilities['tools']).toBeDefined();
174
- expect(capabilities['resources']).toBeDefined();
175
- });
176
- it('should report correct server info', () => {
177
- const result = initResponse['result'];
178
- const serverInfo = result['serverInfo'];
179
- expect(serverInfo).toBeDefined();
180
- expect(serverInfo['name']).toBe('specforge');
181
- expect(serverInfo['version']).toBe('0.1.0');
182
- });
183
- // -------------------------------------------------------------------------
184
- // 2. Tools listing
185
- // -------------------------------------------------------------------------
186
- it('should list exactly 37 tools', async () => {
187
- const response = await sendRequest('tools/list', {});
188
- const result = response['result'];
189
- const tools = result['tools'];
190
- expect(tools).toHaveLength(37);
191
- });
192
- it('should include all expected tool names', async () => {
193
- const response = await sendRequest('tools/list', {});
194
- const result = response['result'];
195
- const tools = result['tools'];
196
- const toolNames = tools.map((tool) => tool['name']);
197
- for (const expectedTool of EXPECTED_TOOLS) {
198
- expect(toolNames).toContain(expectedTool);
199
- }
200
- });
201
- it('should include inputSchema on every tool', async () => {
202
- const response = await sendRequest('tools/list', {});
203
- const result = response['result'];
204
- const tools = result['tools'];
205
- for (const tool of tools) {
206
- expect(tool['inputSchema']).toBeDefined();
207
- expect(typeof tool['inputSchema']).toBe('object');
208
- }
209
- });
210
- // -------------------------------------------------------------------------
211
- // 3. Resources listing
212
- // -------------------------------------------------------------------------
213
- it('should list exactly 4 resources', async () => {
214
- const response = await sendRequest('resources/list', {});
215
- const result = response['result'];
216
- const resources = result['resources'];
217
- expect(resources).toHaveLength(4);
218
- });
219
- it('should include all expected resource names', async () => {
220
- const response = await sendRequest('resources/list', {});
221
- const result = response['result'];
222
- const resources = result['resources'];
223
- const resourceNames = resources.map((r) => r['name']);
224
- for (const expectedName of EXPECTED_RESOURCE_NAMES) {
225
- expect(resourceNames).toContain(expectedName);
226
- }
227
- });
228
- });
229
- //# sourceMappingURL=smoke.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"smoke.test.js","sourceRoot":"","sources":["../src/smoke.test.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,EAAE;AACF,qEAAqE;AACrE,qCAAqC;AACrC,EAAE;AACF,sEAAsE;AACtE,2EAA2E;AAC3E,sEAAsE;AAEtE,oDAAoD;AAEpD,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEnE,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAC3E,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAElC,MAAM,cAAc,GAAG;IACrB,YAAY;IACZ,cAAc;IACd,mBAAmB;IACnB,sBAAsB;IACtB,aAAa;IACb,YAAY;IACZ,eAAe;IACf,UAAU;IACV,kBAAkB;IAClB,UAAU;IACV,cAAc;IACd,gBAAgB;IAChB,oBAAoB;IACpB,gBAAgB;IAChB,eAAe;IACf,OAAO;IACP,cAAc;IACd,eAAe;IACf,cAAc;IACd,cAAc;IACd,eAAe;IACf,oBAAoB;IACpB,gBAAgB;IAChB,yBAAyB;IACzB,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,cAAc;IACd,oBAAoB;IACpB,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,YAAY;IACZ,aAAa;IACb,cAAc;CACN,CAAC;AAEX,MAAM,uBAAuB,GAAG;IAC9B,aAAa;IACb,eAAe;IACf,gBAAgB;IAChB,kBAAkB;CACV,CAAC;AAEX,8EAA8E;AAC9E,qCAAqC;AACrC,8EAA8E;AAE9E,IAAI,aAAa,GAAwB,IAAI,CAAC;AAC9C,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,IAAI,MAAM,GAAG,EAAE,CAAC;AAEhB;;GAEG;AACH,SAAS,WAAW,CAClB,MAAc,EACd,SAAkC,EAAE;IAEpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YACnD,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,SAAS,IAAI,CAAC,CAAC;QACf,MAAM,EAAE,GAAG,SAAS,CAAC;QAErB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,OAAO,EAAE,KAAK;YACd,EAAE;YACF,MAAM;YACN,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,MAAM,CAAC,IAAI,KAAK,CAAC,sCAAsC,MAAM,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;QAChF,CAAC,EAAE,mBAAmB,CAAC,CAAC;QAExB,MAAM,MAAM,GAAG,CAAC,KAAa,EAAQ,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAE3B,2CAA2C;YAC3C,IAAI,YAAoB,CAAC;YACzB,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;gBAClD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;gBAExC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,SAAS;gBACX,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;oBAC3D,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;wBACxB,YAAY,CAAC,OAAO,CAAC,CAAC;wBACtB,aAAa,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;wBAC3C,OAAO,CAAC,MAAM,CAAC,CAAC;wBAChB,OAAO;oBACT,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,sCAAsC;gBACxC,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAAc,EAAE,SAAkC,EAAE;IAC5E,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7B,OAAO,EAAE,KAAK;QACd,MAAM;QACN,MAAM;KACP,CAAC,CAAC;IAEH,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,IAAI,YAAqC,CAAC;IAE1C,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,0CAA0C;QAC1C,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE;YAC3C,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE;SAC1C,CAAC,CAAC;QAEH,mEAAmE;QACnE,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,MAAc,EAAE,EAAE;YAClD,gFAAgF;QAClF,CAAC,CAAC,CAAC;QAEH,gCAAgC;QAChC,YAAY,GAAG,MAAM,WAAW,CAAC,YAAY,EAAE;YAC7C,eAAe,EAAE,YAAY;YAC7B,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE;SACrD,CAAC,CAAC;QAEH,2DAA2D;QAC3D,gBAAgB,CAAC,2BAA2B,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,IAAI,aAAa,EAAE,CAAC;YAClB,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,2BAA2B;IAC3B,4EAA4E;IAE5E,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAA4B,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAA4B,CAAC;QACjE,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAA4B,CAAC;QACvE,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAA4B,CAAC;QACjE,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAA4B,CAAC;QACnE,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,mBAAmB;IACnB,4EAA4E;IAE5E,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAA4B,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAA8B,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAA4B,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAA8B,CAAC;QAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAW,CAAC,CAAC;QAE9D,KAAK,MAAM,YAAY,IAAI,cAAc,EAAE,CAAC;YAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAA4B,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAA8B,CAAC;QAE3D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC1C,MAAM,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,uBAAuB;IACvB,4EAA4E;IAE5E,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAA4B,CAAC;QAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAA8B,CAAC;QACnE,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAA4B,CAAC;QAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAA8B,CAAC;QACnE,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAW,CAAC,CAAC;QAEhE,KAAK,MAAM,YAAY,IAAI,uBAAuB,EAAE,CAAC;YACnD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=base-store.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base-store.test.d.ts","sourceRoot":"","sources":["../../src/storage/base-store.test.ts"],"names":[],"mappings":""}
@@ -1,180 +0,0 @@
1
- // base-store.test.ts — Unit tests for base store (JSON persistence helpers)
2
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
3
- import { mkdtemp, rm, readFile, writeFile, mkdir } from 'node:fs/promises';
4
- import { join } from 'node:path';
5
- import { tmpdir } from 'node:os';
6
- import { hashProjectPath, readJson, writeJson, projectDataDir, globalDataDir, } from './base-store.js';
7
- let tempDir;
8
- beforeEach(async () => {
9
- tempDir = await mkdtemp(join(tmpdir(), 'sdd-base-store-test-'));
10
- });
11
- afterEach(async () => {
12
- await rm(tempDir, { recursive: true, force: true });
13
- });
14
- // =============================================================================
15
- // hashProjectPath
16
- // =============================================================================
17
- describe('hashProjectPath', () => {
18
- it('should return a 16-character hex string', () => {
19
- const hash = hashProjectPath('/some/project/path');
20
- expect(hash).toMatch(/^[0-9a-f]{16}$/);
21
- expect(hash).toHaveLength(16);
22
- });
23
- it('should produce consistent hashes for the same path', () => {
24
- const hash1 = hashProjectPath('/my/project');
25
- const hash2 = hashProjectPath('/my/project');
26
- expect(hash1).toBe(hash2);
27
- });
28
- it('should produce different hashes for different paths', () => {
29
- const hash1 = hashProjectPath('/path/a');
30
- const hash2 = hashProjectPath('/path/b');
31
- expect(hash1).not.toBe(hash2);
32
- });
33
- it('should handle empty string', () => {
34
- const hash = hashProjectPath('');
35
- expect(hash).toMatch(/^[0-9a-f]{16}$/);
36
- });
37
- it('should handle paths with special characters', () => {
38
- const hash = hashProjectPath('/path/with spaces/and-special_chars!@#');
39
- expect(hash).toMatch(/^[0-9a-f]{16}$/);
40
- });
41
- it('should handle very long paths', () => {
42
- const longPath = '/a'.repeat(1000);
43
- const hash = hashProjectPath(longPath);
44
- expect(hash).toMatch(/^[0-9a-f]{16}$/);
45
- });
46
- });
47
- // =============================================================================
48
- // readJson
49
- // =============================================================================
50
- describe('readJson', () => {
51
- it('should return default value when file does not exist', async () => {
52
- const result = await readJson(join(tempDir, 'nonexistent.json'), { key: 'default' });
53
- expect(result).toEqual({ key: 'default' });
54
- });
55
- it('should return default value when file does not exist (array default)', async () => {
56
- const result = await readJson(join(tempDir, 'nonexistent.json'), []);
57
- expect(result).toEqual([]);
58
- });
59
- it('should parse and return JSON when file exists', async () => {
60
- const filePath = join(tempDir, 'data.json');
61
- await writeFile(filePath, JSON.stringify({ name: 'test', count: 42 }), 'utf-8');
62
- const result = await readJson(filePath, {});
63
- expect(result).toEqual({ name: 'test', count: 42 });
64
- });
65
- it('should return nested objects correctly', async () => {
66
- const data = { level1: { level2: { value: 'deep' } } };
67
- const filePath = join(tempDir, 'nested.json');
68
- await writeFile(filePath, JSON.stringify(data), 'utf-8');
69
- const result = await readJson(filePath, {});
70
- expect(result).toEqual(data);
71
- });
72
- it('should throw on non-ENOENT errors (e.g., invalid JSON)', async () => {
73
- const filePath = join(tempDir, 'bad.json');
74
- await writeFile(filePath, 'not-valid-json{{{', 'utf-8');
75
- await expect(readJson(filePath, {})).rejects.toThrow();
76
- });
77
- it('should throw on permission errors (non-ENOENT)', async () => {
78
- // Simulate a non-ENOENT error by passing a directory as a file path
79
- // readFile on a directory throws EISDIR on some systems
80
- const dirPath = join(tempDir, 'adir');
81
- await mkdir(dirPath);
82
- await expect(readJson(dirPath, {})).rejects.toThrow();
83
- });
84
- it('should return default when parent directory does not exist', async () => {
85
- const filePath = join(tempDir, 'nonexistent-dir', 'deep', 'file.json');
86
- const result = await readJson(filePath, 'fallback');
87
- expect(result).toBe('fallback');
88
- });
89
- });
90
- // =============================================================================
91
- // writeJson
92
- // =============================================================================
93
- describe('writeJson', () => {
94
- it('should write JSON to a file', async () => {
95
- const filePath = join(tempDir, 'output.json');
96
- const data = { hello: 'world', num: 123 };
97
- await writeJson(filePath, data);
98
- const content = await readFile(filePath, 'utf-8');
99
- expect(JSON.parse(content)).toEqual(data);
100
- });
101
- it('should create parent directories as needed', async () => {
102
- const filePath = join(tempDir, 'deep', 'nested', 'dir', 'output.json');
103
- const data = { created: true };
104
- await writeJson(filePath, data);
105
- const content = await readFile(filePath, 'utf-8');
106
- expect(JSON.parse(content)).toEqual(data);
107
- });
108
- it('should format JSON with 2-space indentation', async () => {
109
- const filePath = join(tempDir, 'formatted.json');
110
- const data = { key: 'value' };
111
- await writeJson(filePath, data);
112
- const content = await readFile(filePath, 'utf-8');
113
- expect(content).toBe(JSON.stringify(data, null, 2));
114
- });
115
- it('should overwrite existing files', async () => {
116
- const filePath = join(tempDir, 'overwrite.json');
117
- await writeJson(filePath, { version: 1 });
118
- await writeJson(filePath, { version: 2 });
119
- const content = await readFile(filePath, 'utf-8');
120
- expect(JSON.parse(content)).toEqual({ version: 2 });
121
- });
122
- it('should write arrays', async () => {
123
- const filePath = join(tempDir, 'array.json');
124
- await writeJson(filePath, [1, 2, 3]);
125
- const content = await readFile(filePath, 'utf-8');
126
- expect(JSON.parse(content)).toEqual([1, 2, 3]);
127
- });
128
- it('should write null', async () => {
129
- const filePath = join(tempDir, 'null.json');
130
- await writeJson(filePath, null);
131
- const content = await readFile(filePath, 'utf-8');
132
- expect(JSON.parse(content)).toBeNull();
133
- });
134
- });
135
- // =============================================================================
136
- // projectDataDir
137
- // =============================================================================
138
- describe('projectDataDir', () => {
139
- it('should return expected path format', () => {
140
- const dir = projectDataDir('abc123');
141
- expect(dir).toBe('data/projects/abc123');
142
- });
143
- it('should include the project ID in the path', () => {
144
- const dir = projectDataDir('my-project-id');
145
- expect(dir).toContain('my-project-id');
146
- });
147
- });
148
- // =============================================================================
149
- // globalDataDir
150
- // =============================================================================
151
- describe('globalDataDir', () => {
152
- it('should return the global data directory path', () => {
153
- const dir = globalDataDir();
154
- expect(dir).toBe('data/global');
155
- });
156
- });
157
- // =============================================================================
158
- // readJson + writeJson round-trip
159
- // =============================================================================
160
- describe('readJson + writeJson round-trip', () => {
161
- it('should write then read the same data', async () => {
162
- const filePath = join(tempDir, 'roundtrip.json');
163
- const data = { specs: [{ id: 'SPEC-001', title: 'Test' }], count: 1 };
164
- await writeJson(filePath, data);
165
- const result = await readJson(filePath, {});
166
- expect(result).toEqual(data);
167
- });
168
- it('should handle complex nested structures', async () => {
169
- const filePath = join(tempDir, 'complex.json');
170
- const data = {
171
- a: { b: { c: { d: [1, 2, { e: 'f' }] } } },
172
- nullVal: null,
173
- bool: true,
174
- };
175
- await writeJson(filePath, data);
176
- const result = await readJson(filePath, {});
177
- expect(result).toEqual(data);
178
- });
179
- });
180
- //# sourceMappingURL=base-store.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base-store.test.js","sourceRoot":"","sources":["../../src/storage/base-store.test.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EACL,eAAe,EACf,QAAQ,EACR,SAAS,EACT,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,IAAI,OAAe,CAAC;AAEpB,UAAU,CAAC,KAAK,IAAI,EAAE;IACpB,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;AAClE,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAChF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG,eAAe,CAAC,oBAAoB,CAAC,CAAC;QAEnD,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,KAAK,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;QAE7C,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QAEzC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QAEjC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,IAAI,GAAG,eAAe,CAAC,wCAAwC,CAAC,CAAC;QAEvE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAEvC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,WAAW;AACX,gFAAgF;AAChF,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;QAErF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC;QAErE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC5C,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAEhF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC9C,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QAEzD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3C,MAAM,SAAS,CAAC,QAAQ,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;QAExD,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,oEAAoE;QACpE,wDAAwD;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtC,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QAErB,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAEvE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAEpD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAChF,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAE1C,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEhC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAE/B,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEhC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;QAE9B,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEhC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QAEjD,MAAM,SAAS,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1C,MAAM,SAAS,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QAE1C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAE7C,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAE5C,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEhC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAChF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QAErC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,GAAG,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC;QAE5C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAChF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;QAE5B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,kCAAkC;AAClC,gFAAgF;AAChF,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAEtE,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG;YACX,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE;YAC1C,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,IAAI;SACX,CAAC;QAEF,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=global-store.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"global-store.test.d.ts","sourceRoot":"","sources":["../../src/storage/global-store.test.ts"],"names":[],"mappings":""}