@apps-in-toss/cli 0.0.0-dev.1743134070910 → 0.0.0-dev.1744801739343

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.
Files changed (3) hide show
  1. package/dist/index.cjs +146 -69
  2. package/dist/index.js +147 -70
  3. package/package.json +2 -2
package/dist/index.cjs CHANGED
@@ -2367,6 +2367,12 @@ var WEB_FRAMEWORK_CONFIG_TEMPLATE = `import { defineConfig } from '@apps-in-toss
2367
2367
 
2368
2368
  export default defineConfig({
2369
2369
  appName: '%%appName%%',
2370
+ brand: {
2371
+ displayName: '%%appName%%', // \uD654\uBA74\uC5D0 \uB178\uCD9C\uB420 \uC571\uC758 \uD55C\uAE00 \uC774\uB984\uC73C\uB85C \uBC14\uAFD4\uC8FC\uC138\uC694.
2372
+ primaryColor: '#3182F6', // \uD654\uBA74\uC5D0 \uB178\uCD9C\uB420 \uC571\uC758 \uAE30\uBCF8 \uC0C9\uC0C1\uC73C\uB85C \uBC14\uAFD4\uC8FC\uC138\uC694.
2373
+ icon: null, // \uD654\uBA74\uC5D0 \uB178\uCD9C\uB420 \uC571\uC758 \uC544\uC774\uCF58 \uC774\uBBF8\uC9C0 \uC8FC\uC18C\uB85C \uBC14\uAFD4\uC8FC\uC138\uC694.
2374
+ bridgeColorMode: 'basic',
2375
+ },
2370
2376
  web: {
2371
2377
  host: 'localhost',
2372
2378
  port: %%webPort%%,
@@ -2379,6 +2385,47 @@ export default defineConfig({
2379
2385
  outdir: 'dist',
2380
2386
  });
2381
2387
  `;
2388
+ var REACT_NATIVE_FRAMEWORK_CONFIG_TEMPLATE = `import { appsInToss } from '@apps-in-toss/framework/plugins';
2389
+ import { defineConfig } from 'react-native-bedrock/config';
2390
+
2391
+ export default defineConfig({
2392
+ appName: '%%appName%%',
2393
+ plugins: [
2394
+ appsInToss({
2395
+ brand: {
2396
+ displayName: '%%appName%%', // \uD654\uBA74\uC5D0 \uB178\uCD9C\uB420 \uC571\uC758 \uD55C\uAE00 \uC774\uB984\uC73C\uB85C \uBC14\uAFD4\uC8FC\uC138\uC694.
2397
+ primaryColor: '#3182F6', // \uD654\uBA74\uC5D0 \uB178\uCD9C\uB420 \uC571\uC758 \uAE30\uBCF8 \uC0C9\uC0C1\uC73C\uB85C \uBC14\uAFD4\uC8FC\uC138\uC694.
2398
+ icon: null, // \uD654\uBA74\uC5D0 \uB178\uCD9C\uB420 \uC571\uC758 \uC544\uC774\uCF58 \uC774\uBBF8\uC9C0 \uC8FC\uC18C\uB85C \uBC14\uAFD4\uC8FC\uC138\uC694.
2399
+ bridgeColorMode: 'basic',
2400
+ },
2401
+ permissions: [],
2402
+ }),
2403
+ ],
2404
+ });
2405
+ `;
2406
+ var APP_TEMPLATE = `import { AppsInToss } from '@apps-in-toss/framework';
2407
+ import { PropsWithChildren } from 'react';
2408
+ import { InitialProps } from 'react-native-bedrock';
2409
+ import { context } from '../require.context';
2410
+
2411
+ function AppContainer({ children }: PropsWithChildren<InitialProps>) {
2412
+ return <>{children}</>;
2413
+ }
2414
+
2415
+ export default AppsInToss.registerApp(AppContainer, { context });
2416
+ `;
2417
+
2418
+ // src/utils/ensureSelect.ts
2419
+ init_cjs_shims();
2420
+ async function ensureSelect({
2421
+ value,
2422
+ prompt
2423
+ }) {
2424
+ if (value) {
2425
+ return value;
2426
+ }
2427
+ return await prompt();
2428
+ }
2382
2429
 
2383
2430
  // src/utils/transformTemplate.ts
