'use strict'; require('../common'); const assert = require('assert'); const { registerHooks } = require('module'); // This tests that the source in the load hook can be returned as // array buffers or array buffer views. const arrayBufferSource = 'module.exports = "arrayBuffer"'; const arrayBufferViewSource = 'module.exports = "arrayBufferView"'; const encoder = new TextEncoder(); const hook1 = registerHooks({ resolve(specifier, context, nextResolve) { return { shortCircuit: true, url: `test://${specifier}` }; }, load(url, context, nextLoad) { const result = nextLoad(url, context); if (url === 'test://array_buffer') { assert.deepStrictEqual(result.source, encoder.encode(arrayBufferSource).buffer); } else if (url === 'test://array_buffer_view') { assert.deepStrictEqual(result.source, encoder.encode(arrayBufferViewSource)); } return result; }, }); const hook2 = registerHooks({ load(url, context, nextLoad) { if (url === 'test://array_buffer') { return { shortCircuit: true, source: encoder.encode(arrayBufferSource).buffer, }; } else if (url === 'test://array_buffer_view') { return { shortCircuit: true, source: encoder.encode(arrayBufferViewSource), }; } assert.fail('unreachable'); }, }); assert.strictEqual(require('array_buffer'), 'arrayBuffer'); assert.strictEqual(require('array_buffer_view'), 'arrayBufferView'); hook1.deregister(); hook2.deregister();