one
Version:
One is a new React Framework that makes Vite serve both native and web.
281 lines (279 loc) • 7.01 kB
JavaScript
import { readFileSync } from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
import { defineCommand, runMain, showUsage } from "citty";
import colors from "picocolors";
function getPackageVersion() {
let dirname;
typeof __dirname < "u" ? dirname = __dirname : dirname = path.dirname(fileURLToPath(import.meta.url));
const packagePath = path.join(dirname, "..", "..", "package.json");
return JSON.parse(readFileSync(packagePath, "utf-8")).version;
}
const version = getPackageVersion(), DOCS_BASE = "https://onestack.dev/docs", docsLinks = {
dev: `${DOCS_BASE}/one-dev`,
build: `${DOCS_BASE}/one-build`,
serve: `${DOCS_BASE}/one-serve`,
prebuild: `${DOCS_BASE}/guides-ios-native`,
"run:ios": `${DOCS_BASE}/guides-ios-native`,
"run:android": `${DOCS_BASE}/guides-ios-native`,
clean: `${DOCS_BASE}/configuration`,
patch: `${DOCS_BASE}/configuration`,
"generate-routes": `${DOCS_BASE}/routing-typed-routes`
};
function withDocsLink(description, command) {
return `${description}
Docs: ${docsLinks[command]}`;
}
path.sep !== "/" && console.warn(
colors.bgYellow("WARNING: UNSUPPORTED OS") + colors.yellow(
" - It appears you\u2019re using Windows, which is currently not supported. You may experience unexpected issues."
)
);
const modes = {
development: "development",
production: "production"
}, dev = defineCommand({
meta: {
name: "dev",
version,
description: withDocsLink("Start the dev server", "dev")
},
args: {
clean: {
type: "boolean"
},
host: {
type: "string"
},
port: {
type: "string"
},
https: {
type: "boolean"
},
mode: {
type: "string",
description: 'If set to "production" you can run the development server but serve the production bundle'
},
"debug-bundle": {
type: "string",
description: "Will output the bundle to a temp file and then serve it from there afterwards allowing you to easily edit the bundle to debug problems."
},
debug: {
type: "string",
description: "Pass debug args to Vite"
}
},
async run({ args }) {
const { dev: dev2 } = await import("./cli/dev");
await dev2({
...args,
debugBundle: args["debug-bundle"],
mode: modes[args.mode]
});
}
}), buildCommand = defineCommand({
meta: {
name: "build",
version,
description: withDocsLink("Build your app", "build")
},
args: {
step: {
type: "string",
required: !1
},
// limit the pages built
only: {
type: "string",
required: !1
},
platform: {
type: "string",
description: "One of: web, ios, android",
default: "web",
required: !1
}
},
async run({ args }) {
const { build } = await import("./cli/build"), platforms = {
ios: "ios",
web: "web",
android: "android"
};
if (args.platform && !platforms[args.platform])
throw new Error(`Invalid platform: ${args.platform}`);
const platform = platforms[args.platform] || "web";
await build({
only: args.only,
platform,
step: args.step
}), process.exit(0);
}
}), serveCommand = defineCommand({
meta: {
name: "serve",
version,
description: withDocsLink("Serve a built app for production", "serve")
},
args: {
host: {
type: "string"
},
port: {
type: "string"
},
compress: {
type: "boolean"
},
loadEnv: {
type: "boolean"
}
},
async run({ args }) {
const { serve } = await import("./serve");
await serve({
port: args.port ? +args.port : void 0,
host: args.host,
compress: args.compress,
loadEnv: !!args.loadEnv
});
}
}), prebuild = defineCommand({
meta: {
name: "prebuild",
version,
description: withDocsLink("Prebuild native project", "prebuild")
},
args: {
platform: {
type: "string",
description: "ios or android"
},
expo: {
type: "boolean",
description: "expo or non-expo folders",
default: !0
},
"no-install": {
type: "boolean",
description: "skip installing native dependencies",
default: !1
}
},
async run({ args }) {
args.install === !1 && (args["no-install"] = !0);
const { run } = await import("./cli/prebuild");
await run(args);
}
}), runIos = defineCommand({
meta: {
name: "run:ios",
version,
description: withDocsLink("Run the iOS app", "run:ios")
},
args: {},
async run({ args }) {
const { run } = await import("./cli/runIos");
await run(args);
}
}), runAndroid = defineCommand({
meta: {
name: "run:android",
version,
description: withDocsLink("Run the Android app", "run:android")
},
args: {},
async run({ args }) {
const { run } = await import("./cli/runAndroid");
await run(args);
}
}), clean = defineCommand({
meta: {
name: "clean",
version: "0.0.0",
description: withDocsLink("Clean build folders", "clean")
},
args: {},
async run() {
const { clean: vxrnClean } = await import("vxrn");
await vxrnClean({
root: process.cwd()
});
}
}), patch = defineCommand({
meta: {
name: "patch",
version: "0.0.0",
description: withDocsLink("Apply package patches", "patch")
},
args: {},
async run({ args }) {
const { run } = await import("./cli/patch");
await run(args);
}
}), generateRoutes = defineCommand({
meta: {
name: "generate-routes",
version,
description: withDocsLink("Generate route type definitions", "generate-routes")
},
args: {
appDir: {
type: "string",
description: 'Path to app directory (default: "app")'
},
typed: {
type: "string",
description: 'Auto-generate route helpers. Options: "type" (type-only helpers) or "runtime" (runtime helpers)'
}
},
async run({ args }) {
const { run } = await import("./cli/generateRoutes");
await run(args);
}
}), subCommands = {
dev,
clean,
build: buildCommand,
prebuild,
"run:ios": runIos,
"run:android": runAndroid,
patch,
serve: serveCommand,
"generate-routes": generateRoutes
}, subMain = defineCommand({
meta: {
name: "main",
version,
description: "Welcome to One"
},
subCommands
}), main = defineCommand({
meta: {
name: "main",
version,
description: "Welcome to One"
},
args: {
name: {
type: "positional",
description: "Folder name to place the app into",
required: !1
}
},
async run({ args }) {
if (subCommands[args.name]) {
runMain(subMain);
return;
}
const { cliMain } = await import("./cli/main");
await cliMain(args);
}
}), helpIndex = process.argv.indexOf("--help");
if (helpIndex > 0) {
const subCommandName = process.argv[helpIndex - 1], subCommand = subCommands[subCommandName];
subCommand && showUsage(subCommand);
} else
runMain(main);
//# sourceMappingURL=cli.js.map