@slicemachine/manager 0.1.1-dev-plugins.4 → 0.1.1-dev-plugins.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/CachedKeyDecoder.cjs +65 -0
  2. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/CachedKeyDecoder.cjs.map +1 -0
  3. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/CachedKeyDecoder.js +65 -0
  4. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/CachedKeyDecoder.js.map +1 -0
  5. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/DecodeError.cjs +40 -0
  6. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/DecodeError.cjs.map +1 -0
  7. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/DecodeError.js +40 -0
  8. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/DecodeError.js.map +1 -0
  9. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/Decoder.cjs +801 -0
  10. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/Decoder.cjs.map +1 -0
  11. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/Decoder.js +801 -0
  12. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/Decoder.js.map +1 -0
  13. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/Encoder.cjs +351 -0
  14. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/Encoder.cjs.map +1 -0
  15. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/Encoder.js +351 -0
  16. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/Encoder.js.map +1 -0
  17. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/ExtData.cjs +11 -0
  18. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/ExtData.cjs.map +1 -0
  19. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/ExtData.js +11 -0
  20. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/ExtData.js.map +1 -0
  21. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/ExtensionCodec.cjs +62 -0
  22. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/ExtensionCodec.cjs.map +1 -0
  23. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/ExtensionCodec.js +62 -0
  24. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/ExtensionCodec.js.map +1 -0
  25. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/decode.cjs +14 -0
  26. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/decode.cjs.map +1 -0
  27. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/decode.js +14 -0
  28. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/decode.js.map +1 -0
  29. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/encode.cjs +13 -0
  30. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/encode.cjs.map +1 -0
  31. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/encode.js +13 -0
  32. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/encode.js.map +1 -0
  33. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/timestamp.cjs +91 -0
  34. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/timestamp.cjs.map +1 -0
  35. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/timestamp.js +91 -0
  36. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/timestamp.js.map +1 -0
  37. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/utils/int.cjs +31 -0
  38. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/utils/int.cjs.map +1 -0
  39. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/utils/int.js +31 -0
  40. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/utils/int.js.map +1 -0
  41. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/utils/prettyByte.cjs +7 -0
  42. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/utils/prettyByte.cjs.map +1 -0
  43. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/utils/prettyByte.js +7 -0
  44. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/utils/prettyByte.js.map +1 -0
  45. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/utils/typedArrays.cjs +23 -0
  46. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/utils/typedArrays.cjs.map +1 -0
  47. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/utils/typedArrays.js +23 -0
  48. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/utils/typedArrays.js.map +1 -0
  49. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/utils/utf8.cjs +132 -0
  50. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/utils/utf8.cjs.map +1 -0
  51. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/utils/utf8.js +132 -0
  52. package/dist/__node_modules/@msgpack/msgpack/dist.es5_esm/utils/utf8.js.map +1 -0
  53. package/dist/__node_modules/r19/dist/client/createRPCClient.cjs +29 -11
  54. package/dist/__node_modules/r19/dist/client/createRPCClient.cjs.map +1 -1
  55. package/dist/__node_modules/r19/dist/client/createRPCClient.js +29 -11
  56. package/dist/__node_modules/r19/dist/client/createRPCClient.js.map +1 -1
  57. package/dist/__node_modules/r19/dist/createRPCMiddleware.cjs +5 -4
  58. package/dist/__node_modules/r19/dist/createRPCMiddleware.cjs.map +1 -1
  59. package/dist/__node_modules/r19/dist/createRPCMiddleware.js +6 -5
  60. package/dist/__node_modules/r19/dist/createRPCMiddleware.js.map +1 -1
  61. package/dist/__node_modules/r19/dist/handleRPCRequest.cjs +39 -110
  62. package/dist/__node_modules/r19/dist/handleRPCRequest.cjs.map +1 -1
  63. package/dist/__node_modules/r19/dist/handleRPCRequest.js +39 -110
  64. package/dist/__node_modules/r19/dist/handleRPCRequest.js.map +1 -1
  65. package/dist/__node_modules/r19/dist/lib/replaceLeaves.cjs +28 -0
  66. package/dist/__node_modules/r19/dist/lib/replaceLeaves.cjs.map +1 -0
  67. package/dist/__node_modules/r19/dist/lib/replaceLeaves.js +28 -0
  68. package/dist/__node_modules/r19/dist/lib/replaceLeaves.js.map +1 -0
  69. package/dist/managers/createSliceMachineManagerMiddleware.cjs +0 -4
  70. package/dist/managers/createSliceMachineManagerMiddleware.cjs.map +1 -1
  71. package/dist/managers/createSliceMachineManagerMiddleware.js +0 -4
  72. package/dist/managers/createSliceMachineManagerMiddleware.js.map +1 -1
  73. package/dist/managers/screenshots/ScreenshotsManager.cjs +33 -16
  74. package/dist/managers/screenshots/ScreenshotsManager.cjs.map +1 -1
  75. package/dist/managers/screenshots/ScreenshotsManager.d.ts +2 -4
  76. package/dist/managers/screenshots/ScreenshotsManager.js +34 -17
  77. package/dist/managers/screenshots/ScreenshotsManager.js.map +1 -1
  78. package/dist/test/createSliceMachineManagerMSWHandler.cjs +3 -10
  79. package/dist/test/createSliceMachineManagerMSWHandler.cjs.map +1 -1
  80. package/dist/test/createSliceMachineManagerMSWHandler.js +3 -10
  81. package/dist/test/createSliceMachineManagerMSWHandler.js.map +1 -1
  82. package/package.json +4 -4
  83. package/src/client/index.ts +1 -1
  84. package/src/managers/screenshots/ScreenshotsManager.ts +65 -18
  85. package/src/test/createSliceMachineManagerMSWHandler.ts +2 -14
  86. package/dist/__node_modules/busboy/lib/index.cjs +0 -51
  87. package/dist/__node_modules/busboy/lib/index.cjs.map +0 -1
  88. package/dist/__node_modules/busboy/lib/index.js +0 -52
  89. package/dist/__node_modules/busboy/lib/index.js.map +0 -1
  90. package/dist/__node_modules/busboy/lib/types/multipart.cjs +0 -1046
  91. package/dist/__node_modules/busboy/lib/types/multipart.cjs.map +0 -1
  92. package/dist/__node_modules/busboy/lib/types/multipart.js +0 -1047
  93. package/dist/__node_modules/busboy/lib/types/multipart.js.map +0 -1
  94. package/dist/__node_modules/busboy/lib/types/urlencoded.cjs +0 -545
  95. package/dist/__node_modules/busboy/lib/types/urlencoded.cjs.map +0 -1
  96. package/dist/__node_modules/busboy/lib/types/urlencoded.js +0 -546
  97. package/dist/__node_modules/busboy/lib/types/urlencoded.js.map +0 -1
  98. package/dist/__node_modules/busboy/lib/utils.cjs +0 -1681
  99. package/dist/__node_modules/busboy/lib/utils.cjs.map +0 -1
  100. package/dist/__node_modules/busboy/lib/utils.js +0 -1682
  101. package/dist/__node_modules/busboy/lib/utils.js.map +0 -1
  102. package/dist/__node_modules/devalue/src/constants.cjs +0 -15
  103. package/dist/__node_modules/devalue/src/constants.cjs.map +0 -1
  104. package/dist/__node_modules/devalue/src/constants.js +0 -15
  105. package/dist/__node_modules/devalue/src/constants.js.map +0 -1
  106. package/dist/__node_modules/devalue/src/parse.cjs +0 -95
  107. package/dist/__node_modules/devalue/src/parse.cjs.map +0 -1
  108. package/dist/__node_modules/devalue/src/parse.js +0 -95
  109. package/dist/__node_modules/devalue/src/parse.js.map +0 -1
  110. package/dist/__node_modules/devalue/src/stringify.cjs +0 -140
  111. package/dist/__node_modules/devalue/src/stringify.cjs.map +0 -1
  112. package/dist/__node_modules/devalue/src/stringify.js +0 -140
  113. package/dist/__node_modules/devalue/src/stringify.js.map +0 -1
  114. package/dist/__node_modules/devalue/src/uneval.cjs +0 -4
  115. package/dist/__node_modules/devalue/src/uneval.cjs.map +0 -1
  116. package/dist/__node_modules/devalue/src/uneval.js +0 -3
  117. package/dist/__node_modules/devalue/src/uneval.js.map +0 -1
  118. package/dist/__node_modules/devalue/src/utils.cjs +0 -68
  119. package/dist/__node_modules/devalue/src/utils.cjs.map +0 -1
  120. package/dist/__node_modules/devalue/src/utils.js +0 -68
  121. package/dist/__node_modules/devalue/src/utils.js.map +0 -1
  122. package/dist/__node_modules/formdata-node/lib/browser.cjs +0 -16
  123. package/dist/__node_modules/formdata-node/lib/browser.cjs.map +0 -1
  124. package/dist/__node_modules/formdata-node/lib/browser.js +0 -16
  125. package/dist/__node_modules/formdata-node/lib/browser.js.map +0 -1
  126. package/dist/__node_modules/r19/dist/constants.cjs +0 -5
  127. package/dist/__node_modules/r19/dist/constants.cjs.map +0 -1
  128. package/dist/__node_modules/r19/dist/constants.js +0 -5
  129. package/dist/__node_modules/r19/dist/constants.js.map +0 -1
  130. package/dist/__node_modules/r19/dist/lib/encodeFormData.cjs +0 -46
  131. package/dist/__node_modules/r19/dist/lib/encodeFormData.cjs.map +0 -1
  132. package/dist/__node_modules/r19/dist/lib/encodeFormData.js +0 -46
  133. package/dist/__node_modules/r19/dist/lib/encodeFormData.js.map +0 -1
  134. package/dist/__node_modules/r19/dist/lib/flattenObject.cjs +0 -43
  135. package/dist/__node_modules/r19/dist/lib/flattenObject.cjs.map +0 -1
  136. package/dist/__node_modules/r19/dist/lib/flattenObject.js +0 -43
  137. package/dist/__node_modules/r19/dist/lib/flattenObject.js.map +0 -1
  138. package/dist/__node_modules/r19/dist/lib/formDataToObject.client.cjs +0 -19
  139. package/dist/__node_modules/r19/dist/lib/formDataToObject.client.cjs.map +0 -1
  140. package/dist/__node_modules/r19/dist/lib/formDataToObject.client.js +0 -19
  141. package/dist/__node_modules/r19/dist/lib/formDataToObject.client.js.map +0 -1
  142. package/dist/__node_modules/r19/dist/lib/objectToFormData.client.cjs +0 -20
  143. package/dist/__node_modules/r19/dist/lib/objectToFormData.client.cjs.map +0 -1
  144. package/dist/__node_modules/r19/dist/lib/objectToFormData.client.js +0 -20
  145. package/dist/__node_modules/r19/dist/lib/objectToFormData.client.js.map +0 -1
  146. package/dist/__node_modules/r19/dist/lib/objectToFormData.server.cjs +0 -22
  147. package/dist/__node_modules/r19/dist/lib/objectToFormData.server.cjs.map +0 -1
  148. package/dist/__node_modules/r19/dist/lib/objectToFormData.server.js +0 -22
  149. package/dist/__node_modules/r19/dist/lib/objectToFormData.server.js.map +0 -1
  150. package/dist/__node_modules/r19/dist/lib/unflattenObject.cjs +0 -20
  151. package/dist/__node_modules/r19/dist/lib/unflattenObject.cjs.map +0 -1
  152. package/dist/__node_modules/r19/dist/lib/unflattenObject.js +0 -20
  153. package/dist/__node_modules/r19/dist/lib/unflattenObject.js.map +0 -1
  154. package/dist/__node_modules/streamsearch/lib/sbmh.cjs +0 -393
  155. package/dist/__node_modules/streamsearch/lib/sbmh.cjs.map +0 -1
  156. package/dist/__node_modules/streamsearch/lib/sbmh.js +0 -394
  157. package/dist/__node_modules/streamsearch/lib/sbmh.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"handleRPCRequest.cjs","sources":["../../../../../../node_modules/r19/dist/handleRPCRequest.js"],"sourcesContent":["import { Readable } from \"node:stream\";\nimport { Buffer } from \"node:buffer\";\nimport busboy from \"busboy\";\nimport { parse } from \"devalue\";\nimport { encodeFormData } from \"./lib/encodeFormData.js\";\nimport { isErrorLike } from \"./lib/isErrorLike.js\";\nimport { objectToFormData } from \"./lib/objectToFormData.server.js\";\nimport { unflattenObject } from \"./lib/unflattenObject.js\";\nimport { formDataToObject } from \"./lib/formDataToObject.client.js\";\nimport { FORM_DATA_BOUNDARY_PREFIX } from \"./constants.js\";\nconst findProcedure = (procedures, path) => {\n path = [...path];\n let proceduresPointer = procedures;\n while (path.length > 0) {\n const pathSegment = path.shift();\n if (pathSegment) {\n proceduresPointer = proceduresPointer[pathSegment];\n if (typeof proceduresPointer === \"function\") {\n return proceduresPointer;\n } else if (proceduresPointer === void 0) {\n return;\n }\n }\n }\n};\nconst readRPCClientArgs = async (args) => {\n const bb = busboy({\n headers: {\n \"content-type\": args.contentTypeHeader\n }\n });\n const clientArgs = {};\n const promise = new Promise((resolve, reject) => {\n bb.on(\"file\", (name, file, _info) => {\n const chunks = [];\n file.on(\"data\", (data) => {\n chunks.push(data);\n });\n file.on(\"close\", () => {\n clientArgs[name] = Buffer.concat(chunks);\n });\n });\n bb.on(\"field\", (name, value, _info) => {\n clientArgs[name] = parse(value);\n });\n bb.on(\"close\", () => {\n const unflattenedArgs = unflattenObject(clientArgs);\n resolve(unflattenedArgs);\n });\n bb.on(\"error\", (error) => {\n reject(error);\n });\n });\n Readable.from(args.body).pipe(bb);\n return promise;\n};\nconst isPlainObject = (value) => {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n};\nconst prepareRes = (res) => {\n if (Array.isArray(res)) {\n const preparedRes = [];\n for (let i = 0; i < res.length; i++) {\n preparedRes[i] = prepareRes(res[i]);\n }\n return preparedRes;\n }\n if (isPlainObject(res)) {\n const preparedRes = {};\n for (const key in res) {\n preparedRes[key] = prepareRes(res[key]);\n }\n return preparedRes;\n }\n if (res instanceof Error || isErrorLike(res)) {\n return {\n name: res.name,\n message: res.message,\n stack: process.env.NODE_ENV === \"development\" ? res.stack : void 0\n };\n }\n return res;\n};\nconst handleRPCRequest = async (args) => {\n let clientArgs;\n if (\"body\" in args) {\n if (!args.body) {\n throw new Error(\"Invalid request body. Only requests from an r19 client are accepted.\");\n }\n if (!args.contentTypeHeader) {\n throw new Error(\"Invalid Content-Type header. Only requests from an r19 client are accepted.\");\n }\n clientArgs = await readRPCClientArgs({\n contentTypeHeader: args.contentTypeHeader,\n body: args.body\n });\n } else {\n clientArgs = formDataToObject(args.formData);\n }\n const procedure = findProcedure(args.procedures, clientArgs.procedurePath);\n if (!procedure) {\n const formData = objectToFormData({\n error: {\n name: \"RPCError\",\n message: `Invalid procedure name: ${clientArgs.procedurePath.join(\".\")}`\n }\n });\n const { headers, stream } = encodeFormData(formData, {\n boundaryPrefix: FORM_DATA_BOUNDARY_PREFIX\n });\n return {\n stream,\n headers,\n statusCode: 500\n };\n }\n let res;\n try {\n res = await procedure(clientArgs.procedureArgs);\n res = prepareRes(res);\n } catch (error) {\n if (isErrorLike(error)) {\n const formData = objectToFormData({\n error: {\n name: error.name,\n message: error.message,\n stack: process.env.NODE_ENV === \"development\" ? error.stack : void 0\n }\n });\n const { headers, stream } = encodeFormData(formData, {\n boundaryPrefix: FORM_DATA_BOUNDARY_PREFIX\n });\n return {\n stream,\n headers,\n statusCode: 500\n };\n }\n throw error;\n }\n try {\n const formData = objectToFormData({\n data: res\n });\n const { headers, stream } = encodeFormData(formData, {\n boundaryPrefix: FORM_DATA_BOUNDARY_PREFIX\n });\n return {\n stream,\n headers\n };\n } catch (error) {\n if (error instanceof Error) {\n console.error(error);\n const formData = objectToFormData({\n error: {\n name: \"RPCError\",\n message: \"Unable to serialize server response. Check the server log for details.\"\n }\n });\n const { headers, stream } = encodeFormData(formData, {\n boundaryPrefix: FORM_DATA_BOUNDARY_PREFIX\n });\n return {\n stream,\n headers,\n statusCode: 500\n };\n }\n throw error;\n }\n};\nexport {\n handleRPCRequest\n};\n//# sourceMappingURL=handleRPCRequest.js.map\n"],"names":["busboy","Buffer","parse","unflattenObject","Readable","isErrorLike","formDataToObject","objectToFormData","encodeFormData","FORM_DATA_BOUNDARY_PREFIX"],"mappings":"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"}
