)]}'
{
  "commit": "5adfdc84d86d42fb554c419d93a2c6ebf4bacf98",
  "tree": "e0536fafb712f80f620ef590ce3d2fe6ce280abe",
  "parents": [
    "3c41a22eb21017eee9aa7ec4af92decffc6cfd9d"
  ],
  "author": {
    "name": "Paul Regan",
    "email": "64710345+paulr34@users.noreply.github.com",
    "time": "Wed Nov 12 11:13:29 2025 -0500"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Nov 12 11:13:29 2025 -0500"
  },
  "message": "Add --no-emoji option to disable emoji characters in console output (#1635)\n\n* Add --no-emoji option to disable emoji characters in console output\n\n- Added emoji-util.js utility for conditional emoji formatting\n- Updated args.js to include --no-emoji command line option\n- Modified script-util.js to use formatMessage() for all emoji output\n- Updated startup.js to use emoji utility\n- Added documentation and demo scripts\n- Resolves issues with stdout when piping to automation tools\n- Python no longer chokes on emoji characters in output\n- Maintains backward compatibility (emojis enabled by default)\n\n* Fix env.formatMessage() for startup.test.js - add emoji utility wrapper to env.js\n\n* Update src-script/script-util.js\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e\n\n* Fix license header corruption and standardize emoji usage\n\n- Fixed corrupted license header in script-util.js\n- Standardized to use emojiUtil.formatMessage() in script files\n- Keep env.formatMessage() wrapper for startup.js compatibility\n- Both approaches work correctly for their respective module systems\n\n* Fix comprehensive emoji support across ZAP\n\n- Fix broken emoji syntax in startup.js and gsdk-public-regen.js\n- Add emoji support to gsdk-public-regen.js and zap-package-metadata.js\n- Create fix-emojis.js utility script for systematic emoji conversion\n- All emojis now respect --no-emoji flag and NO_EMOJI environment variable\n\n* Complete emoji support implementation across all ZAP scripts\n\n- Add emoji utility to zap-start.js and zap-uitest.js\n- Fix remaining hardcoded emojis in zap-start.js, zap-uitest.js, and gsdk-public-regen.js\n- All console output now respects --no-emoji flag and NO_EMOJI environment variable\n- Comprehensive solution ensures automation-friendly output for CI/CD pipelines\n\n* Make emoji utility stateful and testable\n\n- Replace static constant with dynamic isEmojiDisabled() function\n- Add setEmojiDisabled() and resetEmojiState() for testing\n- Export testing functions through env.js wrapper\n- Fix test to use CommonJS emoji-util directly\n- Maintains environment variable and command line flag detection\n- Enables proper unit testing of emoji functionality\n\n* Restore accidentally deleted API documentation\n\n- Restore docs/api.md from commit 48de0060 (before emoji changes)\n- File was accidentally truncated in commit 5f8ef3e8 due to JSDoc generation failure\n- JSDoc fails with Node.js v24 due to util.isRegExp compatibility issue\n- Restores all 28,406 lines of API documentation\n\n* Remove EMOJI_IMPLEMENTATION_SUMMARY.md\n\n- Remove redundant summary file\n- Documentation is already covered in docs/no-emoji-implementation.md\n\n* Remove temporary development files\n\n- Remove demo-no-emoji.js (was just a demonstration script)\n- Remove fix-emojis.js (was a utility script for development)\n- Keep only the production implementation files\n\n* Refactor: Consolidate formatMessage function to follow DRY principle\n\n- Remove duplicate formatMessage function from emoji-util.js\n- Keep single formatMessage implementation in env.js for general message formatting\n- Update all imports and function calls across codebase from emojiUtil.formatMessage to env.formatMessage\n- Maintain emoji-util.js focus on emoji state management only\n- Improve code organization by placing message formatting in general utilities module\n\nFixes code duplication and follows best practices for single responsibility principle.\n\n* Fix module syntax in env.js: convert ES modules to CommonJS\n\n- Convert 42 \u0027export function\u0027 declarations to regular functions\n- Convert \u0027export const environmentVariable\u0027 to regular const\n- Add all exports to module.exports object for CommonJS compatibility\n- Resolves CI failure caused by mixed ES/CommonJS module syntax\n- Maintains all existing functionality while fixing Node.js module loading\n\n* Fix formatMessage implementation in env.js\n\n- Implement formatMessage logic directly instead of calling non-existent emojiUtil.formatMessage\n- Use emojiUtil.isEmojiDisabled() to check state and format accordingly\n- Resolves TypeError: emojiUtil.formatMessage is not a function\n\n* Address PR review: Fix emoji corruption and rename formatMessage to formatEmojiMessage\n\n- Fix corrupted emojis (� symbols) that appeared due to encoding issues during sed operations\n- Rename formatMessage() to formatEmojiMessage() for better semantic clarity\n- Restore proper Unicode emojis: 👈 for read operations, 👉 for write operations, 🔧 for processing\n- Update all 94+ function call sites across startup.js, script utilities, and tests\n- Verify emoji functionality works correctly with comprehensive test coverage\n- Remove obsolete test files and documentation per cleanup requirements\n\nAddresses feedback from PR review regarding function naming and emoji display issues.\n\n* Clean up empty development files\n\nRemove empty files that were created during development:\n- EMOJI_IMPLEMENTATION_SUMMARY.md\n- demo-no-emoji.js\n- fix-emojis.js\n\nThese were temporary files that never got populated with content.\n\n* update apack.json\n\n* remove package-lock.json\n\n* cleanup\n\n* cleanup\n\n* adding helper functions because they are needed for the tests\n\n* add tests and cleanup\n\n* more emojies\n\n* bug fix\n\n* fix ci\n\n* fix to new format\n\n* fix emoji\n\n* fix tests\n\n---------\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4a887c772c003a7e323a13c6c244a4e5ccb3f490",
      "old_mode": 33188,
      "old_path": "apack.json",
      "new_id": "df08720a30e52563b7ffe3d9f9780b388cdec428",
      "new_mode": 33188,
      "new_path": "apack.json"
    },
    {
      "type": "modify",
      "old_id": "b7d54f4676a802c911879862e654456243cc96a8",
      "old_mode": 33188,
      "old_path": "docs/api.md",
      "new_id": "8e4eeecee4e7f37af22433e557f8874612756442",
      "new_mode": 33188,
      "new_path": "docs/api.md"
    },
    {
      "type": "modify",
      "old_id": "528b36376335d2ac5e7b51c114fee9a513dc7eb7",
      "old_mode": 33188,
      "old_path": "src-electron/db/zap-schema.sql",
      "new_id": "859e17718f6da1444113a95215349660d5f131a3",
      "new_mode": 33188,
      "new_path": "src-electron/db/zap-schema.sql"
    },
    {
      "type": "modify",
      "old_id": "f68135875f1de93d01bf656229ec4e5706c12b83",
      "old_mode": 33188,
      "old_path": "src-electron/generator/generation-engine.js",
      "new_id": "7c04ec9bdd48f47a9373fa788a9a49bf98d7f875",
      "new_mode": 33188,
      "new_path": "src-electron/generator/generation-engine.js"
    },
    {
      "type": "modify",
      "old_id": "0c265ee738703693c6410c60087057e4db2294cc",
      "old_mode": 33188,
      "old_path": "src-electron/importexport/import-json.js",
      "new_id": "c190765c5d4c1b1d38bad96d47afd7b76eb35854",
      "new_mode": 33188,
      "new_path": "src-electron/importexport/import-json.js"
    },
    {
      "type": "modify",
      "old_id": "eebddf57e8da329122255be82aac4443fa5c37f8",
      "old_mode": 33188,
      "old_path": "src-electron/main-process/startup.js",
      "new_id": "6c4ddf6538bd4186ceceba179e9908facee42604",
      "new_mode": 33188,
      "new_path": "src-electron/main-process/startup.js"
    },
    {
      "type": "modify",
      "old_id": "b55d6cf57c1c4b3728070f65eb0feea2c3d40d61",
      "old_mode": 33188,
      "old_path": "src-electron/util/args.js",
      "new_id": "2df31cdbe42ed59e8950f4b0d6d4f895449ad31b",
      "new_mode": 33188,
      "new_path": "src-electron/util/args.js"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3291ef1abaa0fab4e6d4e578acd80ad791a27ab1",
      "new_mode": 33188,
      "new_path": "src-electron/util/emoji-util.js"
    },
    {
      "type": "modify",
      "old_id": "bfca7423f9fe85ecbdd5e86979bd5deedb3e2f86",
      "old_mode": 33188,
      "old_path": "src-electron/util/env.js",
      "new_id": "7a87bcde44f486513a27c56d222e2db21610a30c",
      "new_mode": 33188,
      "new_path": "src-electron/util/env.js"
    },
    {
      "type": "modify",
      "old_id": "ec37740f8e010a31f274e30b9329d165e25cb029",
      "old_mode": 33188,
      "old_path": "src-electron/util/post-import-api.js",
      "new_id": "41baa04b97ee83fb2f0f934e9d471f5e5d85e70e",
      "new_mode": 33188,
      "new_path": "src-electron/util/post-import-api.js"
    },
    {
      "type": "modify",
      "old_id": "f61185697c5060f3f79733a3ac7ec035f3fdbb54",
      "old_mode": 33188,
      "old_path": "src-electron/util/sdk-util.js",
      "new_id": "4ed398f344add1bb34c0cd6206bb71ae5b179e55",
      "new_mode": 33188,
      "new_path": "src-electron/util/sdk-util.js"
    },
    {
      "type": "modify",
      "old_id": "3923589083e57024de24a400187f2b9d3ffa3b69",
      "old_mode": 33188,
      "old_path": "src-electron/util/util.js",
      "new_id": "772508b47d92e803c814d23d5b158df64fa75030",
      "new_mode": 33188,
      "new_path": "src-electron/util/util.js"
    },
    {
      "type": "modify",
      "old_id": "00832947b833e1e1df4d8aa698e57402f804cfe9",
      "old_mode": 33188,
      "old_path": "src-electron/validation/conformance-checker.js",
      "new_id": "d2108233f4c3ea50a463ba3ded6440faf6d9b07c",
      "new_mode": 33188,
      "new_path": "src-electron/validation/conformance-checker.js"
    },
    {
      "type": "modify",
      "old_id": "422c9c19b4d4a7738d2175e80333102653ddd87d",
      "old_mode": 33188,
      "old_path": "src-script/build-backend.js",
      "new_id": "f5e475e56bce980e74b71cdfd2dc52e4440ca929",
      "new_mode": 33188,
      "new_path": "src-script/build-backend.js"
    },
    {
      "type": "modify",
      "old_id": "0d70223ab52abaa7774b81c245fa883f18506927",
      "old_mode": 33261,
      "old_path": "src-script/gsdk-public-regen.js",
      "new_id": "5177cd16bca4a7894ecd2d83615ebea95ae2728f",
      "new_mode": 33261,
      "new_path": "src-script/gsdk-public-regen.js"
    },
    {
      "type": "modify",
      "old_id": "baba7fb2255e438d303041d0ba7005a05dbb92a1",
      "old_mode": 33188,
      "old_path": "src-script/license-check.js",
      "new_id": "df1c5fed15329f65068f463aa281789a59074ce9",
      "new_mode": 33188,
      "new_path": "src-script/license-check.js"
    },
    {
      "type": "modify",
      "old_id": "1897c2b89ef870c1e1db50022cef16db1222fb0d",
      "old_mode": 33188,
      "old_path": "src-script/script-util.js",
      "new_id": "fb8fe7a8589f69ed6df19d9edc986595542a88d1",
      "new_mode": 33188,
      "new_path": "src-script/script-util.js"
    },
    {
      "type": "modify",
      "old_id": "c0102e3e2e73c5e5dcd350ddfc412ab17386b0d6",
      "old_mode": 33261,
      "old_path": "src-script/zap-combine-reports.js",
      "new_id": "726b82956970ab08b78617b78834e411bd6245ce",
      "new_mode": 33261,
      "new_path": "src-script/zap-combine-reports.js"
    },
    {
      "type": "modify",
      "old_id": "cf34f6e36e5a867e7c5dbd8304c4fb01ebf7c7ea",
      "old_mode": 33261,
      "old_path": "src-script/zap-package-metadata.js",
      "new_id": "f08b8e6db42102740d62563f3bce206d2ecbee53",
      "new_mode": 33261,
      "new_path": "src-script/zap-package-metadata.js"
    },
    {
      "type": "modify",
      "old_id": "040b634a69f659e35f78ce0198c128eb1c6e6e08",
      "old_mode": 33261,
      "old_path": "src-script/zap-start.js",
      "new_id": "8b45a410e7b79dcc6d9a7cf3f8dbb2cb3f512811",
      "new_mode": 33261,
      "new_path": "src-script/zap-start.js"
    },
    {
      "type": "modify",
      "old_id": "31e7bddd383bb03cfd55989eb87aba5c6067fe5c",
      "old_mode": 33261,
      "old_path": "src-script/zap-uitest.js",
      "new_id": "66871841cc111d8eeb3e5fd9ab927a7fd1b26d0e",
      "new_mode": 33261,
      "new_path": "src-script/zap-uitest.js"
    },
    {
      "type": "modify",
      "old_id": "d5af8c791fc201445cf634e5b5fc2b992c26c511",
      "old_mode": 33261,
      "old_path": "src-script/zap-update-package-version.js",
      "new_id": "2e63b7ae6b29cc0191f048cd25dd15ce8d9386c5",
      "new_mode": 33261,
      "new_path": "src-script/zap-update-package-version.js"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4db4036651794037b7a5982cf8a23fa04cfd1a77",
      "new_mode": 33188,
      "new_path": "test/emoji-util.test.js"
    },
    {
      "type": "modify",
      "old_id": "3ed81a92d8c18a8863785a1c621719b93fa7490b",
      "old_mode": 33188,
      "old_path": "test/feature.test.js",
      "new_id": "5a2d4bf9818a633e2a0fb54a8979a0e2a8fee8eb",
      "new_mode": 33188,
      "new_path": "test/feature.test.js"
    },
    {
      "type": "modify",
      "old_id": "f0ebf6e1b0fe2c9bf7dbae3bec9fdff99eaffe83",
      "old_mode": 33188,
      "old_path": "test/importexport.test.js",
      "new_id": "7437d65cb8889c2fa1eba799c7f8bf8b8e4fd869",
      "new_mode": 33188,
      "new_path": "test/importexport.test.js"
    },
    {
      "type": "modify",
      "old_id": "611d82f1ff7d54fa9b0ed035d5084a807d5a84a1",
      "old_mode": 33188,
      "old_path": "test/multi-protocol.test.js",
      "new_id": "8b31aedd9385ab277b927c2047ba54c4a6ca4f13",
      "new_mode": 33188,
      "new_path": "test/multi-protocol.test.js"
    },
    {
      "type": "modify",
      "old_id": "57edca85c4f4fe5e8e8b6bf6ea37c938a2a9de9b",
      "old_mode": 33188,
      "old_path": "test/notification.test.js",
      "new_id": "173a60f20197ba2ff90aa0b88e3736d76556f499",
      "new_mode": 33188,
      "new_path": "test/notification.test.js"
    },
    {
      "type": "modify",
      "old_id": "d759c902ea4e15650e442d53df39ffb244908364",
      "old_mode": 33188,
      "old_path": "test/spec-check.test.js",
      "new_id": "284988affb3ec76bef22a42531fefc6c81d23dc6",
      "new_mode": 33188,
      "new_path": "test/spec-check.test.js"
    }
  ]
}
