From 03fdcfdf6a30225ba2fc795569da12ae31b2ca9d Mon Sep 17 00:00:00 2001 From: Ben Hart Date: Tue, 5 Mar 2019 23:24:32 -0500 Subject: [PATCH] Add Markdown support as an entry point (issue #2274) (#2538) --- .../test/integration/markdown/100x100.png | Bin 0 -> 255 bytes .../test/integration/markdown/index.md | 5 +++ .../core/integration-tests/test/markdown.js | 33 ++++++++++++++++++ packages/core/parcel-bundler/src/Parser.js | 1 + packages/core/parcel-bundler/src/Pipeline.js | 1 - .../src/assets/MarkdownAsset.js | 15 ++++++++ 6 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 packages/core/integration-tests/test/integration/markdown/100x100.png create mode 100644 packages/core/integration-tests/test/integration/markdown/index.md create mode 100644 packages/core/integration-tests/test/markdown.js create mode 100644 packages/core/parcel-bundler/src/assets/MarkdownAsset.js diff --git a/packages/core/integration-tests/test/integration/markdown/100x100.png b/packages/core/integration-tests/test/integration/markdown/100x100.png new file mode 100644 index 0000000000000000000000000000000000000000..8a1daa0121d524256c1d1b45ff5e7ed771784c52 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^DImVS)*E46%Oq(`s&YU^>_U&7| zc=6GrN4Ia^zG~H~jT<-Ko_$0QsEo6~BeIx*f$sR&2=kJHM z&5N9@w|=XzipNCbb|s-xrJeH)f2E%im~OIrio1Qy&Sj1+>x<+1)+oPni}kGd6Ohy! z>6x1RttNZTv!7LG>?+Ii&zjEnadB}e3778<6P>u`Anzuis~9|8{an^LB{Ts5qZeh6 literal 0 HcmV?d00001 diff --git a/packages/core/integration-tests/test/integration/markdown/index.md b/packages/core/integration-tests/test/integration/markdown/index.md new file mode 100644 index 00000000000..d1d6628f15c --- /dev/null +++ b/packages/core/integration-tests/test/integration/markdown/index.md @@ -0,0 +1,5 @@ +# heading1 + +content content content + +[image](./100x100.png) diff --git a/packages/core/integration-tests/test/markdown.js b/packages/core/integration-tests/test/markdown.js new file mode 100644 index 00000000000..017e8fe9d33 --- /dev/null +++ b/packages/core/integration-tests/test/markdown.js @@ -0,0 +1,33 @@ +const assert = require('assert'); +const path = require('path'); +const fs = require('@parcel/fs'); +const {bundle, run, assertBundleTree} = require('./utils'); + +describe('markdown', function() { + it('should support bundling Markdown', async function() { + let b = await bundle( + path.join(__dirname, '/integration/markdown/index.md') + ); + + await assertBundleTree(b, { + name: 'index.html', + assets: ['index.md'], + childBundles: [ + { + type: 'png', + assets: ['100x100.png'], + childBundles: [] + } + ] + }); + + let files = await fs.readdir(path.join(__dirname, '/dist')); + let html = await fs.readFile(path.join(__dirname, '/dist/index.html')); + for (let file of files) { + let ext = file.match(/\.([0-9a-z]+)(?:[?#]|$)/i)[0]; + if (file !== 'index.html' && ext !== '.map') { + assert(html.includes(file)); + } + } + }); +}); diff --git a/packages/core/parcel-bundler/src/Parser.js b/packages/core/parcel-bundler/src/Parser.js index 09163cb6d4a..2042e19171f 100644 --- a/packages/core/parcel-bundler/src/Parser.js +++ b/packages/core/parcel-bundler/src/Parser.js @@ -51,6 +51,7 @@ class Parser { this.registerExtension('jade', './assets/PugAsset'); this.registerExtension('pug', './assets/PugAsset'); + this.registerExtension('md', './assets/MarkdownAsset'); let extensions = options.extensions || {}; for (let ext in extensions) { diff --git a/packages/core/parcel-bundler/src/Pipeline.js b/packages/core/parcel-bundler/src/Pipeline.js index 0b016006fbc..6377259b123 100644 --- a/packages/core/parcel-bundler/src/Pipeline.js +++ b/packages/core/parcel-bundler/src/Pipeline.js @@ -50,7 +50,6 @@ class Pipeline { let inputType = path.extname(asset.name).slice(1); let generated = []; - for (let rendition of this.iterateRenditions(asset)) { let {type, value} = rendition; if (typeof value !== 'string' || rendition.final) { diff --git a/packages/core/parcel-bundler/src/assets/MarkdownAsset.js b/packages/core/parcel-bundler/src/assets/MarkdownAsset.js new file mode 100644 index 00000000000..076667c8405 --- /dev/null +++ b/packages/core/parcel-bundler/src/assets/MarkdownAsset.js @@ -0,0 +1,15 @@ +const localRequire = require('../utils/localRequire'); +const Asset = require('../Asset'); + +class MarkdownAsset extends Asset { + constructor(name, options) { + super(name, options); + this.type = 'html'; + this.hmrPageReload = true; + } + async generate() { + let marked = await localRequire('marked', this.name); + return marked(this.contents); + } +} +module.exports = MarkdownAsset;