From 14ba3f24ee309e889322bb8baf9226d97394d0da Mon Sep 17 00:00:00 2001 From: Danilo Verde Date: Sun, 5 Jun 2022 21:38:51 -0300 Subject: [PATCH 1/2] Added coffescript and less preprocessors Following Meteor's support to both dialects --- SvelteCompiler.js | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/SvelteCompiler.js b/SvelteCompiler.js index 42162e6..0a7eae8 100644 --- a/SvelteCompiler.js +++ b/SvelteCompiler.js @@ -94,6 +94,22 @@ SvelteCompiler = class SvelteCompiler extends CachingCompiler { return this.ts; } + getCoffee() { + if (this.coffee === null) { + this.coffee = require('svelte-preprocess/dist/transformers/coffeescript').transformer; + } + + return this.coffee; + } + + getLess() { + if (this.less === null) { + this.less = require('svelte-preprocess/dist/transformers/less').transformer; + } + + return this.less; + } + hmrAvailable(file) { return typeof file.hmrAvailable === 'function' && file.hmrAvailable(); } @@ -334,18 +350,17 @@ SvelteCompiler = class SvelteCompiler extends CachingCompiler { const processedCode = modified ? print(ast).code : content; - return attributes.lang === 'ts' - ? this.getTs()({ content: processedCode, filename: path }) - : { code: processedCode }; + return ({ + 'ts': this.getTs()({ content: processedCode, filename: path }), + 'coffee': this.getCoffee()({ content: processedCode, filename: path }) + })[attributes.lang] ?? { code: processedCode }; + }, style: async ({ content, attributes }) => { - if (this.postcss) { - if (attributes.lang == 'postcss') { - return { - code: await this.postcss.process(content, { from: undefined }) - }; - } - } + return ({ + 'postcss': { code: await this.postcss.process(content, { from: undefined }) }, + 'less': { code: await this.postcss.process(content, { from: undefined }) } + })[attributes.lang] ?? { code: content }; } }))); } catch (e) { From 77505668a6bd90296951cbebae72b3dd2d5321ab Mon Sep 17 00:00:00 2001 From: Danilo Verde Date: Sun, 5 Jun 2022 23:22:47 -0300 Subject: [PATCH 2/2] Adding coffescript and less preprocessors Following Meteor's support to both dialects --- SvelteCompiler.js | 30 +++++++++++++++++++++++++++--- package.js | 2 +- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/SvelteCompiler.js b/SvelteCompiler.js index 0a7eae8..192f07f 100644 --- a/SvelteCompiler.js +++ b/SvelteCompiler.js @@ -4,10 +4,16 @@ import sourcemap from 'source-map'; import { parse, print, types } from 'recast'; import acorn from 'recast/parsers/acorn'; import typescript from 'recast/parsers/typescript'; +import coffeescript from 'coffescript'; +import less from 'less'; import { analyze, extract_names } from 'periscopic'; -function createRecastParser(isTS = false) { - const parser = isTS ? typescript : acorn; +function createRecastParser(lang = false) { + + const parser = ({ + 'ts': typescript, + 'coffee': coffeescript + })[lang] ?? acorn; return { parse(_, options) { @@ -63,6 +69,20 @@ SvelteCompiler = class SvelteCompiler extends CachingCompiler { this.tsVersion = ''; } + try { + let coffeePackage = require('coffeescript/package.json'); + this.coffeeVersion = coffeePackage.version; + } catch (e) { + this.coffeeVersion = ''; + } + + try { + let lessPackage = require('less/package.json'); + this.lessVersion = lessPackage.version; + } catch (e) { + this.lessVersion = ''; + } + this.makeHot = createMakeHot({ meta: 'module', walk: this.svelte.walk, @@ -127,6 +147,8 @@ SvelteCompiler = class SvelteCompiler extends CachingCompiler { svelteVersion: this.svelte.VERSION, preprocessVersion: PREPROCESS_VERSION, tsVersion: this.tsVersion, + coffeeVersion: this.coffeeVersion, + lessVersion: this.lessVersion, }, ]; } @@ -143,6 +165,8 @@ SvelteCompiler = class SvelteCompiler extends CachingCompiler { PREPROCESS_VERSION, process.env.NODE_ENV === 'production', this.tsVersion, + this.coffeeVersion, + this.lessVersion, suffix ].join('-'); @@ -259,7 +283,7 @@ SvelteCompiler = class SvelteCompiler extends CachingCompiler { return; } - let ast = parse(content, { parser: createRecastParser(attributes.lang === 'ts') }); + let ast = parse(content, { parser: createRecastParser(attributes.lang) }); let modified = false; let uniqueIdCount = 0; diff --git a/package.js b/package.js index fa16f98..77759e0 100644 --- a/package.js +++ b/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'zodern:melte', - version: '1.6.0', + version: '1.7.0', summary: 'Svelte compiler with tracker integration, HMR and Typescript support', git: 'https://github.com/zodern/melte.git', documentation: 'README.md'