create-specfuse 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +0 -0
- package/package.json +2 -2
- package/dist/design-md/__tests__/archetype-schema.test.d.ts +0 -2
- package/dist/design-md/__tests__/archetype-schema.test.d.ts.map +0 -1
- package/dist/design-md/__tests__/archetype-schema.test.js +0 -60
- package/dist/design-md/__tests__/archetype-schema.test.js.map +0 -1
- package/dist/design-md/__tests__/archetypes.test.d.ts +0 -2
- package/dist/design-md/__tests__/archetypes.test.d.ts.map +0 -1
- package/dist/design-md/__tests__/archetypes.test.js +0 -45
- package/dist/design-md/__tests__/archetypes.test.js.map +0 -1
- package/dist/design-md/__tests__/fine-tuner.test.d.ts +0 -2
- package/dist/design-md/__tests__/fine-tuner.test.d.ts.map +0 -1
- package/dist/design-md/__tests__/fine-tuner.test.js +0 -38
- package/dist/design-md/__tests__/fine-tuner.test.js.map +0 -1
- package/dist/design-md/__tests__/index.test.d.ts +0 -2
- package/dist/design-md/__tests__/index.test.d.ts.map +0 -1
- package/dist/design-md/__tests__/index.test.js +0 -66
- package/dist/design-md/__tests__/index.test.js.map +0 -1
- package/dist/design-md/__tests__/matcher.test.d.ts +0 -2
- package/dist/design-md/__tests__/matcher.test.d.ts.map +0 -1
- package/dist/design-md/__tests__/matcher.test.js +0 -74
- package/dist/design-md/__tests__/matcher.test.js.map +0 -1
- package/dist/design-md/__tests__/questionnaire.test.d.ts +0 -2
- package/dist/design-md/__tests__/questionnaire.test.d.ts.map +0 -1
- package/dist/design-md/__tests__/questionnaire.test.js +0 -57
- package/dist/design-md/__tests__/questionnaire.test.js.map +0 -1
- package/dist/design-md/__tests__/renderer.test.d.ts +0 -2
- package/dist/design-md/__tests__/renderer.test.d.ts.map +0 -1
- package/dist/design-md/__tests__/renderer.test.js +0 -51
- package/dist/design-md/__tests__/renderer.test.js.map +0 -1
- package/dist/design-md/__tests__/types.test.d.ts +0 -2
- package/dist/design-md/__tests__/types.test.d.ts.map +0 -1
- package/dist/design-md/__tests__/types.test.js +0 -63
- package/dist/design-md/__tests__/types.test.js.map +0 -1
- package/dist/design-md/archetypes.d.ts +0 -3
- package/dist/design-md/archetypes.d.ts.map +0 -1
- package/dist/design-md/archetypes.js +0 -18
- package/dist/design-md/archetypes.js.map +0 -1
- package/dist/design-md/fine-tuner.d.ts +0 -4
- package/dist/design-md/fine-tuner.d.ts.map +0 -1
- package/dist/design-md/fine-tuner.js +0 -13
- package/dist/design-md/fine-tuner.js.map +0 -1
- package/dist/design-md/index.d.ts +0 -2
- package/dist/design-md/index.d.ts.map +0 -1
- package/dist/design-md/index.js +0 -49
- package/dist/design-md/index.js.map +0 -1
- package/dist/design-md/matcher.d.ts +0 -8
- package/dist/design-md/matcher.d.ts.map +0 -1
- package/dist/design-md/matcher.js +0 -116
- package/dist/design-md/matcher.js.map +0 -1
- package/dist/design-md/questionnaire.d.ts +0 -15
- package/dist/design-md/questionnaire.d.ts.map +0 -1
- package/dist/design-md/questionnaire.js +0 -96
- package/dist/design-md/questionnaire.js.map +0 -1
- package/dist/design-md/renderer.d.ts +0 -3
- package/dist/design-md/renderer.d.ts.map +0 -1
- package/dist/design-md/renderer.js +0 -43
- package/dist/design-md/renderer.js.map +0 -1
- package/dist/design-md/schema.d.ts +0 -69
- package/dist/design-md/schema.d.ts.map +0 -1
- package/dist/design-md/schema.js +0 -30
- package/dist/design-md/schema.js.map +0 -1
- package/dist/design-md/types.d.ts +0 -33
- package/dist/design-md/types.d.ts.map +0 -1
- package/dist/design-md/types.js +0 -2
- package/dist/design-md/types.js.map +0 -1
package/dist/index.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-specfuse",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Scaffold projects with OpenSpec + Superpowers fusion methodology",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"node": ">=18.0.0"
|
|
16
16
|
},
|
|
17
17
|
"scripts": {
|
|
18
|
-
"build": "tsc &&
|
|
18
|
+
"build": "rm -rf dist && tsc && mkdir -p dist/design-md && cp -r src/design-md/templates dist/design-md/templates",
|
|
19
19
|
"test": "vitest run",
|
|
20
20
|
"dev": "tsc --watch"
|
|
21
21
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"archetype-schema.test.d.ts","sourceRoot":"","sources":["../../../src/design-md/__tests__/archetype-schema.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { readFileSync, readdirSync } from 'node:fs';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import { parse as parseYaml } from 'yaml';
|
|
5
|
-
import { ArchetypeSchema } from '../schema.js';
|
|
6
|
-
const TEMPLATES_DIR = join(import.meta.dirname, '..', 'templates');
|
|
7
|
-
function loadArchetypeFiles() {
|
|
8
|
-
const files = readdirSync(TEMPLATES_DIR).filter((f) => f.endsWith('.yaml') && !f.startsWith('_'));
|
|
9
|
-
return files.map((f) => ({
|
|
10
|
-
name: f,
|
|
11
|
-
content: parseYaml(readFileSync(join(TEMPLATES_DIR, f), 'utf-8')),
|
|
12
|
-
}));
|
|
13
|
-
}
|
|
14
|
-
describe('archetype schema validation', () => {
|
|
15
|
-
it('_schema.yaml exists and is valid YAML', () => {
|
|
16
|
-
const raw = readFileSync(join(TEMPLATES_DIR, '_schema.yaml'), 'utf-8');
|
|
17
|
-
const schema = parseYaml(raw);
|
|
18
|
-
expect(schema).toHaveProperty('type', 'object');
|
|
19
|
-
expect(schema).toHaveProperty('required');
|
|
20
|
-
});
|
|
21
|
-
it('all archetype YAML files pass schema validation', () => {
|
|
22
|
-
const archetypes = loadArchetypeFiles();
|
|
23
|
-
for (const { name, content } of archetypes) {
|
|
24
|
-
const result = ArchetypeSchema.safeParse(content);
|
|
25
|
-
if (!result.success) {
|
|
26
|
-
throw new Error(`${name} failed validation: ${result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join(', ')}`);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
it('rejects archetype with missing required field', () => {
|
|
31
|
-
const invalid = { id: 'test', name: 'Test' };
|
|
32
|
-
const result = ArchetypeSchema.safeParse(invalid);
|
|
33
|
-
expect(result.success).toBe(false);
|
|
34
|
-
});
|
|
35
|
-
it('rejects dimension value out of range', () => {
|
|
36
|
-
const invalid = {
|
|
37
|
-
id: 'test',
|
|
38
|
-
name: 'Test',
|
|
39
|
-
category: 'dashboard',
|
|
40
|
-
dimensions: { colorTemp: 6, lightness: 1, density: 1, borderRadius: 1, tone: 1 },
|
|
41
|
-
anchors: { primary: 'X', auxiliary: ['Y'] },
|
|
42
|
-
template: 'x',
|
|
43
|
-
};
|
|
44
|
-
const result = ArchetypeSchema.safeParse(invalid);
|
|
45
|
-
expect(result.success).toBe(false);
|
|
46
|
-
});
|
|
47
|
-
it('rejects invalid category', () => {
|
|
48
|
-
const invalid = {
|
|
49
|
-
id: 'test',
|
|
50
|
-
name: 'Test',
|
|
51
|
-
category: 'unknown-category',
|
|
52
|
-
dimensions: { colorTemp: 1, lightness: 1, density: 1, borderRadius: 1, tone: 1 },
|
|
53
|
-
anchors: { primary: 'X', auxiliary: ['Y'] },
|
|
54
|
-
template: 'x',
|
|
55
|
-
};
|
|
56
|
-
const result = ArchetypeSchema.safeParse(invalid);
|
|
57
|
-
expect(result.success).toBe(false);
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
//# sourceMappingURL=archetype-schema.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"archetype-schema.test.js","sourceRoot":"","sources":["../../../src/design-md/__tests__/archetype-schema.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"archetypes.test.d.ts","sourceRoot":"","sources":["../../../src/design-md/__tests__/archetypes.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { loadArchetypes } from '../archetypes.js';
|
|
3
|
-
describe('loadArchetypes()', () => {
|
|
4
|
-
it('returns exactly 15 archetypes', () => {
|
|
5
|
-
const archetypes = loadArchetypes();
|
|
6
|
-
expect(archetypes).toHaveLength(15);
|
|
7
|
-
});
|
|
8
|
-
it('each archetype has valid structure', () => {
|
|
9
|
-
const archetypes = loadArchetypes();
|
|
10
|
-
for (const a of archetypes) {
|
|
11
|
-
expect(a.id).toMatch(/^[a-z][a-z0-9-]*$/);
|
|
12
|
-
expect(a.name).toBeTruthy();
|
|
13
|
-
expect(a.dimensions.colorTemp).toBeGreaterThanOrEqual(1);
|
|
14
|
-
expect(a.dimensions.colorTemp).toBeLessThanOrEqual(5);
|
|
15
|
-
expect(a.anchors.primary).toBeTruthy();
|
|
16
|
-
expect(a.anchors.auxiliary.length).toBeGreaterThanOrEqual(1);
|
|
17
|
-
expect(a.anchors.auxiliary.length).toBeLessThanOrEqual(2);
|
|
18
|
-
expect(a.template).toBeTruthy();
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
it('covers all 9 categories', () => {
|
|
22
|
-
const archetypes = loadArchetypes();
|
|
23
|
-
const categories = new Set(archetypes.map((a) => a.category));
|
|
24
|
-
expect(categories).toContain('internal-tool');
|
|
25
|
-
expect(categories).toContain('dashboard');
|
|
26
|
-
expect(categories).toContain('consumer');
|
|
27
|
-
expect(categories).toContain('developer');
|
|
28
|
-
expect(categories).toContain('mobile');
|
|
29
|
-
expect(categories).toContain('e-commerce');
|
|
30
|
-
expect(categories).toContain('marketing');
|
|
31
|
-
expect(categories).toContain('form-heavy');
|
|
32
|
-
expect(categories).toContain('content');
|
|
33
|
-
});
|
|
34
|
-
it('all archetype ids are unique', () => {
|
|
35
|
-
const archetypes = loadArchetypes();
|
|
36
|
-
const ids = archetypes.map((a) => a.id);
|
|
37
|
-
expect(new Set(ids).size).toBe(ids.length);
|
|
38
|
-
});
|
|
39
|
-
it('returns typed Archetype objects', () => {
|
|
40
|
-
const archetypes = loadArchetypes();
|
|
41
|
-
const first = archetypes[0];
|
|
42
|
-
expect(first).toBeDefined();
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
//# sourceMappingURL=archetypes.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"archetypes.test.js","sourceRoot":"","sources":["../../../src/design-md/__tests__/archetypes.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fine-tuner.test.d.ts","sourceRoot":"","sources":["../../../src/design-md/__tests__/fine-tuner.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { applyOverrides } from '../fine-tuner.js';
|
|
3
|
-
const baseVector = {
|
|
4
|
-
colorTemp: 2,
|
|
5
|
-
lightness: 3,
|
|
6
|
-
density: 2,
|
|
7
|
-
borderRadius: 3,
|
|
8
|
-
tone: 2,
|
|
9
|
-
};
|
|
10
|
-
describe('applyOverrides()', () => {
|
|
11
|
-
it('returns original vector when no overrides', () => {
|
|
12
|
-
const result = applyOverrides(baseVector, {});
|
|
13
|
-
expect(result).toEqual(baseVector);
|
|
14
|
-
});
|
|
15
|
-
it('applies single dimension override', () => {
|
|
16
|
-
const result = applyOverrides(baseVector, { borderRadius: 1 });
|
|
17
|
-
expect(result).toEqual({ ...baseVector, borderRadius: 1 });
|
|
18
|
-
});
|
|
19
|
-
it('applies multiple dimension overrides', () => {
|
|
20
|
-
const result = applyOverrides(baseVector, { colorTemp: 5, tone: 4 });
|
|
21
|
-
expect(result).toEqual({ ...baseVector, colorTemp: 5, tone: 4 });
|
|
22
|
-
});
|
|
23
|
-
it('rejects values below 1', () => {
|
|
24
|
-
expect(() => applyOverrides(baseVector, { colorTemp: 0 })).toThrow();
|
|
25
|
-
});
|
|
26
|
-
it('rejects values above 5', () => {
|
|
27
|
-
expect(() => applyOverrides(baseVector, { density: 6 })).toThrow();
|
|
28
|
-
});
|
|
29
|
-
it('rejects non-integer values', () => {
|
|
30
|
-
expect(() => applyOverrides(baseVector, { tone: 2.5 })).toThrow();
|
|
31
|
-
});
|
|
32
|
-
it('does not mutate the original vector', () => {
|
|
33
|
-
const original = { ...baseVector };
|
|
34
|
-
applyOverrides(baseVector, { colorTemp: 5 });
|
|
35
|
-
expect(baseVector).toEqual(original);
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
//# sourceMappingURL=fine-tuner.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fine-tuner.test.js","sourceRoot":"","sources":["../../../src/design-md/__tests__/fine-tuner.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,MAAM,UAAU,GAAoB;IAClC,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC;IACZ,OAAO,EAAE,CAAC;IACV,YAAY,EAAE,CAAC;IACf,IAAI,EAAE,CAAC;CACR,CAAC;AAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,UAAU,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,CAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,CAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,GAAU,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,QAAQ,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;QACnC,cAAc,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../src/design-md/__tests__/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
-
import { mkdtempSync, readFileSync, writeFileSync, existsSync, rmSync } from 'node:fs';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import { tmpdir } from 'node:os';
|
|
5
|
-
vi.mock('@inquirer/prompts', () => ({
|
|
6
|
-
checkbox: vi.fn(),
|
|
7
|
-
select: vi.fn(),
|
|
8
|
-
input: vi.fn(),
|
|
9
|
-
confirm: vi.fn(),
|
|
10
|
-
number: vi.fn(),
|
|
11
|
-
}));
|
|
12
|
-
describe('generateDesignMd()', () => {
|
|
13
|
-
let tempDir;
|
|
14
|
-
beforeEach(() => {
|
|
15
|
-
tempDir = mkdtempSync(join(tmpdir(), 'design-md-test-'));
|
|
16
|
-
});
|
|
17
|
-
afterEach(() => {
|
|
18
|
-
rmSync(tempDir, { recursive: true, force: true });
|
|
19
|
-
vi.resetAllMocks();
|
|
20
|
-
vi.resetModules();
|
|
21
|
-
});
|
|
22
|
-
it('writes DESIGN.md to target directory', async () => {
|
|
23
|
-
const { checkbox, select, input, confirm } = await import('@inquirer/prompts');
|
|
24
|
-
checkbox.mockResolvedValue(['dashboard', 'internal-tool']);
|
|
25
|
-
select.mockResolvedValueOnce('developers'); // audience
|
|
26
|
-
select.mockResolvedValueOnce('dark'); // mood
|
|
27
|
-
select.mockResolvedValueOnce('compact'); // density
|
|
28
|
-
input.mockResolvedValue(''); // reference
|
|
29
|
-
confirm.mockResolvedValue(true); // confirm match
|
|
30
|
-
select.mockResolvedValueOnce('accept'); // fine-tune action
|
|
31
|
-
const { generateDesignMd } = await import('../index.js');
|
|
32
|
-
const result = await generateDesignMd(tempDir);
|
|
33
|
-
expect(result).toBe(join(tempDir, 'DESIGN.md'));
|
|
34
|
-
expect(existsSync(join(tempDir, 'DESIGN.md'))).toBe(true);
|
|
35
|
-
const content = readFileSync(join(tempDir, 'DESIGN.md'), 'utf-8');
|
|
36
|
-
expect(content).toContain('---');
|
|
37
|
-
expect(content).toContain('tokens');
|
|
38
|
-
});
|
|
39
|
-
it('returns null when user declines overwrite', async () => {
|
|
40
|
-
writeFileSync(join(tempDir, 'DESIGN.md'), 'existing content');
|
|
41
|
-
const { checkbox, select, input, confirm } = await import('@inquirer/prompts');
|
|
42
|
-
confirm.mockResolvedValue(false); // decline overwrite
|
|
43
|
-
const { generateDesignMd } = await import('../index.js');
|
|
44
|
-
const result = await generateDesignMd(tempDir);
|
|
45
|
-
expect(result).toBeNull();
|
|
46
|
-
expect(readFileSync(join(tempDir, 'DESIGN.md'), 'utf-8')).toBe('existing content');
|
|
47
|
-
});
|
|
48
|
-
it('creates backup when overwriting existing DESIGN.md', async () => {
|
|
49
|
-
writeFileSync(join(tempDir, 'DESIGN.md'), 'old content');
|
|
50
|
-
const { checkbox, select, input, confirm } = await import('@inquirer/prompts');
|
|
51
|
-
confirm.mockResolvedValueOnce(true); // confirm overwrite
|
|
52
|
-
checkbox.mockResolvedValue(['consumer']);
|
|
53
|
-
select.mockResolvedValueOnce('general'); // audience
|
|
54
|
-
select.mockResolvedValueOnce('playful'); // mood
|
|
55
|
-
select.mockResolvedValueOnce('spacious'); // density
|
|
56
|
-
input.mockResolvedValue(''); // reference
|
|
57
|
-
confirm.mockResolvedValueOnce(true); // confirm match
|
|
58
|
-
select.mockResolvedValueOnce('accept'); // fine-tune action
|
|
59
|
-
const { generateDesignMd } = await import('../index.js');
|
|
60
|
-
const result = await generateDesignMd(tempDir);
|
|
61
|
-
expect(result).toBe(join(tempDir, 'DESIGN.md'));
|
|
62
|
-
expect(existsSync(join(tempDir, 'DESIGN.md.bak'))).toBe(true);
|
|
63
|
-
expect(readFileSync(join(tempDir, 'DESIGN.md.bak'), 'utf-8')).toBe('old content');
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
//# sourceMappingURL=index.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/design-md/__tests__/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"matcher.test.d.ts","sourceRoot":"","sources":["../../../src/design-md/__tests__/matcher.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { deriveVector, matchArchetype } from '../matcher.js';
|
|
3
|
-
const sampleAnswers = {
|
|
4
|
-
productType: ['dashboard', 'internal-tool'],
|
|
5
|
-
audience: 'developers',
|
|
6
|
-
mood: 'dark',
|
|
7
|
-
density: 'compact',
|
|
8
|
-
reference: null,
|
|
9
|
-
};
|
|
10
|
-
describe('deriveVector()', () => {
|
|
11
|
-
it('returns a valid DimensionVector with values 1-5', () => {
|
|
12
|
-
const vec = deriveVector(sampleAnswers);
|
|
13
|
-
for (const key of ['colorTemp', 'lightness', 'density', 'borderRadius', 'tone']) {
|
|
14
|
-
expect(vec[key]).toBeGreaterThanOrEqual(1);
|
|
15
|
-
expect(vec[key]).toBeLessThanOrEqual(5);
|
|
16
|
-
expect(Number.isInteger(vec[key])).toBe(true);
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
it('same input produces same output (deterministic)', () => {
|
|
20
|
-
const a = deriveVector(sampleAnswers);
|
|
21
|
-
const b = deriveVector(sampleAnswers);
|
|
22
|
-
expect(a).toEqual(b);
|
|
23
|
-
});
|
|
24
|
-
it('different inputs produce different vectors', () => {
|
|
25
|
-
const other = {
|
|
26
|
-
productType: ['marketing'],
|
|
27
|
-
audience: 'general',
|
|
28
|
-
mood: 'playful',
|
|
29
|
-
density: 'spacious',
|
|
30
|
-
reference: null,
|
|
31
|
-
};
|
|
32
|
-
const a = deriveVector(sampleAnswers);
|
|
33
|
-
const b = deriveVector(other);
|
|
34
|
-
expect(a).not.toEqual(b);
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
describe('matchArchetype()', () => {
|
|
38
|
-
it('returns all 15 archetypes ranked', () => {
|
|
39
|
-
const results = matchArchetype(sampleAnswers);
|
|
40
|
-
expect(results).toHaveLength(15);
|
|
41
|
-
});
|
|
42
|
-
it('results are sorted by ascending distance (best first)', () => {
|
|
43
|
-
const results = matchArchetype(sampleAnswers);
|
|
44
|
-
for (let i = 1; i < results.length; i++) {
|
|
45
|
-
expect(results[i].distance).toBeGreaterThanOrEqual(results[i - 1].distance);
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
it('category bonus applied to matching categories', () => {
|
|
49
|
-
const dashboardAnswers = {
|
|
50
|
-
productType: ['dashboard'],
|
|
51
|
-
audience: 'business',
|
|
52
|
-
mood: 'serious',
|
|
53
|
-
density: 'compact',
|
|
54
|
-
reference: null,
|
|
55
|
-
};
|
|
56
|
-
const results = matchArchetype(dashboardAnswers);
|
|
57
|
-
const dashboardResults = results.filter((r) => r.archetype.category === 'dashboard');
|
|
58
|
-
expect(dashboardResults.length).toBeGreaterThan(0);
|
|
59
|
-
// dashboard archetypes should rank highly for dashboard-focused answers
|
|
60
|
-
const topIds = results.slice(0, 5).map((r) => r.archetype.id);
|
|
61
|
-
const hasDashboard = topIds.some((id) => id.includes('dashboard') || id.includes('monitoring') || id.includes('analytics'));
|
|
62
|
-
expect(hasDashboard).toBe(true);
|
|
63
|
-
});
|
|
64
|
-
it('each result has archetype and distance', () => {
|
|
65
|
-
const results = matchArchetype(sampleAnswers);
|
|
66
|
-
for (const r of results) {
|
|
67
|
-
expect(r.archetype).toBeDefined();
|
|
68
|
-
expect(r.archetype.id).toBeTruthy();
|
|
69
|
-
expect(typeof r.distance).toBe('number');
|
|
70
|
-
expect(r.distance).toBeGreaterThanOrEqual(0);
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
//# sourceMappingURL=matcher.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"matcher.test.js","sourceRoot":"","sources":["../../../src/design-md/__tests__/matcher.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"questionnaire.test.d.ts","sourceRoot":"","sources":["../../../src/design-md/__tests__/questionnaire.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { QUESTIONS, } from '../questionnaire.js';
|
|
3
|
-
describe('questionnaire definitions', () => {
|
|
4
|
-
it('exports exactly 5 questions (Q1-Q5)', () => {
|
|
5
|
-
expect(QUESTIONS).toHaveLength(5);
|
|
6
|
-
});
|
|
7
|
-
it('Q1 is multi-select product type', () => {
|
|
8
|
-
const q1 = QUESTIONS[0];
|
|
9
|
-
expect(q1.id).toBe('productType');
|
|
10
|
-
expect(q1.type).toBe('checkbox');
|
|
11
|
-
expect(q1.choices.length).toBeGreaterThanOrEqual(9);
|
|
12
|
-
});
|
|
13
|
-
it('Q2 is single-select audience', () => {
|
|
14
|
-
const q2 = QUESTIONS[1];
|
|
15
|
-
expect(q2.id).toBe('audience');
|
|
16
|
-
expect(q2.type).toBe('select');
|
|
17
|
-
expect(q2.choices.length).toBeGreaterThanOrEqual(3);
|
|
18
|
-
});
|
|
19
|
-
it('Q3 is multi-select mood keywords', () => {
|
|
20
|
-
const q3 = QUESTIONS[2];
|
|
21
|
-
expect(q3.id).toBe('mood');
|
|
22
|
-
expect(q3.type).toBe('checkbox');
|
|
23
|
-
expect(q3.choices.length).toBeGreaterThanOrEqual(4);
|
|
24
|
-
});
|
|
25
|
-
it('Q4 is single-select density preference', () => {
|
|
26
|
-
const q4 = QUESTIONS[3];
|
|
27
|
-
expect(q4.id).toBe('density');
|
|
28
|
-
expect(q4.type).toBe('select');
|
|
29
|
-
expect(q4.choices.length).toBeGreaterThanOrEqual(3);
|
|
30
|
-
});
|
|
31
|
-
it('Q5 is optional text input for reference product', () => {
|
|
32
|
-
const q5 = QUESTIONS[4];
|
|
33
|
-
expect(q5.id).toBe('reference');
|
|
34
|
-
expect(q5.type).toBe('input');
|
|
35
|
-
expect(q5.required).toBe(false);
|
|
36
|
-
});
|
|
37
|
-
it('all questions have message and id', () => {
|
|
38
|
-
for (const q of QUESTIONS) {
|
|
39
|
-
expect(q.id).toBeTruthy();
|
|
40
|
-
expect(q.message).toBeTruthy();
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
it('Q1 choices cover all archetype categories', () => {
|
|
44
|
-
const q1 = QUESTIONS[0];
|
|
45
|
-
const values = q1.choices.map((c) => c.value);
|
|
46
|
-
expect(values).toContain('internal-tool');
|
|
47
|
-
expect(values).toContain('dashboard');
|
|
48
|
-
expect(values).toContain('consumer');
|
|
49
|
-
expect(values).toContain('developer');
|
|
50
|
-
expect(values).toContain('mobile');
|
|
51
|
-
expect(values).toContain('e-commerce');
|
|
52
|
-
expect(values).toContain('marketing');
|
|
53
|
-
expect(values).toContain('form-heavy');
|
|
54
|
-
expect(values).toContain('content');
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
//# sourceMappingURL=questionnaire.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"questionnaire.test.js","sourceRoot":"","sources":["../../../src/design-md/__tests__/questionnaire.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.test.d.ts","sourceRoot":"","sources":["../../../src/design-md/__tests__/renderer.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { renderDesignMd } from '../renderer.js';
|
|
3
|
-
import { loadArchetypes } from '../archetypes.js';
|
|
4
|
-
import { parse as parseYaml } from 'yaml';
|
|
5
|
-
const archetypes = loadArchetypes();
|
|
6
|
-
const testArchetype = archetypes[0];
|
|
7
|
-
const testVector = { colorTemp: 2, lightness: 3, density: 2, borderRadius: 3, tone: 2 };
|
|
8
|
-
describe('renderDesignMd()', () => {
|
|
9
|
-
it('output starts and ends YAML front matter with --- delimiters', () => {
|
|
10
|
-
const output = renderDesignMd(testArchetype, testVector);
|
|
11
|
-
const lines = output.split('\n');
|
|
12
|
-
expect(lines[0]).toBe('---');
|
|
13
|
-
const secondDelimiter = lines.indexOf('---', 1);
|
|
14
|
-
expect(secondDelimiter).toBeGreaterThan(1);
|
|
15
|
-
});
|
|
16
|
-
it('YAML front matter contains tokens key', () => {
|
|
17
|
-
const output = renderDesignMd(testArchetype, testVector);
|
|
18
|
-
const yamlBlock = output.split('---')[1];
|
|
19
|
-
const parsed = parseYaml(yamlBlock);
|
|
20
|
-
expect(parsed).toHaveProperty('tokens');
|
|
21
|
-
});
|
|
22
|
-
it('YAML front matter contains archetype metadata', () => {
|
|
23
|
-
const output = renderDesignMd(testArchetype, testVector);
|
|
24
|
-
const yamlBlock = output.split('---')[1];
|
|
25
|
-
const parsed = parseYaml(yamlBlock);
|
|
26
|
-
expect(parsed).toHaveProperty('archetype');
|
|
27
|
-
expect(parsed.archetype).toBe(testArchetype.id);
|
|
28
|
-
});
|
|
29
|
-
it('YAML front matter contains dimensions', () => {
|
|
30
|
-
const output = renderDesignMd(testArchetype, testVector);
|
|
31
|
-
const yamlBlock = output.split('---')[1];
|
|
32
|
-
const parsed = parseYaml(yamlBlock);
|
|
33
|
-
expect(parsed).toHaveProperty('dimensions');
|
|
34
|
-
expect(parsed.dimensions).toEqual(testVector);
|
|
35
|
-
});
|
|
36
|
-
it('markdown body contains required sections', () => {
|
|
37
|
-
const output = renderDesignMd(testArchetype, testVector);
|
|
38
|
-
const parts = output.split('---');
|
|
39
|
-
const markdown = parts.slice(2).join('---');
|
|
40
|
-
expect(markdown).toContain('# Style Direction');
|
|
41
|
-
expect(markdown).toContain('## Color Palette');
|
|
42
|
-
expect(markdown).toContain('## Typography');
|
|
43
|
-
expect(markdown).toContain('## Spacing');
|
|
44
|
-
expect(markdown).toContain('## Components');
|
|
45
|
-
});
|
|
46
|
-
it('output is valid non-empty string', () => {
|
|
47
|
-
const output = renderDesignMd(testArchetype, testVector);
|
|
48
|
-
expect(output.length).toBeGreaterThan(100);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
//# sourceMappingURL=renderer.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.test.js","sourceRoot":"","sources":["../../../src/design-md/__tests__/renderer.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.test.d.ts","sourceRoot":"","sources":["../../../src/design-md/__tests__/types.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { describe, it, expectTypeOf } from 'vitest';
|
|
2
|
-
describe('DimensionVector type constraints', () => {
|
|
3
|
-
it('accepts valid dimension values (1-5)', () => {
|
|
4
|
-
const v = {
|
|
5
|
-
colorTemp: 1,
|
|
6
|
-
lightness: 2,
|
|
7
|
-
density: 3,
|
|
8
|
-
borderRadius: 4,
|
|
9
|
-
tone: 5,
|
|
10
|
-
};
|
|
11
|
-
expectTypeOf(v.colorTemp).toEqualTypeOf();
|
|
12
|
-
expectTypeOf(v.lightness).toEqualTypeOf();
|
|
13
|
-
expectTypeOf(v.density).toEqualTypeOf();
|
|
14
|
-
expectTypeOf(v.borderRadius).toEqualTypeOf();
|
|
15
|
-
expectTypeOf(v.tone).toEqualTypeOf();
|
|
16
|
-
});
|
|
17
|
-
it('has exactly 5 dimension keys', () => {
|
|
18
|
-
expectTypeOf().toEqualTypeOf();
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
describe('ArchetypeCategory type constraints', () => {
|
|
22
|
-
it('is an exhaustive union of 9 categories', () => {
|
|
23
|
-
expectTypeOf().toEqualTypeOf();
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
describe('Archetype type structure', () => {
|
|
27
|
-
it('has required fields with correct types', () => {
|
|
28
|
-
expectTypeOf().toHaveProperty('id');
|
|
29
|
-
expectTypeOf().toHaveProperty('name');
|
|
30
|
-
expectTypeOf().toHaveProperty('category');
|
|
31
|
-
expectTypeOf().toHaveProperty('dimensions');
|
|
32
|
-
expectTypeOf().toHaveProperty('anchors');
|
|
33
|
-
expectTypeOf().toHaveProperty('template');
|
|
34
|
-
expectTypeOf().toBeString();
|
|
35
|
-
expectTypeOf().toBeString();
|
|
36
|
-
expectTypeOf().toEqualTypeOf();
|
|
37
|
-
expectTypeOf().toEqualTypeOf();
|
|
38
|
-
expectTypeOf().toBeString();
|
|
39
|
-
});
|
|
40
|
-
it('anchors has primary and auxiliary fields', () => {
|
|
41
|
-
expectTypeOf().toEqualTypeOf();
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
describe('QuestionnaireAnswers type structure', () => {
|
|
45
|
-
it('has correct field types', () => {
|
|
46
|
-
expectTypeOf().toEqualTypeOf();
|
|
47
|
-
expectTypeOf().toBeString();
|
|
48
|
-
expectTypeOf().toBeString();
|
|
49
|
-
expectTypeOf().toBeString();
|
|
50
|
-
expectTypeOf().toEqualTypeOf();
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
describe('DesignMdConfig type structure', () => {
|
|
54
|
-
it('has archetype and vector fields', () => {
|
|
55
|
-
expectTypeOf().toHaveProperty('archetype');
|
|
56
|
-
expectTypeOf().toHaveProperty('finalVector');
|
|
57
|
-
expectTypeOf().toHaveProperty('answers');
|
|
58
|
-
expectTypeOf().toEqualTypeOf();
|
|
59
|
-
expectTypeOf().toEqualTypeOf();
|
|
60
|
-
expectTypeOf().toEqualTypeOf();
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
//# sourceMappingURL=types.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.test.js","sourceRoot":"","sources":["../../../src/design-md/__tests__/types.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"archetypes.d.ts","sourceRoot":"","sources":["../../src/design-md/archetypes.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,wBAAgB,cAAc,IAAI,SAAS,EAAE,CAgB5C"}
|