create-expo-cljs-app
Version:
Create a react native application with Expo and Shadow-CLJS!
166 lines (146 loc) • 4.41 kB
JavaScript
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
;
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
function _asyncToGenerator(fn) {
return function() {
var self = this,
args = arguments;
return new Promise(function(resolve, reject) {
var gen = fn.apply(self, args);
function _next(value) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
}
function _throw(err) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
}
_next(undefined);
});
};
}
const Server = require("../Server");
const denodeify = require("denodeify");
const fs = require("fs");
const path = require("path");
const _require = require("../cli-utils"),
makeAsyncCommand = _require.makeAsyncCommand;
const _require2 = require("metro-config"),
loadConfig = _require2.loadConfig;
function dependencies(_x, _x2) {
return _dependencies.apply(this, arguments);
}
function _dependencies() {
_dependencies = _asyncToGenerator(function*(args, config) {
const rootModuleAbsolutePath = args.entryFile;
if (!fs.existsSync(rootModuleAbsolutePath)) {
return Promise.reject(
new Error(`File ${rootModuleAbsolutePath} does not exist`)
);
}
config.cacheStores = [];
const relativePath = path.relative(
config.projectRoot,
rootModuleAbsolutePath
);
const options = {
platform: args.platform,
entryFile: relativePath,
dev: args.dev,
minify: false,
generateSourceMaps: !args.dev
};
const writeToFile = args.output;
const outStream = writeToFile
? fs.createWriteStream(args.output)
: process.stdout;
const server = new Server(config);
const deps = yield server.getOrderedDependencyPaths(options);
deps.forEach(modulePath => {
// Temporary hack to disable listing dependencies not under this directory.
// Long term, we need either
// (a) JS code to not depend on anything outside this directory, or
// (b) Come up with a way to declare this dependency in Buck.
const isInsideProjectRoots =
config.watchFolders.filter(root => modulePath.startsWith(root)).length >
0;
if (isInsideProjectRoots) {
outStream.write(modulePath + "\n");
}
});
server.end();
return writeToFile
? denodeify(outStream.end).bind(outStream)()
: Promise.resolve();
});
return _dependencies.apply(this, arguments);
}
module.exports = () => ({
command: "get-dependencies",
description: "List dependencies",
builder: yargs => {
yargs.option("entry-file", {
type: "string",
demandOption: true,
describe: "Absolute path to the root JS file"
});
yargs.option("output", {
type: "string",
describe: "File name where to store the output, ex. /tmp/dependencies.txt"
});
yargs.option("platform", {
type: "string",
describe: "The platform extension used for selecting modules"
});
yargs.option("transformer", {
type: "string",
describe: "Specify a custom transformer to be used"
});
yargs.option("max-workers", {
type: "number",
describe:
"Specifies the maximum number of workers the worker-pool " +
"will spawn for transforming files. This defaults to the number of the " +
"cores available on your machine."
});
yargs.option("dev", {
type: "boolean",
default: true,
describe: "If false, skip all dev-only code path"
});
yargs.option("verbose", {
type: "boolean",
default: false,
description: "Enables logging"
});
},
handler: makeAsyncCommand(
/*#__PURE__*/ (function() {
var _ref = _asyncToGenerator(function*(argv) {
const config = yield loadConfig(argv);
yield dependencies(argv, config);
});
return function(_x3) {
return _ref.apply(this, arguments);
};
})()
)
});