#!/usr/bin/env node

const { readFileSync, writeFileSync } = require('fs-extra')
const { resolve } = require('path')
const { spawnSync } = require('child_process')

// paths
const packagePath = resolve(__dirname, '..', 'package.json')

// Read original contents of package.json
const originalPackage = readFileSync(packagePath, 'utf-8')

// Write to backup file
// writeFileSync(packagePath + '.backup', originalPackage)

// Parse package.json
const p = JSON.parse(originalPackage)

// Change package name
p.name = 'nuxt-edge'

// Get latest git commit id
const gitCommit = String(
  spawnSync('git', 'rev-parse --short HEAD'.split(' ')).stdout
).trim()

// Version with latest git commit id
// Using date.now() so latest push will be always choosen by npm/yarn
const date = Math.round(Date.now() / (1000 * 60))
const baseVersion = p.version.split('-')[0]
p.version = `${baseVersion}-${date}.${gitCommit}`

// Write package.json
writeFileSync(packagePath, JSON.stringify(p, null, 2) + '\r\n')

// Parse git branch to decide npm tag
let tag = String(
  spawnSync('git', 'rev-parse --abbrev-ref HEAD'.split(' ')).stdout
).trim()

// dev ~> latest
if (tag === 'dev') {
  tag = 'latest'
}

// Log
// eslint-disable-next-line no-console
console.log(`publishing ${p.name}@${p.version} with tag ${tag}`)

// Do publish
// eslint-disable-next-line no-console
console.log(
  String(spawnSync('npm', `publish --tag ${tag}`.split(' ')).stdout).trim()
)