@contrast/rewriter 1.0.0 → 1.0.1
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.
- package/package.json +2 -2
- package/lib/index.test.js +0 -102
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contrast/rewriter",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "A transpilation tool mainly used for instrumentation",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"author": "Contrast Security <nodejs@contrastsecurity.com> (https://www.contrastsecurity.com)",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"main": "lib/index.js",
|
|
11
11
|
"types": "lib/index.d.ts",
|
|
12
12
|
"engines": {
|
|
13
|
-
"npm": ">= 8.4.0",
|
|
13
|
+
"npm": ">=6.13.7 <7 || >= 8.4.0",
|
|
14
14
|
"node": ">= 14.15.0"
|
|
15
15
|
},
|
|
16
16
|
"scripts": {
|
package/lib/index.test.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const { expect } = require('chai');
|
|
4
|
-
const sinon = require('sinon');
|
|
5
|
-
|
|
6
|
-
describe('rewriter', function() {
|
|
7
|
-
let core;
|
|
8
|
-
let visitorSpy;
|
|
9
|
-
let rewriter;
|
|
10
|
-
|
|
11
|
-
beforeEach(function() {
|
|
12
|
-
const mocks = require('../../test/mocks');
|
|
13
|
-
core = mocks.core();
|
|
14
|
-
core.config = mocks.config();
|
|
15
|
-
core.logger = mocks.logger();
|
|
16
|
-
visitorSpy = sinon.spy();
|
|
17
|
-
|
|
18
|
-
const factory = require('.');
|
|
19
|
-
rewriter = factory(core);
|
|
20
|
-
rewriter.visitors.push(visitorSpy);
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
// these baseline values don't have trailing semicolons
|
|
25
|
-
const content = 'eval(\'3\')';
|
|
26
|
-
const rewrittenContent = 'eval(global.ContrastMethods.eval(\'3\'))';
|
|
27
|
-
|
|
28
|
-
describe('rewrite()', function() {
|
|
29
|
-
[
|
|
30
|
-
{
|
|
31
|
-
content,
|
|
32
|
-
rewrittenContent,
|
|
33
|
-
desc: 'no spurious trailing semicolons are added',
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
content: `${content};`,
|
|
37
|
-
rewrittenContent: `${rewrittenContent};`,
|
|
38
|
-
desc: 'trailing semicolons are preserved',
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
content: 'foo',
|
|
42
|
-
rewrittenContent: 'foo',
|
|
43
|
-
desc: 'code is unaltered if no contrast methods need rewriting',
|
|
44
|
-
rawMappings: { length: 2 },
|
|
45
|
-
visitorsCall: 3
|
|
46
|
-
}
|
|
47
|
-
].forEach(({ content, rewrittenContent, desc, rawMappings, visitorsCall }) => {
|
|
48
|
-
it(`rewrites successfully and ${desc}`, function() {
|
|
49
|
-
const result = rewriter.rewrite(content);
|
|
50
|
-
expect(result.code).eql(rewrittenContent);
|
|
51
|
-
expect(result.map).ok;
|
|
52
|
-
expect(result.rawMappings).lengthOf(rawMappings ? rawMappings.length : 5);
|
|
53
|
-
expect(visitorSpy.getCalls().length).eql(visitorsCall || 11);
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
describe('unwrite()', function() {
|
|
59
|
-
[
|
|
60
|
-
{
|
|
61
|
-
content,
|
|
62
|
-
rewrittenContent,
|
|
63
|
-
desc: 'no spurious trailing semicolons are added'
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
content: `${content};`,
|
|
67
|
-
rewrittenContent: `${rewrittenContent};`,
|
|
68
|
-
desc: 'trailing semicolons are preserved'
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
content,
|
|
72
|
-
rewrittenContent: content,
|
|
73
|
-
desc: 'code is unaltered if no contrast methods need unwriting',
|
|
74
|
-
},
|
|
75
|
-
].forEach(({ content, rewrittenContent, desc }) => {
|
|
76
|
-
it(`unwrites successfully and ${desc}`, function() {
|
|
77
|
-
const ret = rewriter.unwrite(rewrittenContent);
|
|
78
|
-
expect(ret).eql(content);
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
describe('option: wrap', function() {
|
|
84
|
-
it('{ wrap: true } will add "Module.wrap" IIFE to', function () {
|
|
85
|
-
const result = rewriter.rewrite(content, { wrap: true });
|
|
86
|
-
expect(result.code).eql(`(function (exports, require, module, __filename, __dirname) {
|
|
87
|
-
${rewrittenContent};
|
|
88
|
-
}).apply(this, arguments)`);
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
describe('option: inject', function() {
|
|
93
|
-
it('{ inject: true } will add contrast method declarations', function() {
|
|
94
|
-
const result = rewriter.rewrite(content, { inject: true });
|
|
95
|
-
expect(result.code).eql(`const ContrastMethods = global.ContrastMethods || (() => {
|
|
96
|
-
throw new SyntaxError('ContrastMethods undefined during compilation');
|
|
97
|
-
})();
|
|
98
|
-
|
|
99
|
-
${rewrittenContent}`);
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
});
|