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"?> <?xml version="1.0" encoding="utf-8"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> <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 }"/><% }); %> <% _.forEach(contentTypes, function (e) { %><Default Extension="${ e.extension }" ContentType="${ e.contentType }"/><% }); %>
</Types> </Types>

View file

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

View file

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