1
+ {"version":3,"file":"handleRPCRequest.cjs","sources":["../../../../../../node_modules/r19/dist/handleRPCRequest.js"],"sourcesContent":["import { Buffer } from \"node:buffer\";\nimport { decode, encode } from \"@msgpack/msgpack\";\nimport { isErrorLike } from \"./lib/isErrorLike.js\";\nimport { replaceLeaves } from \"./lib/replaceLeaves.js\";\nconst findProcedure = (procedures, path) => {\n path = [...path];\n let proceduresPointer = procedures;\n while (path.length > 0) {\n const pathSegment = path.shift();\n if (pathSegment) {\n proceduresPointer = proceduresPointer[pathSegment];\n if (typeof proceduresPointer === \"function\") {\n return proceduresPointer;\n } else if (proceduresPointer === void 0) {\n return;\n }\n }\n }\n};\nconst handleRPCRequest = async (args) => {\n if (!args.body) {\n throw new Error(\"Invalid request body. Only requests from an r19 client are accepted.\");\n }\n const clientArgs = decode(Buffer.from(args.body));\n const procedure = findProcedure(args.procedures, clientArgs.procedurePath);\n const headers = {\n \"Content-Type\": \"application/msgpack\"\n };\n if (!procedure) {\n const body = encode({\n error: {\n name: \"RPCError\",\n message: `Invalid procedure name: ${clientArgs.procedurePath.join(\".\")}`\n }\n });\n return {\n body,\n headers,\n statusCode: 500\n };\n }\n let res;\n try {\n const procedureArgs = await replaceLeaves(clientArgs.procedureArgs, async (value) => {\n if (value instanceof ArrayBuffer) {\n return Buffer.from(value);\n }\n return value;\n });\n res = await procedure(procedureArgs);\n res = await replaceLeaves(res, async (value) => {\n if (isErrorLike(value)) {\n return {\n name: value.name,\n message: value.message,\n stack: process.env.NODE_ENV === \"development\" ? value.stack : void 0\n };\n }\n if (typeof value === \"function\") {\n throw new Error(\"r19 does not support function return values.\");\n }\n return value;\n });\n } catch (error) {\n if (isErrorLike(error)) {\n const body = encode({\n error: {\n name: error.name,\n message: error.message,\n stack: process.env.NODE_ENV === \"development\" ? error.stack : void 0\n }\n }, { ignoreUndefined: true });\n return {\n body,\n headers,\n statusCode: 500\n };\n }\n throw error;\n }\n try {\n const body = encode({\n data: res\n }, { ignoreUndefined: true });\n return {\n body,\n headers\n };\n } catch (error) {\n if (error instanceof Error) {\n console.error(error);\n const body = encode({\n error: {\n name: \"RPCError\",\n message: \"Unable to serialize server response. Check the server log for details.\"\n }\n });\n return {\n body,\n headers,\n statusCode: 500\n };\n }\n throw error;\n }\n};\nexport {\n handleRPCRequest\n};\n//# sourceMappingURL=handleRPCRequest.js.map\n"],"names":["decode","Buffer","encode","replaceLeaves","isErrorLike"],"mappings":";;;;;;;AAIA,MAAM,gBAAgB,CAAC,YAAY,SAAS;AAC1C,SAAO,CAAC,GAAG,IAAI;AACf,MAAI,oBAAoB;AACxB,SAAO,KAAK,SAAS,GAAG;AACtB,UAAM,cAAc,KAAK;AACzB,QAAI,aAAa;AACf,0BAAoB,kBAAkB,WAAW;AACjD,UAAI,OAAO,sBAAsB,YAAY;AAC3C,eAAO;AAAA,MACf,WAAiB,sBAAsB,QAAQ;AACvC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AACH;AACK,MAAC,mBAAmB,OAAO,SAAS;AACvC,MAAI,CAAC,KAAK,MAAM;AACd,UAAM,IAAI,MAAM,sEAAsE;AAAA,EACvF;AACD,QAAM,aAAaA,OAAAA,OAAOC,YAAM,OAAC,KAAK,KAAK,IAAI,CAAC;AAChD,QAAM,YAAY,cAAc,KAAK,YAAY,WAAW,aAAa;AACzE,QAAM,UAAU;AAAA,IACd,gBAAgB;AAAA,EACpB;AACE,MAAI,CAAC,WAAW;AACd,UAAM,OAAOC,OAAAA,OAAO;AAAA,MAClB,OAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,2BAA2B,WAAW,cAAc,KAAK,GAAG;AAAA,MACtE;AAAA,IACP,CAAK;AACD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,YAAY;AAAA,IAClB;AAAA,EACG;AACD,MAAI;AACJ,MAAI;AACF,UAAM,gBAAgB,MAAMC,cAAa,cAAC,WAAW,eAAe,OAAO,UAAU;AACnF,UAAI,iBAAiB,aAAa;AAChC,eAAOF,YAAM,OAAC,KAAK,KAAK;AAAA,MACzB;AACD,aAAO;AAAA,IACb,CAAK;AACD,UAAM,MAAM,UAAU,aAAa;AACnC,UAAM,MAAME,cAAAA,cAAc,KAAK,OAAO,UAAU;AAC9C,UAAIC,YAAAA,YAAY,KAAK,GAAG;AACtB,eAAO;AAAA,UACL,MAAM,MAAM;AAAA,UACZ,SAAS,MAAM;AAAA,UACf,OAAO,QAAQ,IAAI,aAAa,gBAAgB,MAAM,QAAQ;AAAA,QACxE;AAAA,MACO;AACD,UAAI,OAAO,UAAU,YAAY;AAC/B,cAAM,IAAI,MAAM,8CAA8C;AAAA,MAC/D;AACD,aAAO;AAAA,IACb,CAAK;AAAA,EACF,SAAQ,OAAP;AACA,QAAIA,YAAAA,YAAY,KAAK,GAAG;AACtB,YAAM,OAAOF,OAAAA,OAAO;AAAA,QAClB,OAAO;AAAA,UACL,MAAM,MAAM;AAAA,UACZ,SAAS,MAAM;AAAA,UACf,OAAO,QAAQ,IAAI,aAAa,gBAAgB,MAAM,QAAQ;AAAA,QAC/D;AAAA,MACT,GAAS,EAAE,iBAAiB,KAAI,CAAE;AAC5B,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,YAAY;AAAA,MACpB;AAAA,IACK;AACD,UAAM;AAAA,EACP;AACD,MAAI;AACF,UAAM,OAAOA,OAAAA,OAAO;AAAA,MAClB,MAAM;AAAA,IACZ,GAAO,EAAE,iBAAiB,KAAI,CAAE;AAC5B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACN;AAAA,EACG,SAAQ,OAAP;AACA,QAAI,iBAAiB,OAAO;AAC1B,cAAQ,MAAM,KAAK;AACnB,YAAM,OAAOA,OAAAA,OAAO;AAAA,QAClB,OAAO;AAAA,UACL,MAAM;AAAA,UACN,SAAS;AAAA,QACV;AAAA,MACT,CAAO;AACD,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,YAAY;AAAA,MACpB;AAAA,IACK;AACD,UAAM;AAAA,EACP;AACH;;"}
@@ -1,15 +1,8 @@
1
- import { Readable } from "node:stream";
2
1
  import { Buffer } from "node:buffer";
