diff --git a/package.json b/package.json index 6bc97745..bdcc151e 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,6 @@ "jsonfile": "6.1.0", "keyv": "^5.0.1", "keyv-file": "^5.0.3", - "mac-windows": "1.0.0", "quick-score": "^0.2.0", "rimraf": "6.0.1", "safe-stable-stringify": "^2.5.0", @@ -182,7 +181,8 @@ }, "optionalDependencies": { "file-icon": "5.1.1", - "get-app-icon": "1.0.1" + "get-app-icon": "1.0.1", + "mac-windows": "1.0.0" }, "packageManager": "pnpm@9.10.0+sha512.73a29afa36a0d092ece5271de5177ecbf8318d454ecd701343131b8ebc0c1a91c487da46ab77c8e596d6acf1461e3594ced4becedf8921b074fbd8653ed7051c" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b3774d40..18483f37 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,9 +99,6 @@ importers: keyv-file: specifier: ^5.0.3 version: 5.0.3 - mac-windows: - specifier: 1.0.0 - version: 1.0.0 quick-score: specifier: ^0.2.0 version: 0.2.0 @@ -145,6 +142,9 @@ importers: get-app-icon: specifier: 1.0.1 version: 1.0.1 + mac-windows: + specifier: 1.0.0 + version: 1.0.0 devDependencies: '@types/debug': specifier: 4.1.12 @@ -6163,7 +6163,8 @@ snapshots: lru-cache@11.0.0: {} - mac-windows@1.0.0: {} + mac-windows@1.0.0: + optional: true make-dir@3.1.0: dependencies: diff --git a/src/api/npm.ts b/src/api/npm.ts index 7915073c..83b7e95e 100644 --- a/src/api/npm.ts +++ b/src/api/npm.ts @@ -1,236 +1,182 @@ -import { pathToFileURL } from "url" +import { pathToFileURL } from "node:url" import { adjustPackageName } from "../core/utils.js" let defaultImport = async (modulePath: string) => { - let pkg = await import(modulePath) - if (pkg.default) return pkg.default - return pkg + let pkg = await import(modulePath) + if (pkg.default) return pkg.default + return pkg } interface PackageJson { - main?: string - module?: string - exports?: any - type?: string + main?: string + module?: string + exports?: any + type?: string } let findMain = async ( - parent = "", - packageName: string, - packageJson: PackageJson + parent = "", + packageName: string, + packageJson: PackageJson ) => { - try { - let kPath = (...pathParts: string[]) => - global.kenvPath( - parent, - "node_modules", - packageName, - ...pathParts - ) - - // if kPath doesn't exist, return false - if (!(await global.isDir(kPath()))) { - return false - } - - let { module, main, type, exports } = packageJson - - if (module && type == "module") return kPath(module) - if (main && (await global.isFile(kPath(main)))) - return kPath(main) - if (main && main.endsWith(".js")) return kPath(main) - if (main && !main.endsWith(".js")) { - // Author forgot to add .js - if (await global.isFile(kPath(`${main}.js`))) { - return kPath(`${main}.js`) - } - - // "main" is just a path that contains index.js - if (await global.isFile(kPath(main, "index.js"))) { - return kPath(main, "index.js") - } - } - if (exports) { - if (exports?.["."]) { - if (exports?.["."]?.import?.default) - return kPath(exports?.["."]?.import?.default) - if (exports?.["."]?.import) - return kPath(exports?.["."]?.import) - if (exports?.["."]?.require?.default) - return kPath(exports?.["."]?.require?.default) - if (exports?.["."]?.require) - return kPath(exports?.["."]?.require) - if (typeof exports?.["."] == "string") - return kPath(exports?.["."]) - } - } - return kPath("index.js") - } catch (error) { - throw new Error(error) - } + try { + let kPath = (...pathParts: string[]) => + global.kenvPath(parent, "node_modules", packageName, ...pathParts) + + // if kPath doesn't exist, return false + if (!(await global.isDir(kPath()))) { + return false + } + + let { module, main, type, exports } = packageJson + + if (module && type == "module") return kPath(module) + if (main && (await global.isFile(kPath(main)))) return kPath(main) + if (main && main.endsWith(".js")) return kPath(main) + if (main && !main.endsWith(".js")) { + // Author forgot to add .js + if (await global.isFile(kPath(`${main}.js`))) { + return kPath(`${main}.js`) + } + + // "main" is just a path that contains index.js + if (await global.isFile(kPath(main, "index.js"))) { + return kPath(main, "index.js") + } + } + if (exports) { + if (exports?.["."]) { + if (exports?.["."]?.import?.default) + return kPath(exports?.["."]?.import?.default) + if (exports?.["."]?.import) return kPath(exports?.["."]?.import) + if (exports?.["."]?.require?.default) + return kPath(exports?.["."]?.require?.default) + if (exports?.["."]?.require) return kPath(exports?.["."]?.require) + if (typeof exports?.["."] == "string") return kPath(exports?.["."]) + } + } + return kPath("index.js") + } catch (error) { + throw new Error(error) + } } let findPackageJson = - (packageName: string) => - async (parent = "") => { - let packageJson = global.kenvPath( - parent, - "node_modules", - packageName, - "package.json" - ) - - if (process.env.KIT_CONTEXT == "workflow") { - log(`package.json path: ${packageJson}`) - } - - if (!(await global.isFile(packageJson))) { - return false - } - - let pkgPackageJson = JSON.parse( - await global.readFile(packageJson, "utf-8") - ) - - if (process.env.KIT_CONTEXT == "workflow") { - log(`package.json: ${JSON.stringify(pkgPackageJson)}`) - } - - let mainModule = await findMain( - parent, - packageName, - pkgPackageJson - ) - - return mainModule || false - } + (packageName: string) => + async (parent = "") => { + let packageJson = global.kenvPath( + parent, + "node_modules", + packageName, + "package.json" + ) + + if (process.env.KIT_CONTEXT == "workflow") { + log(`package.json path: ${packageJson}`) + } + + if (!(await global.isFile(packageJson))) { + return false + } + + let pkgPackageJson = JSON.parse(await global.readFile(packageJson, "utf-8")) + + if (process.env.KIT_CONTEXT == "workflow") { + log(`package.json: ${JSON.stringify(pkgPackageJson)}`) + } + + let mainModule = await findMain(parent, packageName, pkgPackageJson) + + return mainModule || false + } let kenvImport = async (packageName: string) => { - packageName = adjustPackageName(packageName) - - try { - // if the `node:` protocol is used, just go ahead and import it - if (packageName.startsWith("node:")) { - return await defaultImport(packageName) - } - - let findMainFromPackageJson = - findPackageJson(packageName) - - let mainModule = await findMainFromPackageJson("") - if (mainModule) - return await defaultImport( - pathToFileURL(mainModule).toString() - ) - - if (process.env?.SCRIPTS_DIR) { - mainModule = await findMainFromPackageJson( - process.env.SCRIPTS_DIR - ) - if (mainModule) - return await defaultImport( - pathToFileURL(mainModule).toString() - ) - } - - throw new Error( - `Could not find main module for ${packageName}` - ) - } catch (error) { - throw new Error(error) - } + packageName = adjustPackageName(packageName) + + try { + // if the `node:` protocol is used, just go ahead and import it + if (packageName.startsWith("node:")) { + return await defaultImport(packageName) + } + + let findMainFromPackageJson = findPackageJson(packageName) + + let mainModule = await findMainFromPackageJson("") + if (mainModule) + return await defaultImport(pathToFileURL(mainModule).toString()) + + if (process.env?.SCRIPTS_DIR) { + mainModule = await findMainFromPackageJson(process.env.SCRIPTS_DIR) + if (mainModule) + return await defaultImport(pathToFileURL(mainModule).toString()) + } + + throw new Error(`Could not find main module for ${packageName}`) + } catch (error) { + throw new Error(error) + } } export let createNpm = - (npmInstall, attemptImport = true) => - async packageNameWithVersion => { - // remove any version numbers - let packageName = packageNameWithVersion.replace( - /(?<=.)(@|\^|~).*/g, - "" - ) - let { - dependencies: kitDeps = {}, - devDependencies: devDeps = {}, - } = JSON.parse( - await global.readFile( - global.kitPath("package.json"), - "utf-8" - ) - ) - let isKitDep = - kitDeps[packageName] || devDeps[packageName] - if (isKitDep) { - return defaultImport(packageName) - } - - let pkgPath = global.kenvPath( - process.env.SCRIPTS_DIR || "", - "package.json" - ) - - if (!(await global.isFile(pkgPath))) { - throw new Error( - `Could not find package.json at ${pkgPath}` - ) - } - - //fix missing kenv dep - let { - dependencies: kenvDeps = {}, - devDependencies: kenvDevDeps = {}, - } = JSON.parse(await global.readFile(pkgPath, "utf-8")) - - let isKenvDep = - kenvDeps?.[packageName] || kenvDevDeps?.[packageName] - - if (isKenvDep) { - global.log(`Found ${packageName} in ${pkgPath}`) - return kenvImport(packageName) - } - await npmInstall(packageNameWithVersion) - if (attemptImport) { - return await kenvImport(packageName) - } - } + (npmInstall, attemptImport = true) => + async (packageNameWithVersion) => { + // remove any version numbers + let packageName = packageNameWithVersion.replace(/(?<=.)(@|\^|~).*/g, "") + let { dependencies: kitDeps = {}, devDependencies: devDeps = {} } = + JSON.parse(await global.readFile(global.kitPath("package.json"), "utf-8")) + let isKitDep = kitDeps[packageName] || devDeps[packageName] + if (isKitDep) { + return defaultImport(packageName) + } + + let pkgPath = global.kenvPath(process.env.SCRIPTS_DIR || "", "package.json") + + if (!(await global.isFile(pkgPath))) { + throw new Error(`Could not find package.json at ${pkgPath}`) + } + + //fix missing kenv dep + let { dependencies: kenvDeps = {}, devDependencies: kenvDevDeps = {} } = + JSON.parse(await global.readFile(pkgPath, "utf-8")) + + let isKenvDep = kenvDeps?.[packageName] || kenvDevDeps?.[packageName] + + if (isKenvDep) { + global.log(`Found ${packageName} in ${pkgPath}`) + return kenvImport(packageName) + } + await npmInstall(packageNameWithVersion) + if (attemptImport) { + return await kenvImport(packageName) + } + } export let createKenvPackageMissingInstall = - (npmInstall, attemptImport = true) => - async packageNameWithVersion => { - // remove any version numbers - let packageName = packageNameWithVersion.replace( - /(?<=.)(@|\^|~).*/g, - "" - ) - - packageName = adjustPackageName(packageName) - - let pkgPath = global.kenvPath( - process.env.SCRIPTS_DIR || "", - "package.json" - ) - - if (!(await global.isFile(pkgPath))) { - throw new Error( - `Could not find package.json at ${pkgPath}` - ) - } - - //fix missing kenv dep - let { - dependencies: kenvDeps = {}, - devDependencies: kenvDevDeps = {}, - } = JSON.parse(await global.readFile(pkgPath, "utf-8")) - - let isKenvDep = - kenvDeps?.[packageName] || kenvDevDeps?.[packageName] - - if (isKenvDep) { - global.log(`Found ${packageName} in ${pkgPath}`) - return kenvImport(packageName) - } - await npmInstall(packageNameWithVersion) - if (attemptImport) { - return await kenvImport(packageName) - } - } + (npmInstall, attemptImport = true) => + async (packageNameWithVersion) => { + // remove any version numbers + let packageName = packageNameWithVersion.replace(/(?<=.)(@|\^|~).*/g, "") + + packageName = adjustPackageName(packageName) + + let pkgPath = global.kenvPath(process.env.SCRIPTS_DIR || "", "package.json") + + if (!(await global.isFile(pkgPath))) { + throw new Error(`Could not find package.json at ${pkgPath}`) + } + + //fix missing kenv dep + let { dependencies: kenvDeps = {}, devDependencies: kenvDevDeps = {} } = + JSON.parse(await global.readFile(pkgPath, "utf-8")) + + let isKenvDep = kenvDeps?.[packageName] || kenvDevDeps?.[packageName] + + if (isKenvDep) { + global.log(`Found ${packageName} in ${pkgPath}`) + return kenvImport(packageName) + } + await npmInstall(packageNameWithVersion) + if (attemptImport) { + return await kenvImport(packageName) + } + } diff --git a/src/run/github-workflow.ts b/src/run/github-workflow.ts index 8be8ceb3..594d7bdd 100644 --- a/src/run/github-workflow.ts +++ b/src/run/github-workflow.ts @@ -1,23 +1,17 @@ process.env.KIT_TARGET = "github-workflow" -import os from "os" -import { randomUUID } from "crypto" -import { pathToFileURL } from "url" +import os from "node:os" +import { randomUUID } from "node:crypto" +import { pathToFileURL } from "node:url" process.env.KIT_CONTEXT = "workflow" -import { - configEnv, - resolveToScriptPath, - kitPath, -} from "../core/utils.js" +import { configEnv, resolveToScriptPath, kitPath } from "../core/utils.js" let kitImport = async (...pathParts: string[]) => - await import( - pathToFileURL(kitPath(...pathParts)).href + - "?uuid=" + - randomUUID() - ) + await import( + pathToFileURL(kitPath(...pathParts)).href + "?uuid=" + randomUUID() + ) await kitImport("api", "global.js") await kitImport("api", "kit.js") @@ -35,7 +29,5 @@ await kitImport("target", "terminal.js") global.core = await npm("@actions/core") global.github = await npm("@actions/github") -let scriptPath = resolveToScriptPath( - await arg("Path to script") -) +let scriptPath = resolveToScriptPath(await arg("Path to script")) await run(scriptPath)