diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..0fad082 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "csscomb.js"] + path = csscomb.js + url = https://github.com/csscomb/csscomb.js + branch = dev diff --git a/.vscodeignore b/.vscodeignore index 4aad89e..cc80fe1 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -11,3 +11,8 @@ tslint.json .vscode/** src/** smoke/** + +# csscomb submodule +csscomb.js/** +!csscomb.js/config +!csscomb.js/lib diff --git a/csscomb.js b/csscomb.js new file mode 160000 index 0000000..ce7ad83 --- /dev/null +++ b/csscomb.js @@ -0,0 +1 @@ +Subproject commit ce7ad831bd9b7fddb660c59afbbaf183c98d6ca7 diff --git a/package.json b/package.json index 511b75f..083c582 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,11 @@ "lint": "tslint src/**/*.ts -p .", "compile": "tsc", "test": "mocha out/{,**/}*.spec.js -s 0", - "build": "npm run clean && npm run lint && npm run compile && npm test", + "csscomb:build": "cd ./csscomb.js && node ./node_modules/@babel/cli/bin/babel.js --plugins @babel/plugin-transform-destructuring --loose all src --out-dir lib", + "csscomb:prepare": "cd ./csscomb.js && npm ci --ignore-scripts", + "build:plugin": "npm run clean && npm run lint && npm run compile && npm test", + "build:csscomb": "npm run csscomb:prepare && npm run csscomb:build", + "build": "npm run build:csscomb && npm run build:plugin", "watch": "npm run clean && npm run lint && npm run compile -- --sourceMap --watch" } } diff --git a/src/services/csscomb.ts b/src/services/csscomb.ts index 7cd6ea6..f046c43 100644 --- a/src/services/csscomb.ts +++ b/src/services/csscomb.ts @@ -1,16 +1,32 @@ -import * as CSSComb from 'csscomb'; +// @ts-ignore +import * as CSSComb from '../../csscomb.js/lib/csscomb.js'; + +interface IProcessOptions { + filename?: string; + context?: string; + syntax: string; +} + +declare class CSSCombConstructor { + constructor(config: string | object); + public static getConfig(name: string): object; + public configure(config: object): void; + public processString(text: string, options: IProcessOptions): Promise; +} + +type CSSComb = typeof CSSCombConstructor; const DEFAULT_CONFIGS = { - csscomb: CSSComb.getConfig('csscomb'), - yandex: CSSComb.getConfig('yandex'), - zen: CSSComb.getConfig('zen') + csscomb: (CSSComb as CSSComb).getConfig('csscomb'), + yandex: (CSSComb as CSSComb).getConfig('yandex'), + zen: (CSSComb as CSSComb).getConfig('zen') }; /** * Apply CSSComb to the given text with provided config. */ export function use(filename: string, text: string, syntax: string, config: object): Promise { - const csscomb = new CSSComb(config); + const csscomb = new (CSSComb as CSSComb)(config); return csscomb.processString(text, { syntax, filename }); }