#!/usr/bin/env node
import fetchContrib from 'github-contributors-list/lib/contributors.js'
import layoutStrategy from 'github-contributors-list/lib/strategies/layout_strategies/json.js'
import sortStrategy from 'github-contributors-list/lib/strategies/sort_strategies/sort_desc.js'
import filterStrategy from 'github-contributors-list/lib/strategies/filter_strategies/login.js'
import { Buffer } from 'node:buffer'
import fs from 'node:fs/promises'
import process from 'node:process'
const README_FILE_NAME = new URL('../README.md', import.meta.url)
const readme = await fs.open(README_FILE_NAME, 'r+')
const readmeContent = await readme.readFile()
// Detect start of contributors section.
const START_TAG = Buffer.from('
\n')
const START_TAG_POSITION =
readmeContent.indexOf(START_TAG) + START_TAG.byteLength
const args = {
owner: 'transloadit',
repository: 'uppy',
cols: 6,
format: 'json',
sortBy: 'contributions',
sortOrder: 'desc',
filter: [],
layoutStrategy,
sortStrategy,
filterStrategy,
}
const { contributors } = await fetchContrib(args).loadAll(
args.owner,
args.repository,
args.authToken || process.env.GITHUB_API_TOKEN,
args.fromDate,
)
let cursor = START_TAG_POSITION
for (const line of contributors) {
let row = ''
for (const { html_url, login, avatar_url } of line) {
row += `}) | `
}
row += '
\n'
const { bytesWritten } = await readme.write(row, cursor, 'utf-8')
cursor += bytesWritten
}
if (cursor === START_TAG_POSITION) {
console.log('Empty response from githubcontrib. GitHub’s rate limit?')
await readme.close()
process.exit(1)
}
await readme.truncate(cursor)
// Write the end of the file.
await readme.write(
readmeContent,
readmeContent.indexOf(''),
undefined,
cursor,
)
await readme.close()