2020-03-29 18:21:53 +02:00
|
|
|
import findUp from 'next/dist/compiled/find-up'
|
2019-08-29 18:43:06 +02:00
|
|
|
|
2019-09-05 02:31:35 +02:00
|
|
|
const EVENT_PLUGIN_PRESENT = 'NEXT_PACKAGE_DETECTED'
|
2019-11-07 04:14:32 +01:00
|
|
|
type NextPluginsEvent = {
|
|
|
|
eventName: string
|
|
|
|
payload: {
|
|
|
|
packageName: string
|
|
|
|
packageVersion: string
|
|
|
|
}
|
2019-08-29 18:43:06 +02:00
|
|
|
}
|
|
|
|
|
2019-10-10 19:18:07 +02:00
|
|
|
export async function eventNextPlugins(
|
|
|
|
dir: string
|
2019-11-07 04:14:32 +01:00
|
|
|
): Promise<Array<NextPluginsEvent>> {
|
2019-08-29 18:43:06 +02:00
|
|
|
try {
|
|
|
|
const packageJsonPath = await findUp('package.json', { cwd: dir })
|
|
|
|
if (!packageJsonPath) {
|
2019-10-10 19:18:07 +02:00
|
|
|
return []
|
2019-08-29 18:43:06 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
const { dependencies = {}, devDependencies = {} } = require(packageJsonPath)
|
2019-11-07 04:14:32 +01:00
|
|
|
|
|
|
|
const deps = { ...devDependencies, ...dependencies }
|
|
|
|
|
|
|
|
return Object.keys(deps).reduce(
|
|
|
|
(events: NextPluginsEvent[], plugin: string): NextPluginsEvent[] => {
|
|
|
|
const version = deps[plugin]
|
|
|
|
// Don't add deps without a version set
|
|
|
|
if (!version) {
|
|
|
|
return events
|
2019-10-10 19:18:07 +02:00
|
|
|
}
|
2019-11-07 04:14:32 +01:00
|
|
|
|
|
|
|
events.push({
|
|
|
|
eventName: EVENT_PLUGIN_PRESENT,
|
|
|
|
payload: {
|
|
|
|
packageName: plugin,
|
|
|
|
packageVersion: version,
|
|
|
|
},
|
|
|
|
})
|
|
|
|
|
|
|
|
return events
|
|
|
|
},
|
|
|
|
[]
|
|
|
|
)
|
2019-10-10 19:18:07 +02:00
|
|
|
} catch (_) {
|
|
|
|
return []
|
|
|
|
}
|
2019-08-29 18:43:06 +02:00
|
|
|
}
|