UNPKG

gypkg

Version:

GYP based package manager

87 lines (74 loc) 2.04 kB
'use strict'; /* eslint-disable no-console */ const fs = require('fs'); const path = require('path'); const read = require('read'); const async = require('async'); function formatName(name) { return name.replace(/[^a-z0-9_\-.]+/i, '-'); } module.exports = function init(out) { const cwd = out === undefined ? process.cwd() : path.dirname(path.resolve(out)); async.waterfall([ (callback) => { read({ prompt: 'name', default: path.basename(cwd) }, (err, name) => callback(err, name)); }, (name, callback) => { const file = out === undefined ? formatName(name) + '.gyp': out; read({ prompt: 'output file', default: file }, (err, file) => callback(err, name, file)); }, (name, file, callback) => { fs.exists(file, (exists) => callback(null, file, name, exists)); }, (file, name, exists, callback) => { if (exists) { return callback( new Error(`GYP file "${file}" already exists, can't proceed`)); } create(file, { name: name }, (err) => callback(err, file)); }, (file, callback) => { console.log(`Created ${path.relative('.', file)}`); callback(null); } ], (err) => { if (err) throw err; }); }; function create(file, options, callback) { fs.writeFile(file, `{ "variables": { "gypkg_deps": [ # Place for \`gypkg\` dependencies ], }, "targets": [ { "target_name": ${JSON.stringify(options.name)}, "type": "<!(gypkg type)", "dependencies": [ "<!@(gypkg deps <(gypkg_deps))", # Place for local dependencies ], "direct_dependent_settings": { "include_dirs": [ # Place for public includes "include", ], }, "include_dirs": [ # Place for private includes ".", ], "sources": [ # Place for source files ], } ], } `.replace(/^ {2}/gm, ''), callback); }