const fs = require('fs')
const { execSync } = require('child_process')
const PATCH_ROOT = '/app/patch-test'
execSync(`mkdir ${PATCH_ROOT}`)
fs.writeFileSync('1.mjs', `// ES Module
import csv from 'csv'
const csvParse = (data, options) => new Promise((resolve, reject) => {
csv.parse(data, options, (err, output) => err ? reject(err) : resolve(output))
})
// Usage:
async function main () {
const csvText = "name,email \\n Elon,em@x.com"
const result = await csvParse(csvText, { columns: true })
console.log(result)
console.log(process.argv[1] + '\\n')
}
main()
`)
fs.writeFileSync('2.cjs', `// CommonJS
const parse = require('csv-parse/lib/sync')
// Usage:
function main () {
const csvText = "name,email \\n Elon,em@x.com"
const result = parse(csvText, { columns: true })
console.log(result)
console.log(process.argv[1] + '\\n')
}
main()
`)
fs.writeFileSync('3.mjs', `// ES Module
import parse from 'csv-parse/lib/sync.js'
// Usage:
async function main () {
const csvText = "name,email \\n Elon,em@x.com"
const result = parse(csvText, { columns: true })
console.log(result)
console.log(process.argv[1] + '\\n')
}
main()
`)
fs.writeFileSync(PATCH_ROOT + '/4.mjs', `// ES Module with patch
import { parse } from 'patched/sync'
// Usage:
async function main () {
const csvText = "name,email \\n Elon,em@x.com"
const result = parse(csvText, { columns: true })
console.log(result)
console.log(process.argv[1] + '\\n')
}
main()
`)
fs.writeFileSync(PATCH_ROOT + '/5.cjs', `// CommonJS
const { parse } = require('patched/sync')
// Usage:
function main () {
const csvText = "name,email \\n Elon,em@x.com"
const result = parse(csvText, { columns: true })
console.log(result)
console.log(process.argv[1] + '\\n')
}
main()
`)
// <INSTALL-PATCHED-VERSION>
execSync(`cd ${PATCH_ROOT}
npm init --force --yes &&
npm install lodash &&
cd node_modules &&
git clone https://github.com/rayfoss/node-csv patched
cd patched
sed -i -e 's/ "name": .*/ "name": "patched",/' package.json
npm install
cd ${PATCH_ROOT}
`, { encoding: 'utf-8' })
// </INSTALL-PATCHED-VERSION>
// <ESM-POLYFILL>
const _ = require('lodash') // Side effect only
const MODULES_PATH = (require.resolve('lodash')).replace(/\/lodash\/lodash\.js$/, '')
execSync('ln -s '+MODULES_PATH+' node_modules')
const rawStdout = execSync(
'find -name \'*.?js\' -maxdepth 2 -print0 | sort -z | xargs -0 -L1 node', { encoding: 'utf-8' }
)
console.log(rawStdout)
// </ESM-POLYFILL>