@namecheap/tailorx
Advanced tools
Comparing version 7.0.1 to 8.0.0
'use strict'; | ||
const path = require('path'); | ||
const url = require('url'); | ||
const fs = require('fs'); | ||
const promisify = require('util.promisify'); | ||
const path = require('node:path'); | ||
const url = require('node:url'); | ||
const { | ||
readFile: readFilePromise, | ||
lstat: lstatPromise | ||
} = require('node:fs/promises'); | ||
@@ -26,8 +28,2 @@ const TEMPLATE_ERROR = 0; | ||
/** | ||
* Promisify the functions | ||
*/ | ||
const readFilePromise = promisify(fs.readFile); | ||
const lstatPromise = promisify(fs.lstat); | ||
/** | ||
* Read the file from File System | ||
@@ -101,32 +97,33 @@ * | ||
*/ | ||
module.exports = (templatesPath, baseTemplateFn) => ( | ||
request, | ||
parseTemplate | ||
) => { | ||
const pathname = getPathName(request); | ||
module.exports = | ||
(templatesPath, baseTemplateFn) => (request, parseTemplate) => { | ||
const pathname = getPathName(request); | ||
return getTemplatePath(templatesPath, pathname).then(templateStat => { | ||
return readFile(templateStat.path).then(baseTemplate => { | ||
if (templateStat.isFile || typeof baseTemplateFn !== 'function') { | ||
return parseTemplate(baseTemplate); | ||
} | ||
return getTemplatePath(templatesPath, pathname).then(templateStat => { | ||
return readFile(templateStat.path).then(baseTemplate => { | ||
if ( | ||
templateStat.isFile || | ||
typeof baseTemplateFn !== 'function' | ||
) { | ||
return parseTemplate(baseTemplate); | ||
} | ||
const templateName = baseTemplateFn(pathname); | ||
if (!templateName) { | ||
return parseTemplate(baseTemplate); | ||
} | ||
const templateName = baseTemplateFn(pathname); | ||
if (!templateName) { | ||
return parseTemplate(baseTemplate); | ||
} | ||
const pageTemplate = baseTemplate; | ||
const baseTemplatePath = factoryFilePath( | ||
templatesPath, | ||
templateName | ||
); | ||
return readFile(baseTemplatePath).then(baseTemplate => | ||
parseTemplate(baseTemplate, pageTemplate) | ||
); | ||
const pageTemplate = baseTemplate; | ||
const baseTemplatePath = factoryFilePath( | ||
templatesPath, | ||
templateName | ||
); | ||
return readFile(baseTemplatePath).then(baseTemplate => | ||
parseTemplate(baseTemplate, pageTemplate) | ||
); | ||
}); | ||
}); | ||
}); | ||
}; | ||
}; | ||
module.exports.TEMPLATE_ERROR = TEMPLATE_ERROR; | ||
module.exports.TEMPLATE_NOT_FOUND = TEMPLATE_NOT_FOUND; |
@@ -32,55 +32,56 @@ 'use strict'; | ||
*/ | ||
module.exports = (filterHeaders, processFragmentResponse) => ( | ||
fragmentUrl, | ||
fragmentAttributes, | ||
request, | ||
span = null | ||
) => | ||
new Promise((resolve, reject) => { | ||
const parsedUrl = url.parse(fragmentUrl); | ||
const options = Object.assign( | ||
{ | ||
headers: Object.assign( | ||
filterHeaders(fragmentAttributes, request), | ||
requiredHeaders | ||
), | ||
timeout: fragmentAttributes.timeout | ||
}, | ||
parsedUrl | ||
); | ||
module.exports = | ||
(filterHeaders, processFragmentResponse) => | ||
(fragmentUrl, fragmentAttributes, request, span = null) => | ||
new Promise((resolve, reject) => { | ||
const parsedUrl = url.parse(fragmentUrl); | ||
const options = Object.assign( | ||
{ | ||
headers: Object.assign( | ||
filterHeaders(fragmentAttributes, request), | ||
requiredHeaders | ||
), | ||
timeout: fragmentAttributes.timeout | ||
}, | ||
parsedUrl | ||
); | ||
if (span) { | ||
tracer.inject(span.context(), FORMAT_HTTP_HEADERS, options.headers); | ||
} | ||
if (span) { | ||
tracer.inject( | ||
span.context(), | ||
FORMAT_HTTP_HEADERS, | ||
options.headers | ||
); | ||
} | ||
const { protocol: reqProtocol, timeout } = options; | ||
const hasHttpsProtocol = reqProtocol === 'https:'; | ||
const protocol = hasHttpsProtocol ? https : http; | ||
options.agent = hasHttpsProtocol ? kaAgentHttps : kaAgent; | ||
const { protocol: reqProtocol, timeout } = options; | ||
const hasHttpsProtocol = reqProtocol === 'https:'; | ||
const protocol = hasHttpsProtocol ? https : http; | ||
options.agent = hasHttpsProtocol ? kaAgentHttps : kaAgent; | ||
if (hasHttpsProtocol && fragmentAttributes.ignoreInvalidSsl) { | ||
options.rejectUnauthorized = false; | ||
} | ||
if (hasHttpsProtocol && fragmentAttributes.ignoreInvalidSsl) { | ||
options.rejectUnauthorized = false; | ||
} | ||
const fragmentRequest = protocol.request(options); | ||
const fragmentRequest = protocol.request(options); | ||
if (timeout) { | ||
fragmentRequest.setTimeout(timeout, fragmentRequest.abort); | ||
} | ||
if (timeout) { | ||
fragmentRequest.setTimeout(timeout, fragmentRequest.abort); | ||
} | ||
fragmentRequest.on('response', response => { | ||
try { | ||
resolve( | ||
processFragmentResponse(response, { | ||
request, | ||
fragmentUrl, | ||
fragmentAttributes | ||
}) | ||
); | ||
} catch (e) { | ||
reject(e); | ||
} | ||
fragmentRequest.on('response', response => { | ||
try { | ||
resolve( | ||
processFragmentResponse(response, { | ||
request, | ||
fragmentUrl, | ||
fragmentAttributes | ||
}) | ||
); | ||
} catch (e) { | ||
reject(e); | ||
} | ||
}); | ||
fragmentRequest.on('error', reject); | ||
fragmentRequest.end(); | ||
}); | ||
fragmentRequest.on('error', reject); | ||
fragmentRequest.end(); | ||
}); |
'use strict'; | ||
const MARKED_PARTS_TO_IGNORE = /<!-- TailorX: Ignore during parsing START -->.*?<!-- TailorX: Ignore during parsing END -->/gims; | ||
const IGNORED_PART_WITH_INDEX = /<!-- TailorX: Ignored content during parsing #(\d+) -->/gm; | ||
const MARKED_PARTS_TO_IGNORE = | ||
/<!-- TailorX: Ignore during parsing START -->.*?<!-- TailorX: Ignore during parsing END -->/gims; | ||
const IGNORED_PART_WITH_INDEX = | ||
/<!-- TailorX: Ignored content during parsing #(\d+) -->/gm; | ||
@@ -6,0 +8,0 @@ function replaceIgnorePart(ignoredPartIndex) { |
@@ -12,3 +12,3 @@ 'use strict'; | ||
module.exports = { | ||
initTracer: function(implementation) { | ||
initTracer: function (implementation) { | ||
opentracing.initGlobalTracer( | ||
@@ -15,0 +15,0 @@ implementation || new opentracing.Tracer() |
@@ -5,3 +5,3 @@ 'use strict'; | ||
const memoize = require('memoizee'); | ||
const treeAdapter = parse5.treeAdapters.htmlparser2; | ||
const treeAdapter = require('parse5-htmlparser2-tree-adapter'); | ||
const CustomSerializer = require('./serializer'); | ||
@@ -8,0 +8,0 @@ |
@@ -7,7 +7,7 @@ 'use strict'; | ||
waitFor(fragment) { | ||
const p = new Promise(function(resolve) { | ||
fragment.on('response', function(statusCode, headers) { | ||
const p = new Promise(function (resolve) { | ||
fragment.on('response', function (statusCode, headers) { | ||
resolve([fragment.attributes, headers]); | ||
}); | ||
fragment.on('error', function() { | ||
fragment.on('error', function () { | ||
resolve(null); | ||
@@ -14,0 +14,0 @@ }); |
{ | ||
"name": "@namecheap/tailorx", | ||
"version": "7.0.1", | ||
"version": "8.0.0", | ||
"description": "Tailor assembles a web page from multiple fragments", | ||
@@ -32,29 +32,28 @@ "keywords": [ | ||
"dependencies": { | ||
"@namecheap/error-extender": "^1.1.1", | ||
"agentkeepalive": "^4.1.0", | ||
"device-detector-js": "^2.2.1", | ||
"lodash": "^4.17.15", | ||
"memoizee": "^0.4.14", | ||
"opentracing": "^0.14.3", | ||
"parse5": "^3.0.3", | ||
"util.promisify": "^1.0.0" | ||
"@namecheap/error-extender": "^2.0.0", | ||
"agentkeepalive": "^4.5.0", | ||
"device-detector-js": "^3.0.3", | ||
"lodash": "^4.17.21", | ||
"memoizee": "^0.4.15", | ||
"opentracing": "^0.14.7", | ||
"parse5": "^6.0.1", | ||
"parse5-htmlparser2-tree-adapter": "^6.0.1" | ||
}, | ||
"devDependencies": { | ||
"@babel/core": "^7.23.2", | ||
"@babel/eslint-parser": "^7.22.15", | ||
"babel-eslint": "^10.0.3", | ||
"codecov": "^3.6.2", | ||
"eslint": "^6.8.0", | ||
"eslint-plugin-prettier": "^3.1.2", | ||
"iamdee": "^0.4.0", | ||
"lazypipe": "^1.0.1", | ||
"loadtest": "^2.3.0", | ||
"metrics": "^0.1.11", | ||
"mocha": "^7.0.1", | ||
"nock": "^11.7.2", | ||
"nyc": "^15.0.0", | ||
"codecov": "^3.8.2", | ||
"eslint": "^8.52.0", | ||
"eslint-plugin-prettier": "^5.0.1", | ||
"loadtest": "^8.0.3", | ||
"metrics": "^0.1.21", | ||
"mocha": "^10.2.0", | ||
"nock": "^13.3.7", | ||
"nyc": "^15.1.0", | ||
"pre-commit": "^1.2.2", | ||
"prettier": "^1.19.1", | ||
"proxyquire": "^1.8.0", | ||
"puppeteer": "^1.0.0", | ||
"sinon": "^8.1.1", | ||
"wd": "^1.2.0" | ||
"prettier": "^3.0.3", | ||
"proxyquire": "^2.1.3", | ||
"puppeteer": "^21.4.1", | ||
"sinon": "^17.0.0" | ||
}, | ||
@@ -61,0 +60,0 @@ "files": [ |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
90942
16
1850
0
+ Added@namecheap/error-extender@2.0.0(transitive)
+ Addeddevice-detector-js@3.0.3(transitive)
+ Addedparse5@6.0.1(transitive)
+ Addedparse5-htmlparser2-tree-adapter@6.0.1(transitive)
- Removedutil.promisify@^1.0.0
- Removed@namecheap/error-extender@1.2.0(transitive)
- Removed@types/node@20.14.2(transitive)
- Removedarray-buffer-byte-length@1.0.1(transitive)
- Removedarray.prototype.reduce@1.0.7(transitive)
- Removedarraybuffer.prototype.slice@1.0.3(transitive)
- Removedavailable-typed-arrays@1.0.7(transitive)
- Removedcall-bind@1.0.7(transitive)
- Removeddata-view-buffer@1.0.1(transitive)
- Removeddata-view-byte-length@1.0.1(transitive)
- Removeddata-view-byte-offset@1.0.0(transitive)
- Removeddefine-data-property@1.1.4(transitive)
- Removeddefine-properties@1.2.1(transitive)
- Removeddevice-detector-js@2.2.10(transitive)
- Removedes-abstract@1.23.3(transitive)
- Removedes-array-method-boxes-properly@1.0.0(transitive)
- Removedes-define-property@1.0.0(transitive)
- Removedes-errors@1.3.0(transitive)
- Removedes-object-atoms@1.0.0(transitive)
- Removedes-set-tostringtag@2.0.3(transitive)
- Removedes-to-primitive@1.2.1(transitive)
- Removedfor-each@0.3.3(transitive)
- Removedfunction-bind@1.1.2(transitive)
- Removedfunction.prototype.name@1.1.6(transitive)
- Removedfunctions-have-names@1.2.3(transitive)
- Removedget-intrinsic@1.2.4(transitive)
- Removedget-symbol-description@1.0.2(transitive)
- Removedglobalthis@1.0.4(transitive)
- Removedgopd@1.0.1(transitive)
- Removedhas-bigints@1.0.2(transitive)
- Removedhas-property-descriptors@1.0.2(transitive)
- Removedhas-proto@1.0.3(transitive)
- Removedhas-symbols@1.0.3(transitive)
- Removedhas-tostringtag@1.0.2(transitive)
- Removedhasown@2.0.2(transitive)
- Removedinternal-slot@1.0.7(transitive)
- Removedis-array-buffer@3.0.4(transitive)
- Removedis-bigint@1.0.4(transitive)
- Removedis-boolean-object@1.1.2(transitive)
- Removedis-callable@1.2.7(transitive)
- Removedis-data-view@1.0.1(transitive)
- Removedis-date-object@1.0.5(transitive)
- Removedis-negative-zero@2.0.3(transitive)
- Removedis-number-object@1.0.7(transitive)
- Removedis-regex@1.1.4(transitive)
- Removedis-shared-array-buffer@1.0.3(transitive)
- Removedis-string@1.0.7(transitive)
- Removedis-symbol@1.0.4(transitive)
- Removedis-typed-array@1.1.13(transitive)
- Removedis-weakref@1.0.2(transitive)
- Removedisarray@2.0.5(transitive)
- Removedobject-inspect@1.13.1(transitive)
- Removedobject-keys@1.1.1(transitive)
- Removedobject.assign@4.1.5(transitive)
- Removedobject.getownpropertydescriptors@2.1.8(transitive)
- Removedparse5@3.0.3(transitive)
- Removedpossible-typed-array-names@1.0.0(transitive)
- Removedregexp.prototype.flags@1.5.2(transitive)
- Removedsafe-array-concat@1.1.2(transitive)
- Removedsafe-regex-test@1.0.3(transitive)
- Removedset-function-length@1.2.2(transitive)
- Removedset-function-name@2.0.2(transitive)
- Removedside-channel@1.0.6(transitive)
- Removedstring.prototype.trim@1.2.9(transitive)
- Removedstring.prototype.trimend@1.0.8(transitive)
- Removedstring.prototype.trimstart@1.0.8(transitive)
- Removedtyped-array-buffer@1.0.2(transitive)
- Removedtyped-array-byte-length@1.0.1(transitive)
- Removedtyped-array-byte-offset@1.0.2(transitive)
- Removedtyped-array-length@1.0.6(transitive)
- Removedunbox-primitive@1.0.2(transitive)
- Removedundici-types@5.26.5(transitive)
- Removedutil.promisify@1.1.2(transitive)
- Removedwhich-boxed-primitive@1.0.2(transitive)
- Removedwhich-typed-array@1.1.15(transitive)
Updatedagentkeepalive@^4.5.0
Updateddevice-detector-js@^3.0.3
Updatedlodash@^4.17.21
Updatedmemoizee@^0.4.15
Updatedopentracing@^0.14.7
Updatedparse5@^6.0.1