-
Notifications
You must be signed in to change notification settings - Fork 62
/
externals.js
82 lines (77 loc) · 1.9 KB
/
externals.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/**
* Utility methods for use when generating build configuration objects.
*/
const { join } = require( 'path' );
/**
* Given a string, returns a new string with dash separators converted to
* camel-case equivalent. This is not as aggressive as `_.camelCase`, which
* which would also upper-case letters following numbers.
*
* @param {string} string Input dash-delimited string.
*
* @return {string} Camel-cased string.
*/
const camelCaseDash = string => string.replace(
/-([a-z])/g,
( match, letter ) => letter.toUpperCase()
);
/**
* Define externals to load components through the wp global.
*/
const wpExternals = [
'api',
'api-fetch',
'block-editor',
'blocks',
'components',
'compose',
'data',
'date',
'html-entities',
'hooks',
'element',
'i18n',
'plugins',
'viewport',
'ajax',
'codeEditor',
'rich-text',
'url',
'keyboard-shortcuts',
'token-list',
'keycodes',
'escape-html'
].reduce( ( externals, name ) => ( {
...externals,
[ `@wordpress/${ name }` ]: `wp.${ camelCaseDash( name ) }`,
} ), {} );
/**
* These are all the Stackable modules that are exported by our main script as
* our API. Some scripts (like premium or deprecated code) will reference our
* API externally.
*/
const stackableExternals = [
'components',
'block-components',
'design-library',
'higher-order',
'hooks',
'util',
'icons',
].reduce( ( externals, name ) => ( {
...externals,
[ `~stackable/${ name }` ]: `stk.${ camelCaseDash( name ) }`,
} ), {} );
const externals = {
wp: 'wp',
lodash: 'lodash', // WP loads lodash already.
stackable: 'stackable', // Our localized JS variable.
fetch: 'fetch', // Used in our debugger sidebar.
// react: 'wp.element', // Use the bundled React in Gutenberg. (not working see https://github.com/WordPress/gutenberg/issues/33674)
'react-dom': 'wp.element', // Use the bundled ReactDom in Gutenberg.
...wpExternals,
}
module.exports = {
externals,
stackableExternals,
};