Skip to content
This repository was archived by the owner on Dec 2, 2024. It is now read-only.

Commit da6cdbe

Browse files
committed
Add ApexCustomModifier
Plugin prettier + stricter tsconfig + test with sample output
1 parent 55c8ff2 commit da6cdbe

24 files changed

+2082
-274
lines changed

package-lock.json

Lines changed: 906 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,7 @@
66
"type": "git",
77
"url": "git+https://github.com/coveo/visualforce-html-webpack-plugin.git"
88
},
9-
"keywords": [
10-
"coveo",
11-
"visualforce",
12-
"webpack",
13-
"salesforce",
14-
"apex"
15-
],
9+
"keywords": ["coveo", "visualforce", "webpack", "salesforce", "apex"],
1610
"author": "Coveo <sandbox_JSUI@coveo.com> (http://source.coveo.com/)",
1711
"license": "Apache-2.0",
1812
"bugs": {
@@ -21,22 +15,28 @@
2115
"homepage": "https://github.com/coveo/visualforce-html-webpack-plugin#readme",
2216
"main": "dist/index.js",
2317
"scripts": {
24-
"build": "webpack"
18+
"build": "webpack",
19+
"precommit": "lint-staged"
2520
},
26-
"files": [
27-
"dist",
28-
"src"
29-
],
21+
"lint-staged": {
22+
"*.{js,ts,json}": ["prettier --write", "git add"]
23+
},
24+
"prettier": {
25+
"printWidth": 140,
26+
"singleQuote": true
27+
},
28+
"files": ["dist", "src"],
3029
"devDependencies": {
31-
"@types/glob": "^5.0.30",
32-
"@types/node": "^7.0.23",
33-
"@types/promise": "^7.1.30",
30+
"@types/glob": "^5.0.32",
31+
"@types/node": "^8.0.28",
32+
"husky": "^0.14.3",
33+
"lint-staged": "^4.2.1",
34+
"prettier": "^1.7.0",
3435
"ts-loader": "^2.3.2",
3536
"typescript": "^2.3.4"
3637
},
3738
"dependencies": {
3839
"glob": "^7.1.2",
39-
"promise": "^7.1.1",
40-
"cheerio": "^1.0.0-rc.2"
40+
"promise": "^7.1.1"
4141
}
42-
}
42+
}

src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
import { VisualforceHtmlPlugin } from './visualforceHtmlPlugin'
2-
export = VisualforceHtmlPlugin;
1+
import { VisualforceHtmlPlugin } from './visualforceHtmlPlugin';
2+
export = VisualforceHtmlPlugin;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import Promise = require('promise');
2+
import { IModifier, IAsset } from './modifier';
3+
4+
export type ICustomModifier = { [regexkey: string]: string };
5+
6+
export const ApexCustomModifier: IModifier<string, string> = (asset: IAsset<string>, regexes: ICustomModifier) => {
7+
return new Promise<IAsset<string>>((resolve, reject) => {
8+
Object.keys(regexes).forEach(regexkey => {
9+
const reg = new RegExp(regexkey, 'g');
10+
const matches = reg.exec(asset.data);
11+
if (matches) {
12+
if (matches.length == 1) {
13+
asset.data = asset.data.replace(reg, regexes[regexkey]);
14+
}
15+
}
16+
});
17+
18+
resolve(asset);
19+
});
20+
};
Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,15 @@
1-
import cheerio = require('cheerio')
21
import Promise = require('promise');
3-
import { IModifier, IAsset } from './modifier'
2+
import { IModifier, IAsset } from './modifier';
43

5-
export var ApexIncludeScriptModifier: IModifier<string, string> = (asset: IAsset<string>) => {
6-
return new Promise<IAsset<string>>((resolve, reject) => {
7-
var reg = new RegExp("<apex:includeScript value=\"(.*?)\" \/>", "g");
8-
var assetData = asset.data;
9-
var result: RegExpExecArray;
4+
export const ApexIncludeScriptModifier: IModifier<string, string> = (asset: IAsset<string>) => {
5+
return new Promise<IAsset<string>>((resolve, reject) => {
6+
const reg = new RegExp('<apex:includeScript value="(.*?)" />', 'g');
7+
let result: RegExpExecArray | null;
108

11-
while ((result = reg.exec(asset.data)) !== null) {
12-
assetData = assetData.replace(result[0],
13-
`<script src='${result[1]}' type='application/javascript'></script>`);
14-
}
9+
while ((result = reg.exec(asset.data)) !== null) {
10+
asset.data = asset.data.replace(result[0], `<script src='${result[1]}' type='application/javascript'></script>`);
11+
}
1512

16-
resolve({
17-
...asset,
18-
data: assetData
19-
});
20-
})
21-
}
13+
resolve(asset);
14+
});
15+
};
Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,14 @@
11
import Promise = require('promise');
2-
import { IModifier, IAsset } from './modifier'
2+
import { IModifier, IAsset } from './modifier';
33

