isomorfeus-puppetmaster 0.5.1 → 0.5.5
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.
- checksums.yaml +4 -4
- data/README.md +12 -17
- data/lib/isomorfeus/puppetmaster/driver/puppeteer.rb +32 -20
- data/lib/isomorfeus/puppetmaster/driver/puppeteer_document.rb +30 -30
- data/lib/isomorfeus/puppetmaster/driver/puppeteer_node.rb +4 -4
- data/lib/isomorfeus/puppetmaster/node.rb +3 -3
- data/lib/isomorfeus/puppetmaster/server.rb +1 -1
- data/lib/isomorfeus/puppetmaster/version.rb +1 -1
- data/lib/isomorfeus/puppetmaster.rb +2 -2
- data/lib/isomorfeus-puppetmaster.rb +5 -2
- data/node_modules/.package-lock.json +56 -45
- data/node_modules/debug/package.json +1 -1
- data/node_modules/debug/src/common.js +14 -1
- data/node_modules/{mkdirp → mkdirp-classic}/LICENSE +2 -2
- data/node_modules/mkdirp-classic/README.md +18 -0
- data/node_modules/{mkdirp → mkdirp-classic}/index.js +2 -3
- data/node_modules/mkdirp-classic/package.json +18 -0
- data/node_modules/node-fetch/lib/index.es.js +25 -3
- data/node_modules/node-fetch/lib/index.js +25 -3
- data/node_modules/node-fetch/lib/index.mjs +25 -3
- data/node_modules/node-fetch/package.json +8 -6
- data/node_modules/progress/lib/node-progress.js +4 -3
- data/node_modules/progress/package.json +1 -1
- data/node_modules/puppeteer-core/CHANGELOG.md +64 -0
- data/node_modules/puppeteer-core/README.md +13 -15
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/AriaQueryHandler.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/AriaQueryHandler.js +5 -5
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/AriaQueryHandler.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Browser.d.ts +20 -2
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Browser.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Browser.js +20 -7
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Browser.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/BrowserConnector.js +2 -2
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/BrowserConnector.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.d.ts +8 -2
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.js +26 -8
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Coverage.d.ts +18 -2
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Coverage.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Coverage.js +16 -9
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Coverage.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DOMWorld.d.ts +4 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DOMWorld.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DOMWorld.js +26 -18
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DOMWorld.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DeviceDescriptors.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DeviceDescriptors.js +120 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DeviceDescriptors.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Dialog.js +2 -2
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Dialog.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Errors.d.ts +10 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Errors.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Errors.js +9 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Errors.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EvalTypes.d.ts +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EvalTypes.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EventEmitter.js +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EventEmitter.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js +8 -8
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FileChooser.js +2 -2
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FileChooser.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FrameManager.d.ts +21 -9
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FrameManager.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FrameManager.js +157 -74
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FrameManager.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPRequest.d.ts +5 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPRequest.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPRequest.js +32 -29
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPRequest.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPResponse.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPResponse.js +14 -4
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPResponse.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Input.d.ts +2 -3
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Input.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Input.js +3 -4
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Input.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/JSHandle.d.ts +27 -5
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/JSHandle.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/JSHandle.js +46 -21
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/JSHandle.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/LifecycleWatcher.js +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/LifecycleWatcher.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkManager.d.ts +1 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkManager.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkManager.js +7 -5
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkManager.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/PDFOptions.d.ts +5 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/PDFOptions.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/PDFOptions.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.d.ts +51 -6
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.js +157 -50
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Puppeteer.js +5 -5
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Puppeteer.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Target.d.ts +3 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Target.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Target.js +3 -2
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Target.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/TaskQueue.d.ts +21 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/TaskQueue.d.ts.map +1 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/TaskQueue.js +30 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/TaskQueue.js.map +1 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Tracing.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Tracing.js +9 -3
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Tracing.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/assert.d.ts +1 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/assert.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/assert.js +6 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/assert.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/helper.js +5 -5
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/helper.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/global.d.ts +17 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/global.d.ts.map +1 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/global.js +3 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/global.js.map +1 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserFetcher.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserFetcher.js +20 -21
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserFetcher.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js +11 -5
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/LaunchOptions.d.ts +6 -2
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/LaunchOptions.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Launcher.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Launcher.js +30 -15
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Launcher.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.js +7 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Puppeteer.js +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Puppeteer.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/install.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/install.js +17 -3
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/install.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node-puppeteer-core.js +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node-puppeteer-core.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node.js +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/web.js +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/web.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/AriaQueryHandler.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/AriaQueryHandler.js +5 -5
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/AriaQueryHandler.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Browser.d.ts +20 -2
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Browser.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Browser.js +16 -3
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Browser.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Connection.d.ts +8 -2
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Connection.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Connection.js +23 -5
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Connection.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Coverage.d.ts +18 -2
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Coverage.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Coverage.js +10 -3
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Coverage.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DOMWorld.d.ts +4 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DOMWorld.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DOMWorld.js +16 -8
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DOMWorld.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DeviceDescriptors.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DeviceDescriptors.js +120 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DeviceDescriptors.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Errors.d.ts +10 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Errors.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Errors.js +7 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Errors.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/EvalTypes.d.ts +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/EvalTypes.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FrameManager.d.ts +21 -9
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FrameManager.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FrameManager.js +152 -69
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FrameManager.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPRequest.d.ts +5 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPRequest.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPRequest.js +22 -19
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPRequest.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPResponse.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPResponse.js +14 -4
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPResponse.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Input.d.ts +2 -3
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Input.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Input.js +2 -3
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Input.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/JSHandle.d.ts +27 -5
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/JSHandle.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/JSHandle.js +35 -10
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/JSHandle.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManager.d.ts +1 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManager.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManager.js +6 -4
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManager.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/PDFOptions.d.ts +5 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/PDFOptions.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/PDFOptions.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Page.d.ts +51 -6
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Page.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Page.js +136 -29
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Page.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Target.d.ts +3 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Target.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Target.js +3 -2
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Target.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/TaskQueue.d.ts +21 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/TaskQueue.d.ts.map +1 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/TaskQueue.js +26 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/TaskQueue.js.map +1 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Tracing.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Tracing.js +8 -2
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Tracing.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/assert.d.ts +1 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/assert.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/assert.js +4 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/assert.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/helper.js +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/helper.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/global.d.ts +17 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/global.d.ts.map +1 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/global.js +2 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/global.js.map +1 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserFetcher.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserFetcher.js +9 -10
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserFetcher.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserRunner.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserRunner.js +7 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserRunner.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/LaunchOptions.d.ts +6 -2
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/LaunchOptions.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/Launcher.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/Launcher.js +27 -12
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/Launcher.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/NodeWebSocketTransport.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/NodeWebSocketTransport.js +7 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/NodeWebSocketTransport.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/install.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/install.js +17 -3
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/install.js.map +1 -1
- data/node_modules/puppeteer-core/lib/types.d.ts +3898 -3710
- data/node_modules/puppeteer-core/package.json +35 -41
- data/node_modules/tar-fs/.travis.yml +2 -1
- data/node_modules/tar-fs/README.md +4 -2
- data/node_modules/tar-fs/index.js +11 -8
- data/node_modules/tar-fs/package.json +4 -4
- data/node_modules/tar-fs/test/index.js +1 -1
- data/node_modules/tr46/.npmignore +4 -0
- data/node_modules/tr46/index.js +193 -0
- data/node_modules/tr46/lib/.gitkeep +0 -0
- data/node_modules/tr46/lib/mappingTable.json +1 -0
- data/node_modules/tr46/package.json +31 -0
- data/node_modules/unbzip2-stream/README.md +1 -1
- data/node_modules/unbzip2-stream/dist/unbzip2-stream.min.js +1 -1
- data/node_modules/unbzip2-stream/index.js +3 -2
- data/node_modules/unbzip2-stream/lib/bzip2.js +4 -6
- data/node_modules/unbzip2-stream/package.json +1 -1
- data/node_modules/webidl-conversions/LICENSE.md +12 -0
- data/node_modules/webidl-conversions/README.md +53 -0
- data/node_modules/webidl-conversions/lib/index.js +189 -0
- data/node_modules/webidl-conversions/package.json +23 -0
- data/node_modules/whatwg-url/LICENSE.txt +21 -0
- data/node_modules/whatwg-url/README.md +67 -0
- data/node_modules/whatwg-url/lib/URL-impl.js +200 -0
- data/node_modules/whatwg-url/lib/URL.js +196 -0
- data/node_modules/whatwg-url/lib/public-api.js +11 -0
- data/node_modules/whatwg-url/lib/url-state-machine.js +1297 -0
- data/node_modules/whatwg-url/lib/utils.js +20 -0
- data/node_modules/whatwg-url/package.json +32 -0
- data/node_modules/ws/LICENSE +0 -2
- data/node_modules/ws/README.md +49 -52
- data/node_modules/ws/index.js +3 -0
- data/node_modules/ws/lib/buffer-util.js +3 -6
- data/node_modules/ws/lib/constants.js +3 -1
- data/node_modules/ws/lib/event-target.js +172 -90
- data/node_modules/ws/lib/extension.js +8 -28
- data/node_modules/ws/lib/permessage-deflate.js +10 -16
- data/node_modules/ws/lib/receiver.js +143 -38
- data/node_modules/ws/lib/sender.js +29 -12
- data/node_modules/ws/lib/stream.js +20 -5
- data/node_modules/ws/lib/subprotocol.js +62 -0
- data/node_modules/ws/lib/validation.js +28 -8
- data/node_modules/ws/lib/websocket-server.js +129 -62
- data/node_modules/ws/lib/websocket.js +311 -104
- data/node_modules/ws/package.json +10 -5
- data/node_modules/ws/wrapper.mjs +8 -0
- data/package.json +1 -1
- metadata +83 -61
- data/node_modules/.bin/mkdirp +0 -12
- data/node_modules/.bin/mkdirp.cmd +0 -17
- data/node_modules/.bin/mkdirp.ps1 +0 -28
- data/node_modules/minimist/.travis.yml +0 -8
- data/node_modules/minimist/LICENSE +0 -18
- data/node_modules/minimist/example/parse.js +0 -2
- data/node_modules/minimist/index.js +0 -245
- data/node_modules/minimist/package.json +0 -45
- data/node_modules/minimist/readme.markdown +0 -95
- data/node_modules/minimist/test/all_bool.js +0 -32
- data/node_modules/minimist/test/bool.js +0 -178
- data/node_modules/minimist/test/dash.js +0 -31
- data/node_modules/minimist/test/default_bool.js +0 -35
- data/node_modules/minimist/test/dotted.js +0 -22
- data/node_modules/minimist/test/kv_short.js +0 -16
- data/node_modules/minimist/test/long.js +0 -31
- data/node_modules/minimist/test/num.js +0 -36
- data/node_modules/minimist/test/parse.js +0 -197
- data/node_modules/minimist/test/parse_modified.js +0 -9
- data/node_modules/minimist/test/proto.js +0 -44
- data/node_modules/minimist/test/short.js +0 -67
- data/node_modules/minimist/test/stop_early.js +0 -15
- data/node_modules/minimist/test/unknown.js +0 -102
- data/node_modules/minimist/test/whitespace.js +0 -8
- data/node_modules/mkdirp/bin/cmd.js +0 -33
- data/node_modules/mkdirp/bin/usage.txt +0 -12
- data/node_modules/mkdirp/package.json +0 -34
- data/node_modules/mkdirp/readme.markdown +0 -100
- data/node_modules/node-fetch/CHANGELOG.md +0 -272
|
@@ -1,16 +1,26 @@
|
|
|
1
|
+
/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^net|tls|https$" }] */
|
|
2
|
+
|
|
1
3
|
'use strict';
|
|
2
4
|
|
|
3
5
|
const EventEmitter = require('events');
|
|
6
|
+
const http = require('http');
|
|
7
|
+
const https = require('https');
|
|
8
|
+
const net = require('net');
|
|
9
|
+
const tls = require('tls');
|
|
4
10
|
const { createHash } = require('crypto');
|
|
5
|
-
const { createServer, STATUS_CODES } = require('http');
|
|
6
11
|
|
|
12
|
+
const extension = require('./extension');
|
|
7
13
|
const PerMessageDeflate = require('./permessage-deflate');
|
|
14
|
+
const subprotocol = require('./subprotocol');
|
|
8
15
|
const WebSocket = require('./websocket');
|
|
9
|
-
const { format, parse } = require('./extension');
|
|
10
16
|
const { GUID, kWebSocket } = require('./constants');
|
|
11
17
|
|
|
12
18
|
const keyRegex = /^[+/0-9A-Za-z]{22}==$/;
|
|
13
19
|
|
|
20
|
+
const RUNNING = 0;
|
|
21
|
+
const CLOSING = 1;
|
|
22
|
+
const CLOSED = 2;
|
|
23
|
+
|
|
14
24
|
/**
|
|
15
25
|
* Class representing a WebSocket server.
|
|
16
26
|
*
|
|
@@ -34,7 +44,10 @@ class WebSocketServer extends EventEmitter {
|
|
|
34
44
|
* @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable
|
|
35
45
|
* permessage-deflate
|
|
36
46
|
* @param {Number} [options.port] The port where to bind the server
|
|
37
|
-
* @param {http.Server} [options.server] A pre-created HTTP/S
|
|
47
|
+
* @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S
|
|
48
|
+
* server to use
|
|
49
|
+
* @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or
|
|
50
|
+
* not to skip UTF-8 validation for text and close messages
|
|
38
51
|
* @param {Function} [options.verifyClient] A hook to reject connections
|
|
39
52
|
* @param {Function} [callback] A listener for the `listening` event
|
|
40
53
|
*/
|
|
@@ -43,6 +56,7 @@ class WebSocketServer extends EventEmitter {
|
|
|
43
56
|
|
|
44
57
|
options = {
|
|
45
58
|
maxPayload: 100 * 1024 * 1024,
|
|
59
|
+
skipUTF8Validation: false,
|
|
46
60
|
perMessageDeflate: false,
|
|
47
61
|
handleProtocols: null,
|
|
48
62
|
clientTracking: true,
|
|
@@ -56,15 +70,20 @@ class WebSocketServer extends EventEmitter {
|
|
|
56
70
|
...options
|
|
57
71
|
};
|
|
58
72
|
|
|
59
|
-
if (
|
|
73
|
+
if (
|
|
74
|
+
(options.port == null && !options.server && !options.noServer) ||
|
|
75
|
+
(options.port != null && (options.server || options.noServer)) ||
|
|
76
|
+
(options.server && options.noServer)
|
|
77
|
+
) {
|
|
60
78
|
throw new TypeError(
|
|
61
|
-
'One of the "port", "server", or "noServer" options
|
|
79
|
+
'One and only one of the "port", "server", or "noServer" options ' +
|
|
80
|
+
'must be specified'
|
|
62
81
|
);
|
|
63
82
|
}
|
|
64
83
|
|
|
65
84
|
if (options.port != null) {
|
|
66
|
-
this._server = createServer((req, res) => {
|
|
67
|
-
const body = STATUS_CODES[426];
|
|
85
|
+
this._server = http.createServer((req, res) => {
|
|
86
|
+
const body = http.STATUS_CODES[426];
|
|
68
87
|
|
|
69
88
|
res.writeHead(426, {
|
|
70
89
|
'Content-Length': body.length,
|
|
@@ -95,8 +114,13 @@ class WebSocketServer extends EventEmitter {
|
|
|
95
114
|
}
|
|
96
115
|
|
|
97
116
|
if (options.perMessageDeflate === true) options.perMessageDeflate = {};
|
|
98
|
-
if (options.clientTracking)
|
|
117
|
+
if (options.clientTracking) {
|
|
118
|
+
this.clients = new Set();
|
|
119
|
+
this._shouldEmitClose = false;
|
|
120
|
+
}
|
|
121
|
+
|
|
99
122
|
this.options = options;
|
|
123
|
+
this._state = RUNNING;
|
|
100
124
|
}
|
|
101
125
|
|
|
102
126
|
/**
|
|
@@ -118,37 +142,58 @@ class WebSocketServer extends EventEmitter {
|
|
|
118
142
|
}
|
|
119
143
|
|
|
120
144
|
/**
|
|
121
|
-
*
|
|
145
|
+
* Stop the server from accepting new connections and emit the `'close'` event
|
|
146
|
+
* when all existing connections are closed.
|
|
122
147
|
*
|
|
123
|
-
* @param {Function} [cb]
|
|
148
|
+
* @param {Function} [cb] A one-time listener for the `'close'` event
|
|
124
149
|
* @public
|
|
125
150
|
*/
|
|
126
151
|
close(cb) {
|
|
127
|
-
if (
|
|
152
|
+
if (this._state === CLOSED) {
|
|
153
|
+
if (cb) {
|
|
154
|
+
this.once('close', () => {
|
|
155
|
+
cb(new Error('The server is not running'));
|
|
156
|
+
});
|
|
157
|
+
}
|
|
128
158
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
//
|
|
132
|
-
if (this.clients) {
|
|
133
|
-
for (const client of this.clients) client.terminate();
|
|
159
|
+
process.nextTick(emitClose, this);
|
|
160
|
+
return;
|
|
134
161
|
}
|
|
135
162
|
|
|
136
|
-
|
|
163
|
+
if (cb) this.once('close', cb);
|
|
164
|
+
|
|
165
|
+
if (this._state === CLOSING) return;
|
|
166
|
+
this._state = CLOSING;
|
|
167
|
+
|
|
168
|
+
if (this.options.noServer || this.options.server) {
|
|
169
|
+
if (this._server) {
|
|
170
|
+
this._removeListeners();
|
|
171
|
+
this._removeListeners = this._server = null;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (this.clients) {
|
|
175
|
+
if (!this.clients.size) {
|
|
176
|
+
process.nextTick(emitClose, this);
|
|
177
|
+
} else {
|
|
178
|
+
this._shouldEmitClose = true;
|
|
179
|
+
}
|
|
180
|
+
} else {
|
|
181
|
+
process.nextTick(emitClose, this);
|
|
182
|
+
}
|
|
183
|
+
} else {
|
|
184
|
+
const server = this._server;
|
|
137
185
|
|
|
138
|
-
if (server) {
|
|
139
186
|
this._removeListeners();
|
|
140
187
|
this._removeListeners = this._server = null;
|
|
141
188
|
|
|
142
189
|
//
|
|
143
|
-
//
|
|
190
|
+
// The HTTP/S server was created internally. Close it, and rely on its
|
|
191
|
+
// `'close'` event.
|
|
144
192
|
//
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
193
|
+
server.close(() => {
|
|
194
|
+
emitClose(this);
|
|
195
|
+
});
|
|
149
196
|
}
|
|
150
|
-
|
|
151
|
-
process.nextTick(emitClose, this);
|
|
152
197
|
}
|
|
153
198
|
|
|
154
199
|
/**
|
|
@@ -173,7 +218,8 @@ class WebSocketServer extends EventEmitter {
|
|
|
173
218
|
* Handle a HTTP Upgrade request.
|
|
174
219
|
*
|
|
175
220
|
* @param {http.IncomingMessage} req The request object
|
|
176
|
-
* @param {net.Socket} socket The network socket between the
|
|
221
|
+
* @param {(net.Socket|tls.Socket)} socket The network socket between the
|
|
222
|
+
* server and client
|
|
177
223
|
* @param {Buffer} head The first packet of the upgraded stream
|
|
178
224
|
* @param {Function} cb Callback
|
|
179
225
|
* @public
|
|
@@ -183,10 +229,9 @@ class WebSocketServer extends EventEmitter {
|
|
|
183
229
|
|
|
184
230
|
const key =
|
|
185
231
|
req.headers['sec-websocket-key'] !== undefined
|
|
186
|
-
? req.headers['sec-websocket-key']
|
|
232
|
+
? req.headers['sec-websocket-key']
|
|
187
233
|
: false;
|
|
188
234
|
const version = +req.headers['sec-websocket-version'];
|
|
189
|
-
const extensions = {};
|
|
190
235
|
|
|
191
236
|
if (
|
|
192
237
|
req.method !== 'GET' ||
|
|
@@ -199,7 +244,24 @@ class WebSocketServer extends EventEmitter {
|
|
|
199
244
|
return abortHandshake(socket, 400);
|
|
200
245
|
}
|
|
201
246
|
|
|
202
|
-
|
|
247
|
+
const secWebSocketProtocol = req.headers['sec-websocket-protocol'];
|
|
248
|
+
let protocols = new Set();
|
|
249
|
+
|
|
250
|
+
if (secWebSocketProtocol !== undefined) {
|
|
251
|
+
try {
|
|
252
|
+
protocols = subprotocol.parse(secWebSocketProtocol);
|
|
253
|
+
} catch (err) {
|
|
254
|
+
return abortHandshake(socket, 400);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
const secWebSocketExtensions = req.headers['sec-websocket-extensions'];
|
|
259
|
+
const extensions = {};
|
|
260
|
+
|
|
261
|
+
if (
|
|
262
|
+
this.options.perMessageDeflate &&
|
|
263
|
+
secWebSocketExtensions !== undefined
|
|
264
|
+
) {
|
|
203
265
|
const perMessageDeflate = new PerMessageDeflate(
|
|
204
266
|
this.options.perMessageDeflate,
|
|
205
267
|
true,
|
|
@@ -207,7 +269,7 @@ class WebSocketServer extends EventEmitter {
|
|
|
207
269
|
);
|
|
208
270
|
|
|
209
271
|
try {
|
|
210
|
-
const offers = parse(
|
|
272
|
+
const offers = extension.parse(secWebSocketExtensions);
|
|
211
273
|
|
|
212
274
|
if (offers[PerMessageDeflate.extensionName]) {
|
|
213
275
|
perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);
|
|
@@ -235,7 +297,15 @@ class WebSocketServer extends EventEmitter {
|
|
|
235
297
|
return abortHandshake(socket, code || 401, message, headers);
|
|
236
298
|
}
|
|
237
299
|
|
|
238
|
-
this.completeUpgrade(
|
|
300
|
+
this.completeUpgrade(
|
|
301
|
+
extensions,
|
|
302
|
+
key,
|
|
303
|
+
protocols,
|
|
304
|
+
req,
|
|
305
|
+
socket,
|
|
306
|
+
head,
|
|
307
|
+
cb
|
|
308
|
+
);
|
|
239
309
|
});
|
|
240
310
|
return;
|
|
241
311
|
}
|
|
@@ -243,22 +313,24 @@ class WebSocketServer extends EventEmitter {
|
|
|
243
313
|
if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);
|
|
244
314
|
}
|
|
245
315
|
|
|
246
|
-
this.completeUpgrade(key,
|
|
316
|
+
this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);
|
|
247
317
|
}
|
|
248
318
|
|
|
249
319
|
/**
|
|
250
320
|
* Upgrade the connection to WebSocket.
|
|
251
321
|
*
|
|
252
|
-
* @param {String} key The value of the `Sec-WebSocket-Key` header
|
|
253
322
|
* @param {Object} extensions The accepted extensions
|
|
323
|
+
* @param {String} key The value of the `Sec-WebSocket-Key` header
|
|
324
|
+
* @param {Set} protocols The subprotocols
|
|
254
325
|
* @param {http.IncomingMessage} req The request object
|
|
255
|
-
* @param {net.Socket} socket The network socket between the
|
|
326
|
+
* @param {(net.Socket|tls.Socket)} socket The network socket between the
|
|
327
|
+
* server and client
|
|
256
328
|
* @param {Buffer} head The first packet of the upgraded stream
|
|
257
329
|
* @param {Function} cb Callback
|
|
258
330
|
* @throws {Error} If called more than once with the same socket
|
|
259
331
|
* @private
|
|
260
332
|
*/
|
|
261
|
-
completeUpgrade(key,
|
|
333
|
+
completeUpgrade(extensions, key, protocols, req, socket, head, cb) {
|
|
262
334
|
//
|
|
263
335
|
// Destroy the socket if the client has already sent a FIN packet.
|
|
264
336
|
//
|
|
@@ -271,6 +343,8 @@ class WebSocketServer extends EventEmitter {
|
|
|
271
343
|
);
|
|
272
344
|
}
|
|
273
345
|
|
|
346
|
+
if (this._state > RUNNING) return abortHandshake(socket, 503);
|
|
347
|
+
|
|
274
348
|
const digest = createHash('sha1')
|
|
275
349
|
.update(key + GUID)
|
|
276
350
|
.digest('base64');
|
|
@@ -283,19 +357,14 @@ class WebSocketServer extends EventEmitter {
|
|
|
283
357
|
];
|
|
284
358
|
|
|
285
359
|
const ws = new WebSocket(null);
|
|
286
|
-
let protocol = req.headers['sec-websocket-protocol'];
|
|
287
|
-
|
|
288
|
-
if (protocol) {
|
|
289
|
-
protocol = protocol.split(',').map(trim);
|
|
290
360
|
|
|
361
|
+
if (protocols.size) {
|
|
291
362
|
//
|
|
292
363
|
// Optionally call external protocol selection handler.
|
|
293
364
|
//
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
protocol = protocol[0];
|
|
298
|
-
}
|
|
365
|
+
const protocol = this.options.handleProtocols
|
|
366
|
+
? this.options.handleProtocols(protocols, req)
|
|
367
|
+
: protocols.values().next().value;
|
|
299
368
|
|
|
300
369
|
if (protocol) {
|
|
301
370
|
headers.push(`Sec-WebSocket-Protocol: ${protocol}`);
|
|
@@ -305,7 +374,7 @@ class WebSocketServer extends EventEmitter {
|
|
|
305
374
|
|
|
306
375
|
if (extensions[PerMessageDeflate.extensionName]) {
|
|
307
376
|
const params = extensions[PerMessageDeflate.extensionName].params;
|
|
308
|
-
const value = format({
|
|
377
|
+
const value = extension.format({
|
|
309
378
|
[PerMessageDeflate.extensionName]: [params]
|
|
310
379
|
});
|
|
311
380
|
headers.push(`Sec-WebSocket-Extensions: ${value}`);
|
|
@@ -320,11 +389,20 @@ class WebSocketServer extends EventEmitter {
|
|
|
320
389
|
socket.write(headers.concat('\r\n').join('\r\n'));
|
|
321
390
|
socket.removeListener('error', socketOnError);
|
|
322
391
|
|
|
323
|
-
ws.setSocket(socket, head,
|
|
392
|
+
ws.setSocket(socket, head, {
|
|
393
|
+
maxPayload: this.options.maxPayload,
|
|
394
|
+
skipUTF8Validation: this.options.skipUTF8Validation
|
|
395
|
+
});
|
|
324
396
|
|
|
325
397
|
if (this.clients) {
|
|
326
398
|
this.clients.add(ws);
|
|
327
|
-
ws.on('close', () =>
|
|
399
|
+
ws.on('close', () => {
|
|
400
|
+
this.clients.delete(ws);
|
|
401
|
+
|
|
402
|
+
if (this._shouldEmitClose && !this.clients.size) {
|
|
403
|
+
process.nextTick(emitClose, this);
|
|
404
|
+
}
|
|
405
|
+
});
|
|
328
406
|
}
|
|
329
407
|
|
|
330
408
|
cb(ws, req);
|
|
@@ -360,6 +438,7 @@ function addListeners(server, map) {
|
|
|
360
438
|
* @private
|
|
361
439
|
*/
|
|
362
440
|
function emitClose(server) {
|
|
441
|
+
server._state = CLOSED;
|
|
363
442
|
server.emit('close');
|
|
364
443
|
}
|
|
365
444
|
|
|
@@ -375,7 +454,7 @@ function socketOnError() {
|
|
|
375
454
|
/**
|
|
376
455
|
* Close the connection when preconditions are not fulfilled.
|
|
377
456
|
*
|
|
378
|
-
* @param {net.Socket} socket The socket of the upgrade request
|
|
457
|
+
* @param {(net.Socket|tls.Socket)} socket The socket of the upgrade request
|
|
379
458
|
* @param {Number} code The HTTP response status code
|
|
380
459
|
* @param {String} [message] The HTTP response body
|
|
381
460
|
* @param {Object} [headers] Additional HTTP response headers
|
|
@@ -383,7 +462,7 @@ function socketOnError() {
|
|
|
383
462
|
*/
|
|
384
463
|
function abortHandshake(socket, code, message, headers) {
|
|
385
464
|
if (socket.writable) {
|
|
386
|
-
message = message || STATUS_CODES[code];
|
|
465
|
+
message = message || http.STATUS_CODES[code];
|
|
387
466
|
headers = {
|
|
388
467
|
Connection: 'close',
|
|
389
468
|
'Content-Type': 'text/html',
|
|
@@ -392,7 +471,7 @@ function abortHandshake(socket, code, message, headers) {
|
|
|
392
471
|
};
|
|
393
472
|
|
|
394
473
|
socket.write(
|
|
395
|
-
`HTTP/1.1 ${code} ${STATUS_CODES[code]}\r\n` +
|
|
474
|
+
`HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r\n` +
|
|
396
475
|
Object.keys(headers)
|
|
397
476
|
.map((h) => `${h}: ${headers[h]}`)
|
|
398
477
|
.join('\r\n') +
|
|
@@ -404,15 +483,3 @@ function abortHandshake(socket, code, message, headers) {
|
|
|
404
483
|
socket.removeListener('error', socketOnError);
|
|
405
484
|
socket.destroy();
|
|
406
485
|
}
|
|
407
|
-
|
|
408
|
-
/**
|
|
409
|
-
* Remove whitespace characters from both ends of a string.
|
|
410
|
-
*
|
|
411
|
-
* @param {String} str The string
|
|
412
|
-
* @return {String} A new string representing `str` stripped of whitespace
|
|
413
|
-
* characters from both its beginning and end
|
|
414
|
-
* @private
|
|
415
|
-
*/
|
|
416
|
-
function trim(str) {
|
|
417
|
-
return str.trim();
|
|
418
|
-
}
|