@vibecuting/component-project-helper 0.1.10 → 0.1.12
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/package.json
CHANGED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import fs from 'node:fs/promises'
|
|
2
|
+
import path from 'node:path'
|
|
3
|
+
|
|
4
|
+
export const componentProjectSkillsScriptName = 'update-component-skills'
|
|
5
|
+
export const componentProjectSkillsScriptCommand =
|
|
6
|
+
'node ./node_modules/@vibecuting/component-project-helper/scripts/postinstall.mjs'
|
|
7
|
+
|
|
8
|
+
async function readPackageJson(projectRoot) {
|
|
9
|
+
const packageJsonPath = path.join(projectRoot, 'package.json')
|
|
10
|
+
try {
|
|
11
|
+
return JSON.parse(await fs.readFile(packageJsonPath, 'utf8'))
|
|
12
|
+
} catch (error) {
|
|
13
|
+
if (error?.code === 'ENOENT') {
|
|
14
|
+
return undefined
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
throw error
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async function writePackageJson(projectRoot, packageJson) {
|
|
22
|
+
const packageJsonPath = path.join(projectRoot, 'package.json')
|
|
23
|
+
await fs.writeFile(packageJsonPath, `${JSON.stringify(packageJson, null, 2)}\n`, 'utf8')
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export async function ensureComponentProjectSkillsScript(projectRoot) {
|
|
27
|
+
const packageJson = await readPackageJson(projectRoot)
|
|
28
|
+
if (!packageJson) {
|
|
29
|
+
return
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const scripts = packageJson.scripts ?? {}
|
|
33
|
+
|
|
34
|
+
if (scripts[componentProjectSkillsScriptName] !== componentProjectSkillsScriptCommand) {
|
|
35
|
+
packageJson.scripts = {
|
|
36
|
+
...scripts,
|
|
37
|
+
[componentProjectSkillsScriptName]: componentProjectSkillsScriptCommand,
|
|
38
|
+
}
|
|
39
|
+
await writePackageJson(projectRoot, packageJson)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export async function removeComponentProjectSkillsScript(projectRoot) {
|
|
44
|
+
const packageJson = await readPackageJson(projectRoot)
|
|
45
|
+
if (!packageJson) {
|
|
46
|
+
return
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const scripts = packageJson.scripts ?? {}
|
|
50
|
+
|
|
51
|
+
if (scripts[componentProjectSkillsScriptName] !== componentProjectSkillsScriptCommand) {
|
|
52
|
+
return
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const nextScripts = { ...scripts }
|
|
56
|
+
delete nextScripts[componentProjectSkillsScriptName]
|
|
57
|
+
packageJson.scripts = nextScripts
|
|
58
|
+
|
|
59
|
+
await writePackageJson(projectRoot, packageJson)
|
|
60
|
+
}
|
package/scripts/postinstall.mjs
CHANGED
|
@@ -2,6 +2,7 @@ import fs from 'node:fs/promises'
|
|
|
2
2
|
import path from 'node:path'
|
|
3
3
|
|
|
4
4
|
import { discoverComponentProjectComponents } from './discover-components.mjs'
|
|
5
|
+
import { ensureComponentProjectSkillsScript } from './package-json.mjs'
|
|
5
6
|
import {
|
|
6
7
|
resolveComponentProjectGeneratedDocsDir,
|
|
7
8
|
resolveComponentProjectGeneratedManifestPath,
|
|
@@ -33,6 +34,16 @@ export async function runComponentProjectPostinstall(projectRoot = resolveCompon
|
|
|
33
34
|
const manifestPath = resolveComponentProjectGeneratedManifestPath(projectRoot)
|
|
34
35
|
const components = await discoverComponentProjectComponents(projectRoot)
|
|
35
36
|
|
|
37
|
+
console.log('[component-project-helper] postinstall start')
|
|
38
|
+
console.log(`[component-project-helper] project root: ${projectRoot}`)
|
|
39
|
+
console.log(`[component-project-helper] docs dir: ${docsDir}`)
|
|
40
|
+
console.log(`[component-project-helper] manifest path: ${manifestPath}`)
|
|
41
|
+
console.log(
|
|
42
|
+
`[component-project-helper] discovered ${components.length} component(s): ${
|
|
43
|
+
components.map((component) => component.name).join(', ') || '(none)'
|
|
44
|
+
}`,
|
|
45
|
+
)
|
|
46
|
+
|
|
36
47
|
await ensureDirectory(docsDir)
|
|
37
48
|
|
|
38
49
|
const files = []
|
|
@@ -40,9 +51,21 @@ export async function runComponentProjectPostinstall(projectRoot = resolveCompon
|
|
|
40
51
|
const filePath = path.join(docsDir, `${component.name}.md`)
|
|
41
52
|
await fs.writeFile(filePath, renderComponentProjectMarkdown(component), 'utf8')
|
|
42
53
|
files.push(filePath)
|
|
54
|
+
console.log(
|
|
55
|
+
`[component-project-helper] wrote ${path.relative(projectRoot, filePath)} <- ${component.sourceFile}`,
|
|
56
|
+
)
|
|
43
57
|
}
|
|
44
58
|
|
|
59
|
+
console.log(
|
|
60
|
+
`[component-project-helper] cleaning stale docs relative to manifest ${path.relative(
|
|
61
|
+
projectRoot,
|
|
62
|
+
manifestPath,
|
|
63
|
+
)}`,
|
|
64
|
+
)
|
|
45
65
|
await removeStaleGeneratedFiles(manifestPath, files)
|
|
66
|
+
await ensureComponentProjectSkillsScript(projectRoot)
|
|
67
|
+
console.log('[component-project-helper] ensured update-component-skills script')
|
|
68
|
+
console.log('[component-project-helper] ensured stale docs cleaned')
|
|
46
69
|
|
|
47
70
|
const manifest = ComponentProjectGeneratedManifestSchema.parse({
|
|
48
71
|
projectRoot,
|
|
@@ -51,6 +74,9 @@ export async function runComponentProjectPostinstall(projectRoot = resolveCompon
|
|
|
51
74
|
files,
|
|
52
75
|
})
|
|
53
76
|
await fs.writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, 'utf8')
|
|
77
|
+
console.log(
|
|
78
|
+
`[component-project-helper] postinstall complete, manifest files: ${files.length}`,
|
|
79
|
+
)
|
|
54
80
|
}
|
|
55
81
|
|
|
56
82
|
const isDirectRun = process.argv[1] && path.resolve(process.argv[1]) === path.resolve(new URL(import.meta.url).pathname)
|
package/scripts/preuninstall.mjs
CHANGED
|
@@ -3,6 +3,7 @@ import path from 'node:path'
|
|
|
3
3
|
|
|
4
4
|
import { resolveComponentProjectGeneratedManifestPath } from './runtime-root.mjs'
|
|
5
5
|
import { ComponentProjectGeneratedManifestSchema } from './schemas.mjs'
|
|
6
|
+
import { removeComponentProjectSkillsScript } from './package-json.mjs'
|
|
6
7
|
|
|
7
8
|
export async function runComponentProjectPreuninstall(
|
|
8
9
|
projectRoot = process.env.INIT_CWD ?? process.env.npm_config_local_prefix ?? process.cwd(),
|
|
@@ -25,6 +26,8 @@ export async function runComponentProjectPreuninstall(
|
|
|
25
26
|
throw error
|
|
26
27
|
}
|
|
27
28
|
}
|
|
29
|
+
|
|
30
|
+
await removeComponentProjectSkillsScript(projectRoot)
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
const isDirectRun = process.argv[1] && path.resolve(process.argv[1]) === path.resolve(new URL(import.meta.url).pathname)
|
|
@@ -7,7 +7,15 @@ export const componentProjectSkillsScriptCommand =
|
|
|
7
7
|
|
|
8
8
|
async function readPackageJson(projectRoot: string): Promise<Record<string, unknown>> {
|
|
9
9
|
const packageJsonPath = path.join(projectRoot, 'package.json')
|
|
10
|
-
|
|
10
|
+
try {
|
|
11
|
+
return JSON.parse(await fs.readFile(packageJsonPath, 'utf8'))
|
|
12
|
+
} catch (error) {
|
|
13
|
+
if ((error as NodeJS.ErrnoException).code === 'ENOENT') {
|
|
14
|
+
return undefined as never
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
throw error
|
|
18
|
+
}
|
|
11
19
|
}
|
|
12
20
|
|
|
13
21
|
async function writePackageJson(
|
|
@@ -20,6 +28,10 @@ async function writePackageJson(
|
|
|
20
28
|
|
|
21
29
|
export async function ensureComponentProjectSkillsScript(projectRoot: string): Promise<void> {
|
|
22
30
|
const packageJson = await readPackageJson(projectRoot)
|
|
31
|
+
if (!packageJson) {
|
|
32
|
+
return
|
|
33
|
+
}
|
|
34
|
+
|
|
23
35
|
const scripts = (packageJson.scripts as Record<string, string> | undefined) ?? {}
|
|
24
36
|
|
|
25
37
|
if (scripts[componentProjectSkillsScriptName] !== componentProjectSkillsScriptCommand) {
|
|
@@ -33,6 +45,10 @@ export async function ensureComponentProjectSkillsScript(projectRoot: string): P
|
|
|
33
45
|
|
|
34
46
|
export async function removeComponentProjectSkillsScript(projectRoot: string): Promise<void> {
|
|
35
47
|
const packageJson = await readPackageJson(projectRoot)
|
|
48
|
+
if (!packageJson) {
|
|
49
|
+
return
|
|
50
|
+
}
|
|
51
|
+
|
|
36
52
|
const scripts = (packageJson.scripts as Record<string, string> | undefined) ?? {}
|
|
37
53
|
|
|
38
54
|
if (scripts[componentProjectSkillsScriptName] !== componentProjectSkillsScriptCommand) {
|
|
@@ -40,6 +40,16 @@ export async function runComponentProjectPostinstall(
|
|
|
40
40
|
const manifestPath = resolveComponentProjectGeneratedManifestPath(projectRoot)
|
|
41
41
|
const components = await discoverComponentProjectComponents(projectRoot)
|
|
42
42
|
|
|
43
|
+
console.log('[component-project-helper] postinstall start')
|
|
44
|
+
console.log(`[component-project-helper] project root: ${projectRoot}`)
|
|
45
|
+
console.log(`[component-project-helper] docs dir: ${docsDir}`)
|
|
46
|
+
console.log(`[component-project-helper] manifest path: ${manifestPath}`)
|
|
47
|
+
console.log(
|
|
48
|
+
`[component-project-helper] discovered ${components.length} component(s): ${
|
|
49
|
+
components.map((component) => component.name).join(', ') || '(none)'
|
|
50
|
+
}`,
|
|
51
|
+
)
|
|
52
|
+
|
|
43
53
|
await ensureDirectory(docsDir)
|
|
44
54
|
|
|
45
55
|
const files: string[] = []
|
|
@@ -49,10 +59,20 @@ export async function runComponentProjectPostinstall(
|
|
|
49
59
|
const markdown = renderComponentProjectMarkdown(component)
|
|
50
60
|
await fs.writeFile(filePath, markdown, 'utf8')
|
|
51
61
|
files.push(filePath)
|
|
62
|
+
console.log(
|
|
63
|
+
`[component-project-helper] wrote ${path.relative(projectRoot, filePath)} <- ${component.sourceFile}`,
|
|
64
|
+
)
|
|
52
65
|
}
|
|
53
66
|
|
|
67
|
+
console.log(
|
|
68
|
+
`[component-project-helper] cleaning stale docs relative to manifest ${path.relative(
|
|
69
|
+
projectRoot,
|
|
70
|
+
manifestPath,
|
|
71
|
+
)}`,
|
|
72
|
+
)
|
|
54
73
|
await removeStaleGeneratedFiles(manifestPath, files)
|
|
55
74
|
await ensureComponentProjectSkillsScript(projectRoot)
|
|
75
|
+
console.log('[component-project-helper] ensured update-component-skills script')
|
|
56
76
|
|
|
57
77
|
const manifest = ComponentProjectGeneratedManifestSchema.parse({
|
|
58
78
|
projectRoot,
|
|
@@ -62,6 +82,9 @@ export async function runComponentProjectPostinstall(
|
|
|
62
82
|
})
|
|
63
83
|
|
|
64
84
|
await fs.writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, 'utf8')
|
|
85
|
+
console.log(
|
|
86
|
+
`[component-project-helper] postinstall complete, manifest files: ${files.length}`,
|
|
87
|
+
)
|
|
65
88
|
}
|
|
66
89
|
|
|
67
90
|
async function main(): Promise<void> {
|