{"version":3,"file":"index.js","sources":["../../../../src/integrations/fs/index.ts"],"sourcesContent":["import { FsInstrumentation } from './vendored/instrumentation';\nimport { defineIntegration, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\n\nconst INTEGRATION_NAME = 'FileSystem';\n\n/**\n * This integration will create spans for `fs` API operations, like reading and writing files.\n *\n * **WARNING:** This integration may add significant overhead to your application. Especially in scenarios with a lot of\n * file I/O, like for example when running a framework dev server, including this integration can massively slow down\n * your application.\n *\n * @param options Configuration for this integration.\n */\nexport const fsIntegration = defineIntegration(\n (\n options: {\n /**\n * Setting this option to `true` will include any filepath arguments from your `fs` API calls as span attributes.\n *\n * Defaults to `false`.\n */\n recordFilePaths?: boolean;\n\n /**\n * Setting this option to `true` will include the error messages of failed `fs` API calls as a span attribute.\n *\n * Defaults to `false`.\n */\n recordErrorMessagesAsSpanAttributes?: boolean;\n } = {},\n ) => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n generateInstrumentOnce(\n INTEGRATION_NAME,\n () =>\n new FsInstrumentation({\n requireParentSpan: true,\n endHook(functionName, { args, span, error }) {\n span.updateName(`fs.${functionName}`);\n\n span.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'file',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.file.fs',\n });\n\n if (options.recordErrorMessagesAsSpanAttributes) {\n if (typeof args[0] === 'string' && FS_OPERATIONS_WITH_PATH_ARG.includes(functionName)) {\n span.setAttribute('path_argument', args[0]);\n } else if (\n typeof args[0] === 'string' &&\n typeof args[1] === 'string' &&\n FS_OPERATIONS_WITH_TARGET_PATH.includes(functionName)\n ) {\n span.setAttribute('target_argument', args[0]);\n span.setAttribute('path_argument', args[1]);\n } else if (typeof args[0] === 'string' && FS_OPERATIONS_WITH_PREFIX.includes(functionName)) {\n span.setAttribute('prefix_argument', args[0]);\n } else if (\n typeof args[0] === 'string' &&\n typeof args[1] === 'string' &&\n FS_OPERATIONS_WITH_EXISTING_PATH_NEW_PATH.includes(functionName)\n ) {\n span.setAttribute('existing_path_argument', args[0]);\n span.setAttribute('new_path_argument', args[1]);\n } else if (\n typeof args[0] === 'string' &&\n typeof args[1] === 'string' &&\n FS_OPERATIONS_WITH_SRC_DEST.includes(functionName)\n ) {\n span.setAttribute('src_argument', args[0]);\n span.setAttribute('dest_argument', args[1]);\n } else if (\n typeof args[0] === 'string' &&\n typeof args[1] === 'string' &&\n FS_OPERATIONS_WITH_OLD_PATH_NEW_PATH.includes(functionName)\n ) {\n span.setAttribute('old_path_argument', args[0]);\n span.setAttribute('new_path_argument', args[1]);\n }\n }\n\n if (error && options.recordErrorMessagesAsSpanAttributes) {\n span.setAttribute('fs_error', error.message);\n }\n },\n }),\n )();\n },\n };\n },\n);\n\nconst FS_OPERATIONS_WITH_OLD_PATH_NEW_PATH = ['rename', 'renameSync'];\nconst FS_OPERATIONS_WITH_SRC_DEST = ['copyFile', 'cp', 'copyFileSync', 'cpSync'];\nconst FS_OPERATIONS_WITH_EXISTING_PATH_NEW_PATH = ['link', 'linkSync'];\nconst FS_OPERATIONS_WITH_PREFIX = ['mkdtemp', 'mkdtempSync'];\nconst FS_OPERATIONS_WITH_TARGET_PATH = ['symlink', 'symlinkSync'];\nconst FS_OPERATIONS_WITH_PATH_ARG = [\n 'access',\n 'appendFile',\n 'chmod',\n 'chown',\n 'exists',\n 'mkdir',\n 'lchown',\n 'lstat',\n 'lutimes',\n 'open',\n 'opendir',\n 'readdir',\n 'readFile',\n 'readlink',\n 'realpath',\n 'realpath.native',\n 'rm',\n 'rmdir',\n 'stat',\n 'truncate',\n 'unlink',\n 'utimes',\n 'writeFile',\n 'accessSync',\n 'appendFileSync',\n 'chmodSync',\n 'chownSync',\n 'existsSync',\n 'lchownSync',\n 'lstatSync',\n 'lutimesSync',\n 'opendirSync',\n 'mkdirSync',\n 'openSync',\n 'readdirSync',\n 'readFileSync',\n 'readlinkSync',\n 'realpathSync',\n 'realpathSync.native',\n 'rmdirSync',\n 'rmSync',\n 'statSync',\n 'truncateSync',\n 'unlinkSync',\n 'utimesSync',\n 'writeFileSync',\n];\n"],"names":["defineIntegration","generateInstrumentOnce","FsInstrumentation","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"],"mappings":";;;;;;AAIA,MAAM,gBAAA,GAAmB,YAAA;AAWlB,MAAM,aAAA,GAAgBA,sBAAA;AAAA,EAC3B,CACE,OAAA,GAcI,EAAC,KACF;AACH,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,gBAAA;AAAA,MACN,SAAA,GAAY;AACV,QAAAC,+BAAA;AAAA,UACE,gBAAA;AAAA,UACA,MACE,IAAIC,iCAAA,CAAkB;AAAA,YACpB,iBAAA,EAAmB,IAAA;AAAA,YACnB,QAAQ,YAAA,EAAc,EAAE,IAAA,EAAM,IAAA,EAAM,OAAM,EAAG;AAC3C,cAAA,IAAA,CAAK,UAAA,CAAW,CAAA,GAAA,EAAM,YAAY,CAAA,CAAE,CAAA;AAEpC,cAAA,IAAA,CAAK,aAAA,CAAc;AAAA,gBACjB,CAACC,iCAA4B,GAAG,MAAA;AAAA,gBAChC,CAACC,qCAAgC,GAAG;AAAA,eACrC,CAAA;AAED,cAAA,IAAI,QAAQ,mCAAA,EAAqC;AAC/C,gBAAA,IAAI,OAAO,KAAK,CAAC,CAAA,KAAM,YAAY,2BAAA,CAA4B,QAAA,CAAS,YAAY,CAAA,EAAG;AACrF,kBAAA,IAAA,CAAK,YAAA,CAAa,eAAA,EAAiB,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,gBAC5C,CAAA,MAAA,IACE,OAAO,IAAA,CAAK,CAAC,MAAM,QAAA,IACnB,OAAO,IAAA,CAAK,CAAC,CAAA,KAAM,QAAA,IACnB,8BAAA,CAA+B,QAAA,CAAS,YAAY,CAAA,EACpD;AACA,kBAAA,IAAA,CAAK,YAAA,CAAa,iBAAA,EAAmB,IAAA,CAAK,CAAC,CAAC,CAAA;AAC5C,kBAAA,IAAA,CAAK,YAAA,CAAa,eAAA,EAAiB,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,gBAC5C,CAAA,MAAA,IAAW,OAAO,IAAA,CAAK,CAAC,MAAM,QAAA,IAAY,yBAAA,CAA0B,QAAA,CAAS,YAAY,CAAA,EAAG;AAC1F,kBAAA,IAAA,CAAK,YAAA,CAAa,iBAAA,EAAmB,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,gBAC9C,CAAA,MAAA,IACE,OAAO,IAAA,CAAK,CAAC,MAAM,QAAA,IACnB,OAAO,IAAA,CAAK,CAAC,CAAA,KAAM,QAAA,IACnB,yCAAA,CAA0C,QAAA,CAAS,YAAY,CAAA,EAC/D;AACA,kBAAA,IAAA,CAAK,YAAA,CAAa,wBAAA,EAA0B,IAAA,CAAK,CAAC,CAAC,CAAA;AACnD,kBAAA,IAAA,CAAK,YAAA,CAAa,mBAAA,EAAqB,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,gBAChD,CAAA,MAAA,IACE,OAAO,IAAA,CAAK,CAAC,MAAM,QAAA,IACnB,OAAO,IAAA,CAAK,CAAC,CAAA,KAAM,QAAA,IACnB,2BAAA,CAA4B,QAAA,CAAS,YAAY,CAAA,EACjD;AACA,kBAAA,IAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,IAAA,CAAK,CAAC,CAAC,CAAA;AACzC,kBAAA,IAAA,CAAK,YAAA,CAAa,eAAA,EAAiB,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,gBAC5C,CAAA,MAAA,IACE,OAAO,IAAA,CAAK,CAAC,MAAM,QAAA,IACnB,OAAO,IAAA,CAAK,CAAC,CAAA,KAAM,QAAA,IACnB,oCAAA,CAAqC,QAAA,CAAS,YAAY,CAAA,EAC1D;AACA,kBAAA,IAAA,CAAK,YAAA,CAAa,mBAAA,EAAqB,IAAA,CAAK,CAAC,CAAC,CAAA;AAC9C,kBAAA,IAAA,CAAK,YAAA,CAAa,mBAAA,EAAqB,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,gBAChD;AAAA,cACF;AAEA,cAAA,IAAI,KAAA,IAAS,QAAQ,mCAAA,EAAqC;AACxD,gBAAA,IAAA,CAAK,YAAA,CAAa,UAAA,EAAY,KAAA,CAAM,OAAO,CAAA;AAAA,cAC7C;AAAA,YACF;AAAA,WACD;AAAA,SACL,EAAE;AAAA,MACJ;AAAA,KACF;AAAA,EACF;AACF;AAEA,MAAM,oCAAA,GAAuC,CAAC,QAAA,EAAU,YAAY,CAAA;AACpE,MAAM,2BAAA,GAA8B,CAAC,UAAA,EAAY,IAAA,EAAM,gBAAgB,QAAQ,CAAA;AAC/E,MAAM,yCAAA,GAA4C,CAAC,MAAA,EAAQ,UAAU,CAAA;AACrE,MAAM,yBAAA,GAA4B,CAAC,SAAA,EAAW,aAAa,CAAA;AAC3D,MAAM,8BAAA,GAAiC,CAAC,SAAA,EAAW,aAAa,CAAA;AAChE,MAAM,2BAAA,GAA8B;AAAA,EAClC,QAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,qBAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;;;;"}