4-
export var ApexResourcesModifier: IModifier<string, string> = (asset: IAsset<string>, resources: { [resource: string]: string }) => {
5-
return new Promise<IAsset<string>>((resolve, reject) => {
6-
if (resources) {
7-
var result = asset.data;
8-
9-
Object.keys(resources).forEach(r => {
10-
var reg = new RegExp(`\\$Resource\\.${r}`, 'g');
11-
result = result.replace(reg, `'${resources[r]}'`);
12-
});
13-
}
14-
15-
resolve({
16-
...asset,
17-
data: result
18-
});
19-
})
20-
}
4+
export const ApexResourcesModifier: IModifier<string, string> = (asset: IAsset<string>, resources: { [resource: string]: string }) => {
5+
return new Promise<IAsset<string>>((resolve, reject) => {
6+
if (resources) {
7+
Object.keys(resources).forEach(r => {
8+
const reg = new RegExp(`\\$Resource\\.${r}`, 'g');
9+
asset.data = asset.data.replace(reg, `'${resources[r]}'`);
10+
});
11+
}
12+
resolve(asset);
13+
});
14+
};
Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,14 @@
1-
import cheerio = require('cheerio')
21
import Promise = require('promise');
3-
import { IModifier, IAsset } from './modifier'
4-
5-
export var ApexStylesheetModifier: IModifier<string, string> = (asset: IAsset<string>) => {
6-
return new Promise<IAsset<string>>((resolve, reject) => {
7-
8-
var reg = new RegExp("<apex:stylesheet value=\"(.*?)\" \/>", "g");
9-
var assetData = asset.data;
10-
var result: RegExpExecArray;
11-
12-
while ((result = reg.exec(asset.data)) !== null) {
13-
assetData = assetData.replace(result[0],
14-
`<link href='${result[1]}' rel='stylesheet' type='text/css' />`);
15-
}
16-
17-
resolve({
18-
...asset,
19-
data: assetData
20-
});
21-
})
22-
}
2+
import { IModifier, IAsset } from './modifier';
3+
4+
export const ApexStylesheetModifier: IModifier<string, string> = (asset: IAsset<string>) => {
5+
return new Promise<IAsset<string>>((resolve, reject) => {
6+
const reg = new RegExp('<apex:stylesheet value="(.*?)" />', 'g');
7+
let result: RegExpExecArray | null;
8+
9+
while ((result = reg.exec(asset.data)) !== null) {
10+
asset.data = asset.data.replace(result[0], `<link href='${result[1]}' rel='stylesheet' type='text/css' />`);
11+
}
12+
resolve(asset);
13+
});
14+
};
Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,28 @@
11
import Promise = require('promise');
2-
import { IModifier, IAsset } from './modifier'
2+
import { IModifier, IAsset } from './modifier';
33

4-
export var ApexSyntaxCleanModifier: IModifier<string, string> = (asset: IAsset<string>) => {
5-
return new Promise<IAsset<string>>((resolve, reject) => {
6-
var reg = /{!(.*)}/g
7-
var assetData = asset.data;
8-
var result: RegExpExecArray;
4+
export const ApexSyntaxCleanModifier: IModifier<string, string> = (asset: IAsset<string>) => {
5+
return new Promise<IAsset<string>>((resolve, reject) => {
6+
let reg = /{!(.*)}/g;
7+
let result: RegExpExecArray | null;
98

10-
while ((result = reg.exec(asset.data)) !== null) {
11-
assetData = assetData.replace(result[0], result[1]);
12-
}
9+
while ((result = reg.exec(asset.data)) !== null) {
10+
asset.data = asset.data.replace(result[0], result[1]);
11+
}
1312

14-
reg = /<apex:page(.*?)>/g;
15-
while ((result = reg.exec(assetData)) !== null) {
16-
assetData = assetData.replace(result[0], "");
17-
}
13+
reg = /<apex:page(.*?)>/g;
14+
while ((result = reg.exec(asset.data)) !== null) {
15+
asset.data = asset.data.replace(result[0], '');
16+
}
1817

19-
reg = /<\/apex:page>/g;
20-
while ((result = reg.exec(assetData)) !== null) {
21-
assetData = assetData.replace(result[0], "");
22-
}
18+
reg = /<\/apex:page>/g;
19+
while ((result = reg.exec(asset.data)) !== null) {
20+
asset.data = asset.data.replace(result[0], '');
21+
}
2322

24-
resolve({
25-
...asset,
26-
data: '<html><body>' + assetData + "</body></html>"
27-
});
28-
})
29-
}
23+
resolve({
24+
...asset,
25+
data: `<html><body>${asset.data}</body></html>`
26+
});
27+
});
28+
};
Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,14 @@
11
import Promise = require('promise');
2-
import { IModifier, IAsset } from './modifier'
2+
import { IModifier, IAsset } from './modifier';
33

