1
1
mirror of https://github.com/leon-ai/leon.git synced 2024-12-22 08:11:34 +03:00
leon/scripts/setup/setup-skills/install-nodejs-skills-packages.js

66 lines
1.9 KiB
JavaScript

import path from 'node:path'
import fs from 'node:fs'
import { command } from 'execa'
import { isFileEmpty } from '@/utilities'
import { LogHelper } from '@/helpers/log-helper'
/**
* Install Node.js skills packages on setup
* 1. If skill is Node.js, then verify if an installation is needed
* 2. If install is needed, then install npm packages
*/
export default async function (skillFriendlyName, currentSkill) {
if (currentSkill.bridge === 'nodejs') {
const skillSRCPath = path.join(currentSkill.path, 'src')
const skillPackageJSONPath = path.join(skillSRCPath, 'package.json')
if (fs.existsSync(skillPackageJSONPath)) {
const isPackageJSONEmpty = await isFileEmpty(skillPackageJSONPath)
if (!isPackageJSONEmpty) {
const packageJSONMtime = (await fs.promises.stat(skillPackageJSONPath))
.mtime
const lastSkillNPMInstallFilePath = path.join(
skillSRCPath,
'.last-skill-npm-install'
)
if (fs.existsSync(lastSkillNPMInstallFilePath)) {
const lastSkillNPMInstallTime = new Date(
Number(
await fs.promises.readFile(lastSkillNPMInstallFilePath, 'utf8')
)
)
if (packageJSONMtime <= lastSkillNPMInstallTime) {
LogHelper.success(
`"${skillFriendlyName}" skill npm packages are up-to-date`
)
return
}
}
LogHelper.info(
`Installing npm packages for the "${skillFriendlyName}" skill...`
)
await command(
`npm install --package-lock=false --prefix ${skillSRCPath}`,
{
shell: true
}
)
await fs.promises.writeFile(
lastSkillNPMInstallFilePath,
`${Date.now()}`
)
LogHelper.success(`"${skillFriendlyName}" skill npm packages installed`)
}
}
}
}