beware of duplicate extensions

fixes #41
This commit is contained in:
Joao Moreno 2015-11-17 22:15:53 +01:00
parent 709539ad51
commit d825e41203
3 changed files with 16 additions and 14 deletions

View file

@ -1,6 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
<Default Extension=".vsixmanifest" ContentType="text/xml"/>
<Default Extension=".json" ContentType="application/json"/>
<% _.forEach(contentTypes, function (e) { %><Default Extension="${ e.extension }" ContentType="${ e.contentType }"/><% }); %>
</Types>

View file

@ -274,13 +274,21 @@ export function toVsixManifest(assets: IAsset[], vsix: any, options: IPackageOpt
.then(vsixManifestTemplate => vsixManifestTemplate(vsix));
}
export function toContentTypes(files: IFile[]): Promise<string> {
const extensions = Object.keys(_.indexBy(files, f => path.extname(f.path)))
.map(e => e.toLowerCase())
.filter(e => e && !_.contains(['.json', '.vsixmanifest'], e));
const defaultExtensions = {
'.json': 'application/json',
'.vsixmanifest': 'text/xml'
};
const contentTypes = extensions
.map(extension => ({ extension, contentType: mime.lookup(extension) }));
export function toContentTypes(files: IFile[]): Promise<string> {
const extensions = Object.keys(_.indexBy(files, f => path.extname(f.path).toLowerCase()))
.filter(e => !!e)
.reduce((r, e) => _.assign(r, { [e]: mime.lookup(e) }), {});
const allExtensions = _.assign({}, extensions, defaultExtensions);
const contentTypes = Object.keys(allExtensions).map(extension => ({
extension,
contentType: allExtensions[extension]
}));
return readFile(contentTypesTemplatePath, 'utf8')
.then(contentTypesTemplateStr => _.template(contentTypesTemplateStr))

View file

@ -354,12 +354,8 @@ describe('toContentTypes', () => {
assert.ok(result.Types);
assert.ok(result.Types.Default);
assert.equal(result.Types.Default.length, 2);
assert.ok(result.Types.Default[0].$);
assert.equal(result.Types.Default[0].$.Extension, '.vsixmanifest');
assert.equal(result.Types.Default[0].$.ContentType, 'text/xml');
assert.ok(result.Types.Default[1].$);
assert.equal(result.Types.Default[1].$.Extension, '.json');
assert.equal(result.Types.Default[1].$.ContentType, 'application/json');
assert.ok(result.Types.Default.some(d => d.$.Extension === '.vsixmanifest' && d.$.ContentType === 'text/xml'));
assert.ok(result.Types.Default.some(d => d.$.Extension === '.json' && d.$.ContentType === 'application/json'));
});
});