@onexapis/cli 1.1.7 → 1.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -45
- package/dist/cli.js +148 -3
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +148 -3
- package/dist/cli.mjs.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +11 -10
package/dist/cli.mjs
CHANGED
|
@@ -716,7 +716,8 @@ export function headers() { return new Headers(); }
|
|
|
716
716
|
};
|
|
717
717
|
return {
|
|
718
718
|
contents: stubs[args.path] || "export default {};",
|
|
719
|
-
loader: "jsx"
|
|
719
|
+
loader: "jsx",
|
|
720
|
+
resolveDir: themePath
|
|
720
721
|
};
|
|
721
722
|
});
|
|
722
723
|
}
|
|
@@ -3395,8 +3396,8 @@ function runInstall(cwd) {
|
|
|
3395
3396
|
});
|
|
3396
3397
|
}
|
|
3397
3398
|
async function promptThemeName(originalName) {
|
|
3398
|
-
const { default:
|
|
3399
|
-
const { themeName } = await
|
|
3399
|
+
const { default: inquirer6 } = await import('inquirer');
|
|
3400
|
+
const { themeName } = await inquirer6.prompt([
|
|
3400
3401
|
{
|
|
3401
3402
|
type: "input",
|
|
3402
3403
|
name: "themeName",
|
|
@@ -3838,6 +3839,149 @@ async function devCommand(options) {
|
|
|
3838
3839
|
});
|
|
3839
3840
|
}
|
|
3840
3841
|
|
|
3842
|
+
// src/commands/config.ts
|
|
3843
|
+
init_logger();
|
|
3844
|
+
var CONFIG_DIR = path8.join(os.homedir(), ".onex");
|
|
3845
|
+
var CONFIG_FILE = path8.join(CONFIG_DIR, ".env");
|
|
3846
|
+
var CONFIG_ENTRIES = [
|
|
3847
|
+
{
|
|
3848
|
+
key: "AWS_ACCESS_KEY_ID",
|
|
3849
|
+
label: "AWS Access Key ID",
|
|
3850
|
+
required: true
|
|
3851
|
+
},
|
|
3852
|
+
{
|
|
3853
|
+
key: "AWS_SECRET_ACCESS_KEY",
|
|
3854
|
+
label: "AWS Secret Access Key",
|
|
3855
|
+
required: true,
|
|
3856
|
+
secret: true
|
|
3857
|
+
},
|
|
3858
|
+
{
|
|
3859
|
+
key: "AWS_REGION",
|
|
3860
|
+
label: "AWS Region",
|
|
3861
|
+
required: false,
|
|
3862
|
+
defaultValue: "ap-southeast-1"
|
|
3863
|
+
},
|
|
3864
|
+
{
|
|
3865
|
+
key: "BUCKET_NAME",
|
|
3866
|
+
label: "S3 Bucket Name",
|
|
3867
|
+
required: false,
|
|
3868
|
+
defaultValue: "theme-s3-bucket"
|
|
3869
|
+
},
|
|
3870
|
+
{
|
|
3871
|
+
key: "NEXT_PUBLIC_API_URL",
|
|
3872
|
+
label: "API URL",
|
|
3873
|
+
required: false,
|
|
3874
|
+
defaultValue: "https://api-dev.onexeos.com"
|
|
3875
|
+
},
|
|
3876
|
+
{
|
|
3877
|
+
key: "NEXT_PUBLIC_COMPANY_ID",
|
|
3878
|
+
label: "Company ID",
|
|
3879
|
+
required: false
|
|
3880
|
+
}
|
|
3881
|
+
];
|
|
3882
|
+
function parseEnvFile(content) {
|
|
3883
|
+
const result = {};
|
|
3884
|
+
for (const line of content.split("\n")) {
|
|
3885
|
+
const trimmed = line.trim();
|
|
3886
|
+
if (!trimmed || trimmed.startsWith("#")) continue;
|
|
3887
|
+
const eqIndex = trimmed.indexOf("=");
|
|
3888
|
+
if (eqIndex === -1) continue;
|
|
3889
|
+
const key = trimmed.slice(0, eqIndex).trim();
|
|
3890
|
+
const value = trimmed.slice(eqIndex + 1).trim();
|
|
3891
|
+
result[key] = value;
|
|
3892
|
+
}
|
|
3893
|
+
return result;
|
|
3894
|
+
}
|
|
3895
|
+
function serializeEnv(values) {
|
|
3896
|
+
const lines = [
|
|
3897
|
+
"# OneX CLI Configuration",
|
|
3898
|
+
"# Generated by: onex config",
|
|
3899
|
+
""
|
|
3900
|
+
];
|
|
3901
|
+
lines.push("# AWS / S3 Configuration");
|
|
3902
|
+
for (const key of [
|
|
3903
|
+
"AWS_ACCESS_KEY_ID",
|
|
3904
|
+
"AWS_SECRET_ACCESS_KEY",
|
|
3905
|
+
"AWS_REGION",
|
|
3906
|
+
"BUCKET_NAME"
|
|
3907
|
+
]) {
|
|
3908
|
+
if (values[key]) lines.push(`${key}=${values[key]}`);
|
|
3909
|
+
}
|
|
3910
|
+
lines.push("");
|
|
3911
|
+
lines.push("# API Configuration");
|
|
3912
|
+
for (const key of ["NEXT_PUBLIC_API_URL", "NEXT_PUBLIC_COMPANY_ID"]) {
|
|
3913
|
+
if (values[key]) lines.push(`${key}=${values[key]}`);
|
|
3914
|
+
}
|
|
3915
|
+
const knownKeys = new Set(CONFIG_ENTRIES.map((e) => e.key));
|
|
3916
|
+
const extraKeys = Object.keys(values).filter((k) => !knownKeys.has(k));
|
|
3917
|
+
if (extraKeys.length > 0) {
|
|
3918
|
+
lines.push("");
|
|
3919
|
+
lines.push("# Other");
|
|
3920
|
+
for (const key of extraKeys) {
|
|
3921
|
+
lines.push(`${key}=${values[key]}`);
|
|
3922
|
+
}
|
|
3923
|
+
}
|
|
3924
|
+
lines.push("");
|
|
3925
|
+
return lines.join("\n");
|
|
3926
|
+
}
|
|
3927
|
+
async function configCommand() {
|
|
3928
|
+
logger.header("OneX CLI Configuration");
|
|
3929
|
+
let existing = {};
|
|
3930
|
+
try {
|
|
3931
|
+
const content = await fs.readFile(CONFIG_FILE, "utf-8");
|
|
3932
|
+
existing = parseEnvFile(content);
|
|
3933
|
+
logger.info(`Existing config found at: ${CONFIG_FILE}`);
|
|
3934
|
+
logger.newLine();
|
|
3935
|
+
} catch {
|
|
3936
|
+
logger.info("No existing config found. Let's set one up.");
|
|
3937
|
+
logger.newLine();
|
|
3938
|
+
}
|
|
3939
|
+
const answers = {};
|
|
3940
|
+
for (const entry of CONFIG_ENTRIES) {
|
|
3941
|
+
const currentValue = existing[entry.key] || "";
|
|
3942
|
+
const defaultVal = currentValue || entry.defaultValue || "";
|
|
3943
|
+
const displayDefault = entry.secret && currentValue ? currentValue.slice(0, 4) + "****" + currentValue.slice(-4) : defaultVal;
|
|
3944
|
+
const { value } = await inquirer.prompt([
|
|
3945
|
+
{
|
|
3946
|
+
type: entry.secret ? "password" : "input",
|
|
3947
|
+
name: "value",
|
|
3948
|
+
message: `${entry.label}${entry.required ? " (required)" : ""}:`,
|
|
3949
|
+
default: entry.secret ? void 0 : defaultVal,
|
|
3950
|
+
...entry.secret && currentValue ? {
|
|
3951
|
+
suffix: ` (current: ${displayDefault}, press Enter to keep)`
|
|
3952
|
+
} : {},
|
|
3953
|
+
validate: (input) => {
|
|
3954
|
+
if (entry.required && !input && !currentValue) {
|
|
3955
|
+
return `${entry.label} is required`;
|
|
3956
|
+
}
|
|
3957
|
+
return true;
|
|
3958
|
+
}
|
|
3959
|
+
}
|
|
3960
|
+
]);
|
|
3961
|
+
answers[entry.key] = value || currentValue;
|
|
3962
|
+
}
|
|
3963
|
+
const merged = { ...existing, ...answers };
|
|
3964
|
+
for (const key of Object.keys(merged)) {
|
|
3965
|
+
if (!merged[key]) delete merged[key];
|
|
3966
|
+
}
|
|
3967
|
+
await fs.ensureDir(CONFIG_DIR);
|
|
3968
|
+
await fs.writeFile(CONFIG_FILE, serializeEnv(merged));
|
|
3969
|
+
logger.newLine();
|
|
3970
|
+
logger.success(`Config saved to: ${CONFIG_FILE}`);
|
|
3971
|
+
logger.newLine();
|
|
3972
|
+
logger.section("Configured values:");
|
|
3973
|
+
for (const entry of CONFIG_ENTRIES) {
|
|
3974
|
+
const val = merged[entry.key];
|
|
3975
|
+
if (!val) continue;
|
|
3976
|
+
const display = entry.secret ? val.slice(0, 4) + "****" + val.slice(-4) : val;
|
|
3977
|
+
logger.log(` ${entry.label}: ${display}`);
|
|
3978
|
+
}
|
|
3979
|
+
logger.newLine();
|
|
3980
|
+
logger.info(
|
|
3981
|
+
"These credentials are stored globally and used by clone, upload, and download commands."
|
|
3982
|
+
);
|
|
3983
|
+
}
|
|
3984
|
+
|
|
3841
3985
|
// src/cli.ts
|
|
3842
3986
|
try {
|
|
3843
3987
|
const projectRoot = getProjectRoot();
|
|
@@ -3905,6 +4049,7 @@ program.command("clone").description("Clone theme source code from S3").argument
|
|
|
3905
4049
|
"Environment (staging|production)",
|
|
3906
4050
|
"staging"
|
|
3907
4051
|
).option("--no-install", "Skip running pnpm install after clone").action(cloneCommand);
|
|
4052
|
+
program.command("config").description("Configure OneX CLI credentials (AWS, API keys)").action(configCommand);
|
|
3908
4053
|
program.configureOutput({
|
|
3909
4054
|
writeErr: (str) => process.stderr.write(chalk4.red(str))
|
|
3910
4055
|
});
|