3
- import lib from "../../busboy/lib/index.js";
4
- import "../../devalue/src/uneval.js";
5
- import { parse } from "../../devalue/src/parse.js";
6
- import "../../devalue/src/utils.js";
7
- import { encodeFormData } from "./lib/encodeFormData.js";
2
+ import { encode } from "../../@msgpack/msgpack/dist.es5_esm/encode.js";
3
+ import { decode } from "../../@msgpack/msgpack/dist.es5_esm/decode.js";
8
4
  import { isErrorLike } from "./lib/isErrorLike.js";
9
- import { objectToFormData } from "./lib/objectToFormData.server.js";
10
- import { unflattenObject } from "./lib/unflattenObject.js";
11
- import { formDataToObject } from "./lib/formDataToObject.client.js";
12
- import { FORM_DATA_BOUNDARY_PREFIX } from "./constants.js";
5
+ import { replaceLeaves } from "./lib/replaceLeaves.js";
13
6
  const findProcedure = (procedures, path) => {
14
7
  path = [...path];
15
8
  let proceduresPointer = procedures;
@@ -25,119 +18,61 @@ const findProcedure = (procedures, path) => {
25
18
  }
26
19
  }
27
20
  };
28
- const readRPCClientArgs = async (args) => {
29
- const bb = lib({
30
- headers: {
31
- "content-type": args.contentTypeHeader
32
- }
33
- });
34
- const clientArgs = {};
35
- const promise = new Promise((resolve, reject) => {
36
- bb.on("file", (name, file, _info) => {
37
- const chunks = [];
38
- file.on("data", (data) => {
39
- chunks.push(data);
40
- });
41
- file.on("close", () => {
42
- clientArgs[name] = Buffer.concat(chunks);
43
- });
44
- });
45
- bb.on("field", (name, value, _info) => {
46
- clientArgs[name] = parse(value);
47
- });
48
- bb.on("close", () => {
49
- const unflattenedArgs = unflattenObject(clientArgs);
50
- resolve(unflattenedArgs);
51
- });
52
- bb.on("error", (error) => {
53
- reject(error);
54
- });
55
- });
56
- Readable.from(args.body).pipe(bb);
57
- return promise;
58
- };
59
- const isPlainObject = (value) => {
60
- if (typeof value !== "object" || value === null) {
61
- return false;
62
- }
63
- const prototype = Object.getPrototypeOf(value);
64
- return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);
65
- };
66
- const prepareRes = (res) => {
67
- if (Array.isArray(res)) {
68
- const preparedRes = [];
69
- for (let i = 0; i < res.length; i++) {
70
- preparedRes[i] = prepareRes(res[i]);
71
- }
72
- return preparedRes;
73
- }
74
- if (isPlainObject(res)) {
75
- const preparedRes = {};
76
- for (const key in res) {
77
- preparedRes[key] = prepareRes(res[key]);
78
- }
79
- return preparedRes;
80
- }
81
- if (res instanceof Error || isErrorLike(res)) {
82
- return {
83
- name: res.name,
84
- message: res.message,
85
- stack: process.env.NODE_ENV === "development" ? res.stack : void 0
86
- };
87
- }
88
- return res;
89
- };
90
21
  const handleRPCRequest = async (args) => {
91
- let clientArgs;
92
- if ("body" in args) {
93
- if (!args.body) {
94
- throw new Error("Invalid request body. Only requests from an r19 client are accepted.");
95
- }
96
- if (!args.contentTypeHeader) {
97
- throw new Error("Invalid Content-Type header. Only requests from an r19 client are accepted.");
98
- }
99
- clientArgs = await readRPCClientArgs({
100
- contentTypeHeader: args.contentTypeHeader,
101
- body: args.body
102
- });
103
- } else {
104
- clientArgs = formDataToObject(args.formData);
22
+ if (!args.body) {
23
+ throw new Error("Invalid request body. Only requests from an r19 client are accepted.");
105
24
  }
25
+ const clientArgs = decode(Buffer.from(args.body));
106
26
  const procedure = findProcedure(args.procedures, clientArgs.procedurePath);
27
+ const headers = {
28
+ "Content-Type": "application/msgpack"
29
+ };
107
30
  if (!procedure) {
108
- const formData = objectToFormData({
31
+ const body = encode({
109
32
  error: {
110
33
  name: "RPCError",
111
34
  message: `Invalid procedure name: ${clientArgs.procedurePath.join(".")}`
112
35
  }
113
36
  });
114
- const { headers, stream } = encodeFormData(formData, {
115
- boundaryPrefix: FORM_DATA_BOUNDARY_PREFIX
116
- });
117
37
  return {
118
- stream,
38
+ body,
119
39
  headers,
120
40
  statusCode: 500
121
41
  };
122
42
  }
123
43
  let res;
124
44
  try {
125
- res = await procedure(clientArgs.procedureArgs);
126
- res = prepareRes(res);
45
+ const procedureArgs = await replaceLeaves(clientArgs.procedureArgs, async (value) => {
46
+ if (value instanceof ArrayBuffer) {
47
+ return Buffer.from(value);
48
+ }
49
+ return value;
50
+ });
51
+ res = await procedure(procedureArgs);
52
+ res = await replaceLeaves(res, async (value) => {
53
+ if (isErrorLike(value)) {
54
+ return {
55
+ name: value.name,
56
+ message: value.message,
57
+ stack: process.env.NODE_ENV === "development" ? value.stack : void 0
58
+ };
59
+ }
60
+ if (typeof value === "function") {
61
+ throw new Error("r19 does not support function return values.");
62
+ }
63
+ return value;
64
+ });
127
65
  } catch (error) {
128
66
  if (isErrorLike(error)) {
129
- const formData = objectToFormData({
67
+ const body = encode({
130
68
  error: {
131
69
  name: error.name,
132
70
  message: error.message,
133
71
  stack: process.env.NODE_ENV === "development" ? error.stack : void 0
134
72
  }
135
- });
136
- const { headers, stream } = encodeFormData(formData, {
137
- boundaryPrefix: FORM_DATA_BOUNDARY_PREFIX
138
- });
73
+ }, { ignoreUndefined: true });
139
74
  return {
140
- stream,
75
+ body,
141
76
  headers,
142
77
  statusCode: 500
143
78
  };
@@ -145,30 +80,24 @@ const handleRPCRequest = async (args) => {
145
80
  throw error;
146
81
  }
147
82
  try {
148
- const formData = objectToFormData({
83
+ const body = encode({
149
84
  data: res
150
- });
151
- const { headers, stream } = encodeFormData(formData, {
152
- boundaryPrefix: FORM_DATA_BOUNDARY_PREFIX
153
- });
85
+ }, { ignoreUndefined: true });
154
86
  return {
155
- stream,
87
+ body,
156
88
  headers
157
89
  };
158
90
  } catch (error) {
159
91
  if (error instanceof Error) {
160
92
  console.error(error);
161
- const formData = objectToFormData({
93
+ const body = encode({
162
94
  error: {
163
95
  name: "RPCError",
164
96
  message: "Unable to serialize server response. Check the server log for details."
165
97
  }
166
98
  });
167
- const { headers, stream } = encodeFormData(formData, {
168
- boundaryPrefix: FORM_DATA_BOUNDARY_PREFIX
169
- });
170
99
  return {
171
- stream,
100
+ body,
172
101
  headers,
173
102
  statusCode: 500
174
103
  };
@@ -1 +1 @@
1
- {"version":3,"file":"handleRPCRequest.js","sources":["../../../../../../node_modules/r19/dist/handleRPCRequest.js"],"sourcesContent":["import { Readable } from \"node:stream\";\nimport { Buffer } from \"node:buffer\";\nimport busboy from \"busboy\";\nimport { parse } from \"devalue\";\nimport { encodeFormData } from \"./lib/encodeFormData.js\";\nimport { isErrorLike } from \"./lib/isErrorLike.js\";\nimport { objectToFormData } from \"./lib/objectToFormData.server.js\";\nimport { unflattenObject } from \"./lib/unflattenObject.js\";\nimport { formDataToObject } from \"./lib/formDataToObject.client.js\";\nimport { FORM_DATA_BOUNDARY_PREFIX } from \"./constants.js\";\nconst findProcedure = (procedures, path) => {\n path = [...path];\n let proceduresPointer = procedures;\n while (path.length > 0) {\n const pathSegment = path.shift();\n if (pathSegment) {\n proceduresPointer = proceduresPointer[pathSegment];\n if (typeof proceduresPointer === \"function\") {\n return proceduresPointer;\n } else if (proceduresPointer === void 0) {\n return;\n }\n }\n }\n};\nconst readRPCClientArgs = async (args) => {\n const bb = busboy({\n headers: {\n \"content-type\": args.contentTypeHeader\n }\n });\n const clientArgs = {};\n const promise = new Promise((resolve, reject) => {\n bb.on(\"file\", (name, file, _info) => {\n const chunks = [];\n file.on(\"data\", (data) => {\n chunks.push(data);\n });\n file.on(\"close\", () => {\n clientArgs[name] = Buffer.concat(chunks);\n });\n });\n bb.on(\"field\", (name, value, _info) => {\n clientArgs[name] = parse(value);\n });\n bb.on(\"close\", () => {\n const unflattenedArgs = unflattenObject(clientArgs);\n resolve(unflattenedArgs);\n });\n bb.on(\"error\", (error) => {\n reject(error);\n });\n });\n Readable.from(args.body).pipe(bb);\n return promise;\n};\nconst isPlainObject = (value) => {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n};\nconst prepareRes = (res) => {\n if (Array.isArray(res)) {\n const preparedRes = [];\n for (let i = 0; i < res.length; i++) {\n preparedRes[i] = prepareRes(res[i]);\n }\n return preparedRes;\n }\n if (isPlainObject(res)) {\n const preparedRes = {};\n for (const key in res) {\n preparedRes[key] = prepareRes(res[key]);\n }\n return preparedRes;\n }\n if (res instanceof Error || isErrorLike(res)) {\n return {\n name: res.name,\n message: res.message,\n stack: process.env.NODE_ENV === \"development\" ? res.stack : void 0\n };\n }\n return res;\n};\nconst handleRPCRequest = async (args) => {\n let clientArgs;\n if (\"body\" in args) {\n if (!args.body) {\n throw new Error(\"Invalid request body. Only requests from an r19 client are accepted.\");\n }\n if (!args.contentTypeHeader) {\n throw new Error(\"Invalid Content-Type header. Only requests from an r19 client are accepted.\");\n }\n clientArgs = await readRPCClientArgs({\n contentTypeHeader: args.contentTypeHeader,\n body: args.body\n });\n } else {\n clientArgs = formDataToObject(args.formData);\n }\n const procedure = findProcedure(args.procedures, clientArgs.procedurePath);\n if (!procedure) {\n const formData = objectToFormData({\n error: {\n name: \"RPCError\",\n message: `Invalid procedure name: ${clientArgs.procedurePath.join(\".\")}`\n }\n });\n const { headers, stream } = encodeFormData(formData, {\n boundaryPrefix: FORM_DATA_BOUNDARY_PREFIX\n });\n return {\n stream,\n headers,\n statusCode: 500\n };\n }\n let res;\n try {\n res = await procedure(clientArgs.procedureArgs);\n res = prepareRes(res);\n } catch (error) {\n if (isErrorLike(error)) {\n const formData = objectToFormData({\n error: {\n name: error.name,\n message: error.message,\n stack: process.env.NODE_ENV === \"development\" ? error.stack : void 0\n }\n });\n const { headers, stream } = encodeFormData(formData, {\n boundaryPrefix: FORM_DATA_BOUNDARY_PREFIX\n });\n return {\n stream,\n headers,\n statusCode: 500\n };\n }\n throw error;\n }\n try {\n const formData = objectToFormData({\n data: res\n });\n const { headers, stream } = encodeFormData(formData, {\n boundaryPrefix: FORM_DATA_BOUNDARY_PREFIX\n });\n return {\n stream,\n headers\n };\n } catch (error) {\n if (error instanceof Error) {\n console.error(error);\n const formData = objectToFormData({\n error: {\n name: \"RPCError\",\n message: \"Unable to serialize server response. Check the server log for details.\"\n }\n });\n const { headers, stream } = encodeFormData(formData, {\n boundaryPrefix: FORM_DATA_BOUNDARY_PREFIX\n });\n return {\n stream,\n headers,\n statusCode: 500\n };\n }\n throw error;\n }\n};\nexport {\n handleRPCRequest\n};\n//# sourceMappingURL=handleRPCRequest.js.map\n"],"names":["busboy"],"mappings":"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"}
1
+ {"version":3,"file":"handleRPCRequest.js","sources":["../../../../../../node_modules/r19/dist/handleRPCRequest.js"],"sourcesContent":["import { Buffer } from \"node:buffer\";\nimport { decode, encode } from \"@msgpack/msgpack\";\nimport { isErrorLike } from \"./lib/isErrorLike.js\";\nimport { replaceLeaves } from \"./lib/replaceLeaves.js\";\nconst findProcedure = (procedures, path) => {\n path = [...path];\n let proceduresPointer = procedures;\n while (path.length > 0) {\n const pathSegment = path.shift();\n if (pathSegment) {\n proceduresPointer = proceduresPointer[pathSegment];\n if (typeof proceduresPointer === \"function\") {\n return proceduresPointer;\n } else if (proceduresPointer === void 0) {\n return;\n }\n }\n }\n};\nconst handleRPCRequest = async (args) => {\n if (!args.body) {\n throw new Error(\"Invalid request body. Only requests from an r19 client are accepted.\");\n }\n const clientArgs = decode(Buffer.from(args.body));\n const procedure = findProcedure(args.procedures, clientArgs.procedurePath);\n const headers = {\n \"Content-Type\": \"application/msgpack\"\n };\n if (!procedure) {\n const body = encode({\n error: {\n name: \"RPCError\",\n message: `Invalid procedure name: ${clientArgs.procedurePath.join(\".\")}`\n }\n });\n return {\n body,\n headers,\n statusCode: 500\n };\n }\n let res;\n try {\n const procedureArgs = await replaceLeaves(clientArgs.procedureArgs, async (value) => {\n if (value instanceof ArrayBuffer) {\n return Buffer.from(value);\n }\n return value;\n });\n res = await procedure(procedureArgs);\n res = await replaceLeaves(res, async (value) => {\n if (isErrorLike(value)) {\n return {\n name: value.name,\n message: value.message,\n stack: process.env.NODE_ENV === \"development\" ? value.stack : void 0\n };\n }\n if (typeof value === \"function\") {\n throw new Error(\"r19 does not support function return values.\");\n }\n return value;\n });\n } catch (error) {\n if (isErrorLike(error)) {\n const body = encode({\n error: {\n name: error.name,\n message: error.message,\n stack: process.env.NODE_ENV === \"development\" ? error.stack : void 0\n }\n }, { ignoreUndefined: true });\n return {\n body,\n headers,\n statusCode: 500\n };\n }\n throw error;\n }\n try {\n const body = encode({\n data: res\n }, { ignoreUndefined: true });\n return {\n body,\n headers\n };\n } catch (error) {\n if (error instanceof Error) {\n console.error(error);\n const body = encode({\n error: {\n name: \"RPCError\",\n message: \"Unable to serialize server response. Check the server log for details.\"\n }\n });\n return {\n body,\n headers,\n statusCode: 500\n };\n }\n throw error;\n }\n};\nexport {\n handleRPCRequest\n};\n//# sourceMappingURL=handleRPCRequest.js.map\n"],"names":[],"mappings":";;;;;AAIA,MAAM,gBAAgB,CAAC,YAAY,SAAS;AAC1C,SAAO,CAAC,GAAG,IAAI;AACf,MAAI,oBAAoB;AACxB,SAAO,KAAK,SAAS,GAAG;AACtB,UAAM,cAAc,KAAK;AACzB,QAAI,aAAa;AACf,0BAAoB,kBAAkB,WAAW;AACjD,UAAI,OAAO,sBAAsB,YAAY;AAC3C,eAAO;AAAA,MACf,WAAiB,sBAAsB,QAAQ;AACvC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AACH;AACK,MAAC,mBAAmB,OAAO,SAAS;AACvC,MAAI,CAAC,KAAK,MAAM;AACd,UAAM,IAAI,MAAM,sEAAsE;AAAA,EACvF;AACD,QAAM,aAAa,OAAO,OAAO,KAAK,KAAK,IAAI,CAAC;AAChD,QAAM,YAAY,cAAc,KAAK,YAAY,WAAW,aAAa;AACzE,QAAM,UAAU;AAAA,IACd,gBAAgB;AAAA,EACpB;AACE,MAAI,CAAC,WAAW;AACd,UAAM,OAAO,OAAO;AAAA,MAClB,OAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,2BAA2B,WAAW,cAAc,KAAK,GAAG;AAAA,MACtE;AAAA,IACP,CAAK;AACD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,YAAY;AAAA,IAClB;AAAA,EACG;AACD,MAAI;AACJ,MAAI;AACF,UAAM,gBAAgB,MAAM,cAAc,WAAW,eAAe,OAAO,UAAU;AACnF,UAAI,iBAAiB,aAAa;AAChC,eAAO,OAAO,KAAK,KAAK;AAAA,MACzB;AACD,aAAO;AAAA,IACb,CAAK;AACD,UAAM,MAAM,UAAU,aAAa;AACnC,UAAM,MAAM,cAAc,KAAK,OAAO,UAAU;AAC9C,UAAI,YAAY,KAAK,GAAG;AACtB,eAAO;AAAA,UACL,MAAM,MAAM;AAAA,UACZ,SAAS,MAAM;AAAA,UACf,OAAO,QAAQ,IAAI,aAAa,gBAAgB,MAAM,QAAQ;AAAA,QACxE;AAAA,MACO;AACD,UAAI,OAAO,UAAU,YAAY;AAC/B,cAAM,IAAI,MAAM,8CAA8C;AAAA,MAC/D;AACD,aAAO;AAAA,IACb,CAAK;AAAA,EACF,SAAQ,OAAP;AACA,QAAI,YAAY,KAAK,GAAG;AACtB,YAAM,OAAO,OAAO;AAAA,QAClB,OAAO;AAAA,UACL,MAAM,MAAM;AAAA,UACZ,SAAS,MAAM;AAAA,UACf,OAAO,QAAQ,IAAI,aAAa,gBAAgB,MAAM,QAAQ;AAAA,QAC/D;AAAA,MACT,GAAS,EAAE,iBAAiB,KAAI,CAAE;AAC5B,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,YAAY;AAAA,MACpB;AAAA,IACK;AACD,UAAM;AAAA,EACP;AACD,MAAI;AACF,UAAM,OAAO,OAAO;AAAA,MAClB,MAAM;AAAA,IACZ,GAAO,EAAE,iBAAiB,KAAI,CAAE;AAC5B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACN;AAAA,EACG,SAAQ,OAAP;AACA,QAAI,iBAAiB,OAAO;AAC1B,cAAQ,MAAM,KAAK;AACnB,YAAM,OAAO,OAAO;AAAA,QAClB,OAAO;AAAA,UACL,MAAM;AAAA,UACN,SAAS;AAAA,QACV;AAAA,MACT,CAAO;AACD,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,YAAY;AAAA,MACpB;AAAA,IACK;AACD,UAAM;AAAA,EACP;AACH;"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const isPlainObject = (value) => {
4
+ if (typeof value !== "object" || value === null) {
5
+ return false;
6
+ }
7
+ const prototype = Object.getPrototypeOf(value);
8
+ return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);
9
+ };
10
+ const replaceLeaves = async (input, replacer) => {
11
+ if (Array.isArray(input)) {
12
+ const preparedProcedureArgs = [];
13
+ for (let i = 0; i < input.length; i++) {
14
+ preparedProcedureArgs[i] = await replaceLeaves(input[i], replacer);
15
+ }
16
+ return preparedProcedureArgs;
17
+ }
18
+ if (isPlainObject(input)) {
19
+ const preparedProcedureArgs = {};
20
+ for (const key in input) {
21
+ preparedProcedureArgs[key] = await replaceLeaves(input[key], replacer);
22
+ }
23
+ return preparedProcedureArgs;
24
+ }
25
+ return await replacer(input);
26
+ };
27
+ exports.replaceLeaves = replaceLeaves;
28
+ //# sourceMappingURL=replaceLeaves.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replaceLeaves.cjs","sources":["../../../../../../../node_modules/r19/dist/lib/replaceLeaves.js"],"sourcesContent":["const isPlainObject = (value) => {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n};\nconst replaceLeaves = async (input, replacer) => {\n if (Array.isArray(input)) {\n const preparedProcedureArgs = [];\n for (let i = 0; i < input.length; i++) {\n preparedProcedureArgs[i] = await replaceLeaves(input[i], replacer);\n }\n return preparedProcedureArgs;\n }\n if (isPlainObject(input)) {\n const preparedProcedureArgs = {};\n for (const key in input) {\n preparedProcedureArgs[key] = await replaceLeaves(input[key], replacer);\n }\n return preparedProcedureArgs;\n }\n return await replacer(input);\n};\nexport {\n replaceLeaves\n};\n//# sourceMappingURL=replaceLeaves.js.map\n"],"names":[],"mappings":";;AAAA,MAAM,gBAAgB,CAAC,UAAU;AAC/B,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,WAAO;AAAA,EACR;AACD,QAAM,YAAY,OAAO,eAAe,KAAK;AAC7C,UAAQ,cAAc,QAAQ,cAAc,OAAO,aAAa,OAAO,eAAe,SAAS,MAAM,SAAS,EAAE,OAAO,eAAe,UAAU,EAAE,OAAO,YAAY;AACvK;AACK,MAAC,gBAAgB,OAAO,OAAO,aAAa;AAC/C,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,UAAM,wBAAwB,CAAA;AAC9B,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,4BAAsB,CAAC,IAAI,MAAM,cAAc,MAAM,CAAC,GAAG,QAAQ;AAAA,IAClE;AACD,WAAO;AAAA,EACR;AACD,MAAI,cAAc,KAAK,GAAG;AACxB,UAAM,wBAAwB,CAAA;AAC9B,eAAW,OAAO,OAAO;AACvB,4BAAsB,GAAG,IAAI,MAAM,cAAc,MAAM,GAAG,GAAG,QAAQ;AAAA,IACtE;AACD,WAAO;AAAA,EACR;AACD,SAAO,MAAM,SAAS,KAAK;AAC7B;;"}
@@ -0,0 +1,28 @@
1
+ const isPlainObject = (value) => {
2
+ if (typeof value !== "object" || value === null) {
3
+ return false;
4
+ }
5
+ const prototype = Object.getPrototypeOf(value);
6
+ return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);
7
+ };
8
+ const replaceLeaves = async (input, replacer) => {
9
+ if (Array.isArray(input)) {
10
+ const preparedProcedureArgs = [];
11
+ for (let i = 0; i < input.length; i++) {
12
+ preparedProcedureArgs[i] = await replaceLeaves(input[i], replacer);
13
+ }
14
+ return preparedProcedureArgs;
15
+ }
16
+ if (isPlainObject(input)) {
17
+ const preparedProcedureArgs = {};
18
+ for (const key in input) {
19
+ preparedProcedureArgs[key] = await replaceLeaves(input[key], replacer);
20
+ }
21
+ return preparedProcedureArgs;
22
+ }
23
+ return await replacer(input);
24
+ };
25
+ export {
26
+ replaceLeaves
27
+ };
28
+ //# sourceMappingURL=replaceLeaves.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replaceLeaves.js","sources":["../../../../../../../node_modules/r19/dist/lib/replaceLeaves.js"],"sourcesContent":["const isPlainObject = (value) => {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n};\nconst replaceLeaves = async (input, replacer) => {\n if (Array.isArray(input)) {\n const preparedProcedureArgs = [];\n for (let i = 0; i < input.length; i++) {\n preparedProcedureArgs[i] = await replaceLeaves(input[i], replacer);\n }\n return preparedProcedureArgs;\n }\n if (isPlainObject(input)) {\n const preparedProcedureArgs = {};\n for (const key in input) {\n preparedProcedureArgs[key] = await replaceLeaves(input[key], replacer);\n }\n return preparedProcedureArgs;\n }\n return await replacer(input);\n};\nexport {\n replaceLeaves\n};\n//# sourceMappingURL=replaceLeaves.js.map\n"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,CAAC,UAAU;AAC/B,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,WAAO;AAAA,EACR;AACD,QAAM,YAAY,OAAO,eAAe,KAAK;AAC7C,UAAQ,cAAc,QAAQ,cAAc,OAAO,aAAa,OAAO,eAAe,SAAS,MAAM,SAAS,EAAE,OAAO,eAAe,UAAU,EAAE,OAAO,YAAY;AACvK;AACK,MAAC,gBAAgB,OAAO,OAAO,aAAa;AAC/C,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,UAAM,wBAAwB,CAAA;AAC9B,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,4BAAsB,CAAC,IAAI,MAAM,cAAc,MAAM,CAAC,GAAG,QAAQ;AAAA,IAClE;AACD,WAAO;AAAA,EACR;AACD,MAAI,cAAc,KAAK,GAAG;AACxB,UAAM,wBAAwB,CAAA;AAC9B,eAAW,OAAO,OAAO;AACvB,4BAAsB,GAAG,IAAI,MAAM,cAAc,MAAM,GAAG,GAAG,QAAQ;AAAA,IACtE;AACD,WAAO;AAAA,EACR;AACD,SAAO,MAAM,SAAS,KAAK;AAC7B;"}
@@ -2,11 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const createRPCMiddleware = require('./../__node_modules/r19/dist/createRPCMiddleware.cjs');
4
4
  const proceduresFromInstance = require('./../__node_modules/r19/dist/proceduresFromInstance.cjs');
5
- require("node:stream");
6
5
  require("node:buffer");
7
- require('./../__node_modules/busboy/lib/index.cjs');
8
- require('./../__node_modules/devalue/src/uneval.cjs');
9
- require('./../__node_modules/devalue/src/utils.cjs');
10
6
  const defineOmits = () => {
11
7
  return (omit) => {
12
8
  return omit;
@@ -1 +1 @@
1
- {"version":3,"file":"createSliceMachineManagerMiddleware.cjs","sources":["../../../src/managers/createSliceMachineManagerMiddleware.ts"],"sourcesContent":["import {\n\tExtractProcedures,\n\tOmittableProcedures,\n\tProceduresFromInstance,\n\tRPCMiddleware,\n\tcreateRPCMiddleware,\n\tproceduresFromInstance,\n} from \"r19\";\n\nimport { SliceMachineManager } from \"./SliceMachineManager\";\n\nconst defineOmits = <TObj>() => {\n\t// TODO: Change this to a nicer API. Maybe return an object with a named method (e.g. `compute`)\n\n\treturn <TOmitPaths extends string>(\n\t\tomit: readonly TOmitPaths[] | readonly OmittableProcedures<TObj>[],\n\t): readonly Extract<TOmitPaths, OmittableProcedures<TObj>>[] => {\n\t\treturn omit as readonly Extract<TOmitPaths, OmittableProcedures<TObj>>[];\n\t};\n};\n\n// TODO: Support wildcard omits that support \"*._sliceMachineManager\"\nconst omitProcedures = defineOmits<SliceMachineManager>()([\n\t\"_sliceMachinePluginRunner\",\n\t\"_prismicAuthManager\",\n\n\t\"customTypes._sliceMachineManager\",\n\t\"plugins._sliceMachineManager\",\n\t\"prismicRepository._sliceMachineManager\",\n\t\"project._sliceMachineManager\",\n\t\"screenshots._sliceMachineManager\",\n\t\"simulator._sliceMachineManager\",\n\t\"slices._sliceMachineManager\",\n\t\"snippets._sliceMachineManager\",\n\t\"telemetry._sliceMachineManager\",\n\t\"user._sliceMachineManager\",\n\t\"versions._sliceMachineManager\",\n\n\t\"getSliceMachinePluginRunner\",\n\t\"getPrismicAuthManager\",\n\t\"screenshots.browserContext\",\n]);\n\nexport type SliceMachineManagerMiddleware = RPCMiddleware<\n\tProceduresFromInstance<SliceMachineManager, typeof omitProcedures[number]>\n>;\n\nexport type SliceMachineManagerProcedures =\n\tExtractProcedures<SliceMachineManagerMiddleware>;\n\ntype GetSliceMachineManagerProceduresArgs = {\n\tsliceMachineManager: SliceMachineManager;\n};\n\nexport const getSliceMachineManagerProcedures = (\n\targs: GetSliceMachineManagerProceduresArgs,\n): SliceMachineManagerProcedures => {\n\treturn proceduresFromInstance(args.sliceMachineManager, {\n\t\tomit: omitProcedures,\n\t});\n};\n\nexport type CreateSliceMachineManagerMiddlewareArgs = {\n\tsliceMachineManager: SliceMachineManager;\n};\n\nexport const createSliceMachineManagerMiddleware = (\n\targs: CreateSliceMachineManagerMiddlewareArgs,\n): SliceMachineManagerMiddleware => {\n\treturn createRPCMiddleware({\n\t\tprocedures: getSliceMachineManagerProcedures({\n\t\t\tsliceMachineManager: args.sliceMachineManager,\n\t\t}),\n\t});\n};\n"],"names":["proceduresFromInstance","createRPCMiddleware"],"mappings":";;;;;;;;;AAWA,MAAM,cAAc,MAAW;AAG9B,SAAO,CACN,SAC8D;AACvD,WAAA;AAAA,EAAA;AAET;AAGA,MAAM,iBAAiB,cAAmC;AAAA,EACzD;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AACA,CAAA;AAaY,MAAA,mCAAmC,CAC/C,SACkC;AAC3B,SAAAA,uBAAA,uBAAuB,KAAK,qBAAqB;AAAA,IACvD,MAAM;AAAA,EAAA,CACN;AACF;AAMa,MAAA,sCAAsC,CAClD,SACkC;AAClC,SAAOC,wCAAoB;AAAA,IAC1B,YAAY,iCAAiC;AAAA,MAC5C,qBAAqB,KAAK;AAAA,IAAA,CAC1B;AAAA,EAAA,CACD;AACF;;;"}
1
+ {"version":3,"file":"createSliceMachineManagerMiddleware.cjs","sources":["../../../src/managers/createSliceMachineManagerMiddleware.ts"],"sourcesContent":["import {\n\tExtractProcedures,\n\tOmittableProcedures,\n\tProceduresFromInstance,\n\tRPCMiddleware,\n\tcreateRPCMiddleware,\n\tproceduresFromInstance,\n} from \"r19\";\n\nimport { SliceMachineManager } from \"./SliceMachineManager\";\n\nconst defineOmits = <TObj>() => {\n\t// TODO: Change this to a nicer API. Maybe return an object with a named method (e.g. `compute`)\n\n\treturn <TOmitPaths extends string>(\n\t\tomit: readonly TOmitPaths[] | readonly OmittableProcedures<TObj>[],\n\t): readonly Extract<TOmitPaths, OmittableProcedures<TObj>>[] => {\n\t\treturn omit as readonly Extract<TOmitPaths, OmittableProcedures<TObj>>[];\n\t};\n};\n\n// TODO: Support wildcard omits that support \"*._sliceMachineManager\"\nconst omitProcedures = defineOmits<SliceMachineManager>()([\n\t\"_sliceMachinePluginRunner\",\n\t\"_prismicAuthManager\",\n\n\t\"customTypes._sliceMachineManager\",\n\t\"plugins._sliceMachineManager\",\n\t\"prismicRepository._sliceMachineManager\",\n\t\"project._sliceMachineManager\",\n\t\"screenshots._sliceMachineManager\",\n\t\"simulator._sliceMachineManager\",\n\t\"slices._sliceMachineManager\",\n\t\"snippets._sliceMachineManager\",\n\t\"telemetry._sliceMachineManager\",\n\t\"user._sliceMachineManager\",\n\t\"versions._sliceMachineManager\",\n\n\t\"getSliceMachinePluginRunner\",\n\t\"getPrismicAuthManager\",\n\t\"screenshots.browserContext\",\n]);\n\nexport type SliceMachineManagerMiddleware = RPCMiddleware<\n\tProceduresFromInstance<SliceMachineManager, typeof omitProcedures[number]>\n>;\n\nexport type SliceMachineManagerProcedures =\n\tExtractProcedures<SliceMachineManagerMiddleware>;\n\ntype GetSliceMachineManagerProceduresArgs = {\n\tsliceMachineManager: SliceMachineManager;\n};\n\nexport const getSliceMachineManagerProcedures = (\n\targs: GetSliceMachineManagerProceduresArgs,\n): SliceMachineManagerProcedures => {\n\treturn proceduresFromInstance(args.sliceMachineManager, {\n\t\tomit: omitProcedures,\n\t});\n};\n\nexport type CreateSliceMachineManagerMiddlewareArgs = {\n\tsliceMachineManager: SliceMachineManager;\n};\n\nexport const createSliceMachineManagerMiddleware = (\n\targs: CreateSliceMachineManagerMiddlewareArgs,\n): SliceMachineManagerMiddleware => {\n\treturn createRPCMiddleware({\n\t\tprocedures: getSliceMachineManagerProcedures({\n\t\t\tsliceMachineManager: args.sliceMachineManager,\n\t\t}),\n\t});\n};\n"],"names":["proceduresFromInstance","createRPCMiddleware"],"mappings":";;;;;AAWA,MAAM,cAAc,MAAW;AAG9B,SAAO,CACN,SAC8D;AACvD,WAAA;AAAA,EAAA;AAET;AAGA,MAAM,iBAAiB,cAAmC;AAAA,EACzD;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AACA,CAAA;AAaY,MAAA,mCAAmC,CAC/C,SACkC;AAC3B,SAAAA,uBAAA,uBAAuB,KAAK,qBAAqB;AAAA,IACvD,MAAM;AAAA,EAAA,CACN;AACF;AAMa,MAAA,sCAAsC,CAClD,SACkC;AAClC,SAAOC,wCAAoB;AAAA,IAC1B,YAAY,iCAAiC;AAAA,MAC5C,qBAAqB,KAAK;AAAA,IAAA,CAC1B;AAAA,EAAA,CACD;AACF;;;"}
@@ -1,10 +1,6 @@
1
1
  import { createRPCMiddleware } from './../__node_modules/r19/dist/createRPCMiddleware.js';
2
2
  import { proceduresFromInstance } from './../__node_modules/r19/dist/proceduresFromInstance.js';
3
- import "node:stream";
4
3
  import "node:buffer";
5
- import './../__node_modules/busboy/lib/index.js';
6
- import './../__node_modules/devalue/src/uneval.js';
7
- import './../__node_modules/devalue/src/utils.js';
8
4
  const defineOmits = () => {
9
5
  return (omit) => {
10
6
  return omit;
@@ -1 +1 @@
1
- {"version":3,"file":"createSliceMachineManagerMiddleware.js","sources":["../../../src/managers/createSliceMachineManagerMiddleware.ts"],"sourcesContent":["import {\n\tExtractProcedures,\n\tOmittableProcedures,\n\tProceduresFromInstance,\n\tRPCMiddleware,\n\tcreateRPCMiddleware,\n\tproceduresFromInstance,\n} from \"r19\";\n\nimport { SliceMachineManager } from \"./SliceMachineManager\";\n\nconst defineOmits = <TObj>() => {\n\t// TODO: Change this to a nicer API. Maybe return an object with a named method (e.g. `compute`)\n\n\treturn <TOmitPaths extends string>(\n\t\tomit: readonly TOmitPaths[] | readonly OmittableProcedures<TObj>[],\n\t): readonly Extract<TOmitPaths, OmittableProcedures<TObj>>[] => {\n\t\treturn omit as readonly Extract<TOmitPaths, OmittableProcedures<TObj>>[];\n\t};\n};\n\n// TODO: Support wildcard omits that support \"*._sliceMachineManager\"\nconst omitProcedures = defineOmits<SliceMachineManager>()([\n\t\"_sliceMachinePluginRunner\",\n\t\"_prismicAuthManager\",\n\n\t\"customTypes._sliceMachineManager\",\n\t\"plugins._sliceMachineManager\",\n\t\"prismicRepository._sliceMachineManager\",\n\t\"project._sliceMachineManager\",\n\t\"screenshots._sliceMachineManager\",\n\t\"simulator._sliceMachineManager\",\n\t\"slices._sliceMachineManager\",\n\t\"snippets._sliceMachineManager\",\n\t\"telemetry._sliceMachineManager\",\n\t\"user._sliceMachineManager\",\n\t\"versions._sliceMachineManager\",\n\n\t\"getSliceMachinePluginRunner\",\n\t\"getPrismicAuthManager\",\n\t\"screenshots.browserContext\",\n]);\n\nexport type SliceMachineManagerMiddleware = RPCMiddleware<\n\tProceduresFromInstance<SliceMachineManager, typeof omitProcedures[number]>\n>;\n\nexport type SliceMachineManagerProcedures =\n\tExtractProcedures<SliceMachineManagerMiddleware>;\n\ntype GetSliceMachineManagerProceduresArgs = {\n\tsliceMachineManager: SliceMachineManager;\n};\n\nexport const getSliceMachineManagerProcedures = (\n\targs: GetSliceMachineManagerProceduresArgs,\n): SliceMachineManagerProcedures => {\n\treturn proceduresFromInstance(args.sliceMachineManager, {\n\t\tomit: omitProcedures,\n\t});\n};\n\nexport type CreateSliceMachineManagerMiddlewareArgs = {\n\tsliceMachineManager: SliceMachineManager;\n};\n\nexport const createSliceMachineManagerMiddleware = (\n\targs: CreateSliceMachineManagerMiddlewareArgs,\n): SliceMachineManagerMiddleware => {\n\treturn createRPCMiddleware({\n\t\tprocedures: getSliceMachineManagerProcedures({\n\t\t\tsliceMachineManager: args.sliceMachineManager,\n\t\t}),\n\t});\n};\n"],"names":[],"mappings":";;;;;;;AAWA,MAAM,cAAc,MAAW;AAG9B,SAAO,CACN,SAC8D;AACvD,WAAA;AAAA,EAAA;AAET;AAGA,MAAM,iBAAiB,cAAmC;AAAA,EACzD;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AACA,CAAA;AAaY,MAAA,mCAAmC,CAC/C,SACkC;AAC3B,SAAA,uBAAuB,KAAK,qBAAqB;AAAA,IACvD,MAAM;AAAA,EAAA,CACN;AACF;AAMa,MAAA,sCAAsC,CAClD,SACkC;AAClC,SAAO,oBAAoB;AAAA,IAC1B,YAAY,iCAAiC;AAAA,MAC5C,qBAAqB,KAAK;AAAA,IAAA,CAC1B;AAAA,EAAA,CACD;AACF;"}
1
+ {"version":3,"file":"createSliceMachineManagerMiddleware.js","sources":["../../../src/managers/createSliceMachineManagerMiddleware.ts"],"sourcesContent":["import {\n\tExtractProcedures,\n\tOmittableProcedures,\n\tProceduresFromInstance,\n\tRPCMiddleware,\n\tcreateRPCMiddleware,\n\tproceduresFromInstance,\n} from \"r19\";\n\nimport { SliceMachineManager } from \"./SliceMachineManager\";\n\nconst defineOmits = <TObj>() => {\n\t// TODO: Change this to a nicer API. Maybe return an object with a named method (e.g. `compute`)\n\n\treturn <TOmitPaths extends string>(\n\t\tomit: readonly TOmitPaths[] | readonly OmittableProcedures<TObj>[],\n\t): readonly Extract<TOmitPaths, OmittableProcedures<TObj>>[] => {\n\t\treturn omit as readonly Extract<TOmitPaths, OmittableProcedures<TObj>>[];\n\t};\n};\n\n// TODO: Support wildcard omits that support \"*._sliceMachineManager\"\nconst omitProcedures = defineOmits<SliceMachineManager>()([\n\t\"_sliceMachinePluginRunner\",\n\t\"_prismicAuthManager\",\n\n\t\"customTypes._sliceMachineManager\",\n\t\"plugins._sliceMachineManager\",\n\t\"prismicRepository._sliceMachineManager\",\n\t\"project._sliceMachineManager\",\n\t\"screenshots._sliceMachineManager\",\n\t\"simulator._sliceMachineManager\",\n\t\"slices._sliceMachineManager\",\n\t\"snippets._sliceMachineManager\",\n\t\"telemetry._sliceMachineManager\",\n\t\"user._sliceMachineManager\",\n\t\"versions._sliceMachineManager\",\n\n\t\"getSliceMachinePluginRunner\",\n\t\"getPrismicAuthManager\",\n\t\"screenshots.browserContext\",\n]);\n\nexport type SliceMachineManagerMiddleware = RPCMiddleware<\n\tProceduresFromInstance<SliceMachineManager, typeof omitProcedures[number]>\n>;\n\nexport type SliceMachineManagerProcedures =\n\tExtractProcedures<SliceMachineManagerMiddleware>;\n\ntype GetSliceMachineManagerProceduresArgs = {\n\tsliceMachineManager: SliceMachineManager;\n};\n\nexport const getSliceMachineManagerProcedures = (\n\targs: GetSliceMachineManagerProceduresArgs,\n): SliceMachineManagerProcedures => {\n\treturn proceduresFromInstance(args.sliceMachineManager, {\n\t\tomit: omitProcedures,\n\t});\n};\n\nexport type CreateSliceMachineManagerMiddlewareArgs = {\n\tsliceMachineManager: SliceMachineManager;\n};\n\nexport const createSliceMachineManagerMiddleware = (\n\targs: CreateSliceMachineManagerMiddlewareArgs,\n): SliceMachineManagerMiddleware => {\n\treturn createRPCMiddleware({\n\t\tprocedures: getSliceMachineManagerProcedures({\n\t\t\tsliceMachineManager: args.sliceMachineManager,\n\t\t}),\n\t});\n};\n"],"names":[],"mappings":";;;AAWA,MAAM,cAAc,MAAW;AAG9B,SAAO,CACN,SAC8D;AACvD,WAAA;AAAA,EAAA;AAET;AAGA,MAAM,iBAAiB,cAAmC;AAAA,EACzD;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AACA,CAAA;AAaY,MAAA,mCAAmC,CAC/C,SACkC;AAC3B,SAAA,uBAAuB,KAAK,qBAAqB;AAAA,IACvD,MAAM;AAAA,EAAA,CACN;AACF;AAMa,MAAA,sCAAsC,CAClD,SACkC;AAClC,SAAO,oBAAoB;AAAA,IAC1B,YAAY,iCAAiC;AAAA,MAC5C,qBAAqB,KAAK;AAAA,IAAA,CAC1B;AAAA,EAAA,CACD;AACF;"}
@@ -61,8 +61,9 @@ function _interopNamespaceDefault(e) {
61
61
  return Object.freeze(n);
62
62
  }
63
63
  const t__namespace = /* @__PURE__ */ _interopNamespaceDefault(t);
64
- const SLICE_SIMULATOR_LOAD_TIMEOUT = 1e4;
65
- const SLICE_SIMULATOR_ROOT_SELECTOR = "#root";
64
+ const SLICE_SIMULATOR_WAIT_FOR_TIMEOUT = 1e4;
65
+ const SLICE_SIMULATOR_WAIT_FOR_SELECTOR = "#__iframe-ready";
66
+ const SLICE_SIMULATOR_SCREENSHOT_SELECTOR = "#__iframe-renderer";
66
67
  const DEFAULT_SCREENSHOT_VIEWPORT = {
67
68
  width: 1200,
68
69
  height: 800
@@ -77,6 +78,9 @@ function assertBrowserContextInitialized(browserContext) {
77
78
  throw new Error("A browser context has not been initialized. Run `SliceMachineManager.screenshots.prototype.initBrowserContext()` before re-calling this method.");
78
79
  }
79
80
  }
81
+ const encodeSliceSimulatorURLPart = (urlPart) => {
82
+ return urlPart.replace(/\//g, "--");
83
+ };
80
84
  class ScreenshotsManager extends BaseManager.BaseManager {
81
85
  constructor() {
82
86
  super(...arguments);
@@ -146,26 +150,41 @@ class ScreenshotsManager extends BaseManager.BaseManager {
146
150
  if (!sliceMachineConfig.localSliceSimulatorURL) {
147
151
  throw new Error("A local Slice Simulator URL must be configured in your Slice Machine configuration file.");
148
152
  }
149
- const url = new URL(sliceMachineConfig.localSliceSimulatorURL);
150
- url.searchParams.set("lid", args.libraryID);
151
- url.searchParams.set("sid", args.sliceID);
152
- url.searchParams.set("vid", args.variationID);
153
+ const { model } = await this.slices.readSlice({
154
+ libraryID: args.libraryID,
155
+ sliceID: args.sliceID
156
+ });
157
+ if (!model) {
158
+ throw new Error(`Did not find a Slice in library "${args.libraryID}" with ID "${args.sliceID}".`);
159
+ }
160
+ const viewport = args.viewport || DEFAULT_SCREENSHOT_VIEWPORT;
161
+ const url = new URL(`./${encodeSliceSimulatorURLPart(args.libraryID)}/${model.name}/${args.variationID}/screenshot`, args.sliceMachineUIOrigin);
162
+ url.searchParams.set("screenWidth", viewport.width.toString());
163
+ url.searchParams.set("screenHeight", viewport.height.toString());
153
164
  const isURLAccessible = await checkIsURLAccessible.checkIsURLAccessible(url.toString());
154
165
  if (!isURLAccessible) {
155
- throw new Error(`Slice Simulator URL is not accessible: ${url}`);
166
+ throw new Error(`Slice Simulator screenshot URL is not accessible: ${url}`);
156
167
  }
157
168
  const page = await this._browserContext.newPage();
158
- page.setViewport(args.viewport || DEFAULT_SCREENSHOT_VIEWPORT);
159
- await page.goto(url.toString());
160
- await page.waitForSelector(SLICE_SIMULATOR_ROOT_SELECTOR, {
161
- timeout: SLICE_SIMULATOR_LOAD_TIMEOUT
169
+ page.setViewport(viewport);
170
+ await page.goto(url.toString(), { waitUntil: "load" });
171
+ await page.waitForSelector(SLICE_SIMULATOR_WAIT_FOR_SELECTOR, {
172
+ timeout: SLICE_SIMULATOR_WAIT_FOR_TIMEOUT
162
173
  });
163
- const element = await page.$(SLICE_SIMULATOR_ROOT_SELECTOR);
174
+ const element = await page.$(SLICE_SIMULATOR_SCREENSHOT_SELECTOR);
164
175
  if (!element) {
165
176
  const baseURL = new URL(url.pathname, url.origin);
166
- throw new Error(`Slice Simulator could not find the element to screenshot. Verify the URL is correct: ${baseURL}`);
177
+ throw new Error(`Slice Simulator did not find ${SLICE_SIMULATOR_WAIT_FOR_SELECTOR} on the page. Verify the URL is correct: ${baseURL}`);
167
178
  }
168
- const data = await element.screenshot({ encoding: "binary" });
179
+ const data = await element.screenshot({
180
+ encoding: "binary",
181
+ clip: {
182
+ width: viewport.width,
183
+ height: viewport.height,
184
+ x: 0,
185
+ y: 0
186
+ }
187
+ });
169
188
  return {
170
189
  data
171
190
  };
@@ -201,6 +220,4 @@ class ScreenshotsManager extends BaseManager.BaseManager {
201
220
  }
202
221
  }
203
222
  exports.ScreenshotsManager = ScreenshotsManager;
204
- exports.assertBrowserContextInitialized = assertBrowserContextInitialized;
205
- exports.assertS3ACLInitialized = assertS3ACLInitialized;
206
223
  //# sourceMappingURL=ScreenshotsManager.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScreenshotsManager.cjs","sources":["../../../../src/managers/screenshots/ScreenshotsManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport { fileTypeFromBuffer } from \"file-type\";\nimport fetch, { FormData, Blob } from \"node-fetch\";\n// puppeteer is lazy-loaded in captureSliceSimulatorScreenshot\nimport type { BrowserContext, Viewport } from \"puppeteer\";\n\nimport { checkIsURLAccessible } from \"../../lib/checkIsURLAccessible\";\nimport { createContentDigest } from \"../../lib/createContentDigest\";\nimport { decode } from \"../../lib/decode\";\n\nimport { S3ACL } from \"../../types\";\nimport { SLICE_MACHINE_USER_AGENT } from \"../../constants/SLICE_MACHINE_USER_AGENT\";\nimport { API_ENDPOINTS } from \"../../constants/API_ENDPOINTS\";\nimport { InternalError } from \"../../errors\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nconst SLICE_SIMULATOR_LOAD_TIMEOUT = 10_000; // ms\nconst SLICE_SIMULATOR_ROOT_SELECTOR = \"#root\";\n\nconst DEFAULT_SCREENSHOT_VIEWPORT: Viewport = {\n\twidth: 1200,\n\theight: 800,\n};\n\nexport function assertS3ACLInitialized(\n\ts3ACL: S3ACL | undefined,\n): asserts s3ACL is NonNullable<typeof s3ACL> {\n\tif (s3ACL == undefined) {\n\t\tthrow new Error(\n\t\t\t\"An S3 ACL has not been initialized. Run `SliceMachineManager.screenshots.prototype.initS3ACL()` before re-calling this method.\",\n\t\t);\n\t}\n}\n\nexport function assertBrowserContextInitialized(\n\tbrowserContext: BrowserContext | undefined,\n): asserts browserContext is NonNullable<typeof browserContext> {\n\tif (browserContext == undefined) {\n\t\tthrow new Error(\n\t\t\t\"A browser context has not been initialized. Run `SliceMachineManager.screenshots.prototype.initBrowserContext()` before re-calling this method.\",\n\t\t);\n\t}\n}\n\ntype ScreenshotsManagerCaptureSliceSimulatorScreenshotArgs = {\n\tlibraryID: string;\n\tsliceID: string;\n\tvariationID: string;\n\tviewport?: Viewport;\n};\n\ntype ScreenshotsManagerCaptureSliceSimulatorScreenshotReturnType = {\n\tdata: Buffer;\n};\n\ntype ScreenshotsManagerUploadScreenshotArgs = {\n\tdata: Buffer;\n\tkeyPrefix?: string;\n};\n\ntype ScreenshotsManagerUploadScreenshotReturnType = {\n\turl: string;\n};\n\nexport class ScreenshotsManager extends BaseManager {\n\tprivate _browserContext: BrowserContext | undefined;\n\tprivate _s3ACL: S3ACL | undefined;\n\n\tasync initBrowserContext(): Promise<void> {\n\t\tif (this._browserContext) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet puppeteer: typeof import(\"puppeteer\");\n\t\ttry {\n\t\t\t// Lazy-load Puppeteer only once it is needed.\n\t\t\tpuppeteer = await import(\"puppeteer\");\n\t\t} catch {\n\t\t\tthrow new InternalError(\n\t\t\t\t\"Screenshots require Puppeteer but Puppeteer was not found. Check that the `puppeteer` package is installed before trying again.\",\n\t\t\t);\n\t\t}\n\n\t\tconst browser = await puppeteer.launch();\n\n\t\tthis._browserContext = await browser.createIncognitoBrowserContext();\n\t}\n\n\tasync initS3ACL(): Promise<void> {\n\t\tif (this._s3ACL) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst sliceMachineConfig = await this.project.getSliceMachineConfig();\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\n\t\tconst awsACLURL = new URL(\"create\", API_ENDPOINTS.AwsAclProvider);\n\t\tconst awsACLRes = await fetch(awsACLURL.toString(), {\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${authenticationToken}`,\n\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t\tRepository: sliceMachineConfig.repositoryName,\n\t\t\t},\n\t\t});\n\t\tconst awsACLJSON = await awsACLRes.json();\n\n\t\tconst { value: awsACL, error } = decode(\n\t\t\tt.intersection([\n\t\t\t\tt.type({\n\t\t\t\t\tvalues: t.type({\n\t\t\t\t\t\turl: t.string,\n\t\t\t\t\t\tfields: t.record(t.string, t.string),\n\t\t\t\t\t}),\n\t\t\t\t\timgixEndpoint: t.string,\n\t\t\t\t}),\n\t\t\t\tt.partial({\n\t\t\t\t\tmessage: t.string,\n\t\t\t\t\tMessage: t.string,\n\t\t\t\t\terror: t.string,\n\t\t\t\t}),\n\t\t\t]),\n\t\t\tawsACLJSON,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new Error(`Invalid AWS ACL response from ${awsACLURL}`);\n\t\t}\n\n\t\tconst errorMessage = awsACL.error || awsACL.message || awsACL.Message;\n\t\tif (errorMessage) {\n\t\t\tthrow new Error(`Failed to create an AWS ACL: ${errorMessage}`);\n\t\t}\n\n\t\tthis._s3ACL = {\n\t\t\tuploadEndpoint: awsACL.values.url,\n\t\t\trequiredFormDataFields: awsACL.values.fields,\n\t\t\timgixEndpoint: awsACL.imgixEndpoint,\n\t\t};\n\t}\n\n\t// TODO: Abstract to a generic `captureScreenshot()` method that is\n\t// used within a Slice-specific method in SliceManager.\n\tasync captureSliceSimulatorScreenshot(\n\t\targs: ScreenshotsManagerCaptureSliceSimulatorScreenshotArgs,\n\t): Promise<ScreenshotsManagerCaptureSliceSimulatorScreenshotReturnType> {\n\t\tassertBrowserContextInitialized(this._browserContext);\n\n\t\tconst sliceMachineConfig = await this.project.getSliceMachineConfig();\n\n\t\tif (!sliceMachineConfig.localSliceSimulatorURL) {\n\t\t\t// TODO: Provide a more helpful error message.\n\t\t\tthrow new Error(\n\t\t\t\t\"A local Slice Simulator URL must be configured in your Slice Machine configuration file.\",\n\t\t\t);\n\t\t}\n\n\t\tconst url = new URL(sliceMachineConfig.localSliceSimulatorURL);\n\t\turl.searchParams.set(\"lid\", args.libraryID);\n\t\turl.searchParams.set(\"sid\", args.sliceID);\n\t\turl.searchParams.set(\"vid\", args.variationID);\n\n\t\tconst isURLAccessible = await checkIsURLAccessible(url.toString());\n\n\t\tif (!isURLAccessible) {\n\t\t\tthrow new Error(`Slice Simulator URL is not accessible: ${url}`);\n\t\t}\n\n\t\tconst page = await this._browserContext.newPage();\n\t\tpage.setViewport(args.viewport || DEFAULT_SCREENSHOT_VIEWPORT);\n\n\t\t// TODO: I removed `goto`'s `{ waitUntil: \"networkidle2\" }` option.\n\t\t// Good idea? Bad idea?\n\t\tawait page.goto(url.toString());\n\t\tawait page.waitForSelector(SLICE_SIMULATOR_ROOT_SELECTOR, {\n\t\t\ttimeout: SLICE_SIMULATOR_LOAD_TIMEOUT,\n\t\t});\n\n\t\tconst element = await page.$(SLICE_SIMULATOR_ROOT_SELECTOR);\n\t\tif (!element) {\n\t\t\tconst baseURL = new URL(url.pathname, url.origin);\n\n\t\t\tthrow new Error(\n\t\t\t\t`Slice Simulator could not find the element to screenshot. Verify the URL is correct: ${baseURL}`,\n\t\t\t);\n\t\t}\n\n\t\tconst data = (await element.screenshot({ encoding: \"binary\" })) as Buffer;\n\n\t\treturn {\n\t\t\tdata,\n\t\t};\n\t}\n\n\tasync uploadScreenshot(\n\t\targs: ScreenshotsManagerUploadScreenshotArgs,\n\t): Promise<ScreenshotsManagerUploadScreenshotReturnType> {\n\t\tassertS3ACLInitialized(this._s3ACL);\n\n\t\tconst formData = new FormData();\n\n\t\tfor (const requiredFormDataFieldKey in this._s3ACL.requiredFormDataFields) {\n\t\t\tformData.append(\n\t\t\t\trequiredFormDataFieldKey,\n\t\t\t\tthis._s3ACL.requiredFormDataFields[requiredFormDataFieldKey],\n\t\t\t);\n\t\t}\n\n\t\tconst contentDigest = createContentDigest(args.data);\n\t\tconst fileType = await fileTypeFromBuffer(args.data);\n\t\tconst fileName = fileType\n\t\t\t? `${contentDigest}.${fileType.ext}`\n\t\t\t: contentDigest;\n\t\tconst key = args.keyPrefix ? `${args.keyPrefix}/${fileName}` : fileName;\n\n\t\tformData.set(\"key\", key);\n\n\t\tif (fileType) {\n\t\t\tformData.set(\"Content-Type\", fileType.mime);\n\t\t}\n\n\t\tformData.set(\"file\", new Blob([args.data], { type: fileType?.mime }));\n\n\t\tconst res = await fetch(this._s3ACL.uploadEndpoint, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: formData,\n\t\t});\n\n\t\tif (res.ok) {\n\t\t\tconst url = new URL(key, this._s3ACL.imgixEndpoint);\n\t\t\turl.searchParams.set(\"auto\", \"compress,format\");\n\n\t\t\treturn {\n\t\t\t\turl: url.toString(),\n\t\t\t};\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t`Unable to upload screenshot with status code: ${res.status}`,\n\t\t\t);\n\t\t}\n\t}\n}\n"],"names":["BaseManager","InternalError","API_ENDPOINTS","fetch","SLICE_MACHINE_USER_AGENT","decode","t","checkIsURLAccessible","FormData","createContentDigest","fileTypeFromBuffer","Blob"],"mappings":"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"}
1
+ {"version":3,"file":"ScreenshotsManager.cjs","sources":["../../../../src/managers/screenshots/ScreenshotsManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport { fileTypeFromBuffer } from \"file-type\";\nimport fetch, { FormData, Blob } from \"node-fetch\";\n// puppeteer is lazy-loaded in captureSliceSimulatorScreenshot\nimport type { BrowserContext, Viewport } from \"puppeteer\";\n\nimport { checkIsURLAccessible } from \"../../lib/checkIsURLAccessible\";\nimport { createContentDigest } from \"../../lib/createContentDigest\";\nimport { decode } from \"../../lib/decode\";\n\nimport { S3ACL } from \"../../types\";\nimport { SLICE_MACHINE_USER_AGENT } from \"../../constants/SLICE_MACHINE_USER_AGENT\";\nimport { API_ENDPOINTS } from \"../../constants/API_ENDPOINTS\";\nimport { InternalError } from \"../../errors\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nconst SLICE_SIMULATOR_WAIT_FOR_TIMEOUT = 10_000; // ms\nconst SLICE_SIMULATOR_WAIT_FOR_SELECTOR = \"#__iframe-ready\";\nconst SLICE_SIMULATOR_SCREENSHOT_SELECTOR = \"#__iframe-renderer\";\n\nconst DEFAULT_SCREENSHOT_VIEWPORT: Viewport = {\n\twidth: 1200,\n\theight: 800,\n};\n\nfunction assertS3ACLInitialized(\n\ts3ACL: S3ACL | undefined,\n): asserts s3ACL is NonNullable<typeof s3ACL> {\n\tif (s3ACL == undefined) {\n\t\tthrow new Error(\n\t\t\t\"An S3 ACL has not been initialized. Run `SliceMachineManager.screenshots.prototype.initS3ACL()` before re-calling this method.\",\n\t\t);\n\t}\n}\n\nfunction assertBrowserContextInitialized(\n\tbrowserContext: BrowserContext | undefined,\n): asserts browserContext is NonNullable<typeof browserContext> {\n\tif (browserContext == undefined) {\n\t\tthrow new Error(\n\t\t\t\"A browser context has not been initialized. Run `SliceMachineManager.screenshots.prototype.initBrowserContext()` before re-calling this method.\",\n\t\t);\n\t}\n}\n\n/**\n * Encodes a part of a Slice Simulator URL to ensure it can be added to a URL\n * safely.\n *\n * The encoding logic must match Slice Machine UI's URL encoding practices.\n * Today, that requires the following:\n *\n * - Replace \"/\" with \"--\" (e.g. a Slice Library ID of \"./slices\" should turn into\n * \".--slices\")\n *\n * @param urlPart - A part of the URL.\n *\n * @returns `urlPart` encoded for use in a URL.\n */\nconst encodeSliceSimulatorURLPart = (urlPart: string): string => {\n\treturn urlPart.replace(/\\//g, \"--\");\n};\n\ntype ScreenshotsManagerCaptureSliceSimulatorScreenshotArgs = {\n\tsliceMachineUIOrigin: string;\n\tlibraryID: string;\n\tsliceID: string;\n\tvariationID: string;\n\tviewport?: Viewport;\n};\n\ntype ScreenshotsManagerCaptureSliceSimulatorScreenshotReturnType = {\n\tdata: Buffer;\n};\n\ntype ScreenshotsManagerUploadScreenshotArgs = {\n\tdata: Buffer;\n\tkeyPrefix?: string;\n};\n\ntype ScreenshotsManagerUploadScreenshotReturnType = {\n\turl: string;\n};\n\nexport class ScreenshotsManager extends BaseManager {\n\tprivate _browserContext: BrowserContext | undefined;\n\tprivate _s3ACL: S3ACL | undefined;\n\n\tasync initBrowserContext(): Promise<void> {\n\t\tif (this._browserContext) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet puppeteer: typeof import(\"puppeteer\");\n\t\ttry {\n\t\t\t// Lazy-load Puppeteer only once it is needed.\n\t\t\tpuppeteer = await import(\"puppeteer\");\n\t\t} catch {\n\t\t\tthrow new InternalError(\n\t\t\t\t\"Screenshots require Puppeteer but Puppeteer was not found. Check that the `puppeteer` package is installed before trying again.\",\n\t\t\t);\n\t\t}\n\n\t\tconst browser = await puppeteer.launch();\n\n\t\tthis._browserContext = await browser.createIncognitoBrowserContext();\n\t}\n\n\tasync initS3ACL(): Promise<void> {\n\t\tif (this._s3ACL) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst sliceMachineConfig = await this.project.getSliceMachineConfig();\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\n\t\tconst awsACLURL = new URL(\"create\", API_ENDPOINTS.AwsAclProvider);\n\t\tconst awsACLRes = await fetch(awsACLURL.toString(), {\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${authenticationToken}`,\n\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t\tRepository: sliceMachineConfig.repositoryName,\n\t\t\t},\n\t\t});\n\t\tconst awsACLJSON = await awsACLRes.json();\n\n\t\tconst { value: awsACL, error } = decode(\n\t\t\tt.intersection([\n\t\t\t\tt.type({\n\t\t\t\t\tvalues: t.type({\n\t\t\t\t\t\turl: t.string,\n\t\t\t\t\t\tfields: t.record(t.string, t.string),\n\t\t\t\t\t}),\n\t\t\t\t\timgixEndpoint: t.string,\n\t\t\t\t}),\n\t\t\t\tt.partial({\n\t\t\t\t\tmessage: t.string,\n\t\t\t\t\tMessage: t.string,\n\t\t\t\t\terror: t.string,\n\t\t\t\t}),\n\t\t\t]),\n\t\t\tawsACLJSON,\n\t\t);\n\n\t\tif (error) {\n\t\t\tthrow new Error(`Invalid AWS ACL response from ${awsACLURL}`);\n\t\t}\n\n\t\tconst errorMessage = awsACL.error || awsACL.message || awsACL.Message;\n\t\tif (errorMessage) {\n\t\t\tthrow new Error(`Failed to create an AWS ACL: ${errorMessage}`);\n\t\t}\n\n\t\tthis._s3ACL = {\n\t\t\tuploadEndpoint: awsACL.values.url,\n\t\t\trequiredFormDataFields: awsACL.values.fields,\n\t\t\timgixEndpoint: awsACL.imgixEndpoint,\n\t\t};\n\t}\n\n\t// TODO: Abstract to a generic `captureScreenshot()` method that is\n\t// used within a Slice-specific method in SliceManager.\n\tasync captureSliceSimulatorScreenshot(\n\t\targs: ScreenshotsManagerCaptureSliceSimulatorScreenshotArgs,\n\t): Promise<ScreenshotsManagerCaptureSliceSimulatorScreenshotReturnType> {\n\t\tassertBrowserContextInitialized(this._browserContext);\n\n\t\tconst sliceMachineConfig = await this.project.getSliceMachineConfig();\n\n\t\tif (!sliceMachineConfig.localSliceSimulatorURL) {\n\t\t\t// TODO: Provide a more helpful error message.\n\t\t\tthrow new Error(\n\t\t\t\t\"A local Slice Simulator URL must be configured in your Slice Machine configuration file.\",\n\t\t\t);\n\t\t}\n\n\t\tconst { model } = await this.slices.readSlice({\n\t\t\tlibraryID: args.libraryID,\n\t\t\tsliceID: args.sliceID,\n\t\t});\n\t\tif (!model) {\n\t\t\tthrow new Error(\n\t\t\t\t`Did not find a Slice in library \"${args.libraryID}\" with ID \"${args.sliceID}\".`,\n\t\t\t);\n\t\t}\n\n\t\tconst viewport = args.viewport || DEFAULT_SCREENSHOT_VIEWPORT;\n\n\t\t// TODO: Change `model.name` to `args.sliceID`?\n\t\t// Making that change would require changing the screenshot\n\t\t// page path in Slice Machine UI.\n\t\tconst url = new URL(\n\t\t\t`./${encodeSliceSimulatorURLPart(args.libraryID)}/${model.name}/${\n\t\t\t\targs.variationID\n\t\t\t}/screenshot`,\n\t\t\targs.sliceMachineUIOrigin,\n\t\t);\n\t\turl.searchParams.set(\"screenWidth\", viewport.width.toString());\n\t\turl.searchParams.set(\"screenHeight\", viewport.height.toString());\n\n\t\tconst isURLAccessible = await checkIsURLAccessible(url.toString());\n\n\t\tif (!isURLAccessible) {\n\t\t\tthrow new Error(\n\t\t\t\t`Slice Simulator screenshot URL is not accessible: ${url}`,\n\t\t\t);\n\t\t}\n\n\t\tconst page = await this._browserContext.newPage();\n\t\tpage.setViewport(viewport);\n\n\t\tawait page.goto(url.toString(), { waitUntil: \"load\" });\n\t\tawait page.waitForSelector(SLICE_SIMULATOR_WAIT_FOR_SELECTOR, {\n\t\t\ttimeout: SLICE_SIMULATOR_WAIT_FOR_TIMEOUT,\n\t\t});\n\n\t\tconst element = await page.$(SLICE_SIMULATOR_SCREENSHOT_SELECTOR);\n\t\tif (!element) {\n\t\t\tconst baseURL = new URL(url.pathname, url.origin);\n\n\t\t\tthrow new Error(\n\t\t\t\t`Slice Simulator did not find ${SLICE_SIMULATOR_WAIT_FOR_SELECTOR} on the page. Verify the URL is correct: ${baseURL}`,\n\t\t\t);\n\t\t}\n\n\t\tconst data = (await element.screenshot({\n\t\t\tencoding: \"binary\",\n\t\t\tclip: {\n\t\t\t\twidth: viewport.width,\n\t\t\t\theight: viewport.height,\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t},\n\t\t})) as Buffer;\n\n\t\treturn {\n\t\t\tdata,\n\t\t};\n\t}\n\n\tasync uploadScreenshot(\n\t\targs: ScreenshotsManagerUploadScreenshotArgs,\n\t): Promise<ScreenshotsManagerUploadScreenshotReturnType> {\n\t\tassertS3ACLInitialized(this._s3ACL);\n\n\t\tconst formData = new FormData();\n\n\t\tfor (const requiredFormDataFieldKey in this._s3ACL.requiredFormDataFields) {\n\t\t\tformData.append(\n\t\t\t\trequiredFormDataFieldKey,\n\t\t\t\tthis._s3ACL.requiredFormDataFields[requiredFormDataFieldKey],\n\t\t\t);\n\t\t}\n\n\t\tconst contentDigest = createContentDigest(args.data);\n\t\tconst fileType = await fileTypeFromBuffer(args.data);\n\t\tconst fileName = fileType\n\t\t\t? `${contentDigest}.${fileType.ext}`\n\t\t\t: contentDigest;\n\t\tconst key = args.keyPrefix ? `${args.keyPrefix}/${fileName}` : fileName;\n\n\t\tformData.set(\"key\", key);\n\n\t\tif (fileType) {\n\t\t\tformData.set(\"Content-Type\", fileType.mime);\n\t\t}\n\n\t\tformData.set(\"file\", new Blob([args.data], { type: fileType?.mime }));\n\n\t\tconst res = await fetch(this._s3ACL.uploadEndpoint, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: formData,\n\t\t});\n\n\t\tif (res.ok) {\n\t\t\tconst url = new URL(key, this._s3ACL.imgixEndpoint);\n\t\t\turl.searchParams.set(\"auto\", \"compress,format\");\n\n\t\t\treturn {\n\t\t\t\turl: url.toString(),\n\t\t\t};\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t`Unable to upload screenshot with status code: ${res.status}`,\n\t\t\t);\n\t\t}\n\t}\n}\n"],"names":["BaseManager","InternalError","API_ENDPOINTS","fetch","SLICE_MACHINE_USER_AGENT","decode","t","checkIsURLAccessible","FormData","createContentDigest","fileTypeFromBuffer","Blob"],"mappings":"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"}
@@ -1,10 +1,8 @@
1
1
  /// <reference types="node" />
2
- import type { BrowserContext, Viewport } from "puppeteer";
3
- import { S3ACL } from "../../types";
2
+ import type { Viewport } from "puppeteer";
4
3
  import { BaseManager } from "../BaseManager";
5
- export declare function assertS3ACLInitialized(s3ACL: S3ACL | undefined): asserts s3ACL is NonNullable<typeof s3ACL>;
6
- export declare function assertBrowserContextInitialized(browserContext: BrowserContext | undefined): asserts browserContext is NonNullable<typeof browserContext>;
7
4
  type ScreenshotsManagerCaptureSliceSimulatorScreenshotArgs = {
5
+ sliceMachineUIOrigin: string;
8
6
  libraryID: string;
9
7
  sliceID: string;
10
8
  variationID: string;