4-
export var ApexUrlforModifier: IModifier<string, string> = (asset: IAsset<string>) => {
5-
return new Promise<IAsset<string>>((resolve, reject) => {
6-
var reg = /URLFOR\('(\S*)',\s*'(\S*)'\)/g
7-
var assetData = asset.data;
8-
var result: RegExpExecArray;
4+
export const ApexUrlforModifier: IModifier<string, string> = (asset: IAsset<string>) => {
5+
return new Promise<IAsset<string>>((resolve, reject) => {
6+
const reg = /URLFOR\('(\S*)',\s*'(\S*)'\)/g;
7+
let result: RegExpExecArray | null;
8+
while ((result = reg.exec(asset.data)) !== null) {
9+
asset.data = asset.data.replace(result[0], result[1] + result[2]);
10+
}
911

10-
while ((result = reg.exec(asset.data)) !== null) {
11-
assetData = assetData.replace(result[0],
12-
result[1] + result[2]);
13-
}
14-
15-
resolve({
16-
...asset,
17-
data: assetData
18-
});
19-
})
20-
}
12+
resolve(asset);
13+
});
14+
};
Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,46 @@
11
import Promise = require('promise');
22
import fs = require('fs');
3-
import { IModifier, IAsset } from './modifier'
3+
import { IModifier, IAsset } from './modifier';
44

5-
export var ApexVariablesModifier: IModifier<string, string> = (asset: IAsset<string>, compilation: any, controllers: { [controller: string]: any }) => {
6-
return new Promise<IAsset<string>>((resolve, reject) => {
7-
if (controllers) {
8-
var assetData = asset.data;
9-
var reg = /<apex:page.*controller="([a-zA-Z0-9]*)".*>/g
10-
var result = reg.exec(asset.data)
11-
12-
13-
if (result) {
14-
var controller = controllers[result[1]];
15-
if (controller) {
16-
Object.keys(controller).forEach(variable => {
17-
reg = new RegExp(`{!.*?${variable}.*?}`, 'g');
5+
export const ApexVariablesModifier: IModifier<string, string> = (
6+
asset: IAsset<string>,
7+
compilation: any,
8+
controllers: { [controller: string]: any }
9+
) => {
10+
return new Promise<IAsset<string>>((resolve, reject) => {
11+
if (controllers) {
12+
let reg = /<apex:page.*controller="([a-zA-Z0-9]*)".*>/g;
13+
let result = reg.exec(asset.data);
1814

19-
while ((result = reg.exec(asset.data)) !== null) {
20-
var data = controller[variable];
21-
var value;
15+
if (result) {
16+
const controller = controllers[result[1]];
17+
if (controller) {
18+
Object.keys(controller).forEach(variable => {
19+
reg = new RegExp(`{!.*?${variable}.*?}`, 'g');
2220

23-
if (typeof data === 'object' && data.file) {
24-
try {
25-
value = fs.readFileSync(data.file, 'UTF-8');
26-
} catch (ex) {
27-
console.log(ex);
28-
}
21+
while ((result = reg.exec(asset.data)) !== null) {
22+
const data = controller[variable];
23+
let value;
2924

30-
} else if (typeof data === 'string') {
31-
value = data;
32-
}
33-
34-
if (value) {
35-
assetData = assetData.replace(result[0], value);
36-
}
37-
}
38-
});
25+
if (typeof data === 'object' && data.file) {
26+
try {
27+
value = fs.readFileSync(data.file, 'UTF-8');
28+
} catch (ex) {
29+
console.log(ex);
3930
}
31+
} else if (typeof data === 'string') {
32+
value = data;
33+
}
34+
35+
if (value) {
36+
asset.data = asset.data.replace(result[0], value);
37+
}
4038
}
39+
});
4140
}
41+
}
42+
}
4243

43-
resolve({
44-
...asset,
45-
data: assetData
46-
});
47-
})
48-
}
44+
resolve(asset);
45+
});
46+
};

0 commit comments

Comments
 (0)