-
Notifications
You must be signed in to change notification settings - Fork 220
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
744 additions
and
662 deletions.
There are no files selected for viewing
113 changes: 62 additions & 51 deletions
113
packages/jsreport-core/test/extensions/validExtensions/listeners/main.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,51 +1,62 @@ | ||
|
||
module.exports = (reporter, definition) => { | ||
reporter.tests = reporter.tests || {} | ||
reporter.tests.beforeRenderListeners = reporter.createListenerCollection() | ||
reporter.tests.afterRenderListeners = reporter.createListenerCollection() | ||
reporter.tests.validateRenderListeners = reporter.createListenerCollection() | ||
reporter.tests.afterTemplatingEnginesExecutedListeners = reporter.createListenerCollection() | ||
|
||
reporter.registerMainAction('test-beforeRender-listeners', async (data, req) => { | ||
data.req = reporter.Request(data.req) | ||
await reporter.tests.beforeRenderListeners.fire(data.req, data.res) | ||
return { req: data.req, res: data.res } | ||
}) | ||
reporter.registerMainAction('test-afterRender-listeners', async (data, req) => { | ||
data.req = reporter.Request(data.req) | ||
await reporter.tests.afterRenderListeners.fire(data.req, data.res) | ||
return { req: data.req, res: data.res } | ||
}) | ||
reporter.registerMainAction('test-validateRender-listeners', async (data, req) => { | ||
data.req = reporter.Request(data.req) | ||
await reporter.tests.validateRenderListeners.fire(data.req, data.res) | ||
return { req: data.req, res: data.res } | ||
}) | ||
reporter.registerMainAction('test-afterTemplatingEnginesExecuted-listeners', async (data, req) => { | ||
data.req = reporter.Request(data.req) | ||
await reporter.tests.afterTemplatingEnginesExecutedListeners.fire(data.req, data.res) | ||
return { req: data.req, res: data.res } | ||
}) | ||
|
||
let beforeRenderEval | ||
reporter.tests.beforeRenderEval = (fn) => { | ||
beforeRenderEval = fn | ||
} | ||
reporter.registerMainAction('test-beforeRenderEval', async (data, req) => { | ||
if (beforeRenderEval == null) { | ||
return | ||
} | ||
return beforeRenderEval.toString() | ||
}) | ||
|
||
let afterRenderEval | ||
reporter.tests.afterRenderEval = (fn) => { | ||
afterRenderEval = fn | ||
} | ||
reporter.registerMainAction('test-afterRenderEval', async (data, req) => { | ||
if (afterRenderEval == null) { | ||
return | ||
} | ||
return afterRenderEval.toString() | ||
}) | ||
} | ||
|
||
module.exports = (reporter, definition) => { | ||
reporter.tests = reporter.tests || {} | ||
reporter.tests.beforeRenderListeners = reporter.createListenerCollection() | ||
reporter.tests.afterRenderListeners = reporter.createListenerCollection() | ||
reporter.tests.validateRenderListeners = reporter.createListenerCollection() | ||
reporter.tests.afterTemplatingEnginesExecutedListeners = reporter.createListenerCollection() | ||
|
||
reporter.registerMainAction('test-beforeRender-listeners', async (data, req) => { | ||
data.req = reporter.Request(data.req) | ||
await reporter.tests.beforeRenderListeners.fire(data.req, data.res) | ||
return { req: data.req, res: data.res } | ||
}) | ||
reporter.registerMainAction('test-afterRender-listeners', async (data, req) => { | ||
data.req = reporter.Request(data.req) | ||
await reporter.tests.afterRenderListeners.fire(data.req, data.res) | ||
return { req: data.req, res: data.res } | ||
}) | ||
reporter.registerMainAction('test-validateRender-listeners', async (data, req) => { | ||
data.req = reporter.Request(data.req) | ||
await reporter.tests.validateRenderListeners.fire(data.req, data.res) | ||
return { req: data.req, res: data.res } | ||
}) | ||
reporter.registerMainAction('test-afterTemplatingEnginesExecuted-listeners', async (data, req) => { | ||
data.req = reporter.Request(data.req) | ||
await reporter.tests.afterTemplatingEnginesExecutedListeners.fire(data.req, data.res) | ||
return { req: data.req, res: data.res } | ||
}) | ||
|
||
let beforeRenderEval | ||
reporter.tests.beforeRenderEval = (fn) => { | ||
beforeRenderEval = fn | ||
} | ||
reporter.registerMainAction('test-beforeRenderEval', async (data, req) => { | ||
if (beforeRenderEval == null) { | ||
return | ||
} | ||
return beforeRenderEval.toString() | ||
}) | ||
|
||
let afterRenderEval | ||
reporter.tests.afterRenderEval = (fn) => { | ||
afterRenderEval = fn | ||
} | ||
reporter.registerMainAction('test-afterRenderEval', async (data, req) => { | ||
if (afterRenderEval == null) { | ||
return | ||
} | ||
return afterRenderEval.toString() | ||
}) | ||
|
||
let afterTemplatingEnginesExecutedEval | ||
reporter.tests.afterTemplatingEnginesExecutedEval = (fn) => { | ||
afterTemplatingEnginesExecutedEval = fn | ||
} | ||
reporter.registerMainAction('test-afterTemplatingEnginesExecutedEval', async (data, req) => { | ||
if (afterTemplatingEnginesExecutedEval == null) { | ||
return | ||
} | ||
return afterTemplatingEnginesExecutedEval.toString() | ||
}) | ||
} |
155 changes: 81 additions & 74 deletions
155
packages/jsreport-core/test/extensions/validExtensions/listeners/worker.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,74 +1,81 @@ | ||
const extend = require('node.extend.without.arrays') | ||
const vm = require('vm') | ||
const Module = require('module') | ||
const path = require('path') | ||
const process = require('process') | ||
|
||
module.exports = (reporter, definition) => { | ||
reporter.initializeListeners.add('test-listeners', () => { | ||
reporter.beforeRenderListeners.add('listeners', async (req, res) => { | ||
const result = await reporter.executeMainAction('test-beforeRender-listeners', { req, res }, req) | ||
extend(true, req, result.req) | ||
extend(true, res, result.res) | ||
}) | ||
|
||
reporter.afterRenderListeners.add('listeners', async (req, res) => { | ||
const result = await reporter.executeMainAction('test-afterRender-listeners', { req, res }, req) | ||
extend(true, req, result.req) | ||
extend(true, res, result.res) | ||
}) | ||
|
||
reporter.validateRenderListeners.add('listeners', async (req, res) => { | ||
const result = await reporter.executeMainAction('test-validateRender-listeners', { req, res }, req) | ||
extend(true, req, result.req) | ||
extend(true, res, result.res) | ||
}) | ||
|
||
reporter.afterTemplatingEnginesExecutedListeners.add('listeners', async (req, res) => { | ||
const result = await reporter.executeMainAction('test-afterTemplatingEnginesExecuted-listeners', { req, res }, req) | ||
extend(true, req, result.req) | ||
extend(true, res, result.res) | ||
}) | ||
|
||
const evalInWorker = (code, req, res) => { | ||
const script = new vm.Script(` | ||
;(function () { | ||
return ${code} | ||
})() | ||
`) | ||
|
||
return script.runInThisContext({ | ||
displayErrors: true | ||
})(req, res, { | ||
mainModuleFilename: require.main.filename, | ||
require: (m) => { | ||
if (Module.builtinModules.includes(m)) { | ||
return require(m) | ||
} | ||
|
||
try { | ||
return require(path.join(process.cwd(), 'node_modules', m)) | ||
} catch (e) { | ||
// hack, make it working in monorepo as well as normal extension | ||
return require(path.join(process.cwd(), '../../node_modules', m)) | ||
} | ||
}, | ||
reporter | ||
}) | ||
} | ||
|
||
reporter.afterRenderListeners.add('eval-listeners', async (req, res) => { | ||
const code = await reporter.executeMainAction('test-afterRenderEval', {}, req) | ||
if (code) { | ||
return evalInWorker(code, req, res) | ||
} | ||
}) | ||
|
||
reporter.beforeRenderListeners.insert(0, 'eval-listeners', async (req, res) => { | ||
const code = await reporter.executeMainAction('test-beforeRenderEval', {}, req) | ||
if (code) { | ||
return evalInWorker(code, req, res) | ||
} | ||
}) | ||
}) | ||
} | ||
const extend = require('node.extend.without.arrays') | ||
const vm = require('vm') | ||
const Module = require('module') | ||
const path = require('path') | ||
const process = require('process') | ||
|
||
module.exports = (reporter, definition) => { | ||
reporter.initializeListeners.add('test-listeners', () => { | ||
reporter.beforeRenderListeners.add('listeners', async (req, res) => { | ||
const result = await reporter.executeMainAction('test-beforeRender-listeners', { req, res }, req) | ||
extend(true, req, result.req) | ||
extend(true, res, result.res) | ||
}) | ||
|
||
reporter.afterRenderListeners.add('listeners', async (req, res) => { | ||
const result = await reporter.executeMainAction('test-afterRender-listeners', { req, res }, req) | ||
extend(true, req, result.req) | ||
extend(true, res, result.res) | ||
}) | ||
|
||
reporter.validateRenderListeners.add('listeners', async (req, res) => { | ||
const result = await reporter.executeMainAction('test-validateRender-listeners', { req, res }, req) | ||
extend(true, req, result.req) | ||
extend(true, res, result.res) | ||
}) | ||
|
||
reporter.afterTemplatingEnginesExecutedListeners.add('listeners', async (req, res) => { | ||
const result = await reporter.executeMainAction('test-afterTemplatingEnginesExecuted-listeners', { req, res }, req) | ||
extend(true, req, result.req) | ||
extend(true, res, result.res) | ||
}) | ||
|
||
const evalInWorker = (code, req, res) => { | ||
const script = new vm.Script(` | ||
;(function () { | ||
return ${code} | ||
})() | ||
`) | ||
|
||
return script.runInThisContext({ | ||
displayErrors: true | ||
})(req, res, { | ||
mainModuleFilename: require.main.filename, | ||
require: (m) => { | ||
if (Module.builtinModules.includes(m)) { | ||
return require(m) | ||
} | ||
|
||
try { | ||
return require(path.join(process.cwd(), 'node_modules', m)) | ||
} catch (e) { | ||
// hack, make it working in monorepo as well as normal extension | ||
return require(path.join(process.cwd(), '../../node_modules', m)) | ||
} | ||
}, | ||
reporter | ||
}) | ||
} | ||
|
||
reporter.afterRenderListeners.add('eval-listeners', async (req, res) => { | ||
const code = await reporter.executeMainAction('test-afterRenderEval', {}, req) | ||
if (code) { | ||
return evalInWorker(code, req, res) | ||
} | ||
}) | ||
|
||
reporter.beforeRenderListeners.insert(0, 'eval-listeners', async (req, res) => { | ||
const code = await reporter.executeMainAction('test-beforeRenderEval', {}, req) | ||
if (code) { | ||
return evalInWorker(code, req, res) | ||
} | ||
}) | ||
|
||
reporter.afterTemplatingEnginesExecutedListeners.add('eval-listeners', async (req, res) => { | ||
const code = await reporter.executeMainAction('test-afterTemplatingEnginesExecutedEval', {}, req) | ||
if (code) { | ||
return evalInWorker(code, req, res) | ||
} | ||
}) | ||
}) | ||
} |
Oops, something went wrong.