Skip to content

Commit bd4362b

Browse files
authored
fix(bundle): client and server compatibility (#20)
* fix(bundle): making syntax highlighter compatible on client and server - Exposing modes and getmode as core exports * chore: documentation
1 parent e3c0c67 commit bd4362b

File tree

8 files changed

+58
-32
lines changed

8 files changed

+58
-32
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
"name": "@readme/syntax-highlighter",
33
"description": "ReadMe's React-based syntax highlighter",
44
"version": "9.0.1",
5-
"main": "dist/index.js",
5+
"main": "dist/index.node.js",
6+
"browser": "dist/index.js",
67
"dependencies": {
78
"@readme/variable": "^7.2.1",
89
"codemirror": "^5.48.2",

src/codeEditor/index.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
33
import { Controlled as CodeMirror } from 'react-codemirror2';
44
import { getMode } from '../utils/modes';
55
import defaults from './cm.options';
6+
import '../utils/cm-mode-imports';
67
import './style.scss';
78

89
const CodeEditor = ({ className, code, lang, options, children, ...attr }) => {

src/codeMirror/index.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import PropTypes from 'prop-types';
44
import Variable, { VARIABLE_REGEXP } from '@readme/variable';
55
import { getMode } from '../utils/modes';
66

7+
import '../utils/cm-mode-imports';
78
import './style.scss';
89
import 'codemirror/addon/runmode/runmode';
910
import 'codemirror/mode/meta';

src/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import codemirror from './codeMirror';
33
import codeEditor from './codeEditor';
44
import uppercase from './utils/uppercase';
55
import canonical from './utils/canonical';
6+
import { modes } from './utils/modes';
67

78
const SyntaxHighlighter = (
89
code,
@@ -33,4 +34,4 @@ const SyntaxHighlighter = (
3334
};
3435

3536
export default SyntaxHighlighter;
36-
export { uppercase, canonical };
37+
export { uppercase, canonical, modes };

src/index.node.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import uppercase from './utils/uppercase';
2+
import canonical from './utils/canonical';
3+
import { modes, getMode } from './utils/modes';
4+
5+
export { uppercase, canonical, modes, getMode };

src/utils/cm-mode-imports.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Codemirror-specfic mode-integrations, used for styling syntax
2+
require('codemirror/mode/clike/clike');
3+
require('codemirror/mode/clojure/clojure');
4+
require('codemirror/mode/d/d');
5+
require('codemirror/mode/dart/dart');
6+
require('codemirror/mode/diff/diff');
7+
require('codemirror/mode/dockerfile/dockerfile');
8+
require('codemirror/mode/erlang/erlang');
9+
require('codemirror/mode/go/go');
10+
require('codemirror/mode/groovy/groovy');
11+
require('codemirror/mode/htmlmixed/htmlmixed');
12+
require('codemirror/mode/http/http');
13+
require('codemirror/mode/javascript/javascript');
14+
require('codemirror/mode/julia/julia');
15+
require('codemirror/mode/perl/perl');
16+
require('codemirror/mode/php/php');
17+
require('codemirror/mode/powershell/powershell');
18+
require('codemirror/mode/python/python');
19+
require('codemirror/mode/ruby/ruby');
20+
require('codemirror/mode/rust/rust');
21+
require('codemirror/mode/shell/shell');
22+
require('codemirror/mode/sql/sql');
23+
require('codemirror/mode/swift/swift');
24+
require('codemirror/mode/yaml/yaml');

src/utils/modes.js

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,6 @@
88
// There are 2 types of lookup, single and array. e.g. `html` needs to be rendered using
99
// `htmlmixed`, but `java`, needs to be rendered using the `clike` mode.
1010
//
11-
// We also have the mimeType to potentially in future load in new types dynamically.
12-
require('codemirror/mode/clike/clike');
13-
require('codemirror/mode/clojure/clojure');
14-
require('codemirror/mode/d/d');
15-
require('codemirror/mode/dart/dart');
16-
require('codemirror/mode/diff/diff');
17-
require('codemirror/mode/dockerfile/dockerfile');
18-
require('codemirror/mode/erlang/erlang');
19-
require('codemirror/mode/go/go');
20-
require('codemirror/mode/groovy/groovy');
21-
require('codemirror/mode/htmlmixed/htmlmixed');
22-
require('codemirror/mode/http/http');
23-
require('codemirror/mode/javascript/javascript');
24-
require('codemirror/mode/julia/julia');
25-
require('codemirror/mode/perl/perl');
26-
require('codemirror/mode/php/php');
27-
require('codemirror/mode/powershell/powershell');
28-
require('codemirror/mode/python/python');
29-
require('codemirror/mode/ruby/ruby');
30-
require('codemirror/mode/rust/rust');
31-
require('codemirror/mode/shell/shell');
32-
require('codemirror/mode/sql/sql');
33-
require('codemirror/mode/swift/swift');
34-
require('codemirror/mode/yaml/yaml');
35-
3611
const modes = {
3712
asp: 'clike',
3813
aspx: 'clike',

webpack.config.js

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
const TerserPlugin = require('terser-webpack-plugin');
22
const path = require('path');
33

4-
module.exports = {
5-
entry: ['./src/index.js'],
4+
const base = {
65
mode: 'production',
76
module: {
87
rules: [
@@ -41,12 +40,31 @@ module.exports = {
4140
umd: 'react-dom',
4241
},
4342
},
43+
resolve: {
44+
extensions: ['.js', '.jsx'],
45+
},
46+
};
47+
48+
const serverConfig = {
49+
...base,
50+
target: 'node',
51+
entry: ['./src/index.node.js'],
4452
output: {
4553
path: path.resolve(__dirname, 'dist'),
46-
filename: 'index.js',
54+
filename: 'index.node.js',
4755
libraryTarget: 'commonjs2',
4856
},
49-
resolve: {
50-
extensions: ['.js', '.jsx'],
57+
};
58+
59+
const clientConfig = {
60+
...base,
61+
target: 'web',
62+
entry: ['./src/index.js'],
63+
output: {
64+
path: path.resolve(__dirname, 'dist'),
65+
filename: 'index.js',
66+
libraryTarget: 'commonjs2',
5167
},
5268
};
69+
70+
module.exports = [serverConfig, clientConfig];

0 commit comments

Comments
 (0)