@gadgetinc/ggt 1.7.4 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +142 -31
- package/dist/{add-KJLV4API.js → add-TWLGKL2T.js} +8 -7
- package/dist/add-TWLGKL2T.js.map +7 -0
- package/dist/agent-plugin-TN24O7FB.js +10 -0
- package/dist/agent-plugin-TN24O7FB.js.map +7 -0
- package/dist/chunk-2742UPMB.js +10 -0
- package/dist/chunk-2742UPMB.js.map +7 -0
- package/dist/chunk-3OM5WM7E.js +2 -0
- package/dist/chunk-3OM5WM7E.js.map +7 -0
- package/dist/chunk-442CSROP.js +66 -0
- package/dist/chunk-442CSROP.js.map +7 -0
- package/dist/chunk-DR4CXBD6.js +11 -0
- package/dist/chunk-DR4CXBD6.js.map +7 -0
- package/dist/chunk-F255O64V.js +2 -0
- package/dist/chunk-F255O64V.js.map +7 -0
- package/dist/chunk-GJGBTM5Y.js +2 -0
- package/dist/chunk-GJGBTM5Y.js.map +7 -0
- package/dist/chunk-HCULGPBH.js +2 -0
- package/dist/chunk-HCULGPBH.js.map +7 -0
- package/dist/chunk-J232VCIM.js +2 -0
- package/dist/chunk-J232VCIM.js.map +7 -0
- package/dist/chunk-JG2QCDK2.js +118 -0
- package/dist/chunk-JG2QCDK2.js.map +7 -0
- package/dist/chunk-JKZNSRLU.js +8 -0
- package/dist/chunk-JKZNSRLU.js.map +7 -0
- package/dist/chunk-JYE5LLIF.js +9 -0
- package/dist/chunk-JYE5LLIF.js.map +7 -0
- package/dist/{chunk-SX5LO3XQ.js → chunk-KKIL22RY.js} +1 -1
- package/dist/{chunk-SX5LO3XQ.js.map → chunk-KKIL22RY.js.map} +1 -1
- package/dist/chunk-L2XBSR7G.js +2 -0
- package/dist/chunk-L2XBSR7G.js.map +7 -0
- package/dist/chunk-MW6MXMSN.js +2 -0
- package/dist/chunk-MW6MXMSN.js.map +7 -0
- package/dist/chunk-OUIZQC4D.js +12 -0
- package/dist/chunk-OUIZQC4D.js.map +7 -0
- package/dist/chunk-R6KJLEKY.js +28 -0
- package/dist/chunk-R6KJLEKY.js.map +7 -0
- package/dist/chunk-SIR6HLN3.js +69 -0
- package/dist/chunk-SIR6HLN3.js.map +7 -0
- package/dist/chunk-SVWK2NXG.js +2 -0
- package/dist/chunk-SVWK2NXG.js.map +7 -0
- package/dist/chunk-T6UHSWMT.js +2 -0
- package/dist/{chunk-J2OYMAMD.js.map → chunk-T6UHSWMT.js.map} +2 -2
- package/dist/{chunk-JSGXXXFU.js → chunk-WB6O2V5D.js} +6 -6
- package/dist/{chunk-JSGXXXFU.js.map → chunk-WB6O2V5D.js.map} +3 -3
- package/dist/chunk-XC4F2TLW.js +113 -0
- package/dist/chunk-XC4F2TLW.js.map +7 -0
- package/dist/chunk-YFUOXDPK.js +10 -0
- package/dist/chunk-YFUOXDPK.js.map +7 -0
- package/dist/chunk-ZSREFZXV.js +211 -0
- package/dist/chunk-ZSREFZXV.js.map +7 -0
- package/dist/chunk-ZYDMXS5R.js +6 -0
- package/dist/chunk-ZYDMXS5R.js.map +7 -0
- package/dist/{configure-CXY6JQB7.js → configure-UJS7V2JX.js} +2 -2
- package/dist/configure-UJS7V2JX.js.map +7 -0
- package/dist/debugger-QN2MCLBL.js +41 -0
- package/dist/debugger-QN2MCLBL.js.map +7 -0
- package/dist/deploy-J74PHPQA.js +25 -0
- package/dist/deploy-J74PHPQA.js.map +7 -0
- package/dist/dev-GGUSOOYP.js +59 -0
- package/dist/dev-GGUSOOYP.js.map +7 -0
- package/dist/esm-D77XRR65.js +38 -0
- package/dist/esm-D77XRR65.js.map +7 -0
- package/dist/eval-L6WHUFLU.js +54 -0
- package/dist/eval-L6WHUFLU.js.map +7 -0
- package/dist/getMachineId-bsd-QUXN4NKS.js +2 -0
- package/dist/getMachineId-bsd-QUXN4NKS.js.map +7 -0
- package/dist/getMachineId-darwin-TCXBAX22.js +3 -0
- package/dist/getMachineId-darwin-TCXBAX22.js.map +7 -0
- package/dist/getMachineId-linux-IJ3LYIOX.js +2 -0
- package/dist/getMachineId-linux-IJ3LYIOX.js.map +7 -0
- package/dist/getMachineId-unsupported-IKXBUCYY.js +2 -0
- package/dist/getMachineId-unsupported-IKXBUCYY.js.map +7 -0
- package/dist/getMachineId-win-6CX7VSFF.js +2 -0
- package/dist/getMachineId-win-6CX7VSFF.js.map +7 -0
- package/dist/ggt-5XNRJZSW.js +44 -0
- package/dist/ggt-5XNRJZSW.js.map +7 -0
- package/dist/{list-3QZTSHQV.js → list-756D46N5.js} +2 -2
- package/dist/list-756D46N5.js.map +7 -0
- package/dist/login-GMWQRH7V.js +2 -0
- package/dist/{logout-SWWGI27Q.js → logout-LQABTJFD.js} +2 -2
- package/dist/logout-LQABTJFD.js.map +7 -0
- package/dist/logs-AQZB272X.js +28 -0
- package/dist/logs-AQZB272X.js.map +7 -0
- package/dist/main.js +1 -43
- package/dist/main.js.map +4 -4
- package/dist/{open-J2ZVNVJ6.js → open-OMZWPQ66.js} +11 -11
- package/dist/open-OMZWPQ66.js.map +7 -0
- package/dist/problems-FZJKH52E.js +14 -0
- package/dist/problems-FZJKH52E.js.map +7 -0
- package/dist/pull-XYCYN7QN.js +28 -0
- package/dist/pull-XYCYN7QN.js.map +7 -0
- package/dist/push-3QM7ZFTC.js +2 -0
- package/dist/status-PWAXNK5G.js +14 -0
- package/dist/status-PWAXNK5G.js.map +7 -0
- package/dist/update-QIQFJFRQ.js +2 -0
- package/dist/update-QIQFJFRQ.js.map +7 -0
- package/dist/var-N4WGGJXZ.js +159 -0
- package/dist/var-N4WGGJXZ.js.map +7 -0
- package/dist/{version-NZHW3VLV.js → version-AJKSJJDC.js} +2 -2
- package/dist/version-AJKSJJDC.js.map +7 -0
- package/dist/{whoami-MIJFO4MW.js → whoami-KJYDSQSD.js} +2 -2
- package/dist/whoami-KJYDSQSD.js.map +7 -0
- package/package.json +64 -74
- package/dist/add-KJLV4API.js.map +0 -7
- package/dist/chunk-24OT7GHO.js +0 -65
- package/dist/chunk-24OT7GHO.js.map +0 -7
- package/dist/chunk-HN3YKQ3C.js +0 -6
- package/dist/chunk-HN3YKQ3C.js.map +0 -7
- package/dist/chunk-J2OYMAMD.js +0 -2
- package/dist/chunk-JBY5A44K.js +0 -7
- package/dist/chunk-JBY5A44K.js.map +0 -7
- package/dist/chunk-L5H5T2T6.js +0 -66
- package/dist/chunk-L5H5T2T6.js.map +0 -7
- package/dist/chunk-M6L2X3GX.js +0 -194
- package/dist/chunk-M6L2X3GX.js.map +0 -7
- package/dist/chunk-MHTXRD5G.js +0 -2
- package/dist/chunk-MHTXRD5G.js.map +0 -7
- package/dist/chunk-OIVNACS7.js +0 -12
- package/dist/chunk-OIVNACS7.js.map +0 -7
- package/dist/chunk-QXWICGG6.js +0 -2
- package/dist/chunk-QXWICGG6.js.map +0 -7
- package/dist/chunk-WNAYBYSG.js +0 -8
- package/dist/chunk-WNAYBYSG.js.map +0 -7
- package/dist/chunk-X47UA3VR.js +0 -2
- package/dist/chunk-X47UA3VR.js.map +0 -7
- package/dist/chunk-XGQQOMPO.js +0 -2
- package/dist/chunk-XGQQOMPO.js.map +0 -7
- package/dist/chunk-XKYYKHP4.js +0 -28
- package/dist/chunk-XKYYKHP4.js.map +0 -7
- package/dist/chunk-YU6P3ESA.js +0 -121
- package/dist/chunk-YU6P3ESA.js.map +0 -7
- package/dist/configure-CXY6JQB7.js.map +0 -7
- package/dist/deploy-XFZBJJWP.js +0 -25
- package/dist/deploy-XFZBJJWP.js.map +0 -7
- package/dist/dev-GG6TU3DJ.js +0 -59
- package/dist/dev-GG6TU3DJ.js.map +0 -7
- package/dist/esm-PLVGBDRY.js +0 -38
- package/dist/esm-PLVGBDRY.js.map +0 -7
- package/dist/list-3QZTSHQV.js.map +0 -7
- package/dist/login-HKGCVIWO.js +0 -2
- package/dist/logout-SWWGI27Q.js.map +0 -7
- package/dist/logs-DW4PH3U6.js +0 -28
- package/dist/logs-DW4PH3U6.js.map +0 -7
- package/dist/open-J2ZVNVJ6.js.map +0 -7
- package/dist/pull-ORNQFSFG.js +0 -28
- package/dist/pull-ORNQFSFG.js.map +0 -7
- package/dist/push-KMZZ6JJL.js +0 -2
- package/dist/status-JAREJZ4X.js +0 -14
- package/dist/status-JAREJZ4X.js.map +0 -7
- package/dist/version-NZHW3VLV.js.map +0 -7
- package/dist/whoami-MIJFO4MW.js.map +0 -7
- /package/dist/{login-HKGCVIWO.js.map → login-GMWQRH7V.js.map} +0 -0
- /package/dist/{push-KMZZ6JJL.js.map → push-3QM7ZFTC.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../node_modules/.pnpm/isexe@4.0.0/node_modules/isexe/src/posix.ts", "../node_modules/.pnpm/isexe@4.0.0/node_modules/isexe/src/win32.ts", "../node_modules/.pnpm/isexe@4.0.0/node_modules/isexe/dist/commonjs/options.js", "../node_modules/.pnpm/isexe@4.0.0/node_modules/isexe/src/index.ts", "../node_modules/.pnpm/which@6.0.1/node_modules/which/lib/index.js", "../node_modules/.pnpm/shellwords@0.1.1/node_modules/shellwords/lib/shellwords.js", "../node_modules/.pnpm/is-docker@2.2.1/node_modules/is-docker/index.js", "../node_modules/.pnpm/is-wsl@2.2.0/node_modules/is-wsl/index.js", "../node_modules/.pnpm/node-notifier@10.0.1/node_modules/node-notifier/lib/utils.js", "../node_modules/.pnpm/node-notifier@10.0.1/node_modules/node-notifier/notifiers/notifysend.js", "../node_modules/.pnpm/node-notifier@10.0.1/node_modules/node-notifier/lib/checkGrowl.js", "../node_modules/.pnpm/growly@1.3.0/node_modules/growly/lib/gntp.js", "../node_modules/.pnpm/growly@1.3.0/node_modules/growly/lib/growly.js", "../node_modules/.pnpm/node-notifier@10.0.1/node_modules/node-notifier/notifiers/growl.js", "../node_modules/.pnpm/node-notifier@10.0.1/node_modules/node-notifier/notifiers/notificationcenter.js", "../node_modules/.pnpm/node-notifier@10.0.1/node_modules/node-notifier/notifiers/balloon.js", "../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/rng.js", "../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/regex.js", "../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/validate.js", "../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/stringify.js", "../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/v1.js", "../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/parse.js", "../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/v35.js", "../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/md5.js", "../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/v3.js", "../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/v4.js", "../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/sha1.js", "../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/v5.js", "../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/nil.js", "../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/version.js", "../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-node/index.js", "../node_modules/.pnpm/node-notifier@10.0.1/node_modules/node-notifier/notifiers/toaster.js", "../node_modules/.pnpm/node-notifier@10.0.1/node_modules/node-notifier/index.js", "../src/commands/dev.ts", "../node_modules/.pnpm/watcher@2.3.1_patch_hash=13bfcfa6ba91e30ec5d967b9dd42986b47c554ad2ab4fce1c31087e3da3c3b63/node_modules/watcher/dist/watcher.js", "../node_modules/.pnpm/watcher@2.3.1_patch_hash=13bfcfa6ba91e30ec5d967b9dd42986b47c554ad2ab4fce1c31087e3da3c3b63/node_modules/watcher/dist/constants.js", "../node_modules/.pnpm/watcher@2.3.1_patch_hash=13bfcfa6ba91e30ec5d967b9dd42986b47c554ad2ab4fce1c31087e3da3c3b63/node_modules/watcher/dist/enums.js", "../node_modules/.pnpm/watcher@2.3.1_patch_hash=13bfcfa6ba91e30ec5d967b9dd42986b47c554ad2ab4fce1c31087e3da3c3b63/node_modules/watcher/dist/utils.js", "../node_modules/.pnpm/dettle@1.0.5/node_modules/dettle/dist/index.js", "../node_modules/.pnpm/dettle@1.0.5/node_modules/dettle/dist/debounce.js", "../node_modules/.pnpm/dettle@1.0.5/node_modules/dettle/dist/throttle.js", "../node_modules/.pnpm/stubborn-fs@1.2.5/node_modules/stubborn-fs/dist/index.js", "../node_modules/.pnpm/stubborn-fs@1.2.5/node_modules/stubborn-fs/dist/attemptify.js", "../node_modules/.pnpm/stubborn-fs@1.2.5/node_modules/stubborn-fs/dist/constants.js", "../node_modules/.pnpm/stubborn-fs@1.2.5/node_modules/stubborn-fs/dist/handlers.js", "../node_modules/.pnpm/stubborn-fs@1.2.5/node_modules/stubborn-fs/dist/retryify.js", "../node_modules/.pnpm/stubborn-fs@1.2.5/node_modules/stubborn-fs/dist/retryify_queue.js", "../node_modules/.pnpm/tiny-readdir@2.7.4_patch_hash=3dce4e110ba2c24db565b9002cc31dd2dc4034f4db553ad7855e07872f737b39/node_modules/tiny-readdir/dist/index.js", "../node_modules/.pnpm/promise-make-counter@1.0.2/node_modules/promise-make-counter/dist/index.js", "../node_modules/.pnpm/promise-make-naked@3.0.2/node_modules/promise-make-naked/dist/index.js", "../node_modules/.pnpm/promise-make-naked@3.0.2/node_modules/promise-make-naked/dist/utils.js", "../node_modules/.pnpm/tiny-readdir@2.7.4_patch_hash=3dce4e110ba2c24db565b9002cc31dd2dc4034f4db553ad7855e07872f737b39/node_modules/tiny-readdir/dist/constants.js", "../node_modules/.pnpm/tiny-readdir@2.7.4_patch_hash=3dce4e110ba2c24db565b9002cc31dd2dc4034f4db553ad7855e07872f737b39/node_modules/tiny-readdir/dist/utils.js", "../node_modules/.pnpm/watcher@2.3.1_patch_hash=13bfcfa6ba91e30ec5d967b9dd42986b47c554ad2ab4fce1c31087e3da3c3b63/node_modules/watcher/dist/watcher_handler.js", "../node_modules/.pnpm/watcher@2.3.1_patch_hash=13bfcfa6ba91e30ec5d967b9dd42986b47c554ad2ab4fce1c31087e3da3c3b63/node_modules/watcher/dist/watcher_locker.js", "../node_modules/.pnpm/watcher@2.3.1_patch_hash=13bfcfa6ba91e30ec5d967b9dd42986b47c554ad2ab4fce1c31087e3da3c3b63/node_modules/watcher/dist/watcher_locks_resolver.js", "../node_modules/.pnpm/watcher@2.3.1_patch_hash=13bfcfa6ba91e30ec5d967b9dd42986b47c554ad2ab4fce1c31087e3da3c3b63/node_modules/watcher/dist/watcher_poller.js", "../node_modules/.pnpm/watcher@2.3.1_patch_hash=13bfcfa6ba91e30ec5d967b9dd42986b47c554ad2ab4fce1c31087e3da3c3b63/node_modules/watcher/dist/lazy_map_set.js", "../node_modules/.pnpm/watcher@2.3.1_patch_hash=13bfcfa6ba91e30ec5d967b9dd42986b47c554ad2ab4fce1c31087e3da3c3b63/node_modules/watcher/dist/watcher_stats.js", "../src/services/output/footer.ts", "../src/services/output/notify.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * This is the Posix implementation of isexe, which uses the file\n * mode and uid/gid values.\n *\n * @module\n */\n\nimport { Stats, statSync } from 'node:fs'\nimport { stat } from 'node:fs/promises'\nimport { IsexeOptions } from './options.js'\n\n/**\n * Determine whether a path is executable according to the mode and\n * current (or specified) user and group IDs.\n */\nexport const isexe = async (\n path: string,\n options: IsexeOptions = {},\n): Promise<boolean> => {\n const { ignoreErrors = false } = options\n try {\n return checkStat(await stat(path), options)\n } catch (e) {\n const er = e as NodeJS.ErrnoException\n if (ignoreErrors || er.code === 'EACCES') return false\n throw er\n }\n}\n\n/**\n * Synchronously determine whether a path is executable according to\n * the mode and current (or specified) user and group IDs.\n */\nexport const sync = (\n path: string,\n options: IsexeOptions = {},\n): boolean => {\n const { ignoreErrors = false } = options\n try {\n return checkStat(statSync(path), options)\n } catch (e) {\n const er = e as NodeJS.ErrnoException\n if (ignoreErrors || er.code === 'EACCES') return false\n throw er\n }\n}\n\nconst checkStat = (stat: Stats, options: IsexeOptions) =>\n stat.isFile() && checkMode(stat, options)\n\nconst checkMode = (stat: Stats, options: IsexeOptions) => {\n const myUid = options.uid ?? process.getuid?.()\n const myGroups = options.groups ?? process.getgroups?.() ?? []\n const myGid = options.gid ?? process.getgid?.() ?? myGroups[0]\n if (myUid === undefined || myGid === undefined) {\n throw new Error('cannot get uid or gid')\n }\n\n const groups = new Set([myGid, ...myGroups])\n\n const mod = stat.mode\n const uid = stat.uid\n const gid = stat.gid\n\n const u = parseInt('100', 8)\n const g = parseInt('010', 8)\n const o = parseInt('001', 8)\n const ug = u | g\n\n return !!(\n mod & o ||\n (mod & g && groups.has(gid)) ||\n (mod & u && uid === myUid) ||\n (mod & ug && myUid === 0)\n )\n}\n", "/**\n * This is the Windows implementation of isexe, which uses the file\n * extension and PATHEXT setting.\n *\n * @module\n */\n\nimport { Stats, statSync } from 'node:fs'\nimport { stat } from 'node:fs/promises'\nimport { IsexeOptions } from './options.js'\nimport { delimiter } from 'node:path'\n\n/**\n * Determine whether a path is executable based on the file extension\n * and PATHEXT environment variable (or specified pathExt option)\n */\nexport const isexe = async (\n path: string,\n options: IsexeOptions = {},\n): Promise<boolean> => {\n const { ignoreErrors = false } = options\n try {\n return checkStat(await stat(path), path, options)\n } catch (e) {\n const er = e as NodeJS.ErrnoException\n if (ignoreErrors || er.code === 'EACCES') return false\n throw er\n }\n}\n\n/**\n * Synchronously determine whether a path is executable based on the file\n * extension and PATHEXT environment variable (or specified pathExt option)\n */\nexport const sync = (\n path: string,\n options: IsexeOptions = {},\n): boolean => {\n const { ignoreErrors = false } = options\n try {\n return checkStat(statSync(path), path, options)\n } catch (e) {\n const er = e as NodeJS.ErrnoException\n if (ignoreErrors || er.code === 'EACCES') return false\n throw er\n }\n}\n\nconst checkPathExt = (path: string, options: IsexeOptions) => {\n const { pathExt = process.env.PATHEXT || '' } = options\n const peSplit = pathExt.split(delimiter)\n if (peSplit.indexOf('') !== -1) {\n return true\n }\n\n for (const pes of peSplit) {\n const p = pes.toLowerCase()\n const ext = path.substring(path.length - p.length).toLowerCase()\n\n if (p && ext === p) {\n return true\n }\n }\n return false\n}\n\nconst checkStat = (stat: Stats, path: string, options: IsexeOptions) =>\n stat.isFile() && checkPathExt(path, options)\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=options.js.map", "import * as posix from './posix.js'\nimport * as win32 from './win32.js'\nexport * from './options.js'\nexport { win32, posix }\n\nconst platform = process.env._ISEXE_TEST_PLATFORM_ || process.platform\nconst impl = platform === 'win32' ? win32 : posix\n\n/**\n * Determine whether a path is executable on the current platform.\n */\nexport const isexe = impl.isexe\n/**\n * Synchronously determine whether a path is executable on the\n * current platform.\n */\nexport const sync = impl.sync\n", "const { isexe, sync: isexeSync } = require('isexe')\nconst { join, delimiter, sep, posix } = require('path')\n\nconst isWindows = process.platform === 'win32'\n\n// used to check for slashed in commands passed in. always checks for the posix\n// seperator on all platforms, and checks for the current separator when not on\n// a posix platform. don't use the isWindows check for this since that is mocked\n// in tests but we still need the code to actually work when called. that is also\n// why it is ignored from coverage.\n/* istanbul ignore next */\nconst rSlash = new RegExp(`[${posix.sep}${sep === posix.sep ? '' : sep}]`.replace(/(\\\\)/g, '\\\\$1'))\nconst rRel = new RegExp(`^\\\\.${rSlash.source}`)\n\nconst getNotFoundError = (cmd) =>\n Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' })\n\nconst getPathInfo = (cmd, {\n path: optPath = process.env.PATH,\n pathExt: optPathExt = process.env.PATHEXT,\n delimiter: optDelimiter = delimiter,\n}) => {\n // If it has a slash, then we don't bother searching the pathenv.\n // just check the file itself, and that's it.\n const pathEnv = cmd.match(rSlash) ? [''] : [\n // windows always checks the cwd first\n ...(isWindows ? [process.cwd()] : []),\n ...(optPath || /* istanbul ignore next: very unusual */ '').split(optDelimiter),\n ]\n\n if (isWindows) {\n const pathExtExe = optPathExt ||\n ['.EXE', '.CMD', '.BAT', '.COM'].join(optDelimiter)\n const pathExt = pathExtExe.split(optDelimiter).flatMap((item) => [item, item.toLowerCase()])\n if (cmd.includes('.') && pathExt[0] !== '') {\n pathExt.unshift('')\n }\n return { pathEnv, pathExt, pathExtExe }\n }\n\n return { pathEnv, pathExt: [''] }\n}\n\nconst getPathPart = (raw, cmd) => {\n const pathPart = /^\".*\"$/.test(raw) ? raw.slice(1, -1) : raw\n const prefix = !pathPart && rRel.test(cmd) ? cmd.slice(0, 2) : ''\n return prefix + join(pathPart, cmd)\n}\n\nconst which = async (cmd, opt = {}) => {\n const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)\n const found = []\n\n for (const envPart of pathEnv) {\n const p = getPathPart(envPart, cmd)\n\n for (const ext of pathExt) {\n const withExt = p + ext\n const is = await isexe(withExt, { pathExt: pathExtExe, ignoreErrors: true })\n if (is) {\n if (!opt.all) {\n return withExt\n }\n found.push(withExt)\n }\n }\n }\n\n if (opt.all && found.length) {\n return found\n }\n\n if (opt.nothrow) {\n return null\n }\n\n throw getNotFoundError(cmd)\n}\n\nconst whichSync = (cmd, opt = {}) => {\n const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)\n const found = []\n\n for (const pathEnvPart of pathEnv) {\n const p = getPathPart(pathEnvPart, cmd)\n\n for (const ext of pathExt) {\n const withExt = p + ext\n const is = isexeSync(withExt, { pathExt: pathExtExe, ignoreErrors: true })\n if (is) {\n if (!opt.all) {\n return withExt\n }\n found.push(withExt)\n }\n }\n }\n\n if (opt.all && found.length) {\n return found\n }\n\n if (opt.nothrow) {\n return null\n }\n\n throw getNotFoundError(cmd)\n}\n\nmodule.exports = which\nwhich.sync = whichSync\n", "// Generated by CoffeeScript 1.3.3\n(function() {\n var scan;\n\n scan = function(string, pattern, callback) {\n var match, result;\n result = \"\";\n while (string.length > 0) {\n match = string.match(pattern);\n if (match) {\n result += string.slice(0, match.index);\n result += callback(match);\n string = string.slice(match.index + match[0].length);\n } else {\n result += string;\n string = \"\";\n }\n }\n return result;\n };\n\n exports.split = function(line) {\n var field, words;\n if (line == null) {\n line = \"\";\n }\n words = [];\n field = \"\";\n scan(line, /\\s*(?:([^\\s\\\\\\'\\\"]+)|'((?:[^\\'\\\\]|\\\\.)*)'|\"((?:[^\\\"\\\\]|\\\\.)*)\"|(\\\\.?)|(\\S))(\\s|$)?/, function(match) {\n var dq, escape, garbage, raw, seperator, sq, word;\n raw = match[0], word = match[1], sq = match[2], dq = match[3], escape = match[4], garbage = match[5], seperator = match[6];\n if (garbage != null) {\n throw new Error(\"Unmatched quote\");\n }\n field += word || (sq || dq || escape).replace(/\\\\(?=.)/, \"\");\n if (seperator != null) {\n words.push(field);\n return field = \"\";\n }\n });\n if (field) {\n words.push(field);\n }\n return words;\n };\n\n exports.escape = function(str) {\n if (str == null) {\n str = \"\";\n }\n if (str == null) {\n return \"''\";\n }\n return str.replace(/([^A-Za-z0-9_\\-.,:\\/@\\n])/g, \"\\\\$1\").replace(/\\n/g, \"'\\n'\");\n };\n\n}).call(this);\n", "'use strict';\nconst fs = require('fs');\n\nlet isDocker;\n\nfunction hasDockerEnv() {\n\ttry {\n\t\tfs.statSync('/.dockerenv');\n\t\treturn true;\n\t} catch (_) {\n\t\treturn false;\n\t}\n}\n\nfunction hasDockerCGroup() {\n\ttry {\n\t\treturn fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n\t} catch (_) {\n\t\treturn false;\n\t}\n}\n\nmodule.exports = () => {\n\tif (isDocker === undefined) {\n\t\tisDocker = hasDockerEnv() || hasDockerCGroup();\n\t}\n\n\treturn isDocker;\n};\n", "'use strict';\nconst os = require('os');\nconst fs = require('fs');\nconst isDocker = require('is-docker');\n\nconst isWsl = () => {\n\tif (process.platform !== 'linux') {\n\t\treturn false;\n\t}\n\n\tif (os.release().toLowerCase().includes('microsoft')) {\n\t\tif (isDocker()) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\ttry {\n\t\treturn fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft') ?\n\t\t\t!isDocker() : false;\n\t} catch (_) {\n\t\treturn false;\n\t}\n};\n\nif (process.env.__IS_WSL_TEST__) {\n\tmodule.exports = isWsl;\n} else {\n\tmodule.exports = isWsl();\n}\n", "const shellwords = require('shellwords');\nconst cp = require('child_process');\nconst semver = require('semver');\nconst isWSL = require('is-wsl');\nconst path = require('path');\nconst url = require('url');\nconst os = require('os');\nconst fs = require('fs');\nconst net = require('net');\n\nconst BUFFER_SIZE = 1024;\n\nfunction clone(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\n\nmodule.exports.clone = clone;\n\nconst escapeQuotes = function (str) {\n if (typeof str === 'string') {\n return str.replace(/([\"$`\\\\])/g, '\\\\$1');\n } else {\n return str;\n }\n};\n\nconst inArray = function (arr, val) {\n return arr.indexOf(val) !== -1;\n};\n\nconst notifySendFlags = {\n u: 'urgency',\n urgency: 'urgency',\n t: 'expire-time',\n time: 'expire-time',\n timeout: 'expire-time',\n e: 'expire-time',\n expire: 'expire-time',\n 'expire-time': 'expire-time',\n i: 'icon',\n icon: 'icon',\n c: 'category',\n category: 'category',\n subtitle: 'category',\n h: 'hint',\n hint: 'hint',\n a: 'app-name',\n 'app-name': 'app-name'\n};\n\nmodule.exports.command = function (notifier, options, cb) {\n notifier = shellwords.escape(notifier);\n if (process.env.DEBUG && process.env.DEBUG.indexOf('notifier') !== -1) {\n console.info('node-notifier debug info (command):');\n console.info('[notifier path]', notifier);\n console.info('[notifier options]', options.join(' '));\n }\n\n return cp.exec(notifier + ' ' + options.join(' '), function (\n error,\n stdout,\n stderr\n ) {\n if (error) return cb(error);\n cb(stderr, stdout);\n });\n};\n\nmodule.exports.fileCommand = function (notifier, options, cb) {\n if (process.env.DEBUG && process.env.DEBUG.indexOf('notifier') !== -1) {\n console.info('node-notifier debug info (fileCommand):');\n console.info('[notifier path]', notifier);\n console.info('[notifier options]', options.join(' '));\n }\n\n return cp.execFile(notifier, options, function (error, stdout, stderr) {\n if (error) return cb(error, stdout);\n cb(stderr, stdout);\n });\n};\n\nmodule.exports.fileCommandJson = function (notifier, options, cb) {\n if (process.env.DEBUG && process.env.DEBUG.indexOf('notifier') !== -1) {\n console.info('node-notifier debug info (fileCommandJson):');\n console.info('[notifier path]', notifier);\n console.info('[notifier options]', options.join(' '));\n }\n return cp.execFile(notifier, options, function (error, stdout, stderr) {\n if (error) return cb(error, stdout);\n if (!stdout) return cb(error, {});\n\n try {\n const data = JSON.parse(stdout);\n cb(!stderr ? null : stderr, data);\n } catch (e) {\n cb(e, stdout);\n }\n });\n};\n\nmodule.exports.immediateFileCommand = function (notifier, options, cb) {\n if (process.env.DEBUG && process.env.DEBUG.indexOf('notifier') !== -1) {\n console.info('node-notifier debug info (notifier):');\n console.info('[notifier path]', notifier);\n }\n\n notifierExists(notifier, function (_, exists) {\n if (!exists) {\n return cb(new Error('Notifier (' + notifier + ') not found on system.'));\n }\n cp.execFile(notifier, options);\n cb();\n });\n};\n\nfunction notifierExists(notifier, cb) {\n return fs.stat(notifier, function (err, stat) {\n if (!err) return cb(err, stat.isFile());\n\n // Check if Windows alias\n if (path.extname(notifier)) {\n // Has extentioon, no need to check more\n return cb(err, false);\n }\n\n // Check if there is an exe file in the directory\n return fs.stat(notifier + '.exe', function (err, stat) {\n if (err) return cb(err, false);\n cb(err, stat.isFile());\n });\n });\n}\n\nconst mapAppIcon = function (options) {\n if (options.appIcon) {\n options.icon = options.appIcon;\n delete options.appIcon;\n }\n\n return options;\n};\n\nconst mapText = function (options) {\n if (options.text) {\n options.message = options.text;\n delete options.text;\n }\n\n return options;\n};\n\nconst mapIconShorthand = function (options) {\n if (options.i) {\n options.icon = options.i;\n delete options.i;\n }\n\n return options;\n};\n\nmodule.exports.mapToNotifySend = function (options) {\n options = mapAppIcon(options);\n options = mapText(options);\n\n if (options.timeout === false) {\n delete options.timeout;\n }\n if (options.wait === true) {\n options['expire-time'] = 5; // 5 seconds default time (multipled below)\n }\n for (const key in options) {\n if (key === 'message' || key === 'title') continue;\n if (options.hasOwnProperty(key) && notifySendFlags[key] !== key) {\n options[notifySendFlags[key]] = options[key];\n delete options[key];\n }\n }\n if (typeof options['expire-time'] === 'undefined') {\n options['expire-time'] = 10 * 1000; // 10 sec timeout by default\n } else if (typeof options['expire-time'] === 'number') {\n options['expire-time'] = options['expire-time'] * 1000; // notify send uses milliseconds\n }\n\n return options;\n};\n\nmodule.exports.mapToGrowl = function (options) {\n options = mapAppIcon(options);\n options = mapIconShorthand(options);\n options = mapText(options);\n\n if (options.icon && !Buffer.isBuffer(options.icon)) {\n try {\n options.icon = fs.readFileSync(options.icon);\n } catch (ex) {}\n }\n\n return options;\n};\n\nmodule.exports.mapToMac = function (options) {\n options = mapIconShorthand(options);\n options = mapText(options);\n\n if (options.icon) {\n options.appIcon = options.icon;\n delete options.icon;\n }\n\n if (options.sound === true) {\n options.sound = 'Bottle';\n }\n\n if (options.sound === false) {\n delete options.sound;\n }\n\n if (options.sound && options.sound.indexOf('Notification.') === 0) {\n options.sound = 'Bottle';\n }\n\n if (options.wait === true) {\n if (!options.timeout) {\n options.timeout = 5;\n }\n delete options.wait;\n }\n\n if (!options.wait && !options.timeout) {\n if (options.timeout === false) {\n delete options.timeout;\n } else {\n options.timeout = 10;\n }\n }\n\n options.json = true;\n return options;\n};\n\nfunction isArray(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]';\n}\nmodule.exports.isArray = isArray;\n\nfunction noop() {}\nmodule.exports.actionJackerDecorator = function (emitter, options, fn, mapper) {\n options = clone(options);\n fn = fn || noop;\n\n if (typeof fn !== 'function') {\n throw new TypeError(\n 'The second argument must be a function callback. You have passed ' +\n typeof fn\n );\n }\n\n return function (err, data) {\n let resultantData = data;\n let metadata = {};\n // Allow for extra data if resultantData is an object\n if (resultantData && typeof resultantData === 'object') {\n metadata = resultantData;\n resultantData = resultantData.activationType;\n }\n\n // Sanitize the data\n if (resultantData) {\n resultantData = resultantData.toLowerCase().trim();\n if (resultantData.match(/^activate|clicked$/)) {\n resultantData = 'activate';\n }\n if (resultantData.match(/^timedout$/)) {\n resultantData = 'timeout';\n }\n }\n\n fn.apply(emitter, [err, resultantData, metadata]);\n if (!mapper || !resultantData) return;\n\n const key = mapper(resultantData);\n if (!key) return;\n emitter.emit(key, emitter, options, metadata);\n };\n};\n\nmodule.exports.constructArgumentList = function (options, extra) {\n const args = [];\n extra = extra || {};\n\n // Massive ugly setup. Default args\n const initial = extra.initial || [];\n const keyExtra = extra.keyExtra || '';\n const allowedArguments = extra.allowedArguments || [];\n const noEscape = extra.noEscape !== undefined;\n const checkForAllowed = extra.allowedArguments !== undefined;\n const explicitTrue = !!extra.explicitTrue;\n const keepNewlines = !!extra.keepNewlines;\n const wrapper = extra.wrapper === undefined ? '\"' : extra.wrapper;\n\n const escapeFn = function escapeFn(arg) {\n if (isArray(arg)) {\n return removeNewLines(arg.map(escapeFn).join(','));\n }\n\n if (!noEscape) {\n arg = escapeQuotes(arg);\n }\n if (typeof arg === 'string' && !keepNewlines) {\n arg = removeNewLines(arg);\n }\n return wrapper + arg + wrapper;\n };\n\n initial.forEach(function (val) {\n args.push(escapeFn(val));\n });\n for (const key in options) {\n if (\n options.hasOwnProperty(key) &&\n (!checkForAllowed || inArray(allowedArguments, key))\n ) {\n if (explicitTrue && options[key] === true) {\n args.push('-' + keyExtra + key);\n } else if (explicitTrue && options[key] === false) continue;\n else args.push('-' + keyExtra + key, escapeFn(options[key]));\n }\n }\n return args;\n};\n\nfunction removeNewLines(str) {\n const excapedNewline = process.platform === 'win32' ? '\\\\r\\\\n' : '\\\\n';\n return str.replace(/\\r?\\n/g, excapedNewline);\n}\n\n/*\n---- Options ----\n[-t] <title string> | Displayed on the first line of the toast.\n[-m] <message string> | Displayed on the remaining lines, wrapped.\n[-b] <button1;button2 string>| Displayed on the bottom line, can list multiple buttons separated by \";\"\n[-tb] | Displayed a textbox on the bottom line, only if buttons are not presented.\n[-p] <image URI> | Display toast with an image, local files only.\n[-id] <id> | sets the id for a notification to be able to close it later.\n[-s] <sound URI> | Sets the sound of the notifications, for possible values see http://msdn.microsoft.com/en-us/library/windows/apps/hh761492.aspx.\n[-silent] | Don't play a sound file when showing the notifications.\n[-appID] <App.ID> | Don't create a shortcut but use the provided app id.\n[-pid] <pid> | Query the appid for the process <pid>, use -appID as fallback. (Only relevant for applications that might be packaged for the store)\n[-pipeName] <\\.\\pipe\\pipeName\\> | Provide a name pipe which is used for callbacks.\n[-application] <C:\\foo.exe> | Provide a application that might be started if the pipe does not exist.\n-close <id> | Closes a currently displayed notification.\n*/\nconst allowedToasterFlags = [\n 't',\n 'm',\n 'b',\n 'tb',\n 'p',\n 'id',\n 's',\n 'silent',\n 'appID',\n 'pid',\n 'pipeName',\n 'close',\n 'install'\n];\nconst toasterSoundPrefix = 'Notification.';\nconst toasterDefaultSound = 'Notification.Default';\nmodule.exports.mapToWin8 = function (options) {\n options = mapAppIcon(options);\n options = mapText(options);\n\n if (options.icon) {\n if (/^file:\\/+/.test(options.icon)) {\n // should parse file protocol URL to path\n options.p = new url.URL(options.icon).pathname\n .replace(/^\\/(\\w:\\/)/, '$1')\n .replace(/\\//g, '\\\\');\n } else {\n options.p = options.icon;\n }\n delete options.icon;\n }\n\n if (options.message) {\n // Remove escape char to debug \"HRESULT : 0xC00CE508\" exception\n options.m = options.message.replace(/\\x1b/g, '');\n delete options.message;\n }\n\n if (options.title) {\n options.t = options.title;\n delete options.title;\n }\n\n if (options.appName) {\n options.appID = options.appName;\n delete options.appName;\n }\n\n if (typeof options.remove !== 'undefined') {\n options.close = options.remove;\n delete options.remove;\n }\n\n if (options.quiet || options.silent) {\n options.silent = options.quiet || options.silent;\n delete options.quiet;\n }\n\n if (typeof options.sound !== 'undefined') {\n options.s = options.sound;\n delete options.sound;\n }\n\n if (options.s === false) {\n options.silent = true;\n delete options.s;\n }\n\n // Silent takes precedence. Remove sound.\n if (options.s && options.silent) {\n delete options.s;\n }\n\n if (options.s === true) {\n options.s = toasterDefaultSound;\n }\n\n if (options.s && options.s.indexOf(toasterSoundPrefix) !== 0) {\n options.s = toasterDefaultSound;\n }\n\n if (options.actions && isArray(options.actions)) {\n options.b = options.actions.join(';');\n delete options.actions;\n }\n\n for (const key in options) {\n // Check if is allowed. If not, delete!\n if (\n options.hasOwnProperty(key) &&\n allowedToasterFlags.indexOf(key) === -1\n ) {\n delete options[key];\n }\n }\n\n return options;\n};\n\nmodule.exports.mapToNotifu = function (options) {\n options = mapAppIcon(options);\n options = mapText(options);\n\n if (options.icon) {\n options.i = options.icon;\n delete options.icon;\n }\n\n if (options.message) {\n options.m = options.message;\n delete options.message;\n }\n\n if (options.title) {\n options.p = options.title;\n delete options.title;\n }\n\n if (options.time) {\n options.d = options.time;\n delete options.time;\n }\n\n if (options.q !== false) {\n options.q = true;\n } else {\n delete options.q;\n }\n\n if (options.quiet === false) {\n delete options.q;\n delete options.quiet;\n }\n\n if (options.sound) {\n delete options.q;\n delete options.sound;\n }\n\n if (options.t) {\n options.d = options.t;\n delete options.t;\n }\n\n if (options.type) {\n options.t = sanitizeNotifuTypeArgument(options.type);\n delete options.type;\n }\n\n return options;\n};\n\nmodule.exports.isMac = function () {\n return os.type() === 'Darwin';\n};\n\nmodule.exports.isMountainLion = function () {\n return (\n os.type() === 'Darwin' &&\n semver.satisfies(garanteeSemverFormat(os.release()), '>=12.0.0')\n );\n};\n\nmodule.exports.isWin8 = function () {\n return (\n os.type() === 'Windows_NT' &&\n semver.satisfies(garanteeSemverFormat(os.release()), '>=6.2.9200')\n );\n};\n\nmodule.exports.isWSL = function () {\n return isWSL;\n};\n\nmodule.exports.isLessThanWin8 = function () {\n return (\n os.type() === 'Windows_NT' &&\n semver.satisfies(garanteeSemverFormat(os.release()), '<6.2.9200')\n );\n};\n\nfunction garanteeSemverFormat(version) {\n if (version.split('.').length === 2) {\n version += '.0';\n }\n return version;\n}\n\nfunction sanitizeNotifuTypeArgument(type) {\n if (typeof type === 'string' || type instanceof String) {\n if (type.toLowerCase() === 'info') return 'info';\n if (type.toLowerCase() === 'warn') return 'warn';\n if (type.toLowerCase() === 'error') return 'error';\n }\n\n return 'info';\n}\n\nmodule.exports.createNamedPipe = (server) => {\n const buf = Buffer.alloc(BUFFER_SIZE);\n\n return new Promise((resolve) => {\n server.instance = net.createServer((stream) => {\n stream.on('data', (c) => {\n buf.write(c.toString());\n });\n stream.on('end', () => {\n server.instance.close();\n });\n });\n server.instance.listen(server.namedPipe, () => {\n resolve(buf);\n });\n });\n};\n", "/**\n * Node.js wrapper for \"notify-send\".\n */\nconst os = require('os');\nconst which = require('which');\nconst utils = require('../lib/utils');\n\nconst EventEmitter = require('events').EventEmitter;\nconst util = require('util');\n\nconst notifier = 'notify-send';\nlet hasNotifier;\n\nmodule.exports = NotifySend;\n\nfunction NotifySend(options) {\n options = utils.clone(options || {});\n if (!(this instanceof NotifySend)) {\n return new NotifySend(options);\n }\n\n this.options = options;\n\n EventEmitter.call(this);\n}\nutil.inherits(NotifySend, EventEmitter);\n\nfunction noop() {}\nfunction notifyRaw(options, callback) {\n options = utils.clone(options || {});\n callback = callback || noop;\n\n if (typeof callback !== 'function') {\n throw new TypeError(\n 'The second argument must be a function callback. You have passed ' +\n typeof callback\n );\n }\n\n if (typeof options === 'string') {\n options = { title: 'node-notifier', message: options };\n }\n\n if (!options.message) {\n callback(new Error('Message is required.'));\n return this;\n }\n\n if (os.type() !== 'Linux' && !os.type().match(/BSD$/)) {\n callback(new Error('Only supported on Linux and *BSD systems'));\n return this;\n }\n\n if (hasNotifier === false) {\n callback(new Error('notify-send must be installed on the system.'));\n return this;\n }\n\n if (hasNotifier || !!this.options.suppressOsdCheck) {\n doNotification(options, callback);\n return this;\n }\n\n try {\n hasNotifier = !!which.sync(notifier);\n doNotification(options, callback);\n } catch (err) {\n hasNotifier = false;\n return callback(err);\n }\n\n return this;\n}\n\nObject.defineProperty(NotifySend.prototype, 'notify', {\n get: function() {\n if (!this._notify) this._notify = notifyRaw.bind(this);\n return this._notify;\n }\n});\n\nconst allowedArguments = ['urgency', 'expire-time', 'icon', 'category', 'hint', 'app-name'];\n\nfunction doNotification(options, callback) {\n options = utils.mapToNotifySend(options);\n options.title = options.title || 'Node Notification:';\n\n const initial = [options.title, options.message];\n delete options.title;\n delete options.message;\n\n const argsList = utils.constructArgumentList(options, {\n initial: initial,\n keyExtra: '-',\n allowedArguments: allowedArguments\n });\n\n utils.command(notifier, argsList, callback);\n}\n", "const net = require('net');\n\nconst hasGrowl = false;\nmodule.exports = function(growlConfig, cb) {\n if (typeof cb === 'undefined') {\n cb = growlConfig;\n growlConfig = {};\n }\n if (hasGrowl) return cb(null, hasGrowl);\n const port = growlConfig.port || 23053;\n const host = growlConfig.host || 'localhost';\n const socket = net.connect(port, host);\n socket.setTimeout(100);\n\n socket.once('connect', function() {\n socket.end();\n cb(null, true);\n });\n\n socket.once('error', function() {\n socket.end();\n cb(null, false);\n });\n};\n", "var net = require('net'),\n crypto = require('crypto'),\n format = require('util').format,\n fs = require('fs');\n\nvar nl = '\\r\\n';\n\n/**\n * Create a new GNTP request of the given `type`.\n *\n * @param {String} type either NOTIFY or REGISTER\n * @api private\n */\n\nfunction GNTP(type, opts) {\n opts = opts || {};\n this.type = type;\n this.host = opts.host || 'localhost';\n this.port = opts.port || 23053;\n this.request = 'GNTP/1.0 ' + type + ' NONE' + nl;\n this.resources = [];\n this.attempts = 0;\n this.maxAttempts = 5;\n}\n\n/**\n * Build a response object from the given `resp` response string.\n *\n * The response object has a key/value pair for every header in the response, and \n * a `.state` property equal to either OK, ERROR, or CALLBACK.\n *\n * An example GNTP response:\n *\n * GNTP/1.0 -OK NONE\\r\\n\n * Response-Action: REGISTER\\r\\n\n * \\r\\n\n *\n * Which would parse to:\n * \n * { state: 'OK', 'Response-Action': 'REGISTER' }\n *\n * @param {String} resp\n * @return {Object}\n * @api private\n */\n\nGNTP.prototype.parseResp = function(resp) {\n var parsed = {}, head, body;\n resp = resp.slice(0, resp.indexOf(nl + nl)).split(nl);\n head = resp[0];\n body = resp.slice(1);\n\n parsed.state = head.match(/-(OK|ERROR|CALLBACK)/)[0].slice(1);\n body.forEach(function(ln) {\n ln = ln.split(': ');\n parsed[ln[0]] = ln[1];\n });\n\n return parsed;\n};\n\n/**\n * Call `GNTP.send()` with the given arguments after a certain delay.\n *\n * @api private\n */\n\nGNTP.prototype.retry = function() {\n var self = this, \n args = arguments;\n setTimeout(function() {\n self.send.apply(self, args);\n }, 750);\n};\n\n\n/**\n * Add a resource to the GNTP request.\n *\n * @param {Buffer} file\n * @return {String}\n * @api private\n */\n\nGNTP.prototype.addResource = function(file) {\n var id = crypto.createHash('md5').update(file).digest('hex'),\n header = 'Identifier: ' + id + nl + 'Length: ' + file.length + nl + nl;\n this.resources.push({ header: header, file: file });\n return 'x-growl-resource://' + id;\n};\n\n/**\n * Append another header `name` with a value of `val` to the request. If `val` is\n * undefined, the header will be left out.\n *\n * @param {String} name\n * @param {String} val\n * @api public\n */\n\nGNTP.prototype.add = function(name, val) {\n if (val === undefined) \n return;\n\n /* Handle icon files when they're image paths or Buffers. */\n if (/-Icon/.test(name) && !/^https?:\\/\\//.test(val) ) {\n if (/\\.(png|gif|jpe?g)$/.test(val))\n val = this.addResource(fs.readFileSync(val));\n else if (val instanceof Buffer)\n val = this.addResource(val);\n }\n\n this.request += name + ': ' + val + nl;\n};\n\n/**\n * Append a newline to the request.\n *\n * @api public\n */\n\nGNTP.prototype.newline = function() {\n this.request += nl;\n};\n\n/**\n * Send the GNTP request, calling `callback` after successfully sending the \n * request.\n *\n * An example GNTP request:\n *\n * GNTP/1.0 REGISTER NONE\\r\\n\n * Application-Name: Growly.js\\r\\n\n * Notifications-Count: 1\\r\\n\n * \\r\\n\n * Notification-Name: default\\r\\n\n * Notification-Display-Name: Default Notification\\r\\n\n * Notification-Enabled: True\\r\\n\n * \\r\\n\n * \n * @param {Function} callback which will be passed the parsed response\n * @api public\n */\n\nGNTP.prototype.send = function(callback) {\n var self = this,\n socket = net.connect(this.port, this.host),\n resp = '';\n\n callback = callback || function() {};\n\n this.attempts += 1;\n\n socket.on('connect', function() {\n socket.write(self.request);\n\n self.resources.forEach(function(res) {\n socket.write(res.header);\n socket.write(res.file);\n socket.write(nl + nl);\n });\n });\n\n socket.on('data', function(data) {\n resp += data.toString();\n\n /* Wait until we have a complete response which is signaled by two CRLF's. */\n if (resp.slice(resp.length - 4) !== (nl + nl)) return; \n\n resp = self.parseResp(resp); \n\n /* We have to manually close the connection for certain responses; otherwise,\n reset `resp` to prepare for the next response chunk. */\n if (resp.state === 'ERROR' || resp.state === 'CALLBACK')\n socket.end();\n else\n resp = '';\n });\n\n socket.on('end', function() {\n /* Retry on 200 (timed out), 401 (unknown app), or 402 (unknown notification). */\n if (['200', '401', '402'].indexOf(resp['Error-Code']) >= 0) {\n if (self.attempts <= self.maxAttempts) {\n self.retry(callback);\n } else {\n var msg = 'GNTP request to \"%s:%d\" failed with error code %s (%s)';\n callback(new Error(format(msg, self.host, self.port, resp['Error-Code'], resp['Error-Description'])));\n }\n } else {\n callback(undefined, resp);\n }\n });\n\n socket.on('error', function() {\n callback(new Error(format('Error while sending GNTP request to \"%s:%d\"', self.host, self.port)));\n socket.destroy();\n });\n};\n\nmodule.exports = GNTP;\n", "var GNTP = require('./gntp.js');\n\n/**\n * Interface for registering Growl applications and sending Growl notifications.\n *\n * @api private\n */\n\nfunction Growly() {\n this.appname = 'Growly';\n this.notifications = undefined;\n this.labels = undefined;\n this.count = 0;\n this.registered = false;\n this.host = undefined;\n this.port = undefined;\n}\n\n/**\n * Returns an array of label strings extracted from each notification object in\n * `Growly.notifications`.\n *\n * @param {Array} notifications\n * @return {Array} notification labels\n * @api private\n */\n\nGrowly.prototype.getLabels = function() {\n return this.notifications.map(function(notif) {\n return notif.label;\n });\n};\n\n/**\n * Set the host to be used by GNTP requests.\n *\n * @param {String} host\n * @param {Number} port\n * @api public\n */\n\nGrowly.prototype.setHost = function(host, port) {\n this.host = host;\n this.port = port;\n};\n\n/**\n * Register an application with the name `appname` (required), icon `appicon`, and\n * a list of notification types `notifications`. If provided, `callback` will be\n * called when the request completes with the first argument being an `err` error\n * object if the request failed.\n *\n * Each object in the `notifications` array defines a type of notification the\n * application will have with the following properties:\n *\n * - `.label` name used to identify the type of notification being used (required)\n * - `.dispname` name users will see in Growl's preference panel (defaults to `.label`)\n * - `.enabled` whether or not notifications of this type are enabled (defaults to true)\n * - `.icon` default icon notifications of this type should use (url, file path, or Buffer object)\n *\n * Example registration:\n *\n * growl.register('My Application', 'path/to/icon.png', [\n * { label: 'success', dispname: 'Success', icon: 'path/to/success.png' },\n * { label: 'warning', dispname: 'Warning', icon: 'path/to/warning.png', enabled: false }\n * ], function(err) { console.log(err || 'Registration successful!'); });\n *\n * @param {String} appname\n * @param {String|Buffer} appicon\n * @param {Array} notifications\n * @param {Function} callback\n * @api public\n */\n\nGrowly.prototype.register = function(appname, appicon, notifications, callback) {\n var gntp;\n\n if (typeof appicon === 'object') {\n notifications = appicon;\n appicon = undefined;\n }\n\n if (notifications === undefined || !notifications.length) {\n notifications = [{ label: 'default', dispname: 'Default Notification', enabled: true }];\n }\n\n if (typeof arguments[arguments.length - 1] === 'function') {\n callback = arguments[arguments.length - 1];\n } else {\n callback = function() {};\n }\n\n this.appname = appname;\n this.notifications = notifications;\n this.labels = this.getLabels();\n this.registered = true;\n\n gntp = new GNTP('REGISTER', { host: this.host, port: this.port });\n gntp.add('Application-Name', appname);\n gntp.add('Application-Icon', appicon);\n gntp.add('Notifications-Count', notifications.length);\n gntp.newline();\n\n notifications.forEach(function(notif) {\n if (notif.enabled === undefined) notif.enabled = true;\n gntp.add('Notification-Name', notif.label);\n gntp.add('Notification-Display-Name', notif.dispname);\n gntp.add('Notification-Enabled', notif.enabled ? 'True' : 'False');\n gntp.add('Notification-Icon', notif.icon);\n gntp.newline();\n });\n\n gntp.send(callback);\n};\n\n/**\n * Send a notification with `text` content. Growly will lazily register itself\n * if the user hasn't already before sending the notification.\n *\n * A notification can have the following `opts` options:\n *\n * - `.label` type of notification to use (defaults to the first registered type)\n * - `.title` title of the notification\n * - `.icon` url, file path, or Buffer instance for the notification's icon.\n * - `.sticky` whether or not to sticky the notification (defaults to false)\n * - `.priority` the priority of the notification from lowest (-2) to highest (2)\n * - `.coalescingId` replace/update the matching previous notification. May be ignored.\n *\n * If provided, `callback` will be called when the user interacts with the notification.\n * The first argument will be an `err` error object, and the second argument an `action`\n * string equal to either 'clicked' or 'closed' (whichever action the user took.)\n *\n * Example notification:\n *\n * growl.notify('Stuffs broken!', { label: 'warning' }, function(err, action) {\n * console.log('Action:', action);\n * });\n *\n * @param {String} text\n * @param {Object} opts\n * @param {Function} callback\n * @api public\n */\n\nGrowly.prototype.notify = function(text, opts, callback) {\n var self = this,\n gntp;\n\n /* Lazy registration. */\n if (!this.registered) {\n this.register(this.appname, function(err) {\n if (err) console.log(err);\n self.notify.call(self, text, opts, callback);\n });\n return;\n }\n\n opts = opts || {};\n\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n gntp = new GNTP('NOTIFY', { host: this.host, port: this.port });\n gntp.add('Application-Name', this.appname);\n gntp.add('Notification-Name', opts.label || this.labels[0]);\n gntp.add('Notification-ID', ++this.count);\n gntp.add('Notification-Title', opts.title);\n gntp.add('Notification-Text', text);\n gntp.add('Notification-Sticky', opts.sticky ? 'True' : 'False');\n gntp.add('Notification-Priority', opts.priority);\n gntp.add('Notification-Icon', opts.icon);\n gntp.add('Notification-Coalescing-ID', opts.coalescingId || undefined);\n gntp.add('Notification-Callback-Context', callback ? 'context' : undefined);\n gntp.add('Notification-Callback-Context-Type', callback ? 'string' : undefined);\n gntp.add('Notification-Callback-Target', undefined);\n gntp.newline();\n\n gntp.send(function(err, resp) {\n if (callback && err) {\n callback(err);\n } else if (callback && resp.state === 'CALLBACK') {\n callback(undefined, resp['Notification-Callback-Result'].toLowerCase());\n }\n });\n};\n\n/**\n * Expose an instance of the Growly object.\n */\n\nmodule.exports = new Growly();\n", "/**\n * Wrapper for the growly module\n */\nconst checkGrowl = require('../lib/checkGrowl');\nconst utils = require('../lib/utils');\nconst growly = require('growly');\n\nconst EventEmitter = require('events').EventEmitter;\nconst util = require('util');\n\nconst errorMessageNotFound =\n \"Couldn't connect to growl (might be used as a fallback). Make sure it is running\";\n\nmodule.exports = Growl;\n\nlet hasGrowl;\n\nfunction Growl(options) {\n options = utils.clone(options || {});\n if (!(this instanceof Growl)) {\n return new Growl(options);\n }\n\n growly.appname = options.name || 'Node';\n this.options = options;\n\n EventEmitter.call(this);\n}\nutil.inherits(Growl, EventEmitter);\n\nfunction notifyRaw(options, callback) {\n growly.setHost(this.options.host, this.options.port);\n options = utils.clone(options || {});\n\n if (typeof options === 'string') {\n options = { title: 'node-notifier', message: options };\n }\n\n callback = utils.actionJackerDecorator(this, options, callback, function(\n data\n ) {\n if (data === 'click') {\n return 'click';\n }\n if (data === 'timedout') {\n return 'timeout';\n }\n return false;\n });\n\n options = utils.mapToGrowl(options);\n\n if (!options.message) {\n callback(new Error('Message is required.'));\n return this;\n }\n\n options.title = options.title || 'Node Notification:';\n\n if (hasGrowl || !!options.wait) {\n const localCallback = options.wait ? callback : noop;\n growly.notify(options.message, options, localCallback);\n if (!options.wait) callback();\n return this;\n }\n\n checkGrowl(growly, function(_, didHaveGrowl) {\n hasGrowl = didHaveGrowl;\n if (!didHaveGrowl) return callback(new Error(errorMessageNotFound));\n growly.notify(options.message, options);\n callback();\n });\n return this;\n}\n\nObject.defineProperty(Growl.prototype, 'notify', {\n get: function() {\n if (!this._notify) this._notify = notifyRaw.bind(this);\n return this._notify;\n }\n});\n\nfunction noop() {}\n", "/**\n * A Node.js wrapper for terminal-notify (with fallback).\n */\nconst utils = require('../lib/utils');\nconst Growl = require('./growl');\nconst path = require('path');\nconst notifier = path.join(\n __dirname,\n '../vendor/mac.noindex/terminal-notifier.app/Contents/MacOS/terminal-notifier'\n);\n\nconst EventEmitter = require('events').EventEmitter;\nconst util = require('util');\n\nconst errorMessageOsX =\n 'You need Mac OS X 10.8 or above to use NotificationCenter,' +\n ' or use Growl fallback with constructor option {withFallback: true}.';\n\nmodule.exports = NotificationCenter;\n\nfunction NotificationCenter(options) {\n options = utils.clone(options || {});\n if (!(this instanceof NotificationCenter)) {\n return new NotificationCenter(options);\n }\n this.options = options;\n\n EventEmitter.call(this);\n}\nutil.inherits(NotificationCenter, EventEmitter);\nlet activeId = null;\n\nfunction noop() {}\nfunction notifyRaw(options, callback) {\n let fallbackNotifier;\n const id = identificator();\n options = utils.clone(options || {});\n activeId = id;\n\n if (typeof options === 'string') {\n options = { title: 'node-notifier', message: options };\n }\n callback = callback || noop;\n\n if (typeof callback !== 'function') {\n throw new TypeError(\n 'The second argument must be a function callback. You have passed ' +\n typeof fn\n );\n }\n\n const actionJackedCallback = utils.actionJackerDecorator(\n this,\n options,\n callback,\n function(data) {\n if (activeId !== id) return false;\n\n if (data === 'activate') {\n return 'click';\n }\n if (data === 'timeout') {\n return 'timeout';\n }\n if (data === 'replied') {\n return 'replied';\n }\n return false;\n }\n );\n\n options = utils.mapToMac(options);\n\n if (!options.message && !options.group && !options.list && !options.remove) {\n callback(new Error('Message, group, remove or list property is required.'));\n return this;\n }\n\n const argsList = utils.constructArgumentList(options);\n if (utils.isMountainLion()) {\n utils.fileCommandJson(\n this.options.customPath || notifier,\n argsList,\n actionJackedCallback\n );\n return this;\n }\n\n if (fallbackNotifier || !!this.options.withFallback) {\n fallbackNotifier = fallbackNotifier || new Growl(this.options);\n return fallbackNotifier.notify(options, callback);\n }\n\n callback(new Error(errorMessageOsX));\n return this;\n}\n\nObject.defineProperty(NotificationCenter.prototype, 'notify', {\n get: function() {\n if (!this._notify) this._notify = notifyRaw.bind(this);\n return this._notify;\n }\n});\n\nfunction identificator() {\n return { _ref: 'val' };\n}\n", "/**\n * Wrapper for the notifu 1.6 (http://www.paralint.com/projects/notifu/)\n\nUsage\n/t <value> The type of message to display values are:\n info The message is an informational message\n warn The message is an warning message\n error The message is an error message\n/d <value> The number of milliseconds to display (omit or 0 for infinit)\n/p <value> The title (or prompt) of the ballon\n/m <value> The message text\n/i <value> Specify an icon to use (\"parent\" uses the icon of the parent process)\n/e Enable ballon tips in the registry (for this user only)\n/q Do not play a sound when the tooltip is displayed\n/w Show the tooltip even if the user is in the quiet period that follows his very first login (Windows 7 and up)\n/xp Use IUserNotification interface event when IUserNotification2 is available\n/l Display license for notifu\n\n// Kill codes:\n 2 = Timeout\n 3 = Clicked\n 4 = Closed or faded out\n\n */\nconst path = require('path');\nconst notifier = path.resolve(__dirname, '../vendor/notifu/notifu');\nconst checkGrowl = require('../lib/checkGrowl');\nconst utils = require('../lib/utils');\nconst Toaster = require('./toaster');\nconst Growl = require('./growl');\nconst os = require('os');\n\nconst EventEmitter = require('events').EventEmitter;\nconst util = require('util');\n\nlet hasGrowl;\n\nmodule.exports = WindowsBalloon;\n\nfunction WindowsBalloon(options) {\n options = utils.clone(options || {});\n if (!(this instanceof WindowsBalloon)) {\n return new WindowsBalloon(options);\n }\n\n this.options = options;\n\n EventEmitter.call(this);\n}\nutil.inherits(WindowsBalloon, EventEmitter);\n\nfunction noop() {}\nfunction notifyRaw(options, callback) {\n let fallback;\n const notifierOptions = this.options;\n options = utils.clone(options || {});\n callback = callback || noop;\n\n if (typeof options === 'string') {\n options = { title: 'node-notifier', message: options };\n }\n\n const actionJackedCallback = utils.actionJackerDecorator(\n this,\n options,\n callback,\n function(data) {\n if (data === 'activate') {\n return 'click';\n }\n if (data === 'timeout') {\n return 'timeout';\n }\n return false;\n }\n );\n\n if (!!this.options.withFallback && utils.isWin8()) {\n fallback = fallback || new Toaster(notifierOptions);\n return fallback.notify(options, callback);\n }\n\n if (\n !!this.options.withFallback &&\n (!utils.isLessThanWin8() || hasGrowl === true)\n ) {\n fallback = fallback || new Growl(notifierOptions);\n return fallback.notify(options, callback);\n }\n\n if (!this.options.withFallback || hasGrowl === false) {\n doNotification(options, notifierOptions, actionJackedCallback);\n return this;\n }\n\n checkGrowl(notifierOptions, function(_, hasGrowlResult) {\n hasGrowl = hasGrowlResult;\n\n if (hasGrowl) {\n fallback = fallback || new Growl(notifierOptions);\n return fallback.notify(options, callback);\n }\n\n doNotification(options, notifierOptions, actionJackedCallback);\n });\n\n return this;\n}\n\nObject.defineProperty(WindowsBalloon.prototype, 'notify', {\n get: function() {\n if (!this._notify) this._notify = notifyRaw.bind(this);\n return this._notify;\n }\n});\n\nconst allowedArguments = ['t', 'd', 'p', 'm', 'i', 'e', 'q', 'w', 'xp'];\n\nfunction doNotification(options, notifierOptions, callback) {\n const is64Bit = os.arch() === 'x64';\n options = options || {};\n options = utils.mapToNotifu(options);\n options.p = options.p || 'Node Notification:';\n\n const fullNotifierPath = notifier + (is64Bit ? '64' : '') + '.exe';\n const localNotifier = notifierOptions.customPath || fullNotifierPath;\n\n if (!options.m) {\n callback(new Error('Message is required.'));\n return this;\n }\n\n const argsList = utils.constructArgumentList(options, {\n wrapper: '',\n noEscape: true,\n explicitTrue: true,\n allowedArguments: allowedArguments\n });\n\n if (options.wait) {\n return utils.fileCommand(localNotifier, argsList, function(error, data) {\n const action = fromErrorCodeToAction(error.code);\n if (action === 'error') return callback(error, data);\n\n return callback(null, action);\n });\n }\n utils.immediateFileCommand(localNotifier, argsList, callback);\n}\n\nfunction fromErrorCodeToAction(errorCode) {\n switch (errorCode) {\n case 2:\n return 'timeout';\n case 3:\n case 6:\n case 7:\n return 'activate';\n case 4:\n return 'close';\n default:\n return 'error';\n }\n}\n", "import crypto from 'crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\n\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n crypto.randomFillSync(rnds8Pool);\n poolPtr = 0;\n }\n\n return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}", "export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;", "import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;", "import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;", "import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n let i = buf && offset || 0;\n const b = buf || new Array(16);\n options = options || {};\n let node = options.node || _nodeId;\n let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n const seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (let n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || stringify(b);\n}\n\nexport default v1;", "import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;", "import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}", "import crypto from 'crypto';\n\nfunction md5(bytes) {\n if (Array.isArray(bytes)) {\n bytes = Buffer.from(bytes);\n } else if (typeof bytes === 'string') {\n bytes = Buffer.from(bytes, 'utf8');\n }\n\n return crypto.createHash('md5').update(bytes).digest();\n}\n\nexport default md5;", "import v35 from './v35.js';\nimport md5 from './md5.js';\nconst v3 = v35('v3', 0x30, md5);\nexport default v3;", "import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;", "import crypto from 'crypto';\n\nfunction sha1(bytes) {\n if (Array.isArray(bytes)) {\n bytes = Buffer.from(bytes);\n } else if (typeof bytes === 'string') {\n bytes = Buffer.from(bytes, 'utf8');\n }\n\n return crypto.createHash('sha1').update(bytes).digest();\n}\n\nexport default sha1;", "import v35 from './v35.js';\nimport sha1 from './sha1.js';\nconst v5 = v35('v5', 0x50, sha1);\nexport default v5;", "export default '00000000-0000-0000-0000-000000000000';", "import validate from './validate.js';\n\nfunction version(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nexport default version;", "export { default as v1 } from './v1.js';\nexport { default as v3 } from './v3.js';\nexport { default as v4 } from './v4.js';\nexport { default as v5 } from './v5.js';\nexport { default as NIL } from './nil.js';\nexport { default as version } from './version.js';\nexport { default as validate } from './validate.js';\nexport { default as stringify } from './stringify.js';\nexport { default as parse } from './parse.js';", "/**\n * Wrapper for the toaster (https://github.com/nels-o/toaster)\n */\nconst path = require('path');\nconst notifier = path.resolve(__dirname, '../vendor/snoreToast/snoretoast');\nconst utils = require('../lib/utils');\nconst Balloon = require('./balloon');\nconst os = require('os');\nconst { v4: uuid } = require('uuid');\n\nconst EventEmitter = require('events').EventEmitter;\nconst util = require('util');\n\nlet fallback;\n\nconst PIPE_NAME = 'notifierPipe';\nconst PIPE_PATH_PREFIX = '\\\\\\\\.\\\\pipe\\\\';\nconst PIPE_PATH_PREFIX_WSL = '/tmp/';\n\nmodule.exports = WindowsToaster;\n\nfunction WindowsToaster(options) {\n options = utils.clone(options || {});\n if (!(this instanceof WindowsToaster)) {\n return new WindowsToaster(options);\n }\n\n this.options = options;\n\n EventEmitter.call(this);\n}\nutil.inherits(WindowsToaster, EventEmitter);\n\nfunction noop() {}\n\nfunction parseResult(data) {\n if (!data) {\n return {};\n }\n return data.split(';').reduce((acc, cur) => {\n const split = cur.split('=');\n if (split && split.length === 2) {\n acc[split[0]] = split[1];\n }\n return acc;\n }, {});\n}\n\nfunction getPipeName() {\n const pathPrefix = utils.isWSL() ? PIPE_PATH_PREFIX_WSL : PIPE_PATH_PREFIX;\n return `${pathPrefix}${PIPE_NAME}-${uuid()}`;\n}\n\nfunction notifyRaw(options, callback) {\n options = utils.clone(options || {});\n callback = callback || noop;\n const is64Bit = os.arch() === 'x64';\n let resultBuffer;\n const server = {\n namedPipe: getPipeName()\n };\n\n if (typeof options === 'string') {\n options = { title: 'node-notifier', message: options };\n }\n\n if (typeof callback !== 'function') {\n throw new TypeError(\n 'The second argument must be a function callback. You have passed ' +\n typeof fn\n );\n }\n\n const snoreToastResultParser = (err, callback) => {\n /* Possible exit statuses from SnoreToast, we only want to include err if it's -1 code\n Exit Status : Exit Code\n Failed : -1\n\n Success : 0\n Hidden : 1\n Dismissed : 2\n TimedOut : 3\n ButtonPressed : 4\n TextEntered : 5\n */\n const result = parseResult(\n resultBuffer && resultBuffer.toString('utf16le')\n );\n\n // parse action\n if (result.action === 'buttonClicked' && result.button) {\n result.activationType = result.button;\n } else if (result.action) {\n result.activationType = result.action;\n }\n\n if (err && err.code === -1) {\n callback(err, result);\n }\n callback(null, result);\n\n // https://github.com/mikaelbr/node-notifier/issues/334\n // Due to an issue with snoretoast not using stdio and pipe\n // when notifications are disabled, make sure named pipe server\n // is closed before exiting.\n server.instance && server.instance.close();\n };\n\n const actionJackedCallback = (err) =>\n snoreToastResultParser(\n err,\n utils.actionJackerDecorator(this, options, callback, (data) =>\n data === 'activate' ? 'click' : data || false\n )\n );\n\n options.title = options.title || 'Node Notification:';\n if (\n typeof options.message === 'undefined' &&\n typeof options.close === 'undefined'\n ) {\n callback(new Error('Message or ID to close is required.'));\n return this;\n }\n\n if (!utils.isWin8() && !utils.isWSL() && !!this.options.withFallback) {\n fallback = fallback || new Balloon(this.options);\n return fallback.notify(options, callback);\n }\n\n // Add pipeName option, to get the output\n utils.createNamedPipe(server).then((out) => {\n resultBuffer = out;\n options.pipeName = server.namedPipe;\n\n const localNotifier = options.customPath || this.options.customPath ||\n (notifier + '-x' + (is64Bit ? '64' : '86') + '.exe');\n\n options = utils.mapToWin8(options);\n const argsList = utils.constructArgumentList(options, {\n explicitTrue: true,\n wrapper: '',\n keepNewlines: true,\n noEscape: true\n });\n\n utils.fileCommand(\n localNotifier,\n argsList,\n actionJackedCallback\n );\n });\n return this;\n}\n\nObject.defineProperty(WindowsToaster.prototype, 'notify', {\n get: function () {\n if (!this._notify) this._notify = notifyRaw.bind(this);\n return this._notify;\n }\n});\n", "const os = require('os');\nconst utils = require('./lib/utils');\n\n// All notifiers\nconst NotifySend = require('./notifiers/notifysend');\nconst NotificationCenter = require('./notifiers/notificationcenter');\nconst WindowsToaster = require('./notifiers/toaster');\nconst Growl = require('./notifiers/growl');\nconst WindowsBalloon = require('./notifiers/balloon');\n\nconst options = { withFallback: true };\n\nconst osType = utils.isWSL() ? 'WSL' : os.type();\n\nswitch (osType) {\n case 'Linux':\n module.exports = new NotifySend(options);\n module.exports.Notification = NotifySend;\n break;\n case 'Darwin':\n module.exports = new NotificationCenter(options);\n module.exports.Notification = NotificationCenter;\n break;\n case 'Windows_NT':\n if (utils.isLessThanWin8()) {\n module.exports = new WindowsBalloon(options);\n module.exports.Notification = WindowsBalloon;\n } else {\n module.exports = new WindowsToaster(options);\n module.exports.Notification = WindowsToaster;\n }\n break;\n case 'WSL':\n module.exports = new WindowsToaster(options);\n module.exports.Notification = WindowsToaster;\n break;\n default:\n if (os.type().match(/BSD$/)) {\n module.exports = new NotifySend(options);\n module.exports.Notification = NotifySend;\n } else {\n module.exports = new Growl(options);\n module.exports.Notification = Growl;\n }\n}\n\n// Expose notifiers to give full control.\nmodule.exports.NotifySend = NotifySend;\nmodule.exports.NotificationCenter = NotificationCenter;\nmodule.exports.WindowsToaster = WindowsToaster;\nmodule.exports.WindowsBalloon = WindowsBalloon;\nmodule.exports.Growl = Growl;\n", "import chalk from \"chalk\";\nimport dayjs from \"dayjs\";\nimport ms from \"ms\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport Watcher from \"watcher\";\nimport which from \"which\";\n\nimport type { EditSubscription } from \"../services/app/edit/edit.js\";\nimport type { ENVIRONMENT_LOGS_SUBSCRIPTION } from \"../services/app/edit/operation.js\";\nimport type { Run, Usage } from \"../services/command/command.js\";\n\nimport { type ArgsDefinition, type ArgsDefinitionResult } from \"../services/command/arg.js\";\nimport { Changes } from \"../services/filesync/changes.js\";\nimport { acquireDevLock, releaseDevLock } from \"../services/filesync/dev-lock.js\";\nimport { YarnNotFoundError } from \"../services/filesync/error.js\";\nimport { FileSync } from \"../services/filesync/filesync.js\";\nimport { FileSyncStrategy, MergeConflictPreferenceArg } from \"../services/filesync/strategy.js\";\nimport { SyncJson, SyncJsonArgs, loadSyncJsonDirectory } from \"../services/filesync/sync-json.js\";\nimport { subscribeToEnvironmentLogs } from \"../services/logs/subscribeToEnvironmentLogs.js\";\nimport { maybePromptAgentsMd, maybePromptGadgetSkills } from \"../services/output/agent-plugin.js\";\nimport { footer } from \"../services/output/footer.js\";\nimport { LoggingArgs } from \"../services/output/log/structured.js\";\nimport { notify } from \"../services/output/notify.js\";\nimport { println } from \"../services/output/print.js\";\nimport { reportErrorAndExit } from \"../services/output/report.js\";\nimport { select } from \"../services/output/select.js\";\nimport { spin } from \"../services/output/spinner.js\";\nimport { sprint } from \"../services/output/sprint.js\";\nimport { symbol } from \"../services/output/symbols.js\";\nimport { unreachable } from \"../services/util/assert.js\";\nimport { debounceAsync } from \"../services/util/function.js\";\nimport { isAbortError } from \"../services/util/is.js\";\nimport { delay } from \"../services/util/promise.js\";\n\nexport type DevArgs = typeof args;\nexport type DevArgsResult = ArgsDefinitionResult<DevArgs>;\n\nexport const args = {\n ...SyncJsonArgs,\n ...LoggingArgs,\n \"--prefer\": MergeConflictPreferenceArg,\n \"--file-push-delay\": { type: Number, default: ms(\"100ms\") },\n \"--file-watch-debounce\": { type: Number, default: ms(\"300ms\") },\n \"--file-watch-poll-interval\": { type: Number, default: ms(\"3s\") },\n \"--file-watch-poll-timeout\": { type: Number, default: ms(\"20s\") },\n \"--file-watch-rename-timeout\": { type: Number, default: ms(\"1.25s\") },\n \"--no-logs\": Boolean,\n} satisfies ArgsDefinition;\n\nexport const usage: Usage = (_ctx) => {\n return sprint`\n Clones your Gadget environment's files to your local machine and keeps it in sync, in order to\n enable local development with your text editor and source code with Git.\n\n If your app's local directory already exists, this command first performs a sync to ensure\n that your local and environment directories match, changes are tracked since last sync. If any\n conflicts are detected, they must be resolved before development starts.\n\n {gray Usage}\n $ ggt dev [DIRECTORY] [options]\n\n DIRECTORY: The directory to sync files to (default: the current directory)\n\n {gray Options}\n -a, --app <app_name> Selects the app to sync files with. Defaults to the app synced to the current directory, if there is one.\n -e, --env <env_name> Selects the environment to sync files with. Defaults to the environment synced to the current directory, if there is one.\n --prefer <source> Auto-select changes from 'local' or 'environment' source on conflict\n --allow-unknown-directory Syncs to any local directory with existing files, even if the directory hasn't been synced before\n --allow-different-app Syncs with a different app using the --app command, instead of the most recently synced one in the current directory\n --log-level <level> Sets the log level for incoming application logs (default: info)\n --no-logs Disables outputting application logs to the console\n --my-logs Only outputs user sourced logs\n\n {gray Ignoring files}\n ggt dev uses a .ignore file, similar to .gitignore, to exclude specific files and\n folders from syncing. These files are always ignored:\n\n \u2022 .DS_Store\n \u2022 .gadget\n \u2022 .git\n \u2022 node_modules\n \u2022 .shopify\n\n {gray Notes}\n \u2022 \"ggt dev\" only works with development environments\n \u2022 \"ggt dev\" only supports \"yarn\" v1 for installing dependencies\n \u2022 Avoid deleting or moving all of your files while \"ggt dev\" is running\n\n {gray Examples}\n sync an app in a custom path\n {cyanBright $ ggt dev ~/myGadgetApps/myBlog --app myBlogApp}\n\n sync with a specific environment and preselect all local changes on conflicts\n {cyanBright $ ggt dev --env main --prefer local}\n\n sync a custom path with a specific app, environment and preselect all changes from local on conflicts\n {cyanBright $ ggt dev ~/gadget/example --app=example --env=development --prefer=local}\n `;\n};\n\nexport const run: Run<DevArgs> = async (ctx, args) => {\n if (!(await which(\"yarn\", { nothrow: true }))) {\n throw new YarnNotFoundError();\n }\n\n const directory = await loadSyncJsonDirectory(args._[0] || process.cwd());\n const syncJson = await SyncJson.loadOrAskAndInit(ctx, { command: \"dev\", args, directory });\n await acquireDevLock(directory);\n ctx.onAbort(async () => {\n await releaseDevLock(directory);\n });\n await maybePromptAgentsMd({ ctx, directory: syncJson.directory });\n await maybePromptGadgetSkills({ ctx, directory: syncJson.directory });\n footer({ ensureEmptyLineAbove: true, content: syncJson.sprint() });\n\n const filesync = new FileSync(syncJson);\n const hashes = await filesync.hashes(ctx);\n\n if (!hashes.inSync) {\n // our local files don't match our environment's files\n if (!syncJson.previousEnvironment || (hashes.localChangesToPush.size === 0 && hashes.onlyDotGadgetFilesChanged)) {\n // one of the following is true:\n // - we're developing on this environment for the first time\n // - we're developing on the same environment as last time\n // - we're developing on a different environment, but only .gadget/ files have changed\n // merge the changes (if any) and continue\n await filesync.merge(ctx, {\n hashes,\n printLocalChangesOptions: {\n limit: 5,\n },\n printEnvironmentChangesOptions: {\n limit: 5,\n },\n });\n } else {\n // we're switching environment's and files outside of .gadget/\n // have changed, so ask the user what to do\n await filesync.print(ctx, { hashes });\n const choices = Object.values(FileSyncStrategy);\n\n const strategy = await select({\n ensureEmptyLineAbove: true,\n choices: hashes.bothChanged ? choices : choices.filter((choice) => choice !== FileSyncStrategy.MERGE),\n content: chalk.bold(\"What do you want to do?\"),\n formatChoice: (choice) => {\n switch (choice) {\n case FileSyncStrategy.CANCEL:\n return sprint`Cancel (Ctrl+C)`;\n case FileSyncStrategy.MERGE:\n return sprint`Merge local and environment's changes`;\n case FileSyncStrategy.PUSH:\n switch (true) {\n case hashes.bothChanged:\n return sprint`Push local changes and {underline discard environment's} changes`;\n case hashes.localChanges.size > 0:\n return sprint`Push local changes`;\n case hashes.environmentChanges.size > 0:\n return sprint`Discard environment's changes`;\n default:\n return unreachable(\"no changes to push or discard\");\n }\n case FileSyncStrategy.PULL:\n switch (true) {\n case hashes.bothChanged:\n return sprint`Pull environment's changes and {underline discard local} changes`;\n case hashes.localChanges.size > 0:\n return sprint`Discard local changes`;\n case hashes.environmentChanges.size > 0:\n return sprint`Pull environment's changes`;\n default:\n return unreachable(\"no changes to pull or discard\");\n }\n }\n },\n });\n\n switch (strategy) {\n case FileSyncStrategy.CANCEL:\n process.exit(0);\n break;\n case FileSyncStrategy.MERGE:\n await filesync.merge(ctx, { hashes });\n break;\n case FileSyncStrategy.PUSH:\n await filesync.push(ctx, { command: \"dev\", hashes });\n break;\n case FileSyncStrategy.PULL:\n await filesync.pull(ctx, { hashes, force: true });\n break;\n }\n }\n }\n\n /**\n * A list of filepaths that have changed because we (this ggt process)\n * modified them. This is used to avoid reacting to filesystem events\n * that we caused, which would cause an infinite loop.\n */\n const recentWritesToLocalFilesystem = new Map<string, number>();\n\n const clearRecentWritesInterval = setInterval(() => {\n for (const [path, timestamp] of recentWritesToLocalFilesystem) {\n if (dayjs().isAfter(timestamp + ms(\"5s\"))) {\n // this change should have been seen by now\n recentWritesToLocalFilesystem.delete(path);\n }\n }\n }, ms(\"1s\")).unref();\n\n /**\n * Subscribe to file changes on Gadget and apply them to the local\n * filesystem.\n */\n const filesyncSubscription = filesync.subscribeToEnvironmentChanges(ctx, {\n onError: (error) => ctx.abort(error),\n beforeChanges: ({ changed, deleted }) => {\n // add all the files and directories we're about to touch to\n // recentWritesToLocalFilesystem so that we don't send them back\n // to Gadget\n for (const filepath of [...changed, ...deleted]) {\n recentWritesToLocalFilesystem.set(filepath, Date.now());\n\n let dir = path.dirname(filepath);\n while (dir !== \".\") {\n recentWritesToLocalFilesystem.set(dir + \"/\", Date.now());\n dir = path.dirname(dir);\n }\n }\n },\n });\n\n let logsSubscription: EditSubscription<ENVIRONMENT_LOGS_SUBSCRIPTION> | undefined;\n\n if (!args[\"--no-logs\"]) {\n logsSubscription = subscribeToEnvironmentLogs(syncJson.edit, args, {\n onError: (error) => {\n ctx.abort(error);\n },\n });\n }\n\n /**\n * A buffer of local file changes to send to Gadget.\n */\n const localChangesBuffer = new Changes();\n\n /**\n * A debounced function that sends the local file changes to Gadget.\n */\n const mergeChangesWithEnvironment = debounceAsync(args[\"--file-push-delay\"], async (): Promise<void> => {\n try {\n const lastGitBranch = syncJson.gitBranch;\n await syncJson.loadGitBranch();\n\n if (lastGitBranch !== syncJson.gitBranch) {\n println({\n ensureEmptyLineAbove: true,\n content: sprint`\n Your git branch changed.\n\n ${lastGitBranch} \u2192 ${syncJson.gitBranch}\n `,\n });\n\n // we need all the changes to be sent in a single batch, so wait\n // a bit in case there are changes the watcher hasn't seen yet\n const spinner = spin({ ensureEmptyLineAbove: true, content: \"Waiting for file changes to settle.\" });\n await delay(\"3s\"); // this time was chosen arbitrarily\n spinner.succeed();\n }\n\n const changes = new Changes(localChangesBuffer.entries());\n localChangesBuffer.clear();\n\n await filesync.mergeChangesWithEnvironment(ctx, { changes });\n } catch (error) {\n ctx.log.error(\"error sending changes to gadget\", { error });\n ctx.abort(error);\n }\n });\n\n ctx.log.debug(\"watching\", { path: syncJson.directory.path });\n\n /**\n * Watches the local filesystem for changes.\n */\n const fileWatcher = new Watcher(\n syncJson.directory.path,\n {\n // don't emit an event for every watched file when we start watching\n ignoreInitial: true,\n // watch everything\n recursive: true,\n // don't emit changes to .gadget/ files because they're readonly (Gadget manages them)\n ignore: (filePath: string, isDirectory?: boolean) => {\n const relative = syncJson.directory.relative(filePath);\n if (relative.startsWith(\".gadget\")) return true;\n if (isDirectory === undefined) {\n try {\n isDirectory = fs.statSync(filePath).isDirectory();\n } catch {\n isDirectory = false;\n }\n }\n return syncJson.directory.ignores(filePath, isDirectory);\n },\n // emit rename/renameDir events\n renameDetection: true,\n // how long to wait for an add event to be followed by an unlink\n // event, and vice versa (i.e. a rename event)\n renameTimeout: args[\"--file-watch-rename-timeout\"],\n // how long to wait before emitting a change event (helps avoid duplicate events)\n debounce: args[\"--file-watch-debounce\"],\n },\n (event: string, absolutePath: string, renamedPath: string) => {\n const filepath = event === \"rename\" || event === \"renameDir\" ? renamedPath : absolutePath;\n const isDirectory = event === \"renameDir\" || event === \"addDir\" || event === \"unlinkDir\";\n const normalizedPath = syncJson.directory.normalize(filepath, isDirectory);\n\n ctx.log.trace(\"file event\", { event, isDirectory, path: normalizedPath });\n\n if (recentWritesToLocalFilesystem.delete(normalizedPath)) {\n ctx.log.trace(\"ignoring event because we caused it\", { event, path: normalizedPath });\n return;\n }\n\n if (filepath === syncJson.directory.absolute(\".ignore\")) {\n if (!syncJson.directory.ignoreFileLoadedWithin(ms(\"2s\"))) {\n syncJson.directory.loadIgnoreFile().catch((error: unknown) => ctx.abort(error));\n }\n } else if (syncJson.directory.ignores(filepath, isDirectory)) {\n return;\n }\n\n switch (event) {\n case \"add\":\n case \"addDir\":\n localChangesBuffer.set(normalizedPath, { type: \"create\" });\n break;\n case \"rename\":\n case \"renameDir\": {\n const oldNormalizedPath = syncJson.directory.normalize(absolutePath, isDirectory);\n localChangesBuffer.set(normalizedPath, { type: \"create\", oldPath: oldNormalizedPath });\n break;\n }\n case \"change\": {\n localChangesBuffer.set(normalizedPath, { type: \"update\" });\n break;\n }\n case \"unlink\":\n case \"unlinkDir\": {\n localChangesBuffer.set(normalizedPath, { type: \"delete\" });\n break;\n }\n }\n\n mergeChangesWithEnvironment();\n },\n ).once(\"error\", (error) => ctx.abort(error));\n\n ctx.onAbort(async (reason) => {\n ctx.log.info(\"stopping\", { reason });\n\n logsSubscription?.unsubscribe();\n filesyncSubscription.unsubscribe();\n fileWatcher.close();\n clearInterval(clearRecentWritesInterval);\n await mergeChangesWithEnvironment.flush();\n\n try {\n await filesync.idle();\n } catch (error) {\n ctx.log.error(\"error while waiting for idle\", { error });\n }\n\n if (isAbortError(reason)) {\n return;\n }\n\n notify(ctx, { subtitle: \"Uh oh!\", message: \"An error occurred while syncing files\" });\n await reportErrorAndExit(ctx, reason);\n });\n\n footer({\n ensureEmptyLineAbove: true,\n content: sprint`\n${syncJson.sprint({ indent: 4 })}\n\n Waiting for file changes${symbol.ellipsis} {gray Press Ctrl+C to stop}\n `,\n });\n};\n", "/* IMPORT */\nimport { EventEmitter } from 'node:events';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { DEPTH, LIMIT, HAS_NATIVE_RECURSION, POLLING_INTERVAL } from './constants.js';\nimport { TargetEvent, WatcherEvent } from './enums.js';\nimport Utils from './utils.js';\nimport WatcherHandler from './watcher_handler.js';\nimport WatcherLocker from './watcher_locker.js';\nimport WatcherPoller from './watcher_poller.js';\n/* MAIN */\nclass Watcher extends EventEmitter {\n /* CONSTRUCTOR */\n constructor(target, options, handler) {\n super();\n this._closed = false;\n this._ready = false;\n this._closeAborter = new AbortController();\n this._closeSignal = this._closeAborter.signal;\n this.on(WatcherEvent.CLOSE, () => this._closeAborter.abort());\n this._closeWait = new Promise(resolve => this.on(WatcherEvent.CLOSE, resolve));\n this._readyWait = new Promise(resolve => this.on(WatcherEvent.READY, resolve));\n this._locker = new WatcherLocker(this);\n this._roots = new Set();\n this._poller = new WatcherPoller();\n this._pollers = new Set();\n this._subwatchers = new Set();\n this._watchers = {};\n this._watchersLock = Promise.resolve();\n this._watchersRestorable = {};\n this.watch(target, options, handler);\n }\n /* API */\n isClosed() {\n return this._closed;\n }\n isIgnored(targetPath, ignore, isDirectory) {\n return !!ignore && (Utils.lang.isFunction(ignore) ? !!ignore(targetPath, isDirectory) : ignore.test(targetPath));\n }\n isReady() {\n return this._ready;\n }\n close() {\n this._locker.reset();\n this._poller.reset();\n this._roots.clear();\n this.watchersClose();\n if (this.isClosed())\n return false;\n this._closed = true;\n return this.emit(WatcherEvent.CLOSE);\n }\n error(exception) {\n if (this.isClosed())\n return false;\n const error = Utils.lang.castError(exception);\n return this.emit(WatcherEvent.ERROR, error);\n }\n event(event, targetPath, targetPathNext) {\n if (this.isClosed())\n return false;\n this.emit(WatcherEvent.ALL, event, targetPath, targetPathNext);\n return this.emit(event, targetPath, targetPathNext);\n }\n ready() {\n if (this.isClosed() || this.isReady())\n return false;\n this._ready = true;\n return this.emit(WatcherEvent.READY);\n }\n pollerExists(targetPath, options) {\n for (const poller of this._pollers) {\n if (poller.targetPath !== targetPath)\n continue;\n if (!Utils.lang.isShallowEqual(poller.options, options))\n continue;\n return true;\n }\n return false;\n }\n subwatcherExists(targetPath, options) {\n for (const subwatcher of this._subwatchers) {\n if (subwatcher.targetPath !== targetPath)\n continue;\n if (!Utils.lang.isShallowEqual(subwatcher.options, options))\n continue;\n return true;\n }\n return false;\n }\n watchersClose(folderPath, filePath, recursive = true) {\n if (!folderPath) {\n for (const folderPath in this._watchers) {\n this.watchersClose(folderPath, filePath, false);\n }\n }\n else {\n const configs = this._watchers[folderPath];\n if (configs) {\n for (const config of [...configs]) { // It's important to clone the array, as items will be deleted from it also\n if (filePath && config.filePath !== filePath)\n continue;\n this.watcherClose(config);\n }\n }\n if (recursive) {\n for (const folderPathOther in this._watchers) {\n if (!Utils.fs.isSubPath(folderPath, folderPathOther))\n continue;\n this.watchersClose(folderPathOther, filePath, false);\n }\n }\n }\n }\n watchersLock(callback) {\n return this._watchersLock.then(() => {\n return this._watchersLock = new Promise(async (resolve) => {\n await callback();\n resolve();\n });\n });\n }\n watchersRestore() {\n delete this._watchersRestoreTimeout;\n const watchers = Object.entries(this._watchersRestorable);\n this._watchersRestorable = {};\n for (const [targetPath, config] of watchers) {\n this.watchPath(targetPath, config.options, config.handler);\n }\n }\n async watcherAdd(config, baseWatcherHandler) {\n const { folderPath } = config;\n const configs = this._watchers[folderPath] = (this._watchers[folderPath] || []);\n configs.push(config);\n const watcherHandler = new WatcherHandler(this, config, baseWatcherHandler);\n await watcherHandler.init();\n return watcherHandler;\n }\n watcherClose(config) {\n config.watcher.close();\n const configs = this._watchers[config.folderPath];\n if (configs) {\n const index = configs.indexOf(config);\n configs.splice(index, 1);\n if (!configs.length) {\n delete this._watchers[config.folderPath];\n }\n }\n const rootPath = config.filePath || config.folderPath;\n const isRoot = this._roots.has(rootPath);\n if (isRoot) {\n this._watchersRestorable[rootPath] = config;\n if (!this._watchersRestoreTimeout) {\n this._watchersRestoreTimeout = Utils.lang.defer(() => this.watchersRestore());\n }\n }\n }\n watcherExists(folderPath, options, handler, filePath) {\n const configsSibling = this._watchers[folderPath];\n if (!!configsSibling?.find(config => config.handler === handler && (!config.filePath || config.filePath === filePath) && config.options.ignore === options.ignore && !!config.options.native === !!options.native && (!options.recursive || config.options.recursive)))\n return true;\n let folderAncestorPath = path.dirname(folderPath);\n for (let depth = 1; depth < Infinity; depth++) {\n const configsAncestor = this._watchers[folderAncestorPath];\n if (!!configsAncestor?.find(config => (depth === 1 || (config.options.recursive && depth <= (config.options.depth ?? DEPTH))) && config.handler === handler && (!config.filePath || config.filePath === filePath) && config.options.ignore === options.ignore && !!config.options.native === !!options.native && (!options.recursive || (config.options.recursive && (HAS_NATIVE_RECURSION && config.options.native !== false)))))\n return true;\n if (!HAS_NATIVE_RECURSION)\n break; // No other ancestor will possibly be found\n const folderAncestorPathNext = path.dirname(folderPath);\n if (folderAncestorPath === folderAncestorPathNext)\n break;\n folderAncestorPath = folderAncestorPathNext;\n }\n return false;\n }\n async watchDirectories(foldersPaths, options, handler, filePath, baseWatcherHandler) {\n if (this.isClosed())\n return;\n foldersPaths = Utils.lang.uniq(foldersPaths).sort();\n let watcherHandlerLast;\n for (const folderPath of foldersPaths) {\n if (this.isIgnored(folderPath, options.ignore, true))\n continue;\n if (this.watcherExists(folderPath, options, handler, filePath))\n continue;\n try {\n const watcherOptions = (!options.recursive || (HAS_NATIVE_RECURSION && options.native !== false)) ? options : { ...options, recursive: false }; // Ensuring recursion is explicitly disabled if not available\n const watcher = fs.watch(folderPath, watcherOptions);\n const watcherConfig = { watcher, handler, options, folderPath, filePath };\n const watcherHandler = watcherHandlerLast = await this.watcherAdd(watcherConfig, baseWatcherHandler);\n const isRoot = this._roots.has(filePath || folderPath);\n if (isRoot) {\n const parentOptions = { ...options, ignoreInitial: true, recursive: false }; // Ensuring only the parent folder is being watched\n const parentFolderPath = path.dirname(folderPath);\n const parentFilePath = folderPath;\n await this.watchDirectories([parentFolderPath], parentOptions, handler, parentFilePath, watcherHandler);\n //TODO: Watch parents recursively with the following code, which requires other things to be changed too though\n // while ( true ) {\n // await this.watchDirectories ( [parentFolderPath], parentOptions, handler, parentFilePath, watcherHandler );\n // const parentFolderPathNext = path.dirname ( parentFolderPath );\n // if ( parentFolderPath === parentFolderPathNext ) break;\n // parentFilePath = parentFolderPath;\n // parentFolderPath = parentFolderPathNext;\n // }\n }\n }\n catch (error) {\n this.error(error);\n }\n }\n return watcherHandlerLast;\n }\n async watchDirectory(folderPath, options, handler, filePath, baseWatcherHandler) {\n if (this.isClosed())\n return;\n if (this.isIgnored(folderPath, options.ignore, true))\n return;\n if (!options.recursive || (HAS_NATIVE_RECURSION && options.native !== false)) {\n return this.watchersLock(() => {\n return this.watchDirectories([folderPath], options, handler, filePath, baseWatcherHandler);\n });\n }\n else {\n options = { ...options, recursive: true }; // Ensuring recursion is explicitly enabled\n const depth = options.depth ?? DEPTH;\n const limit = options.limit ?? LIMIT;\n const [folderSubPaths] = await Utils.fs.readdir(folderPath, options.ignore, depth, limit, this._closeSignal, options.readdirMap);\n return this.watchersLock(async () => {\n const watcherHandler = await this.watchDirectories([folderPath], options, handler, filePath, baseWatcherHandler);\n if (folderSubPaths.length) {\n const folderPathDepth = Utils.fs.getDepth(folderPath);\n for (const folderSubPath of folderSubPaths) {\n const folderSubPathDepth = Utils.fs.getDepth(folderSubPath);\n const subDepth = Math.max(0, depth - (folderSubPathDepth - folderPathDepth));\n const subOptions = { ...options, depth: subDepth }; // Updating the maximum depth to account for depth of the sub path\n await this.watchDirectories([folderSubPath], subOptions, handler, filePath, baseWatcherHandler || watcherHandler);\n }\n }\n });\n }\n }\n async watchFileOnce(filePath, options, callback) {\n if (this.isClosed())\n return;\n options = { ...options, ignoreInitial: false }; // Ensuring initial events are detected too\n if (this.subwatcherExists(filePath, options))\n return;\n const config = { targetPath: filePath, options };\n const handler = (event, targetPath) => {\n if (targetPath !== filePath)\n return;\n stop();\n callback();\n };\n const watcher = new Watcher(handler);\n const start = () => {\n this._subwatchers.add(config);\n this.on(WatcherEvent.CLOSE, stop); // Ensuring the subwatcher is stopped on close\n watcher.watchFile(filePath, options, handler);\n };\n const stop = () => {\n this._subwatchers.delete(config);\n this.removeListener(WatcherEvent.CLOSE, stop); // Ensuring there are no leftover listeners\n watcher.close();\n };\n return start();\n }\n async watchFile(filePath, options, handler) {\n if (this.isClosed())\n return;\n if (this.isIgnored(filePath, options.ignore, false))\n return;\n options = { ...options, recursive: false }; // Ensuring recursion is explicitly disabled\n const folderPath = path.dirname(filePath);\n return this.watchDirectory(folderPath, options, handler, filePath);\n }\n async watchPollingOnce(targetPath, options, callback) {\n if (this.isClosed())\n return;\n let isDone = false;\n const poller = new WatcherPoller();\n const disposer = await this.watchPolling(targetPath, options, async () => {\n if (isDone)\n return;\n const events = await poller.update(targetPath, options.pollingTimeout);\n if (!events.length)\n return; // Nothing actually changed, skipping\n if (isDone)\n return; // Another async callback has done the work already, skipping\n isDone = true;\n disposer();\n callback();\n });\n }\n async watchPolling(targetPath, options, callback) {\n if (this.isClosed())\n return Utils.lang.noop;\n if (this.pollerExists(targetPath, options))\n return Utils.lang.noop;\n const watcherOptions = { ...options, interval: options.pollingInterval ?? POLLING_INTERVAL }; // Ensuring a default interval is set\n const config = { targetPath, options };\n const start = () => {\n this._pollers.add(config);\n this.on(WatcherEvent.CLOSE, stop); // Ensuring polling is stopped on close\n fs.watchFile(targetPath, watcherOptions, callback);\n };\n const stop = () => {\n this._pollers.delete(config);\n this.removeListener(WatcherEvent.CLOSE, stop); // Ensuring there are no leftover listeners\n fs.unwatchFile(targetPath, callback);\n };\n Utils.lang.attempt(start);\n return () => Utils.lang.attempt(stop);\n }\n async watchUnknownChild(targetPath, options, handler) {\n if (this.isClosed())\n return;\n const watch = () => this.watchPath(targetPath, options, handler);\n return this.watchFileOnce(targetPath, options, watch);\n }\n async watchUnknownTarget(targetPath, options, handler) {\n if (this.isClosed())\n return;\n const watch = () => this.watchPath(targetPath, options, handler);\n return this.watchPollingOnce(targetPath, options, watch);\n }\n async watchPaths(targetPaths, options, handler) {\n if (this.isClosed())\n return;\n targetPaths = Utils.lang.uniq(targetPaths).sort();\n const isParallelizable = targetPaths.every((targetPath, index) => targetPaths.every((t, i) => i === index || !Utils.fs.isSubPath(targetPath, t))); // All paths are about separate subtrees, so we can start watching in parallel safely //TODO: Find parallelizable chunks rather than using an all or nothing approach\n if (isParallelizable) { // Watching in parallel\n await Promise.all(targetPaths.map(targetPath => {\n return this.watchPath(targetPath, options, handler);\n }));\n }\n else { // Watching serially\n for (const targetPath of targetPaths) {\n await this.watchPath(targetPath, options, handler);\n }\n }\n }\n async watchPath(targetPath, options, handler) {\n if (this.isClosed())\n return;\n targetPath = path.resolve(targetPath);\n if (this.isIgnored(targetPath, options.ignore))\n return;\n const stats = await Utils.fs.poll(targetPath, options.pollingTimeout);\n if (!stats) {\n const parentPath = path.dirname(targetPath);\n const parentStats = await Utils.fs.poll(parentPath, options.pollingTimeout);\n if (parentStats?.isDirectory()) {\n return this.watchUnknownChild(targetPath, options, handler);\n }\n else {\n return this.watchUnknownTarget(targetPath, options, handler);\n }\n }\n else if (stats.isFile()) {\n return this.watchFile(targetPath, options, handler);\n }\n else if (stats.isDirectory()) {\n return this.watchDirectory(targetPath, options, handler);\n }\n else {\n this.error(`\"${targetPath}\" is not supported`);\n }\n }\n async watch(target, options, handler = Utils.lang.noop) {\n if (Utils.lang.isFunction(target))\n return this.watch([], {}, target);\n if (Utils.lang.isUndefined(target))\n return this.watch([], options, handler);\n if (Utils.lang.isFunction(options))\n return this.watch(target, {}, options);\n if (Utils.lang.isUndefined(options))\n return this.watch(target, {}, handler);\n if (this.isClosed())\n return;\n if (this.isReady())\n options.readdirMap = undefined; // Only usable before initialization\n const targetPaths = Utils.lang.castArray(target);\n targetPaths.forEach(targetPath => this._roots.add(targetPath));\n await this.watchPaths(targetPaths, options, handler);\n if (this.isClosed())\n return;\n if (handler !== Utils.lang.noop) {\n this.on(WatcherEvent.ALL, handler);\n }\n options.readdirMap = undefined; // Only usable before initialization\n this.ready();\n }\n}\n/* EXPORT */\nexport default Watcher;\n", "/* IMPORT */\nimport os from 'node:os';\n/* MAIN */\nconst DEBOUNCE = 300;\nconst DEPTH = 20;\nconst LIMIT = 10000000;\nconst PLATFORM = os.platform();\nconst IS_LINUX = (PLATFORM === 'linux');\nconst IS_MAC = (PLATFORM === 'darwin');\nconst IS_WINDOWS = (PLATFORM === 'win32');\nconst HAS_NATIVE_RECURSION = IS_MAC || IS_WINDOWS;\nconst POLLING_INTERVAL = 3000;\nconst POLLING_TIMEOUT = 20000;\nconst RENAME_TIMEOUT = 1250;\n/* EXPORT */\nexport { DEBOUNCE, DEPTH, LIMIT, HAS_NATIVE_RECURSION, IS_LINUX, IS_MAC, IS_WINDOWS, PLATFORM, POLLING_INTERVAL, POLLING_TIMEOUT, RENAME_TIMEOUT };\n", "/* MAIN */\nvar FileType;\n(function (FileType) {\n FileType[FileType[\"DIR\"] = 1] = \"DIR\";\n FileType[FileType[\"FILE\"] = 2] = \"FILE\";\n})(FileType || (FileType = {}));\nvar FSTargetEvent;\n(function (FSTargetEvent) {\n FSTargetEvent[\"CHANGE\"] = \"change\";\n FSTargetEvent[\"RENAME\"] = \"rename\";\n})(FSTargetEvent || (FSTargetEvent = {}));\nvar FSWatcherEvent;\n(function (FSWatcherEvent) {\n FSWatcherEvent[\"CHANGE\"] = \"change\";\n FSWatcherEvent[\"ERROR\"] = \"error\";\n})(FSWatcherEvent || (FSWatcherEvent = {}));\nvar TargetEvent;\n(function (TargetEvent) {\n TargetEvent[\"ADD\"] = \"add\";\n TargetEvent[\"ADD_DIR\"] = \"addDir\";\n TargetEvent[\"CHANGE\"] = \"change\";\n TargetEvent[\"RENAME\"] = \"rename\";\n TargetEvent[\"RENAME_DIR\"] = \"renameDir\";\n TargetEvent[\"UNLINK\"] = \"unlink\";\n TargetEvent[\"UNLINK_DIR\"] = \"unlinkDir\";\n})(TargetEvent || (TargetEvent = {}));\nvar WatcherEvent;\n(function (WatcherEvent) {\n WatcherEvent[\"ALL\"] = \"all\";\n WatcherEvent[\"CLOSE\"] = \"close\";\n WatcherEvent[\"ERROR\"] = \"error\";\n WatcherEvent[\"READY\"] = \"ready\";\n})(WatcherEvent || (WatcherEvent = {}));\n/* EXPORT */\nexport { FileType, FSTargetEvent, FSWatcherEvent, TargetEvent, WatcherEvent };\n", "/* IMPORT */\nimport { debounce } from 'dettle';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport sfs from 'stubborn-fs';\nimport readdir from 'tiny-readdir';\nimport { POLLING_TIMEOUT } from './constants.js';\n/* MAIN */\nconst Utils = {\n /* LANG API */\n lang: {\n debounce,\n attempt: (fn) => {\n try {\n return fn();\n }\n catch (error) {\n return Utils.lang.castError(error);\n }\n },\n castArray: (x) => {\n return Utils.lang.isArray(x) ? x : [x];\n },\n castError: (exception) => {\n if (Utils.lang.isError(exception))\n return exception;\n if (Utils.lang.isString(exception))\n return new Error(exception);\n return new Error('Unknown error');\n },\n defer: (callback) => {\n return setTimeout(callback, 0);\n },\n isArray: (value) => {\n return Array.isArray(value);\n },\n isError: (value) => {\n return value instanceof Error;\n },\n isFunction: (value) => {\n return typeof value === 'function';\n },\n isNaN: (value) => {\n return Number.isNaN(value);\n },\n isNumber: (value) => {\n return typeof value === 'number';\n },\n isPrimitive: (value) => {\n if (value === null)\n return true;\n const type = typeof value;\n return type !== 'object' && type !== 'function';\n },\n isShallowEqual: (x, y) => {\n if (x === y)\n return true;\n if (Utils.lang.isNaN(x))\n return Utils.lang.isNaN(y);\n if (Utils.lang.isPrimitive(x) || Utils.lang.isPrimitive(y))\n return x === y;\n for (const i in x)\n if (!(i in y))\n return false;\n for (const i in y)\n if (x[i] !== y[i])\n return false;\n return true;\n },\n isSet: (value) => {\n return value instanceof Set;\n },\n isString: (value) => {\n return typeof value === 'string';\n },\n isUndefined: (value) => {\n return value === undefined;\n },\n noop: () => {\n return;\n },\n uniq: (arr) => {\n if (arr.length < 2)\n return arr;\n return Array.from(new Set(arr));\n }\n },\n /* FS API */\n fs: {\n getDepth: (targetPath) => {\n return Math.max(0, targetPath.split(path.sep).length - 1);\n },\n getRealPath: (targetPath, native) => {\n try {\n return native ? fs.realpathSync.native(targetPath) : fs.realpathSync(targetPath);\n }\n catch {\n return;\n }\n },\n isSubPath: (targetPath, subPath) => {\n return (subPath.startsWith(targetPath) && subPath[targetPath.length] === path.sep && (subPath.length - targetPath.length) > path.sep.length);\n },\n poll: (targetPath, timeout = POLLING_TIMEOUT) => {\n return sfs.retry.stat(timeout)(targetPath, { bigint: true }).catch(Utils.lang.noop);\n },\n readdir: async (rootPath, ignore, depth = Infinity, limit = Infinity, signal, readdirMap) => {\n if (readdirMap && depth === 1 && rootPath in readdirMap) { // Reusing cached data\n const result = readdirMap[rootPath];\n return [result.directories, result.files];\n }\n else { // Retrieving fresh data\n const result = await readdir(rootPath, { depth, limit, ignore, signal });\n return [result.directories, result.files];\n }\n }\n }\n};\n/* EXPORT */\nexport default Utils;\n", "/* IMPORT */\nimport debounce from './debounce.js';\nimport throttle from './throttle.js';\n/* EXPORT */\nexport { debounce, throttle };\n", "/* IMPORT */\n/* MAIN */\nconst debounce = (fn, wait = 1, options) => {\n /* VARIABLES */\n wait = Math.max(1, wait);\n const leading = options?.leading ?? false;\n const trailing = options?.trailing ?? true;\n const maxWait = Math.max(options?.maxWait ?? Infinity, wait);\n let args;\n let timeout;\n let timestampCall = 0;\n let timestampInvoke = 0;\n /* HELPERS */\n const getInstantData = () => {\n const timestamp = Date.now();\n const elapsedCall = timestamp - timestampCall;\n const elapsedInvoke = timestamp - timestampInvoke;\n const isInvoke = (elapsedCall >= wait || elapsedInvoke >= maxWait);\n return [timestamp, isInvoke];\n };\n const invoke = (timestamp) => {\n timestampInvoke = timestamp;\n if (!args)\n return; // This should never happen\n const _args = args;\n args = undefined;\n fn.apply(undefined, _args);\n };\n const onCancel = () => {\n resetTimeout(0);\n };\n const onFlush = () => {\n if (!timeout)\n return;\n onCancel();\n invoke(Date.now());\n };\n const onLeading = (timestamp) => {\n timestampInvoke = timestamp;\n if (leading)\n return invoke(timestamp);\n };\n const onTrailing = (timestamp) => {\n if (trailing && args)\n return invoke(timestamp);\n args = undefined;\n };\n const onTimeout = () => {\n timeout = undefined;\n const [timestamp, isInvoking] = getInstantData();\n if (isInvoking)\n return onTrailing(timestamp);\n return updateTimeout(timestamp);\n };\n const updateTimeout = (timestamp) => {\n const elapsedCall = timestamp - timestampCall;\n const elapsedInvoke = timestamp - timestampInvoke;\n const remainingCall = wait - elapsedCall;\n const remainingInvoke = maxWait - elapsedInvoke;\n const ms = Math.min(remainingCall, remainingInvoke);\n return resetTimeout(ms);\n };\n const resetTimeout = (ms) => {\n if (timeout)\n clearTimeout(timeout);\n if (ms <= 0)\n return;\n timeout = setTimeout(onTimeout, ms);\n };\n /* DEBOUNCED */\n const debounced = (...argsLatest) => {\n const [timestamp, isInvoking] = getInstantData();\n const hadTimeout = !!timeout;\n args = argsLatest;\n timestampCall = timestamp;\n if (isInvoking || !timeout)\n resetTimeout(wait);\n if (isInvoking) {\n if (!hadTimeout)\n return onLeading(timestamp);\n return invoke(timestamp);\n }\n };\n /* DEBOUNCED UTILITIES */\n debounced.cancel = onCancel;\n debounced.flush = onFlush;\n /* RETURN */\n return debounced;\n};\n/* EXPORT */\nexport default debounce;\n", "/* IMPORT */\nimport debounce from './debounce.js';\n/* MAIN */\nconst throttle = (fn, wait = 1, options) => {\n return debounce(fn, wait, {\n leading: options?.leading ?? true,\n trailing: options?.trailing ?? true,\n maxWait: wait\n });\n};\n/* EXPORT */\nexport default throttle;\n", "/* IMPORT */\nimport fs from 'node:fs';\nimport { promisify } from 'node:util';\nimport { attemptifyAsync, attemptifySync } from './attemptify.js';\nimport { NOOP } from './constants.js';\nimport Handlers from './handlers.js';\nimport { retryifyAsync, retryifySync } from './retryify.js';\n/* MAIN */\nconst FS = {\n attempt: {\n /* ASYNC */\n chmod: attemptifyAsync(promisify(fs.chmod), Handlers.onChangeError),\n chown: attemptifyAsync(promisify(fs.chown), Handlers.onChangeError),\n close: attemptifyAsync(promisify(fs.close), NOOP),\n fsync: attemptifyAsync(promisify(fs.fsync), NOOP),\n mkdir: attemptifyAsync(promisify(fs.mkdir), NOOP),\n realpath: attemptifyAsync(promisify(fs.realpath), NOOP),\n stat: attemptifyAsync(promisify(fs.stat), NOOP),\n unlink: attemptifyAsync(promisify(fs.unlink), NOOP),\n /* SYNC */\n chmodSync: attemptifySync(fs.chmodSync, Handlers.onChangeError),\n chownSync: attemptifySync(fs.chownSync, Handlers.onChangeError),\n closeSync: attemptifySync(fs.closeSync, NOOP),\n existsSync: attemptifySync(fs.existsSync, NOOP),\n fsyncSync: attemptifySync(fs.fsync, NOOP),\n mkdirSync: attemptifySync(fs.mkdirSync, NOOP),\n realpathSync: attemptifySync(fs.realpathSync, NOOP),\n statSync: attemptifySync(fs.statSync, NOOP),\n unlinkSync: attemptifySync(fs.unlinkSync, NOOP)\n },\n retry: {\n /* ASYNC */\n close: retryifyAsync(promisify(fs.close), Handlers.isRetriableError),\n fsync: retryifyAsync(promisify(fs.fsync), Handlers.isRetriableError),\n open: retryifyAsync(promisify(fs.open), Handlers.isRetriableError),\n readFile: retryifyAsync(promisify(fs.readFile), Handlers.isRetriableError),\n rename: retryifyAsync(promisify(fs.rename), Handlers.isRetriableError),\n stat: retryifyAsync(promisify(fs.stat), Handlers.isRetriableError),\n write: retryifyAsync(promisify(fs.write), Handlers.isRetriableError),\n writeFile: retryifyAsync(promisify(fs.writeFile), Handlers.isRetriableError),\n /* SYNC */\n closeSync: retryifySync(fs.closeSync, Handlers.isRetriableError),\n fsyncSync: retryifySync(fs.fsyncSync, Handlers.isRetriableError),\n openSync: retryifySync(fs.openSync, Handlers.isRetriableError),\n readFileSync: retryifySync(fs.readFileSync, Handlers.isRetriableError),\n renameSync: retryifySync(fs.renameSync, Handlers.isRetriableError),\n statSync: retryifySync(fs.statSync, Handlers.isRetriableError),\n writeSync: retryifySync(fs.writeSync, Handlers.isRetriableError),\n writeFileSync: retryifySync(fs.writeFileSync, Handlers.isRetriableError)\n }\n};\n/* EXPORT */\nexport default FS;\n", "/* MAIN */\n//FIXME: The return type of these functions is wrong, it doesn't account for returning \"undefined\", but a correct type cannot be written because generics cannot be extended properly, it seems\nconst attemptifyAsync = (fn, onError) => {\n return function attemptified(...args) {\n return fn.apply(undefined, args).catch(onError);\n };\n};\nconst attemptifySync = (fn, onError) => {\n return function attemptified(...args) {\n try {\n return fn.apply(undefined, args);\n }\n catch (error) {\n return onError(error);\n }\n };\n};\n/* EXPORT */\nexport { attemptifyAsync, attemptifySync };\n", "/* IMPORT */\nimport process from 'node:process';\n/* MAIN */\nconst IS_USER_ROOT = process.getuid ? !process.getuid() : false;\nconst LIMIT_FILES_DESCRIPTORS = 10000; //TODO: Fetch the real limit from the filesystem, somehow\nconst NOOP = () => undefined;\n/* EXPORT */\nexport { IS_USER_ROOT, LIMIT_FILES_DESCRIPTORS, NOOP };\n", "/* IMPORT */\nimport { IS_USER_ROOT } from './constants.js';\n/* MAIN */\nconst Handlers = {\n /* API */\n isChangeErrorOk: (error) => {\n if (!Handlers.isNodeError(error))\n return false;\n const { code } = error;\n if (code === 'ENOSYS')\n return true;\n if (!IS_USER_ROOT && (code === 'EINVAL' || code === 'EPERM'))\n return true;\n return false;\n },\n isNodeError: (error) => {\n return (error instanceof Error);\n },\n isRetriableError: (error) => {\n if (!Handlers.isNodeError(error))\n return false;\n const { code } = error;\n if (code === 'EMFILE' || code === 'ENFILE' || code === 'EAGAIN' || code === 'EBUSY' || code === 'EACCESS' || code === 'EACCES' || code === 'EACCS' || code === 'EPERM')\n return true;\n return false;\n },\n onChangeError: (error) => {\n if (!Handlers.isNodeError(error))\n throw error;\n if (Handlers.isChangeErrorOk(error))\n return;\n throw error;\n }\n};\n/* EXPORT */\nexport default Handlers;\n", "/* IMPORT */\nimport RetryfyQueue from './retryify_queue.js';\n/* MAIN */\n//FIXME: There are a boatload of anys here, but apparently generics cannot be extended properly, so...\nconst retryifyAsync = (fn, isRetriableError) => {\n return function retrified(timestamp) {\n return function attempt(...args) {\n return RetryfyQueue.schedule().then(cleanup => {\n const onResolve = (result) => {\n cleanup();\n return result;\n };\n const onReject = (error) => {\n cleanup();\n if (Date.now() >= timestamp)\n throw error;\n if (isRetriableError(error)) {\n const delay = Math.round(100 * Math.random());\n const delayPromise = new Promise(resolve => setTimeout(resolve, delay));\n return delayPromise.then(() => attempt.apply(undefined, args));\n }\n throw error;\n };\n return fn.apply(undefined, args).then(onResolve, onReject);\n });\n };\n };\n};\nconst retryifySync = (fn, isRetriableError) => {\n return function retrified(timestamp) {\n return function attempt(...args) {\n try {\n return fn.apply(undefined, args);\n }\n catch (error) {\n if (Date.now() > timestamp)\n throw error;\n if (isRetriableError(error))\n return attempt.apply(undefined, args);\n throw error;\n }\n };\n };\n};\n/* EXPORT */\nexport { retryifyAsync, retryifySync };\n", "/* IMPORT */\nimport { LIMIT_FILES_DESCRIPTORS } from './constants.js';\n/* MAIN */\nclass RetryfyQueue {\n constructor() {\n /* VARIABLES */\n this.interval = 25;\n this.intervalId = undefined;\n this.limit = LIMIT_FILES_DESCRIPTORS;\n this.queueActive = new Set();\n this.queueWaiting = new Set();\n /* LIFECYCLE API */\n this.init = () => {\n if (this.intervalId)\n return;\n this.intervalId = setInterval(this.tick, this.interval);\n };\n this.reset = () => {\n if (!this.intervalId)\n return;\n clearInterval(this.intervalId);\n delete this.intervalId;\n };\n /* API */\n this.add = (fn) => {\n this.queueWaiting.add(fn);\n if (this.queueActive.size < (this.limit / 2)) { // Active queue not under preassure, executing immediately\n this.tick();\n }\n else {\n this.init();\n }\n };\n this.remove = (fn) => {\n this.queueWaiting.delete(fn);\n this.queueActive.delete(fn);\n };\n this.schedule = () => {\n return new Promise(resolve => {\n const cleanup = () => this.remove(resolver);\n const resolver = () => resolve(cleanup);\n this.add(resolver);\n });\n };\n this.tick = () => {\n if (this.queueActive.size >= this.limit)\n return;\n if (!this.queueWaiting.size)\n return this.reset();\n for (const fn of this.queueWaiting) {\n if (this.queueActive.size >= this.limit)\n break;\n this.queueWaiting.delete(fn);\n this.queueActive.add(fn);\n fn();\n }\n };\n }\n}\n;\n/* EXPORT */\nexport default new RetryfyQueue();\n", "/* IMPORT */\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport makeCounterPromise from 'promise-make-counter';\nimport { NOOP_PROMISE_LIKE } from './constants.js';\nimport { castArray, isFunction } from './utils.js';\n/* MAIN */\n//TODO: Streamline the type of dirmaps\nconst readdir = (rootPath, options) => {\n const followSymlinks = options?.followSymlinks ?? false;\n const maxDepth = options?.depth ?? Infinity;\n const maxPaths = options?.limit ?? Infinity;\n const ignore = options?.ignore ?? [];\n const ignores = castArray(ignore).map(ignore => isFunction(ignore) ? ignore : (targetPath) => ignore.test(targetPath));\n const isIgnored = (targetPath, isDirectory) => ignores.some(ignore => ignore(targetPath, isDirectory));\n const signal = options?.signal ?? { aborted: false };\n const onDirents = options?.onDirents || (() => { });\n const directories = [];\n const directoriesNames = new Set();\n const directoriesNamesToPaths = {};\n const files = [];\n const filesNames = new Set();\n const filesNamesToPaths = {};\n const symlinks = [];\n const symlinksNames = new Set();\n const symlinksNamesToPaths = {};\n const map = {};\n const visited = new Set();\n const resultEmpty = { directories: [], directoriesNames: new Set(), directoriesNamesToPaths: {}, files: [], filesNames: new Set(), filesNamesToPaths: {}, symlinks: [], symlinksNames: new Set(), symlinksNamesToPaths: {}, map: {} };\n const result = { directories, directoriesNames, directoriesNamesToPaths, files, filesNames, filesNamesToPaths, symlinks, symlinksNames, symlinksNamesToPaths, map };\n const { promise, increment, decrement } = makeCounterPromise();\n let foundPaths = 0;\n const handleDirectory = (dirmap, subPath, name, depth) => {\n if (visited.has(subPath))\n return;\n if (foundPaths >= maxPaths)\n return;\n foundPaths += 1;\n dirmap.directories.push(subPath);\n dirmap.directoriesNames.add(name);\n // dirmap.directoriesNamesToPaths.propertyIsEnumerable(name) || ( dirmap.directoriesNamesToPaths[name] = [] );\n // dirmap.directoriesNamesToPaths[name].push ( subPath );\n directories.push(subPath);\n directoriesNames.add(name);\n directoriesNamesToPaths.propertyIsEnumerable(name) || (directoriesNamesToPaths[name] = []);\n directoriesNamesToPaths[name].push(subPath);\n visited.add(subPath);\n if (depth >= maxDepth)\n return;\n if (foundPaths >= maxPaths)\n return;\n populateResultFromPath(subPath, depth + 1);\n };\n const handleFile = (dirmap, subPath, name) => {\n if (visited.has(subPath))\n return;\n if (foundPaths >= maxPaths)\n return;\n foundPaths += 1;\n dirmap.files.push(subPath);\n dirmap.filesNames.add(name);\n // dirmap.filesNamesToPaths.propertyIsEnumerable(name) || ( dirmap.filesNamesToPaths[name] = [] );\n // dirmap.filesNamesToPaths[name].push ( subPath );\n files.push(subPath);\n filesNames.add(name);\n filesNamesToPaths.propertyIsEnumerable(name) || (filesNamesToPaths[name] = []);\n filesNamesToPaths[name].push(subPath);\n visited.add(subPath);\n };\n const handleSymlink = (dirmap, subPath, name, depth) => {\n if (visited.has(subPath))\n return;\n if (foundPaths >= maxPaths)\n return;\n foundPaths += 1;\n dirmap.symlinks.push(subPath);\n dirmap.symlinksNames.add(name);\n // dirmap.symlinksNamesToPaths.propertyIsEnumerable(name) || ( dirmap.symlinksNamesToPaths[name] = [] );\n // dirmap.symlinksNamesToPaths[name].push ( subPath );\n symlinks.push(subPath);\n symlinksNames.add(name);\n symlinksNamesToPaths.propertyIsEnumerable(name) || (symlinksNamesToPaths[name] = []);\n symlinksNamesToPaths[name].push(subPath);\n visited.add(subPath);\n if (!followSymlinks)\n return;\n if (depth >= maxDepth)\n return;\n if (foundPaths >= maxPaths)\n return;\n populateResultFromSymlink(subPath, depth + 1);\n };\n const handleStat = (dirmap, rootPath, name, stat, depth) => {\n if (signal.aborted)\n return;\n if (isIgnored(rootPath, stat.isDirectory()))\n return;\n if (stat.isDirectory()) {\n handleDirectory(dirmap, rootPath, name, depth);\n }\n else if (stat.isFile()) {\n handleFile(dirmap, rootPath, name);\n }\n else if (stat.isSymbolicLink()) {\n handleSymlink(dirmap, rootPath, name, depth);\n }\n };\n const handleDirent = (dirmap, rootPath, dirent, depth) => {\n if (signal.aborted)\n return;\n const separator = (rootPath === path.sep) ? '' : path.sep;\n const name = dirent.name;\n const subPath = `${rootPath}${separator}${name}`;\n if (isIgnored(subPath, dirent.isDirectory()))\n return;\n if (dirent.isDirectory()) {\n handleDirectory(dirmap, subPath, name, depth);\n }\n else if (dirent.isFile()) {\n handleFile(dirmap, subPath, name);\n }\n else if (dirent.isSymbolicLink()) {\n handleSymlink(dirmap, subPath, name, depth);\n }\n };\n const handleDirents = (dirmap, rootPath, dirents, depth) => {\n for (let i = 0, l = dirents.length; i < l; i++) {\n handleDirent(dirmap, rootPath, dirents[i], depth);\n }\n };\n const populateResultFromPath = (rootPath, depth) => {\n if (signal.aborted)\n return;\n if (depth > maxDepth)\n return;\n if (foundPaths >= maxPaths)\n return;\n increment();\n fs.readdir(rootPath, { withFileTypes: true }, (error, dirents) => {\n if (error)\n return decrement();\n if (signal.aborted)\n return decrement();\n if (!dirents.length)\n return decrement();\n const promise = onDirents(dirents) || NOOP_PROMISE_LIKE;\n promise.then(() => {\n const dirmap = map[rootPath] = { directories: [], directoriesNames: new Set(), directoriesNamesToPaths: {}, files: [], filesNames: new Set(), filesNamesToPaths: {}, symlinks: [], symlinksNames: new Set(), symlinksNamesToPaths: {} };\n handleDirents(dirmap, rootPath, dirents, depth);\n decrement();\n });\n });\n };\n const populateResultFromSymlink = (rootPath, depth) => {\n increment();\n fs.realpath(rootPath, (error, realPath) => {\n if (error)\n return decrement();\n if (signal.aborted)\n return decrement();\n fs.stat(realPath, (error, stat) => {\n if (error)\n return decrement();\n if (signal.aborted)\n return decrement();\n const name = path.basename(realPath);\n const dirmap = map[rootPath] = { directories: [], directoriesNames: new Set(), directoriesNamesToPaths: {}, files: [], filesNames: new Set(), filesNamesToPaths: {}, symlinks: [], symlinksNames: new Set(), symlinksNamesToPaths: {} };\n handleStat(dirmap, realPath, name, stat, depth);\n decrement();\n });\n });\n };\n const populateResultFromRoot = async (rootPath, depth = 1) => {\n rootPath = path.normalize(rootPath);\n visited.add(rootPath);\n populateResultFromPath(rootPath, depth);\n await promise;\n if (signal.aborted)\n return resultEmpty;\n return result;\n };\n return populateResultFromRoot(rootPath);\n};\n/* EXPORT */\nexport default readdir;\n", "/* IMPORT */\nimport makeNakedPromise from 'promise-make-naked';\n/* MAIN */\nconst makeCounterPromise = () => {\n const { promise, resolve, isPending } = makeNakedPromise();\n let counter = 0;\n const increment = () => {\n counter += 1;\n };\n const decrement = () => {\n counter -= 1;\n if (counter)\n return;\n resolve();\n };\n const init = () => {\n increment();\n queueMicrotask(decrement);\n };\n init();\n return { promise, isPending, increment, decrement };\n};\n/* EXPORT */\nexport default makeCounterPromise;\n", "/* IMPORT */\nimport { noop } from './utils.js';\n/* MAIN */\nconst makeNakedPromise = () => {\n let resolve = noop;\n let reject = noop;\n let resolved = false;\n let rejected = false;\n const promise = new Promise((res, rej) => {\n resolve = value => {\n resolved = true;\n return res(value);\n };\n reject = value => {\n rejected = true;\n return rej(value);\n };\n });\n const isPending = () => !resolved && !rejected;\n const isResolved = () => resolved;\n const isRejected = () => rejected;\n return { promise, resolve, reject, isPending, isResolved, isRejected };\n};\n/* EXPORT */\nexport default makeNakedPromise;\n", "/* MAIN */\nconst noop = () => { };\n/* EXPORT */\nexport { noop };\n", "/* IMPORT */\n/* MAIN */\nconst NOOP_PROMISE_LIKE = {\n then: (fn) => {\n fn();\n }\n};\n/* EXPORT */\nexport { NOOP_PROMISE_LIKE };\n", "/* MAIN */\nconst castArray = (value) => {\n return Array.isArray(value) ? value : [value];\n};\nconst isFunction = (value) => {\n return (typeof value === 'function');\n};\n/* EXPORT */\nexport { castArray, isFunction };\n", "/* IMPORT */\nimport path from 'node:path';\nimport { DEBOUNCE, DEPTH, LIMIT, HAS_NATIVE_RECURSION, IS_WINDOWS } from './constants.js';\nimport { FSTargetEvent, FSWatcherEvent, TargetEvent } from './enums.js';\nimport Utils from './utils.js';\n/* MAIN */\nclass WatcherHandler {\n /* CONSTRUCTOR */\n constructor(watcher, config, base) {\n this.base = base;\n this.watcher = watcher;\n this.handler = config.handler;\n this.fswatcher = config.watcher;\n this.options = config.options;\n this.folderPath = config.folderPath;\n this.filePath = config.filePath;\n this.handlerBatched = this.base ? this.base.onWatcherEvent.bind(this.base) : this._makeHandlerBatched(this.options.debounce); //UGLY\n }\n /* HELPERS */\n _isSubRoot(targetPath) {\n if (this.filePath) {\n return targetPath === this.filePath;\n }\n else {\n return targetPath === this.folderPath || Utils.fs.isSubPath(this.folderPath, targetPath);\n }\n }\n _makeHandlerBatched(delay = DEBOUNCE) {\n return (() => {\n let lock = this.watcher._readyWait; // ~Ensuring no two flushes are active in parallel, or before the watcher is ready\n let initials = [];\n let regulars = new Set();\n const flush = async (initials, regulars) => {\n const initialEvents = this.options.ignoreInitial ? [] : initials;\n const regularEvents = await this.eventsPopulate([...regulars]);\n const events = this.eventsDeduplicate([...initialEvents, ...regularEvents]);\n this.onTargetEvents(events);\n };\n const flushDebounced = Utils.lang.debounce(() => {\n if (this.watcher.isClosed())\n return;\n lock = flush(initials, regulars);\n initials = [];\n regulars = new Set();\n }, delay);\n return async (event, targetPath = '', isInitial = false) => {\n if (isInitial) { // Poll immediately\n await this.eventsPopulate([targetPath], initials, true);\n }\n else { // Poll later\n regulars.add(targetPath);\n }\n lock.then(flushDebounced);\n };\n })();\n }\n /* EVENT HELPERS */\n eventsDeduplicate(events) {\n if (events.length < 2)\n return events;\n const targetsEventPrev = {};\n return events.reduce((acc, event) => {\n const [targetEvent, targetPath] = event;\n const targetEventPrev = targetsEventPrev[targetPath];\n if (targetEvent === targetEventPrev)\n return acc; // Same event, ignoring\n if (targetEvent === TargetEvent.CHANGE && targetEventPrev === TargetEvent.ADD)\n return acc; // \"change\" after \"add\", ignoring\n targetsEventPrev[targetPath] = targetEvent;\n acc.push(event);\n return acc;\n }, []);\n }\n async eventsPopulate(targetPaths, events = [], isInitial = false) {\n await Promise.all(targetPaths.map(async (targetPath) => {\n const targetEvents = await this.watcher._poller.update(targetPath, this.options.pollingTimeout);\n await Promise.all(targetEvents.map(async (event) => {\n events.push([event, targetPath]);\n if (event === TargetEvent.ADD_DIR) {\n await this.eventsPopulateAddDir(targetPaths, targetPath, events, isInitial);\n }\n else if (event === TargetEvent.UNLINK_DIR) {\n await this.eventsPopulateUnlinkDir(targetPaths, targetPath, events, isInitial);\n }\n }));\n }));\n return events;\n }\n ;\n async eventsPopulateAddDir(targetPaths, targetPath, events = [], isInitial = false) {\n if (isInitial)\n return events;\n const depth = this.options.recursive ? this.options.depth ?? DEPTH : Math.min(1, this.options.depth ?? DEPTH);\n const limit = this.options.limit ?? LIMIT;\n const [directories, files] = await Utils.fs.readdir(targetPath, this.options.ignore, depth, limit, this.watcher._closeSignal);\n const dirSet = new Set(directories);\n const targetSubPaths = [...directories, ...files];\n await Promise.all(targetSubPaths.map(targetSubPath => {\n if (this.watcher.isIgnored(targetSubPath, this.options.ignore, dirSet.has(targetSubPath)))\n return;\n if (targetPaths.includes(targetSubPath))\n return;\n return this.eventsPopulate([targetSubPath], events, true);\n }));\n return events;\n }\n async eventsPopulateUnlinkDir(targetPaths, targetPath, events = [], isInitial = false) {\n if (isInitial)\n return events;\n for (const folderPathOther of this.watcher._poller.stats.keys()) {\n if (!Utils.fs.isSubPath(targetPath, folderPathOther))\n continue;\n if (targetPaths.includes(folderPathOther))\n continue;\n await this.eventsPopulate([folderPathOther], events, true);\n }\n return events;\n }\n /* EVENT HANDLERS */\n onTargetAdd(targetPath) {\n if (this._isSubRoot(targetPath)) {\n if (this.options.renameDetection) {\n this.watcher._locker.getLockTargetAdd(targetPath, this.options.renameTimeout);\n }\n else {\n this.watcher.event(TargetEvent.ADD, targetPath);\n }\n }\n }\n onTargetAddDir(targetPath) {\n if (targetPath !== this.folderPath && this.options.recursive && (!HAS_NATIVE_RECURSION && this.options.native !== false)) {\n this.watcher.watchDirectory(targetPath, this.options, this.handler, undefined, this.base || this);\n }\n if (this._isSubRoot(targetPath)) {\n if (this.options.renameDetection) {\n this.watcher._locker.getLockTargetAddDir(targetPath, this.options.renameTimeout);\n }\n else {\n this.watcher.event(TargetEvent.ADD_DIR, targetPath);\n }\n }\n }\n onTargetChange(targetPath) {\n if (this._isSubRoot(targetPath)) {\n this.watcher.event(TargetEvent.CHANGE, targetPath);\n }\n }\n onTargetUnlink(targetPath) {\n this.watcher.watchersClose(path.dirname(targetPath), targetPath, false);\n if (this._isSubRoot(targetPath)) {\n if (this.options.renameDetection) {\n this.watcher._locker.getLockTargetUnlink(targetPath, this.options.renameTimeout);\n }\n else {\n this.watcher.event(TargetEvent.UNLINK, targetPath);\n }\n }\n }\n onTargetUnlinkDir(targetPath) {\n this.watcher.watchersClose(path.dirname(targetPath), targetPath, false);\n this.watcher.watchersClose(targetPath);\n if (this._isSubRoot(targetPath)) {\n if (this.options.renameDetection) {\n this.watcher._locker.getLockTargetUnlinkDir(targetPath, this.options.renameTimeout);\n }\n else {\n this.watcher.event(TargetEvent.UNLINK_DIR, targetPath);\n }\n }\n }\n onTargetEvent(event) {\n const [targetEvent, targetPath] = event;\n if (targetEvent === TargetEvent.ADD) {\n this.onTargetAdd(targetPath);\n }\n else if (targetEvent === TargetEvent.ADD_DIR) {\n this.onTargetAddDir(targetPath);\n }\n else if (targetEvent === TargetEvent.CHANGE) {\n this.onTargetChange(targetPath);\n }\n else if (targetEvent === TargetEvent.UNLINK) {\n this.onTargetUnlink(targetPath);\n }\n else if (targetEvent === TargetEvent.UNLINK_DIR) {\n this.onTargetUnlinkDir(targetPath);\n }\n }\n onTargetEvents(events) {\n for (const event of events) {\n this.onTargetEvent(event);\n }\n }\n onWatcherEvent(event, targetPath, isInitial = false) {\n return this.handlerBatched(event, targetPath, isInitial);\n }\n onWatcherChange(event = FSTargetEvent.CHANGE, targetName) {\n if (this.watcher.isClosed())\n return;\n const targetPath = path.resolve(this.folderPath, targetName || '');\n if (this.filePath && targetPath !== this.folderPath && targetPath !== this.filePath)\n return;\n if (this.watcher.isIgnored(targetPath, this.options.ignore))\n return;\n this.onWatcherEvent(event, targetPath);\n }\n onWatcherError(error) {\n if (IS_WINDOWS && error.code === 'EPERM') { // This may happen when a folder is deleted\n this.onWatcherChange(FSTargetEvent.CHANGE, '');\n }\n else {\n this.watcher.error(error);\n }\n }\n /* API */\n async init() {\n await this.initWatcherEvents();\n await this.initInitialEvents();\n }\n async initWatcherEvents() {\n const onChange = this.onWatcherChange.bind(this);\n this.fswatcher.on(FSWatcherEvent.CHANGE, onChange);\n const onError = this.onWatcherError.bind(this);\n this.fswatcher.on(FSWatcherEvent.ERROR, onError);\n }\n async initInitialEvents() {\n const isInitial = !this.watcher.isReady(); // \"isInitial\" => is ignorable via the \"ignoreInitial\" option\n if (this.filePath) { // Single initial path\n if (this.watcher._poller.stats.has(this.filePath))\n return; // Already polled\n await this.onWatcherEvent(FSTargetEvent.CHANGE, this.filePath, isInitial);\n }\n else { // Multiple initial paths\n const depth = this.options.recursive && (HAS_NATIVE_RECURSION && this.options.native !== false) ? this.options.depth ?? DEPTH : Math.min(1, this.options.depth ?? DEPTH);\n const limit = this.options.limit ?? LIMIT;\n const [directories, files] = await Utils.fs.readdir(this.folderPath, this.options.ignore, depth, limit, this.watcher._closeSignal, this.options.readdirMap);\n const dirSet = new Set(directories);\n dirSet.add(this.folderPath);\n const targetPaths = [this.folderPath, ...directories, ...files];\n await Promise.all(targetPaths.map(targetPath => {\n if (this.watcher._poller.stats.has(targetPath))\n return; // Already polled\n if (this.watcher.isIgnored(targetPath, this.options.ignore, dirSet.has(targetPath)))\n return;\n return this.onWatcherEvent(FSTargetEvent.CHANGE, targetPath, isInitial);\n }));\n }\n }\n}\n/* EXPORT */\nexport default WatcherHandler;\n", "/* IMPORT */\nimport { RENAME_TIMEOUT } from './constants.js';\nimport { FileType, TargetEvent } from './enums.js';\nimport Utils from './utils.js';\nimport WatcherLocksResolver from './watcher_locks_resolver.js';\n/* MAIN */\n//TODO: Use a better name for this thing, maybe \"RenameDetector\"\nclass WatcherLocker {\n /* CONSTRUCTOR */\n constructor(watcher) {\n this._watcher = watcher;\n this.reset();\n }\n /* API */\n getLockAdd(config, timeout = RENAME_TIMEOUT) {\n const { ino, targetPath, events, locks } = config;\n const emit = () => {\n const otherPath = this._watcher._poller.paths.find(ino || -1, path => path !== targetPath); // Maybe this is actually a rename in a case-insensitive filesystem\n if (otherPath && otherPath !== targetPath) {\n if (Utils.fs.getRealPath(targetPath, true) === otherPath)\n return; //TODO: This seems a little too special-casey\n this._watcher.event(events.rename, otherPath, targetPath);\n }\n else {\n this._watcher.event(events.add, targetPath);\n }\n };\n if (!ino)\n return emit();\n const cleanup = () => {\n locks.add.delete(ino);\n WatcherLocksResolver.remove(free);\n };\n const free = () => {\n cleanup();\n emit();\n };\n WatcherLocksResolver.add(free, timeout);\n const resolve = () => {\n const unlink = locks.unlink.get(ino);\n if (!unlink)\n return; // No matching \"unlink\" lock found, skipping\n cleanup();\n const targetPathPrev = unlink();\n if (targetPath === targetPathPrev) {\n if (events.change) {\n if (this._watcher._poller.stats.has(targetPath)) {\n this._watcher.event(events.change, targetPath);\n }\n }\n }\n else {\n this._watcher.event(events.rename, targetPathPrev, targetPath);\n }\n };\n locks.add.set(ino, resolve);\n resolve();\n }\n getLockUnlink(config, timeout = RENAME_TIMEOUT) {\n const { ino, targetPath, events, locks } = config;\n const emit = () => {\n this._watcher.event(events.unlink, targetPath);\n };\n if (!ino)\n return emit();\n const cleanup = () => {\n locks.unlink.delete(ino);\n WatcherLocksResolver.remove(free);\n };\n const free = () => {\n cleanup();\n emit();\n };\n WatcherLocksResolver.add(free, timeout);\n const overridden = () => {\n cleanup();\n return targetPath;\n };\n locks.unlink.set(ino, overridden);\n locks.add.get(ino)?.();\n }\n getLockTargetAdd(targetPath, timeout) {\n const ino = this._watcher._poller.getIno(targetPath, TargetEvent.ADD, FileType.FILE);\n return this.getLockAdd({\n ino,\n targetPath,\n events: WatcherLocker.FILE_EVENTS,\n locks: this._locksFile\n }, timeout);\n }\n getLockTargetAddDir(targetPath, timeout) {\n const ino = this._watcher._poller.getIno(targetPath, TargetEvent.ADD_DIR, FileType.DIR);\n return this.getLockAdd({\n ino,\n targetPath,\n events: WatcherLocker.DIR_EVENTS,\n locks: this._locksDir\n }, timeout);\n }\n getLockTargetUnlink(targetPath, timeout) {\n const ino = this._watcher._poller.getIno(targetPath, TargetEvent.UNLINK, FileType.FILE);\n return this.getLockUnlink({\n ino,\n targetPath,\n events: WatcherLocker.FILE_EVENTS,\n locks: this._locksFile\n }, timeout);\n }\n getLockTargetUnlinkDir(targetPath, timeout) {\n const ino = this._watcher._poller.getIno(targetPath, TargetEvent.UNLINK_DIR, FileType.DIR);\n return this.getLockUnlink({\n ino,\n targetPath,\n events: WatcherLocker.DIR_EVENTS,\n locks: this._locksDir\n }, timeout);\n }\n reset() {\n this._locksAdd = new Map();\n this._locksAddDir = new Map();\n this._locksUnlink = new Map();\n this._locksUnlinkDir = new Map();\n this._locksDir = { add: this._locksAddDir, unlink: this._locksUnlinkDir };\n this._locksFile = { add: this._locksAdd, unlink: this._locksUnlink };\n }\n}\nWatcherLocker.DIR_EVENTS = {\n add: TargetEvent.ADD_DIR,\n rename: TargetEvent.RENAME_DIR,\n unlink: TargetEvent.UNLINK_DIR\n};\nWatcherLocker.FILE_EVENTS = {\n add: TargetEvent.ADD,\n change: TargetEvent.CHANGE,\n rename: TargetEvent.RENAME,\n unlink: TargetEvent.UNLINK\n};\n/* EXPORT */\nexport default WatcherLocker;\n", "/* MAIN */\n// Registering a single interval scales much better than registering N timeouts\n// Timeouts are respected within the interval margin\nconst WatcherLocksResolver = {\n /* VARIABLES */\n interval: 100,\n intervalId: undefined,\n fns: new Map(),\n /* LIFECYCLE API */\n init: () => {\n if (WatcherLocksResolver.intervalId)\n return;\n WatcherLocksResolver.intervalId = setInterval(WatcherLocksResolver.resolve, WatcherLocksResolver.interval);\n },\n reset: () => {\n if (!WatcherLocksResolver.intervalId)\n return;\n clearInterval(WatcherLocksResolver.intervalId);\n delete WatcherLocksResolver.intervalId;\n },\n /* API */\n add: (fn, timeout) => {\n WatcherLocksResolver.fns.set(fn, Date.now() + timeout);\n WatcherLocksResolver.init();\n },\n remove: (fn) => {\n WatcherLocksResolver.fns.delete(fn);\n },\n resolve: () => {\n if (!WatcherLocksResolver.fns.size)\n return WatcherLocksResolver.reset();\n const now = Date.now();\n for (const [fn, timestamp] of WatcherLocksResolver.fns) {\n if (timestamp >= now)\n continue; // We should still wait some more for this\n WatcherLocksResolver.remove(fn);\n fn();\n }\n }\n};\n/* EXPORT */\nexport default WatcherLocksResolver;\n", "/* IMPORT */\nimport { FileType, TargetEvent } from './enums.js';\nimport LazyMapSet from './lazy_map_set.js';\nimport Utils from './utils.js';\nimport WatcherStats from './watcher_stats.js';\n/* MAIN */\nclass WatcherPoller {\n constructor() {\n /* VARIABLES */\n this.inos = {};\n this.paths = new LazyMapSet();\n this.stats = new Map();\n }\n /* API */\n getIno(targetPath, event, type) {\n const inos = this.inos[event];\n if (!inos)\n return;\n const ino = inos[targetPath];\n if (!ino)\n return;\n if (type && ino[1] !== type)\n return;\n return ino[0];\n }\n getStats(targetPath) {\n return this.stats.get(targetPath);\n }\n async poll(targetPath, timeout) {\n const stats = await Utils.fs.poll(targetPath, timeout);\n if (!stats)\n return;\n const isSupported = stats.isFile() || stats.isDirectory();\n if (!isSupported)\n return;\n return new WatcherStats(stats);\n }\n reset() {\n this.inos = {};\n this.paths = new LazyMapSet();\n this.stats = new Map();\n }\n async update(targetPath, timeout) {\n const prev = this.getStats(targetPath);\n const next = await this.poll(targetPath, timeout);\n this.updateStats(targetPath, next);\n if (!prev && next) {\n if (next.isFile()) {\n this.updateIno(targetPath, TargetEvent.ADD, next);\n return [TargetEvent.ADD];\n }\n if (next.isDirectory()) {\n this.updateIno(targetPath, TargetEvent.ADD_DIR, next);\n return [TargetEvent.ADD_DIR];\n }\n }\n else if (prev && !next) {\n if (prev.isFile()) {\n this.updateIno(targetPath, TargetEvent.UNLINK, prev);\n return [TargetEvent.UNLINK];\n }\n if (prev.isDirectory()) {\n this.updateIno(targetPath, TargetEvent.UNLINK_DIR, prev);\n return [TargetEvent.UNLINK_DIR];\n }\n }\n else if (prev && next) {\n if (prev.isFile()) {\n if (next.isFile()) {\n if (prev.ino === next.ino && !prev.size && !next.size)\n return []; // Same path, same content and same file, nothing actually changed\n this.updateIno(targetPath, TargetEvent.CHANGE, next);\n return [TargetEvent.CHANGE];\n }\n if (next.isDirectory()) {\n this.updateIno(targetPath, TargetEvent.UNLINK, prev);\n this.updateIno(targetPath, TargetEvent.ADD_DIR, next);\n return [TargetEvent.UNLINK, TargetEvent.ADD_DIR];\n }\n }\n else if (prev.isDirectory()) {\n if (next.isFile()) {\n this.updateIno(targetPath, TargetEvent.UNLINK_DIR, prev);\n this.updateIno(targetPath, TargetEvent.ADD, next);\n return [TargetEvent.UNLINK_DIR, TargetEvent.ADD];\n }\n if (next.isDirectory()) {\n if (prev.ino === next.ino)\n return []; // Same path and same directory, nothing actually changed\n this.updateIno(targetPath, TargetEvent.UNLINK_DIR, prev);\n this.updateIno(targetPath, TargetEvent.ADD_DIR, next);\n return [TargetEvent.UNLINK_DIR, TargetEvent.ADD_DIR];\n }\n }\n }\n return [];\n }\n updateIno(targetPath, event, stats) {\n const inos = this.inos[event] = this.inos[event] || (this.inos[event] = {});\n const type = stats.isFile() ? FileType.FILE : FileType.DIR;\n inos[targetPath] = [stats.ino, type];\n }\n updateStats(targetPath, stats) {\n if (stats) {\n this.paths.set(stats.ino, targetPath);\n this.stats.set(targetPath, stats);\n }\n else {\n const ino = this.stats.get(targetPath)?.ino || -1;\n this.paths.delete(ino, targetPath);\n this.stats.delete(targetPath);\n }\n }\n}\n/* EXPORT */\nexport default WatcherPoller;\n", "/* IMPORT */\nimport Utils from './utils.js';\n/* MAIN */\n//TODO: Maybe publish this as a standalone module\nclass LazyMapSet {\n constructor() {\n /* VARIABLES */\n this.map = new Map();\n }\n /* API */\n clear() {\n this.map.clear();\n }\n delete(key, value) {\n if (Utils.lang.isUndefined(value)) {\n return this.map.delete(key);\n }\n else if (this.map.has(key)) {\n const values = this.map.get(key);\n if (Utils.lang.isSet(values)) {\n const deleted = values.delete(value);\n if (!values.size) {\n this.map.delete(key);\n }\n return deleted;\n }\n else if (values === value) {\n this.map.delete(key);\n return true;\n }\n }\n return false;\n }\n find(key, iterator) {\n if (this.map.has(key)) {\n const values = this.map.get(key);\n if (Utils.lang.isSet(values)) {\n return Array.from(values).find(iterator);\n }\n else if (iterator(values)) { //TSC\n return values;\n }\n }\n return undefined;\n }\n get(key) {\n return this.map.get(key);\n }\n has(key, value) {\n if (Utils.lang.isUndefined(value)) {\n return this.map.has(key);\n }\n else if (this.map.has(key)) {\n const values = this.map.get(key);\n if (Utils.lang.isSet(values)) {\n return values.has(value);\n }\n else {\n return (values === value);\n }\n }\n return false;\n }\n set(key, value) {\n if (this.map.has(key)) {\n const values = this.map.get(key);\n if (Utils.lang.isSet(values)) {\n values.add(value);\n }\n else if (values !== value) {\n this.map.set(key, new Set([values, value])); //TSC\n }\n }\n else {\n this.map.set(key, value);\n }\n return this;\n }\n}\n/* EXPORT */\nexport default LazyMapSet;\n", "/* IMPORT */\n/* MAIN */\n// An more memory-efficient representation of the useful subset of stats objects\nclass WatcherStats {\n /* CONSTRUCTOR */\n constructor(stats) {\n this.ino = (stats.ino <= Number.MAX_SAFE_INTEGER) ? Number(stats.ino) : stats.ino;\n this.size = Number(stats.size);\n this.atimeMs = Number(stats.atimeMs);\n this.mtimeMs = Number(stats.mtimeMs);\n this.ctimeMs = Number(stats.ctimeMs);\n this.birthtimeMs = Number(stats.birthtimeMs);\n this._isFile = stats.isFile();\n this._isDirectory = stats.isDirectory();\n this._isSymbolicLink = stats.isSymbolicLink();\n }\n /* API */\n isFile() {\n return this._isFile;\n }\n isDirectory() {\n return this._isDirectory;\n }\n isSymbolicLink() {\n return this._isSymbolicLink;\n }\n}\n/* EXPORT */\nexport default WatcherStats;\n", "import { output } from \"./output.js\";\nimport { sprintln, type SprintOptionsWithContent } from \"./sprint.js\";\n\nexport type footer = {\n (str: string | SprintOptionsWithContent): void;\n (template: TemplateStringsArray, ...values: unknown[]): void;\n};\n\nexport const footer = ((optionsOrString: SprintOptionsWithContent | string | TemplateStringsArray, ...values: unknown[]): void => {\n const str = sprintln(optionsOrString as TemplateStringsArray, ...values);\n if (output.isInteractive) {\n output.updateFooter(str);\n } else {\n output.writeStdout(str);\n }\n}) as footer;\n", "import type WindowsBalloon from \"node-notifier/notifiers/balloon.js\";\nimport type Growl from \"node-notifier/notifiers/growl.js\";\nimport type NotificationCenter from \"node-notifier/notifiers/notificationcenter.js\";\nimport type NotifySend from \"node-notifier/notifiers/notifysend.js\";\nimport type WindowsToaster from \"node-notifier/notifiers/toaster.js\";\n\nimport notifier, { type Notification } from \"node-notifier\";\n\nimport type { Context } from \"../command/context.js\";\nimport type { Field } from \"./log/field.js\";\n\nimport { assetsPath } from \"../util/paths.js\";\n\n/**\n * Sends a native OS notification to the user.\n *\n * @see {@link https://www.npmjs.com/package/node-notifier node-notifier}\n */\nexport const notify = (\n ctx: Context,\n notification:\n | Notification\n | NotificationCenter.Notification\n | NotifySend.Notification\n | WindowsToaster.Notification\n | WindowsBalloon.Notification\n | Growl.Notification,\n): void => {\n ctx.log.info(\"notifying user\", { notification: notification as Field });\n\n notifier.notify(\n {\n title: \"Gadget\",\n contentImage: assetsPath(\"favicon-128@4x.png\"),\n icon: assetsPath(\"favicon-128@4x.png\"),\n sound: true,\n timeout: false,\n ...notification,\n },\n (error) => {\n if (error) {\n ctx.log.warn(\"error notifying user\", { notification: notification as Field });\n }\n },\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["node_fs_1", "promises_1", "isexe", "__name", "path", "options", "ignoreErrors", "checkStat", "e", "er", "exports", "sync", "stat", "checkMode", "myUid", "myGroups", "myGid", "groups", "mod", "uid", "gid", "u", "g", "o", "ug", "a", "node_path_1", "checkPathExt", "pathExt", "peSplit", "pes", "p", "ext", "require_options", "__commonJSMin", "v", "t", "s", "G", "w", "X", "posix", "__importStar", "_", "win32", "__exportStar", "platform", "impl", "require_lib", "__commonJSMin", "exports", "module", "init_cjs", "isexe", "isexeSync", "join", "delimiter", "sep", "posix", "isWindows", "rSlash", "rRel", "getNotFoundError", "__name", "cmd", "getPathInfo", "optPath", "optPathExt", "optDelimiter", "pathEnv", "pathExtExe", "pathExt", "item", "getPathPart", "raw", "pathPart", "which", "opt", "found", "envPart", "p", "ext", "withExt", "whichSync", "pathEnvPart", "require_shellwords", "__commonJSMin", "exports", "init_cjs", "scan", "__name", "string", "pattern", "callback", "match", "result", "line", "field", "words", "dq", "escape", "garbage", "raw", "seperator", "sq", "word", "str", "require_is_docker", "__commonJSMin", "exports", "module", "init_cjs", "fs", "isDocker", "hasDockerEnv", "__name", "hasDockerCGroup", "require_is_wsl", "__commonJSMin", "exports", "module", "init_cjs", "os", "fs", "isDocker", "isWsl", "__name", "require_utils", "__commonJSMin", "exports", "module", "init_cjs", "shellwords", "cp", "semver", "isWSL", "path", "url", "os", "fs", "net", "BUFFER_SIZE", "clone", "obj", "__name", "escapeQuotes", "str", "inArray", "arr", "val", "notifySendFlags", "notifier", "options", "cb", "error", "stdout", "stderr", "data", "e", "notifierExists", "_", "exists", "err", "stat", "mapAppIcon", "mapText", "mapIconShorthand", "key", "isArray", "noop", "emitter", "fn", "mapper", "resultantData", "metadata", "extra", "args", "initial", "keyExtra", "allowedArguments", "noEscape", "checkForAllowed", "explicitTrue", "keepNewlines", "wrapper", "escapeFn", "arg", "removeNewLines", "excapedNewline", "allowedToasterFlags", "toasterSoundPrefix", "toasterDefaultSound", "sanitizeNotifuTypeArgument", "garanteeSemverFormat", "version", "type", "server", "buf", "resolve", "stream", "c", "require_notifysend", "__commonJSMin", "exports", "module", "init_cjs", "os", "which", "utils", "EventEmitter", "util", "notifier", "hasNotifier", "NotifySend", "options", "__name", "noop", "notifyRaw", "callback", "doNotification", "err", "allowedArguments", "initial", "argsList", "require_checkGrowl", "__commonJSMin", "exports", "module", "init_cjs", "net", "hasGrowl", "growlConfig", "cb", "port", "host", "socket", "require_gntp", "__commonJSMin", "exports", "module", "init_cjs", "net", "crypto", "format", "fs", "nl", "GNTP", "type", "opts", "__name", "resp", "parsed", "head", "body", "ln", "self", "args", "file", "id", "header", "name", "val", "callback", "socket", "res", "data", "msg", "require_growly", "__commonJSMin", "exports", "module", "init_cjs", "GNTP", "Growly", "__name", "notif", "host", "port", "appname", "appicon", "notifications", "callback", "gntp", "text", "opts", "self", "err", "resp", "require_growl", "__commonJSMin", "exports", "module", "init_cjs", "checkGrowl", "utils", "growly", "EventEmitter", "util", "errorMessageNotFound", "Growl", "hasGrowl", "options", "__name", "notifyRaw", "callback", "data", "localCallback", "noop", "_", "didHaveGrowl", "require_notificationcenter", "__commonJSMin", "exports", "module", "init_cjs", "utils", "Growl", "path", "notifier", "EventEmitter", "util", "errorMessageOsX", "NotificationCenter", "options", "__name", "activeId", "noop", "notifyRaw", "callback", "fallbackNotifier", "id", "identificator", "actionJackedCallback", "data", "argsList", "require_balloon", "__commonJSMin", "exports", "module", "init_cjs", "path", "notifier", "checkGrowl", "utils", "Toaster", "Growl", "os", "EventEmitter", "util", "hasGrowl", "WindowsBalloon", "options", "__name", "noop", "notifyRaw", "callback", "fallback", "notifierOptions", "actionJackedCallback", "data", "doNotification", "_", "hasGrowlResult", "allowedArguments", "is64Bit", "fullNotifierPath", "localNotifier", "argsList", "error", "action", "fromErrorCodeToAction", "errorCode", "crypto", "rng", "poolPtr", "rnds8Pool", "init_rng", "__esmMin", "init_cjs", "__name", "regex_default", "init_regex", "__esmMin", "init_cjs", "validate", "uuid", "regex_default", "validate_default", "init_validate", "__esmMin", "init_cjs", "init_regex", "__name", "stringify", "arr", "offset", "uuid", "byteToHex", "validate_default", "stringify_default", "init_stringify", "__esmMin", "init_cjs", "init_validate", "i", "__name", "v1", "options", "buf", "offset", "b", "node", "_nodeId", "clockseq", "_clockseq", "seedBytes", "rng", "msecs", "nsecs", "_lastNSecs", "dt", "_lastMSecs", "tl", "tmh", "n", "stringify_default", "v1_default", "init_v1", "__esmMin", "init_cjs", "init_rng", "init_stringify", "__name", "parse", "uuid", "validate_default", "v", "arr", "parse_default", "init_parse", "__esmMin", "init_cjs", "init_validate", "__name", "stringToBytes", "str", "bytes", "i", "v35_default", "name", "version", "hashfunc", "generateUUID", "value", "namespace", "buf", "offset", "parse_default", "stringify_default", "__name", "DNS", "URL", "init_v35", "__esmMin", "init_cjs", "init_stringify", "init_parse", "crypto", "md5", "bytes", "md5_default", "init_md5", "__esmMin", "init_cjs", "__name", "v3", "v3_default", "init_v3", "__esmMin", "init_cjs", "init_v35", "init_md5", "v35_default", "md5_default", "v4", "options", "buf", "offset", "rnds", "rng", "i", "stringify_default", "v4_default", "init_v4", "__esmMin", "init_cjs", "init_rng", "init_stringify", "__name", "crypto", "sha1", "bytes", "sha1_default", "init_sha1", "__esmMin", "init_cjs", "__name", "v5", "v5_default", "init_v5", "__esmMin", "init_cjs", "init_v35", "init_sha1", "v35_default", "sha1_default", "nil_default", "init_nil", "__esmMin", "init_cjs", "version", "uuid", "validate_default", "version_default", "init_version", "__esmMin", "init_cjs", "init_validate", "__name", "esm_node_exports", "__export", "nil_default", "parse_default", "stringify_default", "v1_default", "v3_default", "v4_default", "v5_default", "validate_default", "version_default", "init_esm_node", "__esmMin", "init_cjs", "init_v1", "init_v3", "init_v4", "init_v5", "init_nil", "init_version", "init_validate", "init_stringify", "init_parse", "require_toaster", "__commonJSMin", "exports", "module", "init_cjs", "path", "notifier", "utils", "Balloon", "os", "uuid", "EventEmitter", "util", "fallback", "PIPE_NAME", "PIPE_PATH_PREFIX", "PIPE_PATH_PREFIX_WSL", "WindowsToaster", "options", "__name", "noop", "parseResult", "data", "acc", "cur", "split", "getPipeName", "notifyRaw", "callback", "is64Bit", "resultBuffer", "server", "snoreToastResultParser", "err", "result", "actionJackedCallback", "out", "localNotifier", "argsList", "require_node_notifier", "__commonJSMin", "exports", "module", "init_cjs", "os", "utils", "NotifySend", "NotificationCenter", "WindowsToaster", "Growl", "WindowsBalloon", "options", "osType", "init_cjs", "import_dayjs", "import_ms", "fs", "path", "init_cjs", "EventEmitter", "fs", "path", "init_cjs", "os", "DEBOUNCE", "DEPTH", "LIMIT", "PLATFORM", "IS_MAC", "PLATFORM", "IS_WINDOWS", "HAS_NATIVE_RECURSION", "POLLING_INTERVAL", "POLLING_TIMEOUT", "RENAME_TIMEOUT", "init_cjs", "FileType", "FSTargetEvent", "FSWatcherEvent", "TargetEvent", "WatcherEvent", "init_cjs", "init_cjs", "init_cjs", "debounce", "__name", "fn", "wait", "options", "leading", "trailing", "maxWait", "args", "timeout", "timestampCall", "timestampInvoke", "getInstantData", "timestamp", "elapsedCall", "elapsedInvoke", "isInvoke", "invoke", "_args", "onCancel", "resetTimeout", "onFlush", "onLeading", "onTrailing", "onTimeout", "isInvoking", "updateTimeout", "remainingCall", "remainingInvoke", "ms", "debounced", "argsLatest", "hadTimeout", "debounce_default", "init_cjs", "fs", "path", "init_cjs", "fs", "promisify", "init_cjs", "attemptifyAsync", "__name", "fn", "onError", "args", "attemptifySync", "error", "init_cjs", "process", "IS_USER_ROOT", "process", "LIMIT_FILES_DESCRIPTORS", "NOOP", "__name", "init_cjs", "Handlers", "__name", "error", "code", "IS_USER_ROOT", "handlers_default", "init_cjs", "init_cjs", "RetryfyQueue", "__name", "LIMIT_FILES_DESCRIPTORS", "fn", "resolve", "cleanup", "resolver", "retryify_queue_default", "retryifyAsync", "__name", "fn", "isRetriableError", "timestamp", "attempt", "args", "retryify_queue_default", "cleanup", "onResolve", "result", "onReject", "error", "delay", "resolve", "retryifySync", "FS", "attemptifyAsync", "promisify", "fs", "handlers_default", "NOOP", "attemptifySync", "retryifyAsync", "retryifySync", "dist_default", "init_cjs", "fs", "path", "init_cjs", "init_cjs", "init_cjs", "noop", "__name", "makeNakedPromise", "__name", "resolve", "noop", "reject", "resolved", "rejected", "res", "rej", "value", "dist_default", "makeCounterPromise", "__name", "promise", "resolve", "isPending", "dist_default", "counter", "increment", "decrement", "init_cjs", "NOOP_PROMISE_LIKE", "__name", "fn", "init_cjs", "castArray", "__name", "value", "isFunction", "readdir", "__name", "rootPath", "options", "followSymlinks", "maxDepth", "maxPaths", "ignore", "ignores", "castArray", "isFunction", "targetPath", "isIgnored", "isDirectory", "signal", "onDirents", "directories", "directoriesNames", "directoriesNamesToPaths", "files", "filesNames", "filesNamesToPaths", "symlinks", "symlinksNames", "symlinksNamesToPaths", "map", "visited", "resultEmpty", "result", "promise", "increment", "decrement", "dist_default", "foundPaths", "handleDirectory", "dirmap", "subPath", "name", "depth", "populateResultFromPath", "handleFile", "handleSymlink", "populateResultFromSymlink", "handleStat", "stat", "handleDirent", "dirent", "separator", "path", "handleDirents", "dirents", "i", "l", "fs", "error", "NOOP_PROMISE_LIKE", "realPath", "Utils", "debounce_default", "__name", "fn", "error", "x", "exception", "callback", "value", "type", "y", "i", "arr", "targetPath", "path", "native", "fs", "subPath", "timeout", "POLLING_TIMEOUT", "dist_default", "rootPath", "ignore", "depth", "limit", "signal", "readdirMap", "result", "utils_default", "init_cjs", "path", "WatcherHandler", "__name", "watcher", "config", "base", "targetPath", "utils_default", "delay", "DEBOUNCE", "lock", "initials", "regulars", "flush", "initialEvents", "regularEvents", "events", "flushDebounced", "event", "isInitial", "targetsEventPrev", "acc", "targetEvent", "targetEventPrev", "TargetEvent", "targetPaths", "targetEvents", "depth", "DEPTH", "limit", "LIMIT", "directories", "files", "dirSet", "targetSubPaths", "targetSubPath", "folderPathOther", "HAS_NATIVE_RECURSION", "path", "FSTargetEvent", "targetName", "error", "IS_WINDOWS", "onChange", "FSWatcherEvent", "onError", "watcher_handler_default", "init_cjs", "init_cjs", "WatcherLocksResolver", "__name", "fn", "timeout", "now", "timestamp", "watcher_locks_resolver_default", "WatcherLocker", "_WatcherLocker", "__name", "watcher", "config", "timeout", "RENAME_TIMEOUT", "ino", "targetPath", "events", "locks", "emit", "otherPath", "path", "utils_default", "cleanup", "watcher_locks_resolver_default", "free", "resolve", "unlink", "targetPathPrev", "overridden", "TargetEvent", "FileType", "watcher_locker_default", "init_cjs", "init_cjs", "LazyMapSet", "__name", "key", "value", "utils_default", "values", "deleted", "iterator", "lazy_map_set_default", "init_cjs", "WatcherStats", "__name", "stats", "watcher_stats_default", "WatcherPoller", "__name", "lazy_map_set_default", "targetPath", "event", "type", "inos", "ino", "timeout", "stats", "utils_default", "watcher_stats_default", "prev", "next", "TargetEvent", "FileType", "watcher_poller_default", "Watcher", "_Watcher", "EventEmitter", "__name", "target", "options", "handler", "WatcherEvent", "resolve", "watcher_locker_default", "watcher_poller_default", "targetPath", "ignore", "isDirectory", "utils_default", "exception", "error", "event", "targetPathNext", "poller", "subwatcher", "folderPath", "filePath", "recursive", "configs", "config", "folderPathOther", "callback", "watchers", "baseWatcherHandler", "watcherHandler", "watcher_handler_default", "index", "rootPath", "folderAncestorPath", "path", "depth", "DEPTH", "HAS_NATIVE_RECURSION", "folderAncestorPathNext", "foldersPaths", "watcherHandlerLast", "watcherOptions", "watcherConfig", "fs", "parentOptions", "parentFolderPath", "parentFilePath", "limit", "LIMIT", "folderSubPaths", "folderPathDepth", "folderSubPath", "folderSubPathDepth", "subDepth", "subOptions", "stop", "watcher", "start", "isDone", "disposer", "POLLING_INTERVAL", "watch", "targetPaths", "t", "i", "stats", "parentPath", "watcher_default", "import_which", "init_cjs", "footer", "__name", "optionsOrString", "values", "str", "sprintln", "output", "init_cjs", "import_node_notifier", "notify", "__name", "ctx", "notification", "notifier", "assetsPath", "error", "args", "SyncJsonArgs", "LoggingArgs", "MergeConflictPreferenceArg", "ms", "usage", "__name", "_ctx", "sprint", "run", "ctx", "which", "YarnNotFoundError", "directory", "loadSyncJsonDirectory", "syncJson", "SyncJson", "acquireDevLock", "releaseDevLock", "maybePromptAgentsMd", "maybePromptGadgetSkills", "footer", "filesync", "FileSync", "hashes", "choices", "FileSyncStrategy", "select", "choice", "source_default", "unreachable", "recentWritesToLocalFilesystem", "clearRecentWritesInterval", "path", "timestamp", "dayjs", "filesyncSubscription", "error", "changed", "deleted", "filepath", "dir", "logsSubscription", "subscribeToEnvironmentLogs", "localChangesBuffer", "Changes", "mergeChangesWithEnvironment", "debounceAsync", "lastGitBranch", "println", "spinner", "spin", "delay", "changes", "fileWatcher", "watcher_default", "filePath", "isDirectory", "fs", "event", "absolutePath", "renamedPath", "normalizedPath", "oldNormalizedPath", "reason", "isAbortError", "notify", "reportErrorAndExit", "symbol"]
|
|
7
|
+
}
|