{"version":3,"sources":["../src/cli.ts","../src/commands/dev.ts","../src/convert.ts","../src/config.ts","../package.json","../src/header.ts","../src/signal-handler.ts","../src/logger.ts","../src/commands/init.ts","../src/prompt.ts","../src/commands/clean.ts","../src/commands/run.ts","../src/commands/create.ts","../src/commands/compile.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { readFileSync } from \"fs\";\nimport path from \"path\";\nimport dev from \"./commands/dev.js\";\nimport init from \"./commands/init.js\";\nimport clean from \"./commands/clean.js\";\nimport run from \"./commands/run.js\";\nimport create from \"./commands/create.js\";\nimport compile from \"./commands/compile.js\";\n\nfunction loadPackageVersion(): string {\n  const pkg = JSON.parse(\n    readFileSync(path.join(__dirname, \"../package.json\"), \"utf-8\"),\n  ) as { version: string };\n  return pkg.version;\n}\n\nconst version = loadPackageVersion();\n\nconst DOCS_URL = \"https://noshift.js.org/\";\n\nconst program = new Command();\n\nprogram\n  .name(\"nsc\")\n  .description(\"NoShift.js compiler\")\n  .version(version, \"-v, --version\", \"output the version number\")\n  .option(\"-w, --watch\", \"Watch for file changes and recompile\")\n  .option(\"--init\", \"Create a nsjsconfig.json in the current directory\")\n  .option(\"--clean\", \"Delete the output directory (outdir)\")\n  .option(\"-r, --run <file>\", \"Run a .nsjs file directly\")\n  .option(\"--create [name]\", \"Scaffold a new NoShift.js project\")\n  .option(\"--no-header\", \"Suppress the generated header comment in output\")\n  .addHelpText(\"after\", `\\nDocumentation: ${DOCS_URL}`)\n  .action(async (options) => {\n    const noHeader = options.header === false;\n    if (options.watch) {\n      await dev({ noHeader });\n    } else if (options.init) {\n      await init();\n    } else if (options.clean) {\n      await clean();\n    } else if (options.run) {\n      await run(options.run as string, { noHeader });\n    } else if (options.create !== undefined) {\n      await create((options.create as string) || undefined);\n    } else {\n      await compile({ noHeader });\n    }\n  });\n\n// nsc watch\nprogram\n  .command(\"watch\")\n  .alias(\"w\")\n  .description(\"Watch for file changes and recompile\")\n  .action(async () => {\n    await dev();\n  });\n\n// nsc run <file>\nprogram\n  .command(\"run <file>\")\n  .description(\"Run a .nsjs file directly\")\n  .action(async (file: string) => {\n    await run(file);\n  });\n\n// nsc create [name]\nprogram\n  .command(\"create [name]\")\n  .description(\"Scaffold a new NoShift.js project\")\n  .option(\"--prettier\", \"Include Prettier (default)\")\n  .option(\"--no-prettier\", \"Skip Prettier setup\")\n  .action(\n    async (name: string | undefined, options: Record<string, unknown>) => {\n      await create(name, options);\n    },\n  );\n\n// nsc init\nprogram\n  .command(\"init\")\n  .description(\"Create a nsjsconfig.json in the current directory\")\n  .action(async () => {\n    await init();\n  });\n\n// nsc clean\nprogram\n  .command(\"clean\")\n  .description(\"Delete the output directory (outdir)\")\n  .action(async () => {\n    await clean();\n  });\n\n// nsc version\nprogram\n  .command(\"version\")\n  .description(\"Display the current version\")\n  .action(() => {\n    console.log(version);\n  });\n\n// nsc help\nprogram\n  .command(\"help\")\n  .description(\"Show help information\")\n  .action(() => {\n    program.outputHelp();\n  });\n\nprogram.parse();\n","import { promises as fs, watch } from \"fs\";\nimport path from \"path\";\nimport convert, { diagnose } from \"../convert.js\";\nimport { loadConfig } from \"../config.js\";\nimport { addHeader } from \"../header.js\";\nimport { handleSigint } from \"../signal-handler.js\";\nimport * as logger from \"../logger.js\";\n\ninterface DevCliOptions {\n  noHeader?: boolean;\n}\n\nfunction timestamp(): string {\n  return new Date().toLocaleTimeString(\"en-GB\"); // HH:MM:SS\n}\n\nasync function findNsjsFiles(dir: string): Promise<string[] | null> {\n  let entries;\n  try {\n    entries = await fs.readdir(dir, { withFileTypes: true });\n  } catch {\n    return null;\n  }\n  const files: string[] = [];\n  for (const entry of entries) {\n    const fullPath = path.join(dir, entry.name);\n    if (entry.isDirectory()) {\n      const nested = await findNsjsFiles(fullPath);\n      if (nested) files.push(...nested);\n    } else if (entry.name.endsWith(\".nsjs\") && !entry.name.startsWith(\"_\")) {\n      files.push(fullPath);\n    }\n  }\n  return files;\n}\n\nasync function compileFile(\n  file: string,\n  rootDir: string,\n  outDir: string,\n  cwd: string,\n  convertOptions: { capitalizeInStrings?: boolean } = {},\n  noHeader: boolean = false,\n): Promise<void> {\n  const relative = path.relative(rootDir, file).replace(/\\\\/g, \"/\");\n  const destPath = path\n    .join(outDir, path.relative(rootDir, file))\n    .replace(/\\.nsjs$/, \".js\");\n  const code = await fs.readFile(file, \"utf-8\");\n\n  // 構文エラーチェック\n  const syntaxErrors = diagnose(code);\n  if (syntaxErrors.length > 0) {\n    const rel = relative;\n    for (const e of syntaxErrors) {\n      logger.errorCode(\"NS1\", `${rel}:${e.line}:${e.column} - ${e.message}`);\n    }\n    throw new Error(`${syntaxErrors.length} syntax error(s)`);\n  }\n\n  let js = convert(code, convertOptions);\n  if (!noHeader) {\n    js = addHeader(js);\n  }\n  await fs.mkdir(path.dirname(destPath), { recursive: true });\n  await fs.writeFile(destPath, js, \"utf-8\");\n  logger.dim(\n    `[${timestamp()}] ${relative} → ${path.relative(cwd, destPath).replace(/\\\\/g, \"/\")}`,\n  );\n}\n\nexport default async function dev(\n  cliOptions: DevCliOptions = {},\n): Promise<void> {\n  const cwd = process.cwd();\n\n  let config;\n  try {\n    config = await loadConfig(cwd);\n  } catch (e) {\n    logger.errorCode(\"NS0\", (e as Error).message);\n    process.exit(1);\n  }\n\n  const rootDir = path.resolve(cwd, config.compileroptions.rootdir);\n  const outDir = path.resolve(cwd, config.compileroptions.outdir);\n  const convertOptions = {\n    capitalizeInStrings: config.compileroptions.capitalizeinstrings !== false,\n  };\n\n  // 初回フルコンパイル\n  const files = await findNsjsFiles(rootDir);\n  if (files === null) {\n    logger.errorCode(\n      \"NS0\",\n      `rootdir '${config.compileroptions.rootdir}' not found.`,\n    );\n    process.exit(1);\n  }\n\n  logger.info(`Starting compilation in watch mode...`);\n\n  await fs.mkdir(outDir, { recursive: true });\n\n  const noHeader = cliOptions.noHeader || config.compileroptions.noheader;\n\n  for (const file of files) {\n    try {\n      await compileFile(file, rootDir, outDir, cwd, convertOptions, noHeader);\n    } catch (e) {\n      const rel = path.relative(rootDir, file).replace(/\\\\/g, \"/\");\n      logger.errorCode(\"NS1\", `${rel}: ${(e as Error).message}`);\n    }\n  }\n\n  logger.info(\n    `Watching for file changes in '${logger.highlight(config.compileroptions.rootdir)}'... (Press Ctrl+C to stop)`,\n  );\n  console.log(\"\");\n\n  // Ctrl+C で終了\n  handleSigint(() => {\n    logger.info(\"Stopped watching.\");\n  });\n\n  // デバウンス用マップ (ファイルパス → タイマーID)\n  const debounceMap = new Map<string, ReturnType<typeof setTimeout>>();\n  const DEBOUNCE_MS = 100;\n\n  watch(rootDir, { recursive: true }, (_eventType, filename) => {\n    if (!filename) return;\n    if (!filename.endsWith(\".nsjs\")) return;\n    if (path.basename(filename).startsWith(\"_\")) return;\n\n    // 重複イベントをデバウンス\n    if (debounceMap.has(filename)) {\n      clearTimeout(debounceMap.get(filename)!);\n    }\n    debounceMap.set(\n      filename,\n      setTimeout(async () => {\n        debounceMap.delete(filename);\n        const absPath = path.join(rootDir, filename);\n        try {\n          await compileFile(\n            absPath,\n            rootDir,\n            outDir,\n            cwd,\n            convertOptions,\n            noHeader,\n          );\n        } catch (e) {\n          if ((e as NodeJS.ErrnoException).code === \"ENOENT\") {\n            // ファイルが削除された場合はスキップ\n          } else {\n            logger.errorCode(\n              \"NS1\",\n              `${filename.replace(/\\\\/g, \"/\")}: ${(e as Error).message}`,\n            );\n          }\n        }\n      }, DEBOUNCE_MS),\n    );\n  });\n\n  // Ctrl+C で終了するまで待機\n  await new Promise(() => {});\n}\n","// ======\n// NoShift.js → JavaScript 置換用マップ\n// ======\nconst noShiftMap: Record<string, string> = {\n  // \"^@^@^@\": \"```\", // マルチバックチック\n  \"^4^[\": \"${\", // テンプレート式展開開始\n  \"^0\": \"^\",\n  \"^1\": \"!\",\n  \"^2\": '\"',\n  \"^3\": \"#\",\n  \"^4\": \"$\",\n  \"^5\": \"%\",\n  \"^7\": \"'\",\n  \"^8\": \"(\",\n  \"^9\": \")\",\n  \"^-\": \"=\",\n  \"^^\": \"~\",\n  \"^\\\\\": \"_\",\n  \"^@\": \"`\",\n  \"^[\": \"{\",\n  \"^]\": \"}\",\n  \"^;\": \"+\",\n  \"^:\": \"*\",\n  \"^,\": \"<\",\n  \"^.\": \">\",\n  \"^/\": \"?\",\n};\n\n// 逆引きマップ: JavaScript 記号 → NoShift 表記（単一記号のみ）\nconst symbolToNoshift: Record<string, string> = Object.fromEntries(\n  Object.entries(noShiftMap)\n    .filter(([key, value]) => key.length === 2 && value.length === 1)\n    .map(([key, value]) => [value, key]),\n);\n\ninterface ConvertOptions {\n  capitalizeInStrings?: boolean;\n  _silent?: boolean;\n}\n\n// ======\n// キーワード置換マップ（コード部分のみ適用、文字列・コメント内はスキップ）\n// 長いものから先にマッチさせる\n// ======\nconst keywordReplacements: [string, string][] = [\n  [\"@or^-\", \"|=\"],\n  [\"@and^-\", \"&=\"],\n  [\"or^-\", \"||=\"],\n  [\"and^-\", \"&&=\"],\n  [\"@or\", \"|\"],\n  [\"@and\", \"&\"],\n];\n\n// 単語境界で囲まれたキーワード（変数名との衝突を防ぐ）\nconst wordKeywordReplacements: [string, string][] = [\n  [\"or\", \"||\"],\n  [\"and\", \"&&\"],\n];\n\nexport default function convertNsjsToJs(\n  nsjsCode: string,\n  options: ConvertOptions = {},\n): string {\n  const capitalizeInStrings = options.capitalizeInStrings !== false;\n  let jsCode = \"\";\n  let i = 0;\n  const len_ns = nsjsCode.length;\n\n  // ======\n  // 各種状態 (State) を定義\n  // ======\n  const STATE = {\n    NORMAL: \"NORMAL\", // 普通のコード\n    IN_DQ_STRING: \"IN_DQ_STRING\", // \" … \" の中\n    IN_SQ_STRING: \"IN_SQ_STRING\", // ' … ' の中\n    IN_BT_SINGLE_STRING: \"IN_BT_SINGLE_STRING\", // ` … ` の中\n    IN_BT_MULTI_STRING: \"IN_BT_MULTI_STRING\", // ``` … ``` の中\n    IN_TEMPLATE_EXPRESSION: \"IN_TEMPLATE_EXPRESSION\", // ${ … } の中\n    RAW_DQ_IN_EXPR: \"RAW_DQ_IN_EXPR\", // テンプレート式内の \" … \" の中 （NoShift 変換なし）\n    RAW_SQ_IN_EXPR: \"RAW_SQ_IN_EXPR\", // テンプレート式内の ' … ' の中 （NoShift 変換なし）\n    IN_LINE_COMMENT: \"IN_LINE_COMMENT\", // // … の中\n    IN_BLOCK_COMMENT: \"IN_BLOCK_COMMENT\", // /^: … ^:/ の中\n  } as const;\n\n  type StateType = (typeof STATE)[keyof typeof STATE];\n\n  let currentState: StateType = STATE.NORMAL;\n  const stateStack: StateType[] = [];\n\n  // マッピングキーは長いものからマッチさせる\n  const sortedNsKeys = Object.keys(noShiftMap).sort(\n    (a, b) => b.length - a.length,\n  );\n\n  /**\n   * tryConsumeNsjsSequence:\n   *  - カーソル i の位置に noShiftMap のキーまたは特殊シーケンスがあれば消費し、\n   *    jsCode に出力して true を返す。なければ false を返す。\n   *\n   * 優先度:\n   *  1) テンプレートリテラル中の式展開開始 (^4^[ / ^4[)\n   *  2) テンプレート式中の式閉じ (^])\n   *  3) 通常コード/テンプレート式外の文字列開閉 (^2, ^7, ^@^@^@, ^@)\n   *  4) テンプレート式中の JS 文字列開閉 (^2, ^7 → RAW_DQ_IN_EXPR / RAW_SQ_IN_EXPR)\n   *  5) RAW_DQ_IN_EXPR/RAW_SQ_IN_EXPR 内の終端 (^2 / ^7 → 戻る)\n   *  6) 通常の NoShift 置換 (NORMAL または IN_TEMPLATE_EXPRESSION のとき)\n   */\n  function tryConsumeNsjsSequence(): boolean {\n    let allowGeneral = false;\n    if (\n      currentState === STATE.NORMAL ||\n      currentState === STATE.IN_TEMPLATE_EXPRESSION\n    ) {\n      allowGeneral = true;\n    }\n\n    for (const nsKey of sortedNsKeys) {\n      if (!nsjsCode.startsWith(nsKey, i)) continue;\n\n      // ======\n      // 1) テンプレートリテラル中の式展開開始\n      // ======\n      if (\n        (nsKey === \"^4^[\" || nsjsCode.startsWith(\"^4[\", i)) &&\n        (currentState === STATE.IN_BT_SINGLE_STRING ||\n          currentState === STATE.IN_BT_MULTI_STRING)\n      ) {\n        jsCode += \"${\";\n        i += nsKey === \"^4^[\" ? nsKey.length : 3;\n        stateStack.push(currentState);\n        currentState = STATE.IN_TEMPLATE_EXPRESSION;\n        return true;\n      }\n\n      // ======\n      // 2) テンプレート式中の式閉じ\n      // ======\n      if (nsKey === \"^]\" && currentState === STATE.IN_TEMPLATE_EXPRESSION) {\n        jsCode += \"}\";\n        i += nsKey.length;\n        currentState = stateStack.pop()!;\n        return true;\n      }\n\n      // ======\n      // 3) 通常コード/テンプレート式外の文字列開閉\n      // ======\n\n      // 3-1) \"^2\": ダブルクォート開閉\n      if (nsKey === \"^2\" && currentState === STATE.NORMAL) {\n        jsCode += '\"';\n        i += nsKey.length;\n        stateStack.push(currentState);\n        currentState = STATE.IN_DQ_STRING;\n        return true;\n      }\n      if (nsKey === \"^2\" && currentState === STATE.IN_DQ_STRING) {\n        jsCode += '\"';\n        i += nsKey.length;\n        currentState = stateStack.pop()!;\n        return true;\n      }\n\n      // 3-2) \"^7\": シングルクォート開閉\n      if (nsKey === \"^7\" && currentState === STATE.NORMAL) {\n        jsCode += \"'\";\n        i += nsKey.length;\n        stateStack.push(currentState);\n        currentState = STATE.IN_SQ_STRING;\n        return true;\n      }\n      if (nsKey === \"^7\" && currentState === STATE.IN_SQ_STRING) {\n        jsCode += \"'\";\n        i += nsKey.length;\n        currentState = stateStack.pop()!;\n        return true;\n      }\n\n      // このブロックを削除\n      // 3-3) \"^@^@^@\": マルチバックチック開閉\n      /*\n      if (\n        nsKey === \"^@^@^@\" &&\n        (currentState === STATE.NORMAL ||\n          currentState === STATE.IN_TEMPLATE_EXPRESSION)\n      ) {\n        jsCode += \"```\";\n        i += nsKey.length;\n        stateStack.push(currentState);\n        currentState = STATE.IN_BT_MULTI_STRING;\n        return true;\n      }\n      if (nsKey === \"^@^@^@\" && currentState === STATE.IN_BT_MULTI_STRING) {\n        jsCode += \"```\";\n        i += nsKey.length;\n        currentState = stateStack.pop()!;\n        return true;\n      }\n      */\n\n      // 3-4) \"^@\": シングルバックチック開閉\n      if (\n        nsKey === \"^@\" &&\n        (currentState === STATE.NORMAL ||\n          currentState === STATE.IN_TEMPLATE_EXPRESSION)\n      ) {\n        jsCode += \"`\";\n        i += nsKey.length;\n        stateStack.push(currentState);\n        currentState = STATE.IN_BT_SINGLE_STRING;\n        return true;\n      }\n      if (nsKey === \"^@\" && currentState === STATE.IN_BT_SINGLE_STRING) {\n        jsCode += \"`\";\n        i += nsKey.length;\n        currentState = stateStack.pop()!;\n        return true;\n      }\n\n      // ======\n      // 4) テンプレート式中の JS 文字列開閉\n      // ======\n      if (nsKey === \"^2\" && currentState === STATE.IN_TEMPLATE_EXPRESSION) {\n        jsCode += '\"';\n        i += nsKey.length;\n        stateStack.push(currentState);\n        currentState = STATE.RAW_DQ_IN_EXPR;\n        return true;\n      }\n      if (nsKey === \"^7\" && currentState === STATE.IN_TEMPLATE_EXPRESSION) {\n        jsCode += \"'\";\n        i += nsKey.length;\n        stateStack.push(currentState);\n        currentState = STATE.RAW_SQ_IN_EXPR;\n        return true;\n      }\n\n      // ======\n      // 5) RAW_DQ_IN_EXPR / RAW_SQ_IN_EXPR 内の終端\n      // ======\n      if (nsKey === \"^2\" && currentState === STATE.RAW_DQ_IN_EXPR) {\n        jsCode += '\"';\n        i += nsKey.length;\n        currentState = stateStack.pop()!;\n        return true;\n      }\n      if (nsKey === \"^7\" && currentState === STATE.RAW_SQ_IN_EXPR) {\n        jsCode += \"'\";\n        i += nsKey.length;\n        currentState = stateStack.pop()!;\n        return true;\n      }\n\n      // ======\n      // 6) 通常の NoShift 置換 (NORMAL or IN_TEMPLATE_EXPRESSION のとき)\n      // ======\n      if (allowGeneral) {\n        jsCode += noShiftMap[nsKey];\n        i += nsKey.length;\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  // ======\n  // メインループ\n  // ======\n  while (i < len_ns) {\n    let consumed = false;\n\n    // ======\n    // ステップ1: 文字列内でのエスケープ処理\n    // ======\n\n    // (A) IN_DQ_STRING 内 (\" … \")\n    if (currentState === STATE.IN_DQ_STRING) {\n      if (nsjsCode.startsWith(\"\\\\^6\", i)) {\n        jsCode += \"^6\"; // \"\\^6\" を文字列中のリテラル \"^6\" として出力\n        i += 3;\n        consumed = true;\n      } else if (nsjsCode.startsWith(\"\\\\^2\", i)) {\n        jsCode += \"^2\"; // \"\\^2\" を文字列中の \"^2\" として出力\n        i += 3;\n        consumed = true;\n      } else if (nsjsCode.startsWith(\"\\\\\\\\\", i)) {\n        jsCode += \"\\\\\\\\\\\\\\\\\"; // \"\\\\\" を JSコード内で \"\\\\\\\\\" に出力\n        i += 2;\n        consumed = true;\n      }\n    }\n    // (B) IN_SQ_STRING 内 (' … ')\n    else if (currentState === STATE.IN_SQ_STRING) {\n      if (nsjsCode.startsWith(\"\\\\^6\", i)) {\n        jsCode += \"^6\";\n        i += 3;\n        consumed = true;\n      } else if (nsjsCode.startsWith(\"\\\\^7\", i)) {\n        jsCode += \"^7\";\n        i += 3;\n        consumed = true;\n      } else if (nsjsCode.startsWith(\"\\\\\\\\\", i)) {\n        jsCode += \"\\\\\\\\\\\\\\\\\";\n        i += 2;\n        consumed = true;\n      }\n    }\n    // (C) RAW_DQ_IN_EXPR 内 (テンプレート式中の \" … \")\n    else if (currentState === STATE.RAW_DQ_IN_EXPR) {\n      if (nsjsCode.startsWith(\"\\\\^6\", i)) {\n        jsCode += \"^6\";\n        i += 3;\n        consumed = true;\n      } else if (nsjsCode.startsWith(\"\\\\^2\", i)) {\n        jsCode += \"^2\";\n        i += 3;\n        consumed = true;\n      } else if (nsjsCode.startsWith(\"\\\\\\\\\", i)) {\n        jsCode += \"\\\\\\\\\\\\\\\\\";\n        i += 2;\n        consumed = true;\n      } else if (nsjsCode.startsWith(\"^2\", i)) {\n        jsCode += '\"'; // 終端\n        i += 2;\n        currentState = stateStack.pop()!;\n        consumed = true;\n      }\n      if (consumed) {\n        continue; // 生文字扱いなので NoShift 変換せず次へ\n      } else {\n        jsCode += nsjsCode[i];\n        i += 1;\n        continue;\n      }\n    }\n    // (D) RAW_SQ_IN_EXPR 内 (テンプレート式中の ' … ')\n    else if (currentState === STATE.RAW_SQ_IN_EXPR) {\n      if (nsjsCode.startsWith(\"\\\\^6\", i)) {\n        jsCode += \"^6\";\n        i += 3;\n        consumed = true;\n      } else if (nsjsCode.startsWith(\"\\\\^7\", i)) {\n        jsCode += \"^7\";\n        i += 3;\n        consumed = true;\n      } else if (nsjsCode.startsWith(\"\\\\\\\\\", i)) {\n        jsCode += \"\\\\\\\\\\\\\\\\\";\n        i += 2;\n        consumed = true;\n      } else if (nsjsCode.startsWith(\"^7\", i)) {\n        jsCode += \"'\";\n        i += 2;\n        currentState = stateStack.pop()!;\n        consumed = true;\n      }\n      if (consumed) {\n        continue;\n      } else {\n        jsCode += nsjsCode[i];\n        i += 1;\n        continue;\n      }\n    }\n    // (E) IN_BT_SINGLE_STRING 内 (` … `)\n    else if (currentState === STATE.IN_BT_SINGLE_STRING) {\n      if (nsjsCode.startsWith(\"\\\\^6\", i)) {\n        jsCode += \"^6\";\n        i += 3;\n        consumed = true;\n      } else if (nsjsCode.startsWith(\"\\\\^@\", i)) {\n        jsCode += \"^@\";\n        i += 3;\n        consumed = true;\n      } else if (nsjsCode.startsWith(\"\\\\\\\\\", i)) {\n        jsCode += \"\\\\\\\\\\\\\\\\\";\n        i += 2;\n        consumed = true;\n      }\n    }\n    // (F) IN_BT_MULTI_STRING 内 (``` … ```)\n    else if (currentState === STATE.IN_BT_MULTI_STRING) {\n      /* if (nsjsCode.startsWith(\"\\\\^@^@^@\", i)) {\n        jsCode += \"^@^@^@\";\n        i += 7;\n        consumed = true;\n      } else */\n      if (nsjsCode.startsWith(\"\\\\\\\\\", i)) {\n        jsCode += \"\\\\\\\\\\\\\\\\\";\n        i += 2;\n        consumed = true;\n      }\n    }\n\n    // ======\n    // ステップ2: ^6 大文字化モディファイア (RAW 状態とコメント以外で動作)\n    //   - コード上 (NORMAL, IN_TEMPLATE_EXPRESSION) では常に有効\n    //   - 文字列内は capitalizeInStrings オプションに従う\n    //   - RAW_DQ_IN_EXPR / RAW_SQ_IN_EXPR は else-if の continue で既に除外済み\n    // ======\n    if (\n      !consumed &&\n      currentState !== STATE.IN_LINE_COMMENT &&\n      currentState !== STATE.IN_BLOCK_COMMENT\n    ) {\n      if (nsjsCode.startsWith(\"^6\", i)) {\n        const inString =\n          currentState === STATE.IN_DQ_STRING ||\n          currentState === STATE.IN_SQ_STRING ||\n          currentState === STATE.IN_BT_SINGLE_STRING ||\n          currentState === STATE.IN_BT_MULTI_STRING;\n        if (!inString || capitalizeInStrings) {\n          i += 2;\n          if (i < len_ns) {\n            jsCode += nsjsCode[i].toUpperCase();\n            i += 1;\n          }\n          consumed = true;\n        }\n      }\n    }\n\n    // ======\n    // ステップ2.5: コメントの処理\n    // ======\n    if (!consumed) {\n      // 行コメント開始 (//)\n      if (currentState === STATE.NORMAL && nsjsCode.startsWith(\"//\", i)) {\n        jsCode += \"//\";\n        i += 2;\n        stateStack.push(currentState);\n        currentState = STATE.IN_LINE_COMMENT;\n        consumed = true;\n      }\n      // 行コメント終了 (改行)\n      else if (currentState === STATE.IN_LINE_COMMENT) {\n        if (nsjsCode[i] === \"\\n\") {\n          jsCode += \"\\n\";\n          i += 1;\n          currentState = stateStack.pop()!;\n        } else {\n          jsCode += nsjsCode[i];\n          i += 1;\n        }\n        consumed = true;\n      }\n      // ブロックコメント開始 (/^:)\n      else if (currentState === STATE.NORMAL && nsjsCode.startsWith(\"/^:\", i)) {\n        jsCode += \"/*\";\n        i += 3;\n        stateStack.push(currentState);\n        currentState = STATE.IN_BLOCK_COMMENT;\n        consumed = true;\n      }\n      // ブロックコメント終了 (^:/)\n      else if (\n        currentState === STATE.IN_BLOCK_COMMENT &&\n        nsjsCode.startsWith(\"^:/\", i)\n      ) {\n        jsCode += \"*/\";\n        i += 3;\n        currentState = stateStack.pop()!;\n        consumed = true;\n      }\n      // ブロックコメント内の文字 (そのまま出力)\n      else if (currentState === STATE.IN_BLOCK_COMMENT) {\n        jsCode += nsjsCode[i];\n        i += 1;\n        consumed = true;\n      }\n    }\n\n    // ======\n    // ステップ2.7: キーワード置換 (NORMAL / IN_TEMPLATE_EXPRESSION のみ)\n    // ======\n    if (\n      !consumed &&\n      (currentState === STATE.NORMAL ||\n        currentState === STATE.IN_TEMPLATE_EXPRESSION)\n    ) {\n      // @or^- / @and^- / or^- / and^- / @or / @and\n      for (const [kw, replacement] of keywordReplacements) {\n        if (nsjsCode.startsWith(kw, i)) {\n          jsCode += replacement;\n          i += kw.length;\n          consumed = true;\n          break;\n        }\n      }\n      // 単語境界キーワード: or / and\n      if (!consumed) {\n        for (const [kw, replacement] of wordKeywordReplacements) {\n          if (nsjsCode.startsWith(kw, i)) {\n            // 前方の境界チェック\n            const prevChar = i > 0 ? nsjsCode[i - 1] : \" \";\n            const prevIsBoundary = !/[a-zA-Z0-9_$]/.test(prevChar);\n            // 後方の境界チェック\n            const afterPos = i + kw.length;\n            const nextChar = afterPos < len_ns ? nsjsCode[afterPos] : \" \";\n            const nextIsBoundary = !/[a-zA-Z0-9_$]/.test(nextChar);\n            if (prevIsBoundary && nextIsBoundary) {\n              jsCode += replacement;\n              i += kw.length;\n              consumed = true;\n              break;\n            }\n          }\n        }\n      }\n    }\n\n    // ======\n    // ステップ3: NoShift シーケンスや文字列/テンプレートの開閉、式展開を試す\n    // ======\n    if (!consumed) {\n      consumed = tryConsumeNsjsSequence();\n    }\n\n    // ======\n    // ステップ4: 何も消費しなかったら文字をそのまま出力\n    // ======\n    if (!consumed) {\n      jsCode += nsjsCode[i];\n      i += 1;\n    }\n  }\n\n  // スタックに残りがあればリテラル/テンプレートの閉じ忘れ\n  if (stateStack.length > 0) {\n    // diagnostics モードでない場合のみ警告を出す\n    if (!options._silent) {\n      console.warn(\n        `Warning: Unmatched literal/templating states. Final state: ${currentState}, Remaining stack: ${stateStack.join(\n          \", \",\n        )}`,\n      );\n    }\n  }\n  return jsCode;\n}\n\nexport interface UppercaseWarning {\n  line: number;\n  column: number;\n  char: string;\n  message: string;\n}\n\n/**\n * ソースコード内の大文字、_, $, # の使用を警告する。\n * コメント内は無視する。\n * capitalizeInStrings が true の場合、文字列内の大文字も警告する。\n */\nexport function checkUppercaseWarnings(\n  nsjsCode: string,\n  options: { capitalizeInStrings?: boolean } = {},\n): UppercaseWarning[] {\n  const capitalizeInStrings = options.capitalizeInStrings !== false;\n  const warnings: UppercaseWarning[] = [];\n  const lines = nsjsCode.split(\"\\n\");\n\n  // シンプルな状態追跡（文字列・コメント内を除外）\n  let inDQ = false; // ^2...^2\n  let inSQ = false; // ^7...^7\n  let inBT = false; // ^@...^@\n  let inLineComment = false;\n  let inBlockComment = false;\n\n  // 先頭行の shebang 検出\n  const firstLine = lines[0] ?? \"\";\n  const hasNoShiftShebang = firstLine.startsWith(\"#^1\"); // #^1 → valid NoShift shebang\n  const hasRawShebang = firstLine.startsWith(\"#!\"); // #! → raw shebang（警告対象）\n\n  // #! を使っている場合は警告\n  if (hasRawShebang) {\n    warnings.push({\n      line: 1,\n      column: 1,\n      char: \"#\",\n      message: \"Shebang '#!' found. Use '#^1' instead.\",\n    });\n  }\n\n  for (let lineNum = 0; lineNum < lines.length; lineNum++) {\n    const line = lines[lineNum];\n    inLineComment = false; // 行コメントは行ごとにリセット\n\n    // 先頭行の shebang 行はスキップ（#^1 / #! どちらも行全体をスキップ）\n    if (lineNum === 0 && (hasNoShiftShebang || hasRawShebang)) {\n      continue;\n    }\n\n    for (let col = 0; col < line.length; col++) {\n      const ch = line[col];\n      const next = line[col + 1];\n\n      // エスケープ (\\^2, \\^7, \\^@) をスキップ\n      if (ch === \"\\\\\" && next === \"^\") {\n        col += 2;\n        continue;\n      }\n\n      // ブロックコメント終了 (^:/)\n      if (\n        inBlockComment &&\n        ch === \"^\" &&\n        next === \":\" &&\n        line[col + 2] === \"/\"\n      ) {\n        inBlockComment = false;\n        col += 2;\n        continue;\n      }\n      if (inBlockComment) continue;\n\n      // 行コメント開始\n      if (!inDQ && !inSQ && !inBT && ch === \"/\" && next === \"/\") {\n        inLineComment = true;\n        break;\n      }\n      // ブロックコメント開始 (/^:)\n      if (\n        !inDQ &&\n        !inSQ &&\n        !inBT &&\n        ch === \"/\" &&\n        next === \"^\" &&\n        line[col + 2] === \":\"\n      ) {\n        inBlockComment = true;\n        col += 2;\n        continue;\n      }\n\n      if (inLineComment) continue;\n\n      // ^6 モディファイア → 次の文字はスキップ（意図的な大文字化）\n      if (ch === \"^\" && next === \"6\") {\n        col += 2; // ^6 と次の文字をスキップ\n        continue;\n      }\n\n      // 文字列リテラルの開閉\n      if (ch === \"^\" && next === \"2\") {\n        inDQ = !inDQ;\n        col += 1;\n        continue;\n      }\n      if (ch === \"^\" && next === \"7\") {\n        inSQ = !inSQ;\n        col += 1;\n        continue;\n      }\n      if (ch === \"^\" && next === \"@\") {\n        inBT = !inBT;\n        col += 1;\n        continue;\n      }\n\n      // 文字列内の処理\n      if (inDQ || inSQ || inBT) {\n        // capitalizeInStrings が有効なら、文字列内の大文字も警告\n        if (capitalizeInStrings && /[A-Z]/.test(ch)) {\n          warnings.push({\n            line: lineNum + 1,\n            column: col + 1,\n            char: ch,\n            message: `Uppercase letter '${ch}' found in string. Use ^6${ch.toLowerCase()} instead.`,\n          });\n        }\n        continue;\n      }\n\n      // 他の ^X シーケンスをスキップ\n      if (ch === \"^\" && next && /[0-9\\-^\\\\@\\[\\];:,./]/.test(next)) {\n        col += 1;\n        continue;\n      }\n\n      // 大文字の警告\n      if (/[A-Z]/.test(ch)) {\n        warnings.push({\n          line: lineNum + 1,\n          column: col + 1,\n          char: ch,\n          message: `Uppercase letter '${ch}' found. Use ^6${ch.toLowerCase()} instead.`,\n        });\n      }\n      // Shift キーが必要な記号の警告（_ と # は別途警告）\n      else if (symbolToNoshift[ch] && ch !== \"_\" && ch !== \"#\") {\n        warnings.push({\n          line: lineNum + 1,\n          column: col + 1,\n          char: ch,\n          message: `Symbol '${ch}' found. Use ${symbolToNoshift[ch]} instead.`,\n        });\n      }\n      // _ の警告（^\\ で代用可能）\n      else if (ch === \"_\") {\n        warnings.push({\n          line: lineNum + 1,\n          column: col + 1,\n          char: ch,\n          message: \"Underscore '_' found in code. Use ^\\\\ instead.\",\n        });\n      }\n      // # の警告（^3 で入力可能）\n      else if (ch === \"#\") {\n        warnings.push({\n          line: lineNum + 1,\n          column: col + 1,\n          char: ch,\n          message: \"Hash '#' found in code. Use ^3 instead.\",\n        });\n      }\n    }\n  }\n\n  return warnings;\n}\n\n// ======\n// 有効な ^X シーケンスの一覧（^3 は別扱い）\n// ======\nconst validCaretKeys = new Set(Object.keys(noShiftMap).map((k) => k[1]));\n// ^6 (capitalize) も有効\nvalidCaretKeys.add(\"6\");\n\nexport interface DiagnosticError {\n  line: number;\n  column: number;\n  message: string;\n}\n\n/**\n * NoShift.js ソースコードの構文エラーを検出する。\n *\n * 検出するエラー:\n *   - 閉じられていない文字列リテラル (^2, ^7, ^@)\n *   - 閉じられていないブロックコメント (/^:)\n *   - 閉じられていないテンプレート式 (^4^[)\n *   - ファイル末尾の ^6 (大文字化対象の文字がない)\n *   - 不明な ^ シーケンス\n */\nexport function diagnose(nsjsCode: string): DiagnosticError[] {\n  const errors: DiagnosticError[] = [];\n  const lines = nsjsCode.split(\"\\n\");\n\n  // 状態: \"NORMAL\" | \"DQ\" | \"SQ\" | \"BT\" | \"BLOCK_COMMENT\" | \"LINE_COMMENT\" | \"TEMPLATE_EXPR\"\n  type DiagnoseState =\n    | \"NORMAL\"\n    | \"DQ\"\n    | \"SQ\"\n    | \"BT\"\n    | \"BLOCK_COMMENT\"\n    | \"LINE_COMMENT\"\n    | \"TEMPLATE_EXPR\";\n\n  let state: DiagnoseState = \"NORMAL\";\n  const stateStack: DiagnoseState[] = [];\n  // 開始位置のスタック (エラー報告用)\n  interface OpenPosition {\n    line: number;\n    column: number;\n    type: string;\n  }\n  const openPositions: OpenPosition[] = [];\n\n  for (let lineNum = 0; lineNum < lines.length; lineNum++) {\n    const line = lines[lineNum];\n\n    // 行コメントは行ごとにリセット\n    if (state === \"LINE_COMMENT\") {\n      state = stateStack.pop() || \"NORMAL\";\n    }\n\n    for (let col = 0; col < line.length; col++) {\n      const ch = line[col];\n      const next = col + 1 < line.length ? line[col + 1] : undefined;\n      const next2 = col + 2 < line.length ? line[col + 2] : undefined;\n\n      // エスケープ (\\^X) をスキップ\n      if (ch === \"\\\\\" && next === \"^\") {\n        col += 2;\n        continue;\n      }\n      // \\\\\\\\ をスキップ\n      if (ch === \"\\\\\" && next === \"\\\\\") {\n        col += 1;\n        continue;\n      }\n\n      // ── ブロックコメント内 ──\n      if (state === \"BLOCK_COMMENT\") {\n        if (ch === \"^\" && next === \":\" && next2 === \"/\") {\n          state = stateStack.pop() || \"NORMAL\";\n          openPositions.pop();\n          col += 2;\n        }\n        continue;\n      }\n\n      // ── 行コメント内 ──\n      if (state === \"LINE_COMMENT\") {\n        continue; // 改行で自動リセット（上で処理済み）\n      }\n\n      // ── 文字列内 ──\n      if (state === \"DQ\") {\n        if (ch === \"^\" && next === \"2\") {\n          state = stateStack.pop() || \"NORMAL\";\n          openPositions.pop();\n          col += 1;\n        }\n        continue;\n      }\n      if (state === \"SQ\") {\n        if (ch === \"^\" && next === \"7\") {\n          state = stateStack.pop() || \"NORMAL\";\n          openPositions.pop();\n          col += 1;\n        }\n        continue;\n      }\n      if (state === \"BT\") {\n        // テンプレート式展開開始\n        if (ch === \"^\" && next === \"4\" && (next2 === \"^\" || next2 === \"[\")) {\n          if (next2 === \"^\" && col + 3 < line.length && line[col + 3] === \"[\") {\n            stateStack.push(state);\n            openPositions.push({\n              line: lineNum + 1,\n              column: col + 1,\n              type: \"TEMPLATE_EXPR\",\n            });\n            state = \"TEMPLATE_EXPR\";\n            col += 3;\n          } else if (next2 === \"[\") {\n            stateStack.push(state);\n            openPositions.push({\n              line: lineNum + 1,\n              column: col + 1,\n              type: \"TEMPLATE_EXPR\",\n            });\n            state = \"TEMPLATE_EXPR\";\n            col += 2;\n          }\n          continue;\n        }\n        if (ch === \"^\" && next === \"@\") {\n          state = stateStack.pop() || \"NORMAL\";\n          openPositions.pop();\n          col += 1;\n        }\n        continue;\n      }\n\n      // ── テンプレート式内 ──\n      if (state === \"TEMPLATE_EXPR\") {\n        if (ch === \"^\" && next === \"]\") {\n          state = stateStack.pop() || \"NORMAL\";\n          openPositions.pop();\n          col += 1;\n          continue;\n        }\n        // テンプレート式内の文字列もチェック → fall through to NORMAL logic\n      }\n\n      // ── NORMAL / TEMPLATE_EXPR 共通 ──\n\n      // 行コメント開始\n      if (ch === \"/\" && next === \"/\") {\n        stateStack.push(state);\n        state = \"LINE_COMMENT\";\n        break; // 行末まで読み飛ばし\n      }\n\n      // ブロックコメント開始 (/^:)\n      if (ch === \"/\" && next === \"^\" && next2 === \":\") {\n        stateStack.push(state);\n        openPositions.push({\n          line: lineNum + 1,\n          column: col + 1,\n          type: \"BLOCK_COMMENT\",\n        });\n        state = \"BLOCK_COMMENT\";\n        col += 2;\n        continue;\n      }\n\n      // ダブルクォート文字列開始 (^2)\n      if (ch === \"^\" && next === \"2\") {\n        stateStack.push(state);\n        openPositions.push({ line: lineNum + 1, column: col + 1, type: \"DQ\" });\n        state = \"DQ\";\n        col += 1;\n        continue;\n      }\n\n      // シングルクォート文字列開始 (^7)\n      if (ch === \"^\" && next === \"7\") {\n        stateStack.push(state);\n        openPositions.push({ line: lineNum + 1, column: col + 1, type: \"SQ\" });\n        state = \"SQ\";\n        col += 1;\n        continue;\n      }\n\n      // テンプレートリテラル開始 (^@)\n      if (ch === \"^\" && next === \"@\") {\n        stateStack.push(state);\n        openPositions.push({ line: lineNum + 1, column: col + 1, type: \"BT\" });\n        state = \"BT\";\n        col += 1;\n        continue;\n      }\n\n      // ^6 大文字化: 次の文字がなければエラー\n      if (ch === \"^\" && next === \"6\") {\n        if (col + 2 >= line.length && lineNum === lines.length - 1) {\n          errors.push({\n            line: lineNum + 1,\n            column: col + 1,\n            message:\n              \"^6 at end of file with no following character to capitalize.\",\n          });\n        }\n        col += 2; // ^6 + 次の1文字をスキップ\n        continue;\n      }\n\n      // その他の ^X シーケンス: 有効性チェック\n      if (ch === \"^\" && next !== undefined) {\n        if (!validCaretKeys.has(next)) {\n          errors.push({\n            line: lineNum + 1,\n            column: col + 1,\n            message: `Unknown sequence '^${next}'.`,\n          });\n        }\n        col += 1;\n        continue;\n      }\n\n      // ファイル末尾の孤立 ^\n      if (ch === \"^\" && next === undefined && lineNum === lines.length - 1) {\n        errors.push({\n          line: lineNum + 1,\n          column: col + 1,\n          message: \"Lone '^' at end of file.\",\n        });\n      }\n    }\n  }\n\n  // ── 閉じられていない構造を報告 ──\n  while (openPositions.length > 0) {\n    const pos = openPositions.pop()!;\n    const labels: Record<string, string> = {\n      DQ: \"string literal (^2...^2)\",\n      SQ: \"string literal (^7...^7)\",\n      BT: \"template literal (^@...^@)\",\n      BLOCK_COMMENT: \"block comment (/^:...^:/)\",\n      TEMPLATE_EXPR: \"template expression (^4^[...^])\",\n    };\n    errors.push({\n      line: pos.line,\n      column: pos.column,\n      message: `Unclosed ${labels[pos.type] || pos.type} opened here.`,\n    });\n  }\n\n  return errors;\n}\n","import { promises as fs } from \"fs\";\nimport path from \"path\";\n\nexport interface CompilerOptions {\n  rootdir: string;\n  outdir: string;\n  warnuppercase: boolean;\n  capitalizeinstrings: boolean;\n  noheader: boolean;\n}\n\nexport interface NsjsConfig {\n  compileroptions: CompilerOptions;\n}\n\nconst DEFAULT_CONFIG: NsjsConfig = {\n  compileroptions: {\n    rootdir: \"src\",\n    outdir: \"dist\",\n    warnuppercase: true,\n    capitalizeinstrings: true,\n    noheader: false,\n  },\n};\n\n/**\n * プロジェクトルートの nsjsconfig.json を読み込む。\n * ファイルが存在しない場合はデフォルト設定を返す。\n */\nexport async function loadConfig(\n  cwd: string = process.cwd(),\n): Promise<NsjsConfig> {\n  const configPath = path.join(cwd, \"nsjsconfig.json\");\n\n  try {\n    const raw = await fs.readFile(configPath, \"utf-8\");\n    const userConfig = JSON.parse(raw) as Partial<NsjsConfig>;\n\n    return {\n      compileroptions: {\n        ...DEFAULT_CONFIG.compileroptions,\n        ...(userConfig.compileroptions ?? {}),\n      },\n    };\n  } catch (e: unknown) {\n    if ((e as NodeJS.ErrnoException).code === \"ENOENT\") {\n      return DEFAULT_CONFIG;\n    }\n    throw new Error(`Failed to parse nsjsconfig.json: ${(e as Error).message}`);\n  }\n}\n","{\n  \"name\": \"noshift.js\",\n  \"version\": \"0.15.1\",\n  \"description\": \"Joke language.\",\n  \"bin\": {\n    \"nsc\": \"./dist/cli.cjs\"\n  },\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"import\": {\n        \"types\": \"./dist/index.d.mts\",\n        \"default\": \"./dist/index.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./dist/index.d.cts\",\n        \"default\": \"./dist/index.cjs\"\n      }\n    }\n  },\n  \"type\": \"module\",\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"format\": \"prettier --write ./src/\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/otoneko1102/NoShift.js.git\"\n  },\n  \"keywords\": [\n    \"noshift\",\n    \"nsjs\",\n    \"joke\",\n    \"language\",\n    \"lang\"\n  ],\n  \"author\": \"otoneko.\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/otoneko1102/NoShift.js/issues\"\n  },\n  \"homepage\": \"https://noshift.js.org\",\n  \"dependencies\": {\n    \"commander\": \"^14.0.3\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^25.3.0\",\n    \"prettier\": \"^3.8.1\",\n    \"tsup\": \"^8.5.1\",\n    \"tsx\": \"^4.21.0\",\n    \"typescript\": \"^5.9.3\",\n    \"vitest\": \"^4.0.18\"\n  },\n  \"engines\": {\n    \"node\": \">=22.12.0\"\n  }\n}\n","import pkg from \"../package.json\";\n\nfunction getVersion(): string {\n  return pkg.version;\n}\n/**\n * コンパイル済み JS にヘッダーコメントを挿入する。\n * shebang (#!) がある場合はその行の直後に挿入。\n *\n * @param js - コンパイル済み JavaScript\n * @param version - バージョン文字列（省略時は package.json から取得）\n * @returns ヘッダー付き JavaScript\n */\nexport function addHeader(js: string, version?: string): string {\n  const ver = version ?? getVersion();\n  const header = `// Generated by NoShift.js ${ver}`;\n\n  if (js.startsWith(\"#!\")) {\n    const newlineIndex = js.indexOf(\"\\n\");\n    if (newlineIndex === -1) {\n      // shebang のみでコードがない\n      return js + \"\\n\" + header + \"\\n\";\n    }\n    const shebang = js.slice(0, newlineIndex + 1);\n    const rest = js.slice(newlineIndex + 1);\n    return shebang + header + \"\\n\" + rest;\n  }\n\n  return header + \"\\n\" + js;\n}\n","// シグナルハンドリングユーティリティ\n\nlet isHandlerRegistered = false;\nlet cleanupCallbacks: (() => void | Promise<void>)[] = [];\n\n/**\n * Ctrl+C (SIGINT) を適切にハンドリングする\n * @param cleanup - クリーンアップ時に実行する関数（オプション）\n */\nexport function handleSigint(cleanup?: () => void | Promise<void>): void {\n  if (cleanup) {\n    cleanupCallbacks.push(cleanup);\n  }\n\n  if (!isHandlerRegistered) {\n    isHandlerRegistered = true;\n\n    process.on(\"SIGINT\", async () => {\n      console.log(\"\\n\"); // 改行を追加してきれいに終了\n\n      // すべてのクリーンアップコールバックを実行\n      for (const cb of cleanupCallbacks) {\n        try {\n          await cb();\n        } catch {\n          // エラーは無視\n        }\n      }\n\n      process.exit(0);\n    });\n  }\n}\n\n/**\n * inquirer のキャンセルエラーをチェック\n */\nexport function isUserCancelled(error: unknown): boolean {\n  return (\n    error != null &&\n    typeof error === \"object\" &&\n    ((\"name\" in error && (error as Error).name === \"ExitPromptError\") ||\n      (\"message\" in error &&\n        (error as Error).message === \"User force closed the prompt\"))\n  );\n}\n","// シンプルなロガーユーティリティ（ANSI エスケープコードを使用）\n\nconst colors = {\n  reset: \"\\x1b[0m\",\n  bright: \"\\x1b[1m\",\n  dim: \"\\x1b[2m\",\n  red: \"\\x1b[31m\",\n  green: \"\\x1b[32m\",\n  yellow: \"\\x1b[33m\",\n  blue: \"\\x1b[34m\",\n  magenta: \"\\x1b[35m\",\n  cyan: \"\\x1b[36m\",\n  gray: \"\\x1b[90m\",\n};\n\nexport function success(message: string): void {\n  console.log(`${colors.green}✓${colors.reset} ${message}`);\n}\n\nexport function error(message: string): void {\n  console.error(`${colors.red}✗${colors.reset} ${message}`);\n}\n\nexport function info(message: string): void {\n  console.log(`${colors.blue}ℹ${colors.reset} ${message}`);\n}\n\nexport function warn(message: string): void {\n  console.log(`${colors.yellow}⚠${colors.reset} ${message}`);\n}\n\nexport function step(message: string): void {\n  console.log(`${colors.cyan}→${colors.reset} ${message}`);\n}\n\nexport function dim(message: string): void {\n  console.log(`${colors.dim}${message}${colors.reset}`);\n}\n\nexport function bold(text: string): string {\n  return `${colors.bright}${text}${colors.reset}`;\n}\n\nexport function highlight(text: string): string {\n  return `${colors.cyan}${text}${colors.reset}`;\n}\n\nexport function errorCode(code: string, message: string): void {\n  console.error(`${colors.red}error ${code}:${colors.reset} ${message}`);\n}\n","import { writeFile, readFile, access } from \"fs/promises\";\nimport path from \"path\";\nimport { handleSigint } from \"../signal-handler.js\";\nimport * as logger from \"../logger.js\";\nimport { askConfirm } from \"../prompt.js\";\n\nconst DEFAULT_CONFIG = {\n  compileroptions: {\n    rootdir: \"src\",\n    outdir: \"dist\",\n    warnuppercase: true,\n    capitalizeinstrings: true,\n    noheader: false,\n  },\n};\n\n/** .prettierrc 系のファイル名（優先順） */\nconst PRETTIERRC_FILES = [\n  \".prettierrc\",\n  \".prettierrc.json\",\n  \".prettierrc.yml\",\n  \".prettierrc.yaml\",\n  \".prettierrc.json5\",\n  \".prettierrc.cjs\",\n  \".prettierrc.mjs\",\n  \"prettier.config.js\",\n  \"prettier.config.cjs\",\n  \"prettier.config.mjs\",\n];\n\nconst PLUGIN_NAME = \"prettier-plugin-noshift.js\";\n\n/**\n * 既存の .prettierrc / .prettierrc.json を読み込み plugins に追加する。\n * JSON 形式のみ自動編集可能。それ以外は手動追加を案内する。\n */\nasync function addPluginToExistingConfig(filePath: string): Promise<void> {\n  const basename = path.basename(filePath);\n  const isJson = basename === \".prettierrc\" || basename === \".prettierrc.json\";\n\n  if (!isJson) {\n    logger.warn(\n      `Found ${basename} — please add \"${PLUGIN_NAME}\" to the plugins array manually.`,\n    );\n    return;\n  }\n\n  try {\n    const raw = await readFile(filePath, \"utf-8\");\n    const config = JSON.parse(raw) as Record<string, unknown>;\n    const plugins = Array.isArray(config.plugins)\n      ? (config.plugins as string[])\n      : [];\n\n    if (plugins.includes(PLUGIN_NAME)) {\n      logger.info(`${basename} already contains \"${PLUGIN_NAME}\".`);\n      return;\n    }\n\n    plugins.push(PLUGIN_NAME);\n    config.plugins = plugins;\n    await writeFile(filePath, JSON.stringify(config, null, 2) + \"\\n\");\n    logger.success(`Added \"${PLUGIN_NAME}\" to ${basename}`);\n  } catch (err) {\n    logger.error(`Failed to update ${basename}: ${(err as Error).message}`);\n    logger.warn(`Please add \"${PLUGIN_NAME}\" to the plugins array manually.`);\n  }\n}\n\n/**\n * 新しい .prettierrc を作成する\n */\nasync function createPrettierConfig(): Promise<void> {\n  const prettierConfig = {\n    semi: true,\n    singleQuote: false,\n    trailingComma: \"es5\",\n    plugins: [PLUGIN_NAME],\n  };\n  await writeFile(\n    \".prettierrc\",\n    JSON.stringify(prettierConfig, null, 2) + \"\\n\",\n  );\n  logger.success(\"Created .prettierrc\");\n}\n\nexport default async function init(): Promise<void> {\n  handleSigint();\n\n  const cwd = process.cwd();\n  const configPath = path.join(cwd, \"nsjsconfig.json\");\n\n  // ── nsjsconfig.json ──\n  let configExists = false;\n  try {\n    await access(configPath);\n    configExists = true;\n  } catch {\n    // not found — OK\n  }\n\n  if (configExists) {\n    logger.warn(\"nsjsconfig.json already exists in the current directory.\");\n    const overwrite = await askConfirm(\"Overwrite?\", false);\n    if (!overwrite) {\n      logger.info(\"Skipped nsjsconfig.json\");\n    } else {\n      await writeFile(\n        configPath,\n        JSON.stringify(DEFAULT_CONFIG, null, 2) + \"\\n\",\n      );\n      logger.success(\"Overwritten nsjsconfig.json\");\n    }\n  } else {\n    await writeFile(configPath, JSON.stringify(DEFAULT_CONFIG, null, 2) + \"\\n\");\n    logger.success(\"Created nsjsconfig.json\");\n  }\n\n  logger.dim(\n    `  compileroptions.rootdir : ${DEFAULT_CONFIG.compileroptions.rootdir}`,\n  );\n  logger.dim(\n    `  compileroptions.outdir  : ${DEFAULT_CONFIG.compileroptions.outdir}`,\n  );\n\n  // ── Prettier ──\n  const usePrettier = await askConfirm(\"Set up Prettier?\", true);\n\n  if (usePrettier) {\n    // 既存の prettierrc 系ファイルを探す\n    let existingFile: string | null = null;\n    for (const name of PRETTIERRC_FILES) {\n      try {\n        await access(path.join(cwd, name));\n        existingFile = name;\n        break;\n      } catch {\n        // not found — continue\n      }\n    }\n\n    if (existingFile) {\n      await addPluginToExistingConfig(path.join(cwd, existingFile));\n    } else {\n      await createPrettierConfig();\n    }\n\n    // .prettierignore\n    const ignorePath = path.join(cwd, \".prettierignore\");\n    let ignoreExists = false;\n    try {\n      await access(ignorePath);\n      ignoreExists = true;\n    } catch {\n      // not found\n    }\n    if (!ignoreExists) {\n      await writeFile(ignorePath, \"dist/\\nnode_modules/\\n\");\n      logger.success(\"Created .prettierignore\");\n    }\n  }\n\n  console.log(\"\");\n}\n","/**\n * 対話式プロンプトユーティリティ\n */\nimport readline from \"readline/promises\";\n\n/**\n * ユーザーにテキスト入力を求める\n */\nexport async function askInput(\n  question: string,\n  defaultValue?: string,\n): Promise<string> {\n  const rl = readline.createInterface({\n    input: process.stdin,\n    output: process.stdout,\n  });\n  const suffix = defaultValue ? ` (${defaultValue})` : \"\";\n  try {\n    const answer = await rl.question(`${question}${suffix}: `);\n    return answer.trim() || defaultValue || \"\";\n  } finally {\n    rl.close();\n  }\n}\n\n/**\n * ユーザーに Yes/No を尋ねる\n */\nexport async function askConfirm(\n  question: string,\n  defaultYes: boolean = true,\n): Promise<boolean> {\n  const rl = readline.createInterface({\n    input: process.stdin,\n    output: process.stdout,\n  });\n  const hint = defaultYes ? \"Y/n\" : \"y/N\";\n  try {\n    const answer = await rl.question(`${question} (${hint}): `);\n    const trimmed = answer.trim().toLowerCase();\n    if (trimmed === \"\") return defaultYes;\n    return trimmed === \"y\" || trimmed === \"yes\";\n  } finally {\n    rl.close();\n  }\n}\n","import { rm, access } from \"fs/promises\";\nimport path from \"path\";\nimport { loadConfig } from \"../config.js\";\nimport { handleSigint } from \"../signal-handler.js\";\nimport * as logger from \"../logger.js\";\n\nexport default async function clean(): Promise<void> {\n  handleSigint();\n\n  const cwd = process.cwd();\n\n  let config;\n  try {\n    config = await loadConfig(cwd);\n  } catch (e) {\n    logger.errorCode(\"NS0\", (e as Error).message);\n    process.exit(1);\n  }\n\n  const outDir = path.resolve(cwd, config.compileroptions.outdir);\n\n  try {\n    await access(outDir);\n  } catch {\n    logger.info(\n      `Nothing to clean (${logger.highlight(config.compileroptions.outdir)} does not exist).`,\n    );\n    return;\n  }\n\n  await rm(outDir, { recursive: true, force: true });\n  logger.success(`Deleted ${logger.highlight(config.compileroptions.outdir)}`);\n}\n","import { promises as fs } from \"fs\";\nimport path from \"path\";\nimport { spawn } from \"child_process\";\nimport convert, { diagnose } from \"../convert.js\";\nimport { loadConfig, type NsjsConfig } from \"../config.js\";\nimport { addHeader } from \"../header.js\";\nimport { handleSigint } from \"../signal-handler.js\";\nimport * as logger from \"../logger.js\";\nimport { askInput } from \"../prompt.js\";\n\ninterface RunCliOptions {\n  noHeader?: boolean;\n}\n\nexport default async function run(\n  file?: string,\n  cliOptions: RunCliOptions = {},\n): Promise<void> {\n  handleSigint();\n\n  if (!file) {\n    file = await askInput(\"File path\");\n    if (!file) {\n      logger.error(\"File path is required.\");\n      process.exit(1);\n    }\n  }\n\n  const cwd = process.cwd();\n  let config: NsjsConfig;\n  try {\n    config = await loadConfig(cwd);\n  } catch {\n    config = {\n      compileroptions: {\n        rootdir: \"src\",\n        outdir: \"dist\",\n        warnuppercase: true,\n        capitalizeinstrings: true,\n        noheader: false,\n      },\n    };\n  }\n\n  const convertOptions = {\n    capitalizeInStrings: config.compileroptions.capitalizeinstrings !== false,\n  };\n\n  const filePath = path.resolve(cwd, file);\n\n  let code: string;\n  try {\n    code = await fs.readFile(filePath, \"utf-8\");\n  } catch {\n    logger.errorCode(\"NS2\", `File not found: ${filePath}`);\n    process.exit(1);\n  }\n\n  // 構文エラーチェック\n  const syntaxErrors = diagnose(code);\n  if (syntaxErrors.length > 0) {\n    const relative = path.relative(cwd, filePath).replace(/\\\\/g, \"/\");\n    for (const e of syntaxErrors) {\n      logger.errorCode(\n        \"NS1\",\n        `${relative}:${e.line}:${e.column} - ${e.message}`,\n      );\n    }\n    logger.error(`Found ${syntaxErrors.length} syntax error(s).`);\n    process.exit(1);\n  }\n\n  const noHeader = cliOptions.noHeader || config.compileroptions.noheader;\n  let js = convert(code, convertOptions);\n  if (!noHeader) {\n    js = addHeader(js);\n  }\n\n  // ソースファイルと同じディレクトリに一時ファイルを作成する。\n  const dir = path.dirname(filePath);\n  const base = path.basename(filePath, \".nsjs\");\n  const tempFile = path.join(dir, `${base}.__nsc_tmp__.mjs`);\n\n  try {\n    await fs.writeFile(tempFile, js, \"utf-8\");\n\n    await new Promise<void>((resolve, reject) => {\n      const child = spawn(process.execPath, [tempFile], {\n        stdio: \"inherit\",\n        env: process.env,\n      });\n      child.on(\"close\", (exitCode) => {\n        if (exitCode === 0) resolve();\n        else\n          reject(\n            Object.assign(new Error(`Process exited with code ${exitCode}`), {\n              code: exitCode,\n            }),\n          );\n      });\n      child.on(\"error\", reject);\n    });\n  } catch (e) {\n    if ((e as { code?: number }).code !== 0) {\n      const exitCode = (e as { code?: number }).code;\n      process.exit(typeof exitCode === \"number\" ? exitCode : 1);\n    }\n  } finally {\n    await fs.unlink(tempFile).catch(() => {});\n  }\n}\n","import { execSync } from \"child_process\";\nimport fs from \"fs/promises\";\nimport path from \"path\";\nimport { handleSigint } from \"../signal-handler.js\";\nimport * as logger from \"../logger.js\";\nimport { askInput, askConfirm } from \"../prompt.js\";\n\ninterface CreateOptions {\n  linter?: boolean;\n  prettier?: boolean;\n}\n\nexport default async function create(\n  projectNameArg?: string,\n  options: CreateOptions = {},\n): Promise<void> {\n  handleSigint();\n\n  const cwd = process.cwd();\n\n  // ── プロジェクト名 ──\n  let projectName = projectNameArg;\n  if (!projectName) {\n    projectName = await askInput(\"Project name\", \"my-noshift-app\");\n  }\n\n  // ── Linter ──\n  let useLinter: boolean;\n  if (options.linter === false) {\n    useLinter = false;\n  } else {\n    useLinter = await askConfirm(\"Use @noshift.js/lint?\", true);\n  }\n\n  // ── Prettier ──\n  let usePrettier: boolean;\n  if (options.prettier === false) {\n    usePrettier = false;\n  } else {\n    usePrettier = await askConfirm(\"Use Prettier?\", true);\n  }\n\n  const projectPath = path.join(cwd, projectName);\n\n  // Create project directory\n  logger.step(\"Creating project directory ...\");\n  await fs.mkdir(projectPath, { recursive: true });\n  logger.dim(`  ${projectPath}`);\n\n  process.chdir(projectPath);\n\n  // npm init\n  logger.step(\"Initializing npm ...\");\n  execSync(\"npm init -y\", { stdio: \"ignore\" });\n\n  // Add scripts to package.json\n  const pkgPath = path.join(projectPath, \"package.json\");\n  const pkg = JSON.parse(await fs.readFile(pkgPath, \"utf-8\"));\n  pkg.scripts = {} as Record<string, string>;\n  if (useLinter) {\n    pkg.scripts.lint = \"nslint\";\n  }\n  if (usePrettier) {\n    pkg.scripts.format = \"prettier --write ./src\";\n  }\n  pkg.scripts.compile = \"nsc\";\n  pkg.scripts.dev = \"nsc watch\";\n  pkg.scripts.clean = \"nsc clean\";\n  pkg.scripts.script = \"nsc run\";\n  await fs.writeFile(pkgPath, JSON.stringify(pkg, null, 2) + \"\\n\");\n\n  // Create nsjsconfig.json\n  const nsjsconfig = {\n    compileroptions: {\n      rootdir: \"src\",\n      outdir: \"dist\",\n      warnuppercase: true,\n      capitalizeinstrings: true,\n      noheader: false,\n    },\n  };\n  await fs.writeFile(\n    \"nsjsconfig.json\",\n    JSON.stringify(nsjsconfig, null, 2) + \"\\n\",\n  );\n  logger.success(\"Created nsjsconfig.json\");\n\n  // Linter\n  if (useLinter) {\n    logger.step(\"Installing @noshift.js/lint ...\");\n    execSync(\"npm install --save-dev @noshift.js/lint\", {\n      stdio: \"ignore\",\n    });\n\n    let linterConfig: Record<string, unknown>;\n    try {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      const { createDefaultConfig } = (await import(\n        \"@noshift.js/lint\" as any\n      )) as { createDefaultConfig: () => Record<string, unknown> };\n      linterConfig = createDefaultConfig();\n    } catch {\n      linterConfig = {\n        rules: {\n          \"unclosed-string\": \"error\",\n          \"unclosed-comment\": \"error\",\n          \"unclosed-template-expr\": \"error\",\n          \"unknown-caret-sequence\": \"error\",\n          \"lone-caret\": \"error\",\n          \"capitalize-eof\": \"error\",\n          \"uppercase-in-code\": \"warning\",\n          \"trailing-whitespace\": \"off\",\n          \"no-consecutive-blank-lines\": \"off\",\n        },\n      };\n    }\n\n    await fs.writeFile(\n      \"nsjslinter.json\",\n      JSON.stringify(linterConfig, null, 2) + \"\\n\",\n    );\n    logger.success(\"Created nsjslinter.json\");\n  }\n\n  // Prettier\n  if (usePrettier) {\n    logger.step(\"Installing Prettier & prettier-plugin-noshift.js ...\");\n    execSync(\"npm install --save-dev prettier prettier-plugin-noshift.js\", {\n      stdio: \"ignore\",\n    });\n\n    const prettierConfig = {\n      semi: true,\n      singleQuote: false,\n      trailingComma: \"es5\",\n      plugins: [\"prettier-plugin-noshift.js\"],\n    };\n    await fs.writeFile(\n      \".prettierrc\",\n      JSON.stringify(prettierConfig, null, 2) + \"\\n\",\n    );\n    logger.success(\"Created .prettierrc\");\n\n    await fs.writeFile(\".prettierignore\", \"dist/\\nnode_modules/\\n\");\n    logger.success(\"Created .prettierignore\");\n  }\n\n  // Install noshift.js\n  logger.step(\"Installing noshift.js ...\");\n  execSync(\"npm install --save-dev noshift.js\", { stdio: \"ignore\" });\n\n  // Create project files\n  logger.step(\"Creating project files ...\");\n  await fs.mkdir(\"src\", { recursive: true });\n  await fs.writeFile(\n    \"src/index.nsjs\",\n    \"console.log^8^2^6hello, ^6world!^2^9;\\n\",\n  );\n\n  // .gitignore\n  await fs.writeFile(\".gitignore\", \"node_modules/\\ndist/\\n\");\n\n  // README.md\n  const readme = `# ${projectName}\n\nA [NoShift.js](https://github.com/otoneko1102/NoShift.js) project.\n\n## Compile\n\n\\`\\`\\`bash\nnsc\n\\`\\`\\`\n\n## Dev (watch mode)\n\n\\`\\`\\`bash\nnsc watch\n\\`\\`\\`\n`;\n\n  await fs.writeFile(\"README.md\", readme);\n\n  // Success message\n  console.log(\"\");\n  logger.success(\"Project created successfully!\");\n  console.log(\"\");\n  logger.info(\"Next steps:\");\n  console.log(`  ${logger.highlight(`cd ${projectName}`)}`);\n  console.log(`  ${logger.highlight(\"nsc\")}`);\n  console.log(\"\");\n}\n","import { promises as fs } from \"fs\";\nimport path from \"path\";\nimport convert, { checkUppercaseWarnings, diagnose } from \"../convert.js\";\nimport { loadConfig } from \"../config.js\";\nimport { addHeader } from \"../header.js\";\nimport { handleSigint } from \"../signal-handler.js\";\nimport * as logger from \"../logger.js\";\n\ninterface CompileCliOptions {\n  noHeader?: boolean;\n}\n\nasync function findNsjsFiles(dir: string): Promise<string[] | null> {\n  let entries;\n  try {\n    entries = await fs.readdir(dir, { withFileTypes: true });\n  } catch {\n    return null;\n  }\n\n  const files: string[] = [];\n  for (const entry of entries) {\n    const fullPath = path.join(dir, entry.name);\n    if (entry.isDirectory()) {\n      const nested = await findNsjsFiles(fullPath);\n      if (nested) files.push(...nested);\n    } else if (entry.name.endsWith(\".nsjs\") && !entry.name.startsWith(\"_\")) {\n      files.push(fullPath);\n    }\n  }\n  return files;\n}\n\nexport default async function compile(\n  cliOptions: CompileCliOptions = {},\n): Promise<void> {\n  handleSigint();\n\n  const cwd = process.cwd();\n\n  let config;\n  try {\n    config = await loadConfig(cwd);\n  } catch (e) {\n    logger.errorCode(\"NS0\", (e as Error).message);\n    process.exit(1);\n  }\n\n  const rootDir = path.resolve(cwd, config.compileroptions.rootdir);\n  const outDir = path.resolve(cwd, config.compileroptions.outdir);\n\n  const files = await findNsjsFiles(rootDir);\n\n  if (files === null) {\n    logger.errorCode(\n      \"NS0\",\n      `rootdir '${config.compileroptions.rootdir}' not found.`,\n    );\n    process.exit(1);\n  }\n\n  if (files.length === 0) {\n    logger.info(\"No .nsjs files found.\");\n    return;\n  }\n\n  await fs.mkdir(outDir, { recursive: true });\n\n  let compiled = 0;\n  let errors = 0;\n  let totalWarnings = 0;\n  const warnUppercase = config.compileroptions.warnuppercase !== false;\n  const convertOptions = {\n    capitalizeInStrings: config.compileroptions.capitalizeinstrings !== false,\n  };\n\n  for (const file of files) {\n    const relative = path.relative(rootDir, file);\n    const destPath = path.join(outDir, relative).replace(/\\.nsjs$/, \".js\");\n\n    try {\n      const code = await fs.readFile(file, \"utf-8\");\n\n      // 構文エラーチェック\n      const syntaxErrors = diagnose(code);\n      if (syntaxErrors.length > 0) {\n        for (const e of syntaxErrors) {\n          logger.errorCode(\n            \"NS1\",\n            `${relative.replace(/\\\\/g, \"/\")}:${e.line}:${e.column} - ${e.message}`,\n          );\n        }\n        errors += syntaxErrors.length;\n        continue;\n      }\n\n      // 大文字警告チェック\n      if (warnUppercase) {\n        const warnings = checkUppercaseWarnings(code, convertOptions);\n        for (const w of warnings) {\n          logger.warn(\n            `${relative.replace(/\\\\/g, \"/\")}:${w.line}:${w.column} - ${w.message}`,\n          );\n          totalWarnings++;\n        }\n      }\n\n      let js = convert(code, convertOptions);\n\n      // ヘッダー挿入（noheader が明示的に true でない場合）\n      const noHeader = cliOptions.noHeader || config.compileroptions.noheader;\n      if (!noHeader) {\n        js = addHeader(js);\n      }\n\n      await fs.mkdir(path.dirname(destPath), { recursive: true });\n      await fs.writeFile(destPath, js, \"utf-8\");\n\n      logger.dim(\n        `  ${relative.replace(/\\\\/g, \"/\")} → ${path.relative(cwd, destPath).replace(/\\\\/g, \"/\")}`,\n      );\n      compiled++;\n    } catch (e) {\n      logger.errorCode(\n        \"NS1\",\n        `${relative.replace(/\\\\/g, \"/\")}: ${(e as Error).message}`,\n      );\n      errors++;\n    }\n  }\n\n  console.log(\"\");\n  if (errors > 0) {\n    logger.error(`Found ${errors} error(s). Compiled ${compiled} file(s).`);\n    process.exit(1);\n  } else {\n    let msg = `Compiled ${compiled} file(s).`;\n    if (totalWarnings > 0) {\n      msg += ` (${totalWarnings} warning(s))`;\n    }\n    logger.success(msg);\n  }\n}\n"],"mappings":"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","names":["import_fs","import_path","import_fs","import_path","path","fs","version","fs","path","import_promises","import_path","readline","DEFAULT_CONFIG","path","import_promises","import_path","path","import_fs","import_path","path","fs","import_child_process","import_promises","import_path","path","fs","import_fs","import_path","findNsjsFiles","fs","path","path"]}