css-codemod
Advanced tools
Comparing version 0.0.0-pr.5.4.fbb0be8 to 0.0.0-pr.6.1.0e4d157
@@ -28,6 +28,30 @@ #!/usr/bin/env node | ||
var import_postcss = __toESM(require("postcss")); | ||
var parse = (source) => { | ||
return import_postcss.default.parse(source); | ||
var createAPIParse = ({ | ||
parser | ||
}) => { | ||
const parse = (source) => { | ||
const result = (0, import_postcss.default)().process(source, { | ||
from: void 0, | ||
parser | ||
}); | ||
const { root } = result; | ||
if (result.error) { | ||
throw result.error; | ||
} | ||
if ((root == null ? void 0 : root.type) === "root") { | ||
return root; | ||
} else { | ||
throw new Error(`Unexpected root node: ${root}`); | ||
} | ||
}; | ||
return parse; | ||
}; | ||
var api = { parse }; | ||
var createAPI = ({ | ||
parser | ||
} = {}) => { | ||
const api = { | ||
parse: createAPIParse({ parser }) | ||
}; | ||
return api; | ||
}; | ||
@@ -75,3 +99,4 @@ // src/files.ts | ||
const transform = validateTransform(mod.transform || mod.default); | ||
return transform; | ||
const parser = mod.parser; | ||
return { transform, parser }; | ||
} catch (err) { | ||
@@ -85,4 +110,5 @@ console.error(`An error occurred loading the transform file. Verify "${filepath}" exists.`); | ||
var perform = async (options) => { | ||
const transform = await loadTransform(options.transform); | ||
const { transform, parser } = await loadTransform(options.transform); | ||
const files = getAllFilesToTransform(options.files); | ||
const api = createAPI({ parser }); | ||
files.map((file) => { | ||
@@ -98,3 +124,3 @@ const fileInfo = getFileInfo(file); | ||
console.error(`The following error occurred transforming "${file}": | ||
${err.message}`); | ||
${err.message}${err.stack}`); | ||
} else { | ||
@@ -101,0 +127,0 @@ console.error(`An unexpected error occurred transforming "${file}": ${err}`); |
{ | ||
"version": "0.0.0-pr.5.4.fbb0be8", | ||
"version": "0.0.0-pr.6.1.0e4d157", | ||
"license": "MIT", | ||
@@ -50,2 +50,3 @@ "name": "css-codemod", | ||
"husky": "^7.0.4", | ||
"postcss-scss": "^4.0.3", | ||
"rimraf": "^3.0.2", | ||
@@ -52,0 +53,0 @@ "tsdx": "^0.14.1", |
@@ -1,3 +0,2 @@ | ||
import postcss, { Root } from 'postcss'; | ||
import postcss, { Root, Parser } from 'postcss'; | ||
export interface TransformAPI { | ||
@@ -10,6 +9,42 @@ /** | ||
const parse: TransformAPI['parse'] = source => { | ||
return postcss.parse(source); | ||
const createAPIParse = ({ | ||
parser, | ||
}: { | ||
parser?: Parser; | ||
}): TransformAPI['parse'] => { | ||
const parse: TransformAPI['parse'] = source => { | ||
const result = postcss().process(source, { | ||
// Silence a warning about sourcemaps. Not relevant to this use case. | ||
from: undefined, | ||
parser, | ||
}); | ||
// Explicitly destructure root, which lazy evaluates and populates an error | ||
// if one occurs. The error field can then be checked. | ||
const { root } = result; | ||
// Re-surface an PostCSS parsing errors. | ||
// https://github.com/postcss/postcss/issues/1708 | ||
if ((result as any).error) { | ||
throw (result as any).error; | ||
} | ||
if (root?.type === 'root') { | ||
return root; | ||
} else { | ||
throw new Error(`Unexpected root node: ${root}`); | ||
} | ||
}; | ||
return parse; | ||
}; | ||
export const api: TransformAPI = { parse }; | ||
export const createAPI = ({ | ||
parser, | ||
}: { parser?: Parser } = {}): TransformAPI => { | ||
const api: TransformAPI = { | ||
parse: createAPIParse({ parser }), | ||
}; | ||
return api; | ||
}; |
@@ -1,2 +0,2 @@ | ||
import { api } from './api'; | ||
import { createAPI } from './api'; | ||
import { getAllFilesToTransform, getFileInfo, writeFile } from './files'; | ||
@@ -21,4 +21,5 @@ import { loadTransform } from './transform'; | ||
export const perform = async (options: ProcessTransformOptions) => { | ||
const transform = await loadTransform(options.transform); | ||
const { transform, parser } = await loadTransform(options.transform); | ||
const files = getAllFilesToTransform(options.files); | ||
const api = createAPI({ parser }); | ||
@@ -37,3 +38,3 @@ files.map(file => { | ||
console.error( | ||
`The following error occurred transforming "${file}":\n ${err.message}` | ||
`The following error occurred transforming "${file}":\n ${err.message}${err.stack}` | ||
); | ||
@@ -40,0 +41,0 @@ } else { |
import { bundleRequire } from 'bundle-require'; | ||
import { Parser } from 'postcss'; | ||
import { TransformAPI } from './api'; | ||
@@ -37,10 +38,18 @@ import { TransformFileInfo } from './files'; | ||
interface LoadTransformResult { | ||
transform: Transform; | ||
parser?: Parser; | ||
} | ||
/** | ||
* Load and validate the transform file given the filepath. | ||
*/ | ||
export const loadTransform = async (filepath: string): Promise<Transform> => { | ||
export const loadTransform = async ( | ||
filepath: string | ||
): Promise<LoadTransformResult> => { | ||
try { | ||
const { mod } = await bundleRequire({ filepath }); | ||
const transform = validateTransform(mod.transform || mod.default); | ||
return transform; | ||
const parser = mod.parser; | ||
return { transform, parser }; | ||
} catch (err) { | ||
@@ -47,0 +56,0 @@ console.error( |
20521
400
12