mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-12 00:32:18 -05:00
143 lines
3.4 KiB
JavaScript
143 lines
3.4 KiB
JavaScript
|
// Creates data for localizedPlanPricing object in settings.overrides.saas.js
|
||
|
// and plans object in main/plans.js
|
||
|
|
||
|
const xlsx = require('xlsx')
|
||
|
const fs = require('fs')
|
||
|
const path = require('path')
|
||
|
const [fileName, sheetName] = process.argv.slice(2)
|
||
|
|
||
|
// Pick the xlsx file
|
||
|
const filePath = path.resolve(__dirname, fileName)
|
||
|
const file = xlsx.readFile(filePath)
|
||
|
|
||
|
if (!file.SheetNames.includes(sheetName)) {
|
||
|
throw new Error('Sheet not found!')
|
||
|
}
|
||
|
|
||
|
const workSheet = Object.values(file.Sheets)[file.SheetNames.indexOf(sheetName)]
|
||
|
// Convert to JSON
|
||
|
const workSheetJSON = xlsx.utils.sheet_to_json(workSheet)
|
||
|
|
||
|
// Mapping of [output_keys]:[actual_keys]
|
||
|
const plansMap = {
|
||
|
student: 'student',
|
||
|
personal: 'paid-personal',
|
||
|
collaborator: 'collaborator',
|
||
|
professional: 'professional',
|
||
|
}
|
||
|
|
||
|
const currencies = {
|
||
|
USD: {
|
||
|
symbol: '$',
|
||
|
placement: 'before',
|
||
|
},
|
||
|
EUR: {
|
||
|
symbol: '€',
|
||
|
placement: 'before',
|
||
|
},
|
||
|
GBP: {
|
||
|
symbol: '£',
|
||
|
placement: 'before',
|
||
|
},
|
||
|
SEK: {
|
||
|
symbol: ' kr',
|
||
|
placement: 'after',
|
||
|
},
|
||
|
CAD: {
|
||
|
symbol: '$',
|
||
|
placement: 'before',
|
||
|
},
|
||
|
NOK: {
|
||
|
symbol: ' kr',
|
||
|
placement: 'after',
|
||
|
},
|
||
|
DKK: {
|
||
|
symbol: ' kr',
|
||
|
placement: 'after',
|
||
|
},
|
||
|
AUD: {
|
||
|
symbol: '$',
|
||
|
placement: 'before',
|
||
|
},
|
||
|
NZD: {
|
||
|
symbol: '$',
|
||
|
placement: 'before',
|
||
|
},
|
||
|
CHF: {
|
||
|
symbol: 'Fr ',
|
||
|
placement: 'before',
|
||
|
},
|
||
|
SGD: {
|
||
|
symbol: '$',
|
||
|
placement: 'before',
|
||
|
},
|
||
|
}
|
||
|
|
||
|
const buildCurrencyValue = (amount, currency) => {
|
||
|
return currency.placement === 'before'
|
||
|
? `${currency.symbol}${amount}`
|
||
|
: `${amount}${currency.symbol}`
|
||
|
}
|
||
|
|
||
|
// localizedPlanPricing object for settings.overrides.saas.js
|
||
|
let localizedPlanPricing = {}
|
||
|
// plans object for main/plans.js
|
||
|
let plans = {}
|
||
|
|
||
|
for (const [currency, currencyDetails] of Object.entries(currencies)) {
|
||
|
localizedPlanPricing[currency] = {
|
||
|
symbol: currencyDetails.symbol.trim(),
|
||
|
free: {
|
||
|
monthly: buildCurrencyValue(0, currencyDetails),
|
||
|
annual: buildCurrencyValue(0, currencyDetails),
|
||
|
},
|
||
|
}
|
||
|
plans[currency] = {
|
||
|
symbol: currencyDetails.symbol.trim(),
|
||
|
}
|
||
|
|
||
|
for (const [outputKey, actualKey] of Object.entries(plansMap)) {
|
||
|
const monthlyPlan = workSheetJSON.find(data => data.plan_code === actualKey)
|
||
|
|
||
|
if (!monthlyPlan) throw new Error(`Missing plan: ${actualKey}`)
|
||
|
|
||
|
const actualKeyAnnual = `${actualKey}-annual`
|
||
|
const annualPlan = workSheetJSON.find(
|
||
|
data => data.plan_code === actualKeyAnnual
|
||
|
)
|
||
|
|
||
|
if (!annualPlan) throw new Error(`Missing plan: ${actualKeyAnnual}`)
|
||
|
|
||
|
const monthly = buildCurrencyValue(monthlyPlan[currency], currencyDetails)
|
||
|
const monthlyTimesTwelve = buildCurrencyValue(
|
||
|
monthlyPlan[currency] * 12,
|
||
|
currencyDetails
|
||
|
)
|
||
|
const annual = buildCurrencyValue(annualPlan[currency], currencyDetails)
|
||
|
|
||
|
localizedPlanPricing[currency] = {
|
||
|
...localizedPlanPricing[currency],
|
||
|
[outputKey]: { monthly, monthlyTimesTwelve, annual },
|
||
|
}
|
||
|
plans[currency] = {
|
||
|
...plans[currency],
|
||
|
[outputKey]: { monthly, annual },
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// removes quotes from object keys
|
||
|
const format = obj => JSON.stringify(obj, null, 2).replace(/"([^"]+)":/g, '$1:')
|
||
|
const dir = './output'
|
||
|
|
||
|
localizedPlanPricing = format(localizedPlanPricing)
|
||
|
plans = format(plans)
|
||
|
|
||
|
if (!fs.existsSync(dir)) {
|
||
|
fs.mkdirSync(dir)
|
||
|
}
|
||
|
fs.writeFileSync(`${dir}/localizedPlanPricing.json`, localizedPlanPricing)
|
||
|
fs.writeFileSync(`${dir}/plans.json`, plans)
|
||
|
|
||
|
console.log('Completed!')
|