2384
2431
  init_cjs_shims();
@@ -2392,13 +2439,48 @@ function transformTemplate(templateString, values) {
2392
2439
  }
2393
2440
 
2394
2441
  // src/InitCommand.ts
2395
- async function templateWebFramework({
2396
- appName,
2397
- cwd,
2398
- scripts
2399
- }) {
2442
+ async function templateWebFramework({ appName, cwd, skipInput }) {
2443
+ const packageJson = await import_fs4.default.promises.readFile(import_path3.default.join(cwd, "package.json"), {
2444
+ encoding: "utf-8"
2445
+ });
2446
+ const scripts = JSON.parse(packageJson);
2447
+ const originalScripts = {
2448
+ dev: scripts?.scripts?.dev || scripts?.scripts?.start,
2449
+ build: scripts?.scripts?.build
2450
+ };
2451
+ scripts.scripts.dev = "bedrock dev";
2452
+ scripts.scripts.build = "bedrock build";
2453
+ scripts.scripts.deploy = "ait deploy";
2454
+ await import_fs4.default.promises.writeFile(import_path3.default.join(cwd, "package.json"), JSON.stringify(scripts, null, 2), {
2455
+ encoding: "utf-8"
2456
+ });
2457
+ p2.log.step(".gitignore \uD30C\uC77C\uC744 \uC5C5\uB370\uC774\uD2B8\uD558\uB294 \uC911...");
2458
+ await import_fs4.default.promises.appendFile(import_path3.default.join(cwd, ".gitignore"), "\n.bedrock\n");
2459
+ const placeholder = {
2460
+ dev: originalScripts.dev === "bedrock dev" ? "" : originalScripts.dev,
2461
+ build: originalScripts.build === "bedrock build" ? "" : originalScripts.build
2462
+ };
2463
+ const scriptInputs = skipInput ? placeholder : await p2.group(
2464
+ {
2465
+ dev: () => p2.text({
2466
+ message: "\uC6F9 \uBC88\uB4E4\uB7EC\uC758 dev \uBA85\uB839\uC5B4\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694.",
2467
+ defaultValue: placeholder.dev,
2468
+ placeholder: placeholder.dev
2469
+ }),
2470
+ build: () => p2.text({
2471
+ message: "\uC6F9 \uBC88\uB4E4\uB7EC\uC758 build \uBA85\uB839\uC5B4\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694.",
2472
+ defaultValue: placeholder.build,
2473
+ placeholder: placeholder.build
2474
+ })
2475
+ },
2476
+ {
2477
+ onCancel: () => {
2478
+ p2.cancel("\uCD08\uAE30\uD654\uAC00 \uCDE8\uC18C\uB418\uC5C8\uC2B5\uB2C8\uB2E4");
2479
+ }
2480
+ }
2481
+ );
2400
2482
  p2.log.step("bedrock.config.ts \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uB294 \uC911...");
2401
- const webPort = await p2.text({
2483
+ const webPort = skipInput ? "5173" : await p2.text({
2402
2484
  message: "Enter web port",
2403
2485
  placeholder: "5173",
2404
2486
  defaultValue: "5173"
@@ -2410,96 +2492,91 @@ async function templateWebFramework({
2410
2492
  const config = transformTemplate(WEB_FRAMEWORK_CONFIG_TEMPLATE, {
2411
2493
  appName,
2412
2494
  webPort,
2413
- webDevCommand: scripts.dev === "bedrock dev" ? "" : scripts.dev,
2414
- webBuildCommand: scripts.build === "bedrock build" ? "" : scripts.build
2495
+ webDevCommand: scriptInputs.dev === "bedrock dev" ? "" : scriptInputs.dev,
2496
+ webBuildCommand: scriptInputs.build === "bedrock build" ? "" : scriptInputs.build
2415
2497
  });
2416
2498
  await import_fs4.default.promises.writeFile(import_path3.default.join(cwd, "bedrock.config.ts"), config, {
2417
2499
  encoding: "utf-8"
2418
2500
  });
2419
2501
  }
2502
+ async function templateReactNative({ appName, cwd }) {
2503
+ p2.log.step("bedrock.config.ts \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uB294 \uC911...");
2504
+ const config = transformTemplate(REACT_NATIVE_FRAMEWORK_CONFIG_TEMPLATE, {
2505
+ appName
2506
+ });
2507
+ await import_fs4.default.promises.writeFile(import_path3.default.join(cwd, "bedrock.config.ts"), config, {
2508
+ encoding: "utf-8"
2509
+ });
2510
+ p2.log.step("src/_app.tsx \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uB294 \uC911...");
2511
+ await import_fs4.default.promises.writeFile(import_path3.default.join(cwd, "src", "_app.tsx"), APP_TEMPLATE, {
2512
+ encoding: "utf-8"
2513
+ });
2514
+ }
2420
2515
  var InitCommand = class extends import_clipanion2.Command {
2421
2516
  static paths = [[`init`]];
2517
+ template = import_clipanion2.Option.String("--template", { required: false });
2518
+ appName = import_clipanion2.Option.String("--app-name", { required: false });
2519
+ skipInput = import_clipanion2.Option.Boolean("--skip-input", { required: false, hidden: true });
2422
2520
  async execute() {
2423
- const template = await p2.select({
2424
- message: "\uD504\uB85C\uC81D\uD2B8\uB97C \uCD08\uAE30\uD654\uD560 \uD15C\uD50C\uB9BF\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694.",
2425
- options: [
2426
- {
2427
- value: "web-framework",
2428
- label: "\uC6F9 \uD504\uB808\uC784\uC6CC\uD06C",
2429
- hint: "\uC6F9 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC571\uC778\uD1A0\uC2A4 \uC6F9\uBDF0 \uAC1C\uBC1C\uD658\uACBD\uC744 \uC138\uD305\uD569\uB2C8\uB2E4."
2430
- }
2431
- ]
2521
+ const template = await ensureSelect({
2522
+ value: this.template,
2523
+ prompt: async () => p2.select({
2524
+ message: "\uD504\uB85C\uC81D\uD2B8\uB97C \uCD08\uAE30\uD654\uD560 \uD15C\uD50C\uB9BF\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694.",
2525
+ options: [
2526
+ {
2527
+ value: "web-framework",
2528
+ label: "\uC6F9 \uD504\uB808\uC784\uC6CC\uD06C",
2529
+ hint: "\uC6F9 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC571\uC778\uD1A0\uC2A4 \uC6F9\uBDF0 \uAC1C\uBC1C\uD658\uACBD\uC744 \uC138\uD305\uD569\uB2C8\uB2E4."
2530
+ },
2531
+ {
2532
+ value: "react-native",
2533
+ label: "React Native \uD504\uB808\uC784\uC6CC\uD06C (Bedrock)",
2534
+ hint: "Bedrock \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC571\uC778\uD1A0\uC2A4 React Native\uC6A9 \uAC1C\uBC1C\uD658\uACBD\uC744 \uC138\uD305\uD569\uB2C8\uB2E4."
2535
+ }
2536
+ ]
2537
+ })
2432
2538
  });
2433
2539
  if (p2.isCancel(template)) {
2434
2540
  process.exit(0);
2435
2541
  }
2436
2542
  const cwd = getPackageRoot();
2437
2543
  p2.intro("\u{1F680} \uC571 \uCD08\uAE30\uD654\uB97C \uC2DC\uC791\uD569\uB2C8\uB2E4");
2438
- const appName = await p2.text({
2439
- message: "Enter app name",
2440
- validate: (value) => {
2441
- if (!value) {
2442
- return "\uC571 \uC774\uB984\uC744 \uC785\uB825\uD574\uC8FC\uC138\uC694";
2443
- }
2444
- const kebabCaseValue = kebabCase(value);
2445
- if (value !== kebabCaseValue) {
2446
- return `\uC571 \uC774\uB984\uC740 \uCF00\uBC25-\uCF00\uC774\uC2A4 \uD615\uC2DD\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4 (\uC608\uC2DC: ${kebabCaseValue})`;
2544
+ const appName = await ensureSelect({
2545
+ value: this.appName,
2546
+ prompt: async () => p2.text({
2547
+ message: "Enter app name",
2548
+ validate: (value) => {
2549
+ if (!value) {
2550
+ return "\uC571 \uC774\uB984\uC744 \uC785\uB825\uD574\uC8FC\uC138\uC694";
2551
+ }
2552
+ const kebabCaseValue = kebabCase(value);
2553
+ if (value !== kebabCaseValue) {
2554
+ return `\uC571 \uC774\uB984\uC740 \uCF00\uBC25-\uCF00\uC774\uC2A4 \uD615\uC2DD\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4 (\uC608\uC2DC: ${kebabCaseValue})`;
2555
+ }
2556
+ return;
2447
2557
  }
2448
- return;
2449
- }
2558
+ })
2450
2559
  });
2451
2560
  if (p2.isCancel(appName)) {
2452
2561
  p2.cancel("\uCD08\uAE30\uD654\uAC00 \uCDE8\uC18C\uB418\uC5C8\uC2B5\uB2C8\uB2E4");
2453
2562
  return;
2454
2563
  }
2455
2564
  p2.log.step(`\uC571 \uC774\uB984\uC774 '${appName}'\uC73C\uB85C \uC124\uC815\uB418\uC5C8\uC2B5\uB2C8\uB2E4`);
2456
- p2.log.step("package.json \uC2A4\uD06C\uB9BD\uD2B8\uB97C \uC124\uC815\uD558\uB294 \uC911...");
2457
- const packageJson = await import_fs4.default.promises.readFile(import_path3.default.join(cwd, "package.json"), {
2458
- encoding: "utf-8"
2459
- });
2460
- const scripts = JSON.parse(packageJson);
2461
- const originalScripts = {
2462
- dev: scripts?.scripts?.dev || scripts?.scripts?.start,
2463
- build: scripts?.scripts?.build
2464
- };
2465
- scripts.scripts.dev = "bedrock dev";
2466
- scripts.scripts.build = "bedrock build";
2467
- scripts.scripts.deploy = "ait deploy";
2468
- await import_fs4.default.promises.writeFile(import_path3.default.join(cwd, "package.json"), JSON.stringify(scripts, null, 2), {
2469
- encoding: "utf-8"
2470
- });
2471
- p2.log.step(".gitignore \uD30C\uC77C\uC744 \uC5C5\uB370\uC774\uD2B8\uD558\uB294 \uC911...");
2472
- await import_fs4.default.promises.appendFile(import_path3.default.join(cwd, ".gitignore"), "\n.bedrock\n");
2473
- const placeholder = {
2474
- dev: originalScripts.dev === "bedrock dev" ? "" : originalScripts.dev,
2475
- build: originalScripts.build === "bedrock build" ? "" : originalScripts.build
2476
- };
2477
- const scriptInputs = await p2.group(
2478
- {
2479
- dev: () => p2.text({
2480
- message: "\uC6F9 \uBC88\uB4E4\uB7EC\uC758 dev \uBA85\uB839\uC5B4\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694.",
2481
- defaultValue: placeholder.dev,
2482
- placeholder: placeholder.dev
2483
- }),
2484
- build: () => p2.text({
2485
- message: "\uC6F9 \uBC88\uB4E4\uB7EC\uC758 build \uBA85\uB839\uC5B4\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694.",
2486
- defaultValue: placeholder.build,
2487
- placeholder: placeholder.build
2488
- })
2489
- },
2490
- {
2491
- onCancel: () => {
2492
- p2.cancel("\uCD08\uAE30\uD654\uAC00 \uCDE8\uC18C\uB418\uC5C8\uC2B5\uB2C8\uB2E4");
2493
- }
2494
- }
2495
- );
2496
2565
  switch (template) {
2497
2566
  case "web-framework": {
2498
2567
  await templateWebFramework({
2499
2568
  appName,
2500
2569
  cwd,
2501
- scripts: scriptInputs
2570
+ skipInput: this.skipInput ?? false
2571
+ });
2572
+ break;
2573
+ }
2574
+ case "react-native": {
2575
+ await templateReactNative({
2576
+ appName,
2577
+ cwd
2502
2578
  });
2579
+ break;
2503
2580
  }
2504
2581
  }
2505
2582
  p2.outro("\u2728 \uCD08\uAE30\uD654\uAC00 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4!");
package/dist/index.js CHANGED
@@ -2338,7 +2338,7 @@ init_esm_shims();
2338
2338
  import fs4 from "fs";
2339
2339
  import path3 from "path";
2340
2340
  import * as p2 from "@clack/prompts";
2341
- import { Command as Command2 } from "clipanion";
2341
+ import { Command as Command2, Option as Option2 } from "clipanion";
2342
2342
 
2343
2343
  // ../../.yarn/cache/es-toolkit-npm-1.32.0-019fc7c155-56ba965570.zip/node_modules/es-toolkit/dist/index.mjs
2344
2344
  init_esm_shims();
@@ -2363,6 +2363,12 @@ var WEB_FRAMEWORK_CONFIG_TEMPLATE = `import { defineConfig } from '@apps-in-toss
2363
2363
 
2364
2364
  export default defineConfig({
2365
2365
  appName: '%%appName%%',
2366
+ brand: {
2367
+ displayName: '%%appName%%', // \uD654\uBA74\uC5D0 \uB178\uCD9C\uB420 \uC571\uC758 \uD55C\uAE00 \uC774\uB984\uC73C\uB85C \uBC14\uAFD4\uC8FC\uC138\uC694.
2368
+ primaryColor: '#3182F6', // \uD654\uBA74\uC5D0 \uB178\uCD9C\uB420 \uC571\uC758 \uAE30\uBCF8 \uC0C9\uC0C1\uC73C\uB85C \uBC14\uAFD4\uC8FC\uC138\uC694.
2369
+ icon: null, // \uD654\uBA74\uC5D0 \uB178\uCD9C\uB420 \uC571\uC758 \uC544\uC774\uCF58 \uC774\uBBF8\uC9C0 \uC8FC\uC18C\uB85C \uBC14\uAFD4\uC8FC\uC138\uC694.
2370
+ bridgeColorMode: 'basic',
2371
+ },
2366
2372
  web: {
2367
2373
  host: 'localhost',
2368
2374
  port: %%webPort%%,
@@ -2375,6 +2381,47 @@ export default defineConfig({
2375
2381
  outdir: 'dist',
2376
2382
  });
2377
2383
  `;
2384
+ var REACT_NATIVE_FRAMEWORK_CONFIG_TEMPLATE = `import { appsInToss } from '@apps-in-toss/framework/plugins';
2385
+ import { defineConfig } from 'react-native-bedrock/config';
2386
+
2387
+ export default defineConfig({
2388
+ appName: '%%appName%%',
2389
+ plugins: [
2390
+ appsInToss({
2391
+ brand: {
2392
+ displayName: '%%appName%%', // \uD654\uBA74\uC5D0 \uB178\uCD9C\uB420 \uC571\uC758 \uD55C\uAE00 \uC774\uB984\uC73C\uB85C \uBC14\uAFD4\uC8FC\uC138\uC694.
2393
+ primaryColor: '#3182F6', // \uD654\uBA74\uC5D0 \uB178\uCD9C\uB420 \uC571\uC758 \uAE30\uBCF8 \uC0C9\uC0C1\uC73C\uB85C \uBC14\uAFD4\uC8FC\uC138\uC694.
2394
+ icon: null, // \uD654\uBA74\uC5D0 \uB178\uCD9C\uB420 \uC571\uC758 \uC544\uC774\uCF58 \uC774\uBBF8\uC9C0 \uC8FC\uC18C\uB85C \uBC14\uAFD4\uC8FC\uC138\uC694.
2395
+ bridgeColorMode: 'basic',
2396
+ },
2397
+ permissions: [],
2398
+ }),
2399
+ ],
2400
+ });
2401
+ `;
2402
+ var APP_TEMPLATE = `import { AppsInToss } from '@apps-in-toss/framework';
2403
+ import { PropsWithChildren } from 'react';
2404
+ import { InitialProps } from 'react-native-bedrock';
2405
+ import { context } from '../require.context';
2406
+
2407
+ function AppContainer({ children }: PropsWithChildren<InitialProps>) {
2408
+ return <>{children}</>;
2409
+ }
2410
+
2411
+ export default AppsInToss.registerApp(AppContainer, { context });
2412
+ `;
2413
+
2414
+ // src/utils/ensureSelect.ts
2415
+ init_esm_shims();
2416
+ async function ensureSelect({
2417
+ value,
2418
+ prompt
2419
+ }) {
2420
+ if (value) {
2421
+ return value;
2422
+ }
2423
+ return await prompt();
2424
+ }
2378
2425
 
2379
2426
  // src/utils/transformTemplate.ts
2380
2427
  init_esm_shims();
@@ -2388,13 +2435,48 @@ function transformTemplate(templateString, values) {
2388
2435
  }
2389
2436
 
2390
2437
  // src/InitCommand.ts
2391
- async function templateWebFramework({
2392
- appName,
2393
- cwd,
2394
- scripts
2395
- }) {
2438
+ async function templateWebFramework({ appName, cwd, skipInput }) {
2439
+ const packageJson = await fs4.promises.readFile(path3.join(cwd, "package.json"), {
2440
+ encoding: "utf-8"
2441
+ });
2442
+ const scripts = JSON.parse(packageJson);
2443
+ const originalScripts = {
2444
+ dev: scripts?.scripts?.dev || scripts?.scripts?.start,
2445
+ build: scripts?.scripts?.build
2446
+ };
2447
+ scripts.scripts.dev = "bedrock dev";
2448
+ scripts.scripts.build = "bedrock build";
2449
+ scripts.scripts.deploy = "ait deploy";
2450
+ await fs4.promises.writeFile(path3.join(cwd, "package.json"), JSON.stringify(scripts, null, 2), {
2451
+ encoding: "utf-8"
2452
+ });
2453
+ p2.log.step(".gitignore \uD30C\uC77C\uC744 \uC5C5\uB370\uC774\uD2B8\uD558\uB294 \uC911...");
2454
+ await fs4.promises.appendFile(path3.join(cwd, ".gitignore"), "\n.bedrock\n");
2455
+ const placeholder = {
2456
+ dev: originalScripts.dev === "bedrock dev" ? "" : originalScripts.dev,
2457
+ build: originalScripts.build === "bedrock build" ? "" : originalScripts.build
2458
+ };
2459
+ const scriptInputs = skipInput ? placeholder : await p2.group(
2460
+ {
2461
+ dev: () => p2.text({
2462
+ message: "\uC6F9 \uBC88\uB4E4\uB7EC\uC758 dev \uBA85\uB839\uC5B4\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694.",
2463
+ defaultValue: placeholder.dev,
2464
+ placeholder: placeholder.dev
2465
+ }),
2466
+ build: () => p2.text({
2467
+ message: "\uC6F9 \uBC88\uB4E4\uB7EC\uC758 build \uBA85\uB839\uC5B4\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694.",
2468
+ defaultValue: placeholder.build,
2469
+ placeholder: placeholder.build
2470
+ })
2471
+ },
2472
+ {
2473
+ onCancel: () => {
2474
+ p2.cancel("\uCD08\uAE30\uD654\uAC00 \uCDE8\uC18C\uB418\uC5C8\uC2B5\uB2C8\uB2E4");
2475
+ }
2476
+ }
2477
+ );
2396
2478
  p2.log.step("bedrock.config.ts \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uB294 \uC911...");
2397
- const webPort = await p2.text({
2479
+ const webPort = skipInput ? "5173" : await p2.text({
2398
2480
  message: "Enter web port",
2399
2481
  placeholder: "5173",
2400
2482
  defaultValue: "5173"
@@ -2406,96 +2488,91 @@ async function templateWebFramework({
2406
2488
  const config = transformTemplate(WEB_FRAMEWORK_CONFIG_TEMPLATE, {
2407
2489
  appName,
2408
2490
  webPort,
2409
- webDevCommand: scripts.dev === "bedrock dev" ? "" : scripts.dev,
2410
- webBuildCommand: scripts.build === "bedrock build" ? "" : scripts.build
2491
+ webDevCommand: scriptInputs.dev === "bedrock dev" ? "" : scriptInputs.dev,
2492
+ webBuildCommand: scriptInputs.build === "bedrock build" ? "" : scriptInputs.build
2411
2493
  });
2412
2494
  await fs4.promises.writeFile(path3.join(cwd, "bedrock.config.ts"), config, {
2413
2495
  encoding: "utf-8"
2414
2496
  });
2415
2497
  }
2498
+ async function templateReactNative({ appName, cwd }) {
2499
+ p2.log.step("bedrock.config.ts \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uB294 \uC911...");
2500
+ const config = transformTemplate(REACT_NATIVE_FRAMEWORK_CONFIG_TEMPLATE, {
2501
+ appName
2502
+ });
2503
+ await fs4.promises.writeFile(path3.join(cwd, "bedrock.config.ts"), config, {
2504
+ encoding: "utf-8"
2505
+ });
2506
+ p2.log.step("src/_app.tsx \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uB294 \uC911...");
2507
+ await fs4.promises.writeFile(path3.join(cwd, "src", "_app.tsx"), APP_TEMPLATE, {
2508
+ encoding: "utf-8"
2509
+ });
2510
+ }
2416
2511
  var InitCommand = class extends Command2 {
2417
2512
  static paths = [[`init`]];
2513
+ template = Option2.String("--template", { required: false });
2514
+ appName = Option2.String("--app-name", { required: false });
2515
+ skipInput = Option2.Boolean("--skip-input", { required: false, hidden: true });
2418
2516
  async execute() {
2419
- const template = await p2.select({
2420
- message: "\uD504\uB85C\uC81D\uD2B8\uB97C \uCD08\uAE30\uD654\uD560 \uD15C\uD50C\uB9BF\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694.",
2421
- options: [
2422
- {
2423
- value: "web-framework",
2424
- label: "\uC6F9 \uD504\uB808\uC784\uC6CC\uD06C",
2425
- hint: "\uC6F9 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC571\uC778\uD1A0\uC2A4 \uC6F9\uBDF0 \uAC1C\uBC1C\uD658\uACBD\uC744 \uC138\uD305\uD569\uB2C8\uB2E4."
2426
- }
2427
- ]
2517
+ const template = await ensureSelect({
2518
+ value: this.template,
2519
+ prompt: async () => p2.select({
2520
+ message: "\uD504\uB85C\uC81D\uD2B8\uB97C \uCD08\uAE30\uD654\uD560 \uD15C\uD50C\uB9BF\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694.",
2521
+ options: [
2522
+ {
2523
+ value: "web-framework",
2524
+ label: "\uC6F9 \uD504\uB808\uC784\uC6CC\uD06C",
2525
+ hint: "\uC6F9 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC571\uC778\uD1A0\uC2A4 \uC6F9\uBDF0 \uAC1C\uBC1C\uD658\uACBD\uC744 \uC138\uD305\uD569\uB2C8\uB2E4."
2526
+ },
2527
+ {
2528
+ value: "react-native",
2529
+ label: "React Native \uD504\uB808\uC784\uC6CC\uD06C (Bedrock)",
2530
+ hint: "Bedrock \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC571\uC778\uD1A0\uC2A4 React Native\uC6A9 \uAC1C\uBC1C\uD658\uACBD\uC744 \uC138\uD305\uD569\uB2C8\uB2E4."
2531
+ }
2532
+ ]
2533
+ })
2428
2534
  });
2429
2535
  if (p2.isCancel(template)) {
2430
2536
  process.exit(0);
2431
2537
  }
2432
2538
  const cwd = getPackageRoot();
2433
2539
  p2.intro("\u{1F680} \uC571 \uCD08\uAE30\uD654\uB97C \uC2DC\uC791\uD569\uB2C8\uB2E4");
2434
- const appName = await p2.text({
2435
- message: "Enter app name",
2436
- validate: (value) => {
2437
- if (!value) {
2438
- return "\uC571 \uC774\uB984\uC744 \uC785\uB825\uD574\uC8FC\uC138\uC694";
2439
- }
2440
- const kebabCaseValue = kebabCase(value);
2441
- if (value !== kebabCaseValue) {
2442
- return `\uC571 \uC774\uB984\uC740 \uCF00\uBC25-\uCF00\uC774\uC2A4 \uD615\uC2DD\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4 (\uC608\uC2DC: ${kebabCaseValue})`;
2540
+ const appName = await ensureSelect({
2541
+ value: this.appName,
2542
+ prompt: async () => p2.text({
2543
+ message: "Enter app name",
2544
+ validate: (value) => {
2545
+ if (!value) {
2546
+ return "\uC571 \uC774\uB984\uC744 \uC785\uB825\uD574\uC8FC\uC138\uC694";
2547
+ }
2548
+ const kebabCaseValue = kebabCase(value);
2549
+ if (value !== kebabCaseValue) {
2550
+ return `\uC571 \uC774\uB984\uC740 \uCF00\uBC25-\uCF00\uC774\uC2A4 \uD615\uC2DD\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4 (\uC608\uC2DC: ${kebabCaseValue})`;
2551
+ }
2552
+ return;
2443
2553
  }
2444
- return;
2445
- }
2554
+ })
2446
2555
  });
2447
2556
  if (p2.isCancel(appName)) {
2448
2557
  p2.cancel("\uCD08\uAE30\uD654\uAC00 \uCDE8\uC18C\uB418\uC5C8\uC2B5\uB2C8\uB2E4");
2449
2558
  return;
2450
2559
  }
2451
2560
  p2.log.step(`\uC571 \uC774\uB984\uC774 '${appName}'\uC73C\uB85C \uC124\uC815\uB418\uC5C8\uC2B5\uB2C8\uB2E4`);
2452
- p2.log.step("package.json \uC2A4\uD06C\uB9BD\uD2B8\uB97C \uC124\uC815\uD558\uB294 \uC911...");
2453
- const packageJson = await fs4.promises.readFile(path3.join(cwd, "package.json"), {
2454
- encoding: "utf-8"
2455
- });
2456
- const scripts = JSON.parse(packageJson);
2457
- const originalScripts = {
2458
- dev: scripts?.scripts?.dev || scripts?.scripts?.start,
2459
- build: scripts?.scripts?.build
2460
- };
2461
- scripts.scripts.dev = "bedrock dev";
2462
- scripts.scripts.build = "bedrock build";
2463
- scripts.scripts.deploy = "ait deploy";
2464
- await fs4.promises.writeFile(path3.join(cwd, "package.json"), JSON.stringify(scripts, null, 2), {
2465
- encoding: "utf-8"
2466
- });
2467
- p2.log.step(".gitignore \uD30C\uC77C\uC744 \uC5C5\uB370\uC774\uD2B8\uD558\uB294 \uC911...");
2468
- await fs4.promises.appendFile(path3.join(cwd, ".gitignore"), "\n.bedrock\n");
2469
- const placeholder = {
2470
- dev: originalScripts.dev === "bedrock dev" ? "" : originalScripts.dev,
2471
- build: originalScripts.build === "bedrock build" ? "" : originalScripts.build
2472
- };
2473
- const scriptInputs = await p2.group(
2474
- {
2475
- dev: () => p2.text({
2476
- message: "\uC6F9 \uBC88\uB4E4\uB7EC\uC758 dev \uBA85\uB839\uC5B4\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694.",
2477
- defaultValue: placeholder.dev,
2478
- placeholder: placeholder.dev
2479
- }),
2480
- build: () => p2.text({
2481
- message: "\uC6F9 \uBC88\uB4E4\uB7EC\uC758 build \uBA85\uB839\uC5B4\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694.",
2482
- defaultValue: placeholder.build,
2483
- placeholder: placeholder.build
2484
- })
2485
- },
2486
- {
2487
- onCancel: () => {
2488
- p2.cancel("\uCD08\uAE30\uD654\uAC00 \uCDE8\uC18C\uB418\uC5C8\uC2B5\uB2C8\uB2E4");
2489
- }
2490
- }
2491
- );
2492
2561
  switch (template) {
2493
2562
  case "web-framework": {
2494
2563
  await templateWebFramework({
2495
2564
  appName,
2496
2565
  cwd,
2497
- scripts: scriptInputs
2566
+ skipInput: this.skipInput ?? false
2567
+ });
2568
+ break;
2569
+ }
2570
+ case "react-native": {
2571
+ await templateReactNative({
2572
+ appName,
2573
+ cwd
2498
2574
  });
2575
+ break;
2499
2576
  }
2500
2577
  }
2501
2578
  p2.outro("\u2728 \uCD08\uAE30\uD654\uAC00 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4!");
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@apps-in-toss/cli",
3
3
  "type": "module",
4
- "version": "0.0.0-dev.1743134070910",
4
+ "version": "0.0.0-dev.1744801739343",
5
5
  "description": "CLI for Apps In Toss",
6
6
  "scripts": {
7
7
  "prepack": "yarn build",
@@ -43,5 +43,5 @@
43
43
  "publishConfig": {
44
44
  "access": "public"
45
45
  },
46
- "gitHead": "5acf03f70ea94cd53a91b74d34b1a196e45604f3"
46
+ "gitHead": "aebed4e46de1690956a3b9be49b55811b5ddfa24"
47
47
  }