@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/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: inquirer5 } = await import('inquirer');
3399
- const { themeName } = await inquirer5.prompt([
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
  });