Skip to content

Commit 618cd6b

Browse files
committed
Make line transformers async compatible
1 parent ca8c07b commit 618cd6b

File tree

9 files changed

+27
-25
lines changed

9 files changed

+27
-25
lines changed

src/graphql/createSchemaCustomization.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ const rootSchema = fs.readFileSync(path.resolve(__dirname, 'schema.graphql'), 'u
99
* @param {*} nodeApiOptions
1010
* @param {PluginOptions} options
1111
*/
12-
function createSchemaCustomization({ actions }, options) {
12+
function createSchemaCustomization({ actions, cache }, options) {
1313
const { createTypes } = actions;
1414
logger.setLevel(options.logLevel || 'error');
1515
createTypes(rootSchema);
1616
const lineTransformers = options.getLineTransformers
17-
? options.getLineTransformers(options)
18-
: getDefaultLineTransformers();
17+
? options.getLineTransformers(options, cache)
18+
: getDefaultLineTransformers(options, cache);
1919

2020
for (const transformer of lineTransformers) {
2121
if (transformer.schemaExtension) {

src/graphql/highlight.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ async function highlight(args, pluginOptions, { cache, createNodeId }) {
2525
...rest
2626
} = await plugin.once(() => setup(pluginOptions, cache));
2727

28-
const lineTransformers = await getLineTransformers(
28+
const lineTransformers = getLineTransformers(
2929
{
3030
theme,
3131
languageAliases,

src/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ function createPlugin() {
4141
...rest
4242
} = await once(() => setup(options, cache), 'setup');
4343

44-
const lineTransformers = await getLineTransformers(
44+
const lineTransformers = getLineTransformers(
4545
{
4646
theme,
4747
wrapperClassName,
@@ -185,8 +185,8 @@ function createPlugin() {
185185
}
186186

187187
textmateHighlight.getRegistry = getRegistry;
188-
textmateHighlight.createSchemaCustomization = createSchemaCustomization;
189188
textmateHighlight.once = once;
189+
textmateHighlight.createSchemaCustomization = createSchemaCustomization;
190190
return textmateHighlight;
191191
}
192192

src/registerCodeBlock.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ async function registerCodeBlock(
3030
const grammarCache = await cache.get('grammars');
3131
const [registry, unlockRegistry] = await getTextMateRegistry();
3232
try {
33-
const lines = getTransformedLines(lineTransformers, text, languageName, meta);
33+
const lines = await getTransformedLines(lineTransformers, text, languageName, meta);
3434
/** @type {import('vscode-textmate').ITokenTypeMap} */
3535
let tokenTypes = {};
3636
/** @type {number} */

src/transformers/getTransformedLines.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
* @param {string} text
77
* @param {string} languageName
88
* @param {object} meta
9-
* @returns {Line[]}
9+
* @returns {Promise<Line[]>}
1010
*/
11-
function getTransformedLines(transformers, text, languageName, meta) {
11+
async function getTransformedLines(transformers, text, languageName, meta) {
1212
/** @type {Line[]} */
1313
const result = [];
1414
const rawLines = text.split(/\r?\n/);
@@ -22,7 +22,7 @@ function getTransformedLines(transformers, text, languageName, meta) {
2222
const transformer = transformers[i];
2323
const state = prevTransformerStates[i];
2424
/** @type {LineTransformerResult} */
25-
const txResult = transformer({
25+
const txResult = await transformer({
2626
state,
2727
line: { text: line, attrs },
2828
meta,

src/transformers/highlightDirectiveLineTransformer.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,16 @@ const textIsHighlightDirective = (text, commentWrapper) => directive =>
5454
/**
5555
* @param {Record<string, (message: string) => string>} languageCommentMap user-defined object mapping language keys to commenting functions
5656
* @param {Record<string, string>} languageAliases
57-
* @param {*} grammarCache
57+
* @param {GatsbyCache} cache
5858
*/
59-
function createHighlightDirectiveLineTransformer(languageCommentMap, languageAliases, grammarCache) {
59+
function createHighlightDirectiveLineTransformer(languageCommentMap, languageAliases, cache) {
60+
let grammarCache;
6061
/** @type {LineTransformer<HighlightCommentTransfomerState>} */
61-
const transformer = ({ line, language, state }) => {
62+
const transformer = async ({ line, language, state }) => {
63+
if (!grammarCache) {
64+
grammarCache = await cache.get('grammars');
65+
}
66+
6267
const scope = getScope(language, grammarCache, languageAliases);
6368
const commentWrapper = getCommentForLanguage(language, scope, languageCommentMap);
6469
const isDirective = textIsHighlightDirective(line.text, commentWrapper);
@@ -101,7 +106,7 @@ function createHighlightDirectiveLineTransformer(languageCommentMap, languageAli
101106

102107
transformer.displayName = 'highlightCommentDirective';
103108
transformer.schemaExtension = `
104-
type GRVSCLine {
109+
type GRVSCTokenizedLine {
105110
isHighlighted: Boolean
106111
}
107112
`;

src/transformers/highlightMetaTransformer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ const highlightMetaTransformer = ({ meta, line, state = getInitialState(meta) })
5252

5353
highlightMetaTransformer.displayName = 'highlightCodeFenceOptions';
5454
highlightMetaTransformer.schemaExtension = `
55-
type GRVSCLine {
55+
type GRVSCTokenizedLine {
5656
isHighlighted: Boolean
5757
}
5858
`;

src/transformers/index.js

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,10 @@ const getTransformedLines = require('./getTransformedLines');
66
/**
77
* @param {PluginOptions} pluginOptions
88
* @param {GatsbyCache} cache
9-
* @returns {Promise<LineTransformer[]>}
9+
* @returns {LineTransformer[]}
1010
*/
11-
async function getDefaultLineTransformers(pluginOptions, cache) {
12-
return [
13-
createHighlightDirectiveLineTransformer({}, pluginOptions.languageAliases, await cache.get('grammars')),
14-
highlightMetaTransformer
15-
];
11+
function getDefaultLineTransformers(pluginOptions, cache) {
12+
return [createHighlightDirectiveLineTransformer({}, pluginOptions.languageAliases, cache), highlightMetaTransformer];
1613
}
1714

1815
/**
@@ -25,8 +22,8 @@ function addLineTransformers(...transformers) {
2522
* @param {PluginOptions} pluginOptions
2623
* @param {GatsbyCache} cache
2724
*/
28-
async function getLineTransformers(pluginOptions, cache) {
29-
return [...transformers, ...(await getDefaultLineTransformers(pluginOptions, cache))];
25+
function getLineTransformers(pluginOptions, cache) {
26+
return [...transformers, ...getDefaultLineTransformers(pluginOptions, cache)];
3027
}
3128
}
3229

src/types.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ interface PluginOptions {
6363
replaceColor?: (colorValue: string, theme: string) => string;
6464
logLevel?: 'trace' | 'debug' | 'info' | 'warn' | 'error';
6565
host?: Host;
66-
getLineTransformers?: (pluginOptions: PluginOptions, cache: GatsbyCache) => LineTransformer[] | Promise<LineTransformer[]>;
66+
getLineTransformers?: (pluginOptions: PluginOptions, cache: GatsbyCache) => LineTransformer[];
6767
}
6868

6969
interface GatsbyCache {
@@ -181,7 +181,7 @@ interface LineTransformerArgs<T> extends LineTransformerInfo<T> {
181181
}
182182

183183
interface LineTransformer<T = any> {
184-
(args: LineTransformerArgs<T>): LineTransformerResult<T>;
184+
(args: LineTransformerArgs<T>): LineTransformerResult<T> | Promise<LineTransformerResult<T>>;
185185
displayName: string;
186186
schemaExtension?: string;
187187
}

0 commit comments

Comments
 (0)