mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/CodeMirror
synced 2024-11-23 22:03:28 +00:00
c853e9587d
Documentation is at https://w.wiki/9kxt The idea is that modules ending in `.init` imply they initialize CodeMirror and maniuplate the DOM. The others only export classes for use in integreations. In doing so, 'ext.CodeMirror.v6.WikiEditor' now only exports the CodeMirrorWikiEditor class, while 'ext.CodeMirror.v6.WikiEditor.init' is added for use on #wpTextbox1 through action=edit. Bug: T174811 Change-Id: Iec62ac9dc77918904bed886d2d46ccc03e0927f7
91 lines
2.6 KiB
JavaScript
91 lines
2.6 KiB
JavaScript
'use strict';
|
|
|
|
const nodeResolve = require( '@rollup/plugin-node-resolve' );
|
|
const copy = require( 'rollup-plugin-copy' );
|
|
const babel = require( '@rollup/plugin-babel' );
|
|
const terser = require( '@rollup/plugin-terser' );
|
|
|
|
/**
|
|
* Mapping of import paths to ResourceLoader module names.
|
|
* See usage in 'plugins' below for explanation.
|
|
* @type {Object}
|
|
*/
|
|
const importAliases = {
|
|
'./vendor.js': 'ext.CodeMirror.v6.lib',
|
|
'./codemirror.js': 'ext.CodeMirror.v6',
|
|
'./codemirror.wikieditor.js': 'ext.CodeMirror.v6.WikiEditor',
|
|
'./codemirror.mode.mediawiki.js': 'ext.CodeMirror.v6.mode.mediawiki'
|
|
};
|
|
|
|
module.exports = [
|
|
{
|
|
// One entry for each ResourceLoader module that we want to ship.
|
|
input: [
|
|
'src/codemirror.js',
|
|
'src/codemirror.mode.mediawiki.js',
|
|
'src/codemirror.mediawiki.js',
|
|
'src/codemirror.wikieditor.js',
|
|
'src/codemirror.wikieditor.mediawiki.js'
|
|
],
|
|
|
|
output: {
|
|
entryFileNames: '[name].js',
|
|
dir: 'resources/dist',
|
|
|
|
// Magically makes our ECMAScript Modules work with the
|
|
// CommonJS-style preferred by ResourceLoader. Ta-da!
|
|
format: 'cjs',
|
|
|
|
// Remove hash from chunked file name. We only want vendor code to be
|
|
// chunked, and we need the file name to be stable for use by ResourceLoader.
|
|
chunkFileNames: () => '[name].js',
|
|
|
|
// Bundle all vendor code into a single file called 'vendor.js'.
|
|
// This includes the Babel helpers because they are used by all our modules.
|
|
manualChunks: ( id ) => {
|
|
if ( id.includes( 'node_modules' ) || id.includes( 'rollupPluginBabelHelpers' ) ) {
|
|
return 'vendor';
|
|
}
|
|
}
|
|
},
|
|
|
|
plugins: [
|
|
nodeResolve(),
|
|
|
|
// HACK: Rollup doesn't know about ResourceLoader and attempts to `require`
|
|
// modules using a relative path, when they need to match the RL module name.
|
|
// Here we do string replacements to fix that. This is nasty and brittle, but
|
|
// otherwise we couldn't offer standalone CodeMirror functionality via RL,
|
|
// which is necessary for usage in on-wiki scripts and gadgets (T214989).
|
|
copy( {
|
|
targets: [ {
|
|
src: 'resources/dist/*',
|
|
dest: 'resources/dist/',
|
|
transform: ( contents ) => {
|
|
Object.keys( importAliases ).forEach( ( alias ) => {
|
|
contents = contents.toString().replace(
|
|
`require("${ alias }")`,
|
|
`require("${ importAliases[ alias ] }")`
|
|
);
|
|
} );
|
|
return contents;
|
|
}
|
|
} ],
|
|
hook: 'writeBundle'
|
|
} ),
|
|
|
|
babel( { babelHelpers: 'bundled' } ),
|
|
|
|
terser()
|
|
],
|
|
|
|
onwarn: ( warning, warn ) => {
|
|
// Suppress "not exported" warnings. We import those for IDE support not for the build.
|
|
if ( warning.code === 'MISSING_EXPORT' ) {
|
|
return;
|
|
}
|
|
warn( warning );
|
|
}
|
|
}
|
|
];
|