forked from mnfst/manifest
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathverify-create-manifest.mjs
More file actions
103 lines (89 loc) · 2.47 KB
/
verify-create-manifest.mjs
File metadata and controls
103 lines (89 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/bin/env node
import fs from 'node:fs'
import path from 'node:path'
function fail(msg) {
console.error(`FAIL: ${msg}`)
process.exitCode = 1
}
function ok(msg) {
console.log(`OK: ${msg}`)
}
const args = process.argv.slice(2)
if (args.length < 1) {
console.error('Usage: node scripts/verify-create-manifest.mjs <projectName> [--expect-windsurf]')
process.exit(2)
}
const projectName = args[0]
const expectWindsurf = args.includes('--expect-windsurf')
const base = path.resolve(projectName)
// sanity existence checks
if (fs.existsSync(base)) {
ok(`project folder exists: ${base}`)
} else {
fail(`project folder missing: ${base}`)
}
const mustExist = [
'manifest.yml',
'.manifest',
'.vscode',
'.vscode/extensions.json',
'.vscode/settings.json',
'.gitignore',
'package.json',
'.env',
'README.md'
]
for (const rel of mustExist) {
const p = path.join(base, rel)
if (fs.existsSync(p)) {
ok(`${rel} exists`)
} else {
fail(`${rel} missing`)
}
}
// Check manifest.yml has content and expected key from the provided backend file
try {
const manifest = fs.readFileSync(path.join(base, 'manifest.yml'), 'utf8')
if (manifest.trim().length > 0 && /entities:\s*$/m.test(manifest)) {
ok('manifest.yml seems valid (contains entities)')
} else {
fail('manifest.yml does not contain expected content')
}
} catch (e) {
fail(`cannot read manifest.yml: ${e}`)
}
// Ensure the dependency was added
try {
const pkg = JSON.parse(fs.readFileSync(path.join(base, 'package.json'), 'utf8'))
if (pkg?.dependencies?.manifest) {
ok('package.json includes manifest dependency')
} else {
fail('package.json missing manifest dependency')
}
} catch (e) {
fail(`cannot read/parse package.json: ${e}`)
}
// Verify .gitignore contains expected lines
try {
const gi = fs.readFileSync(path.join(base, '.gitignore'), 'utf8')
const required = ['node_modules', '.env', 'public', '.manifest']
for (const entry of required) {
if (gi.includes(entry)) {
ok(`.gitignore contains ${entry}`)
} else {
fail(`.gitignore missing ${entry}`)
}
}
} catch (e) {
fail(`cannot read .gitignore: ${e}`)
}
// Optionally verify a flag effect (works with parameters)
if (expectWindsurf) {
const windsurfFile = path.join(base, '.windsurf', 'rules', 'manifest.md')
if (fs.existsSync(windsurfFile)) {
ok('windsurf rules created via flag')
} else {
fail('windsurf rules missing though flag was provided')
}
}
process.exit(process.exitCode ?? 0)