-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
136 lines (129 loc) · 4.79 KB
/
index.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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
const _ = require('lodash');
const getAceFiles = require('./getAceBuilds');
const aceFiles = getAceFiles('src-noconflict');
const path = require('path');
const {
CleanWebpackPlugin
} = require('clean-webpack-plugin');
const move = require('glob-move');
module.exports = {
options: {
alias: 'customCodeEditor'
},
webpack: {
extensionOptions: {
aceBuildsFileLoader(options) {
const clean = _.has(options, 'clean') ? options.clean : true;
const cleanRelease = _.has(options, 'cleanRelease') ? options.cleanRelease : true;
const namespace = _.has(options, 'namespace') ? options.namespace : process.env.APOS_DEBUG_NAMESPACE || 'default';
let optionsResult = _.omitBy({
clean: clean,
cleanRelease: cleanRelease,
namespace: namespace
}, _.isNil);
return optionsResult;
}
},
extensions: {
aceBuildsFileLoader(options) {
return {
plugins: [
// Due to webpack cache issue & different path related to production/development, we need to clean some build assets to let apostrophe rebuild the files...
process.env.NODE_ENV === 'production' ? options.clean &&
new CleanWebpackPlugin({
cleanAfterEveryBuildPatterns: [
path.join(path.join(process.cwd(), 'public/apos-frontend/' + options.namespace + '/ace-builds/**')),
path.join(path.join(process.cwd(), 'public/apos-frontend/' + options.namespace + '/*.apos-*')),
'!apos-*',
'!src-*',
'!public-*'
],
cleanOnceBeforeBuildPatterns: [
options.cleanRelease && path.join(path.join(process.cwd(), 'public/apos-frontend/releases/**/**/*.apos-*')),
path.join(path.join(process.cwd(), 'public/apos-frontend/**/*.apos-*')),
'!apos-*',
'!src-*',
'!public-*'
]
})
: options.clean &&
new CleanWebpackPlugin({
cleanOnceBeforeBuildPatterns: [
path.join(path.join(process.cwd(), 'public/apos-frontend/**/*.apos-*')),
path.join(path.join(process.cwd(), 'public/apos-frontend/**/apos-*')),
path.join(path.join(process.cwd(), 'public/apos-frontend/**/src-*')),
path.join(path.join(process.cwd(), 'public/apos-frontend/**/public-*'))
],
cleanAfterEveryBuildPatterns: [
'!apos-*',
'!src-*',
'!public-*'
]
})
].filter(Boolean)
};
}
}
},
handlers(self, options) {
return {
'apostrophe:ready': {
async moveAce() {
if (options.apos.isTask() && (process.env.npm_lifecycle_event === 'release' || process.env.npm_lifecycle_event === 'build')) {
// A hacky solution to move chunk files from Ace Builds to Production directory.
// Something wrong on apostrophe that does not move ace-builds onto release directory.
// Use copy plugin until Apostrophe came up with solution or fixes.
try {
await move(path.join(path.join(self.apos.rootDir, 'public/apos-frontend/**/[0-9]*.apos-*')), path.join(path.join(self.apos.rootDir, 'public/apos-frontend/releases/' + self.apos.asset.getReleaseId() + '/' + self.apos.asset.getNamespace() + '/')));
} catch (e) {
console.log('Unable to move Ace files to production folder', e);
}
}
}
}
};
},
beforeSuperClass(self) {
const getAce = self.options.ace || {};
_.defaults(getAce, {
theme: '',
defaultMode: '',
modes: [],
optionsTypes: {}
});
self.ace = getAce;
self.ace._allModes = aceFiles.allModes;
self.ace._allThemes = aceFiles.allThemes;
self.ace._otherFiles = aceFiles.otherFiles;
self.ace.optionsTypes = _.groupBy(_.merge(require('./aceTypes.js'), _.keyBy(self.ace.optionsTypes, 'name')), 'category');
self.ace.defaultMode = self.ace.defaultMode || 'javascript';
self.ace.theme = self.ace.theme || 'chrome';
if (!self.ace.clearModes) {
const extensionMode = self.ace.modes;
const originalMode = require('./defaultMode.js');
self.ace.modes = _.values(_.merge(_.keyBy(originalMode, 'name'), _.keyBy(extensionMode, 'name')));
}
},
init(self) {
// Initialize Custom Schema
self.addCodeFieldType();
// Enable Browser Data
self.enableBrowserData();
},
routes(self) {
return {
...require('./lib/routes')(self)
};
},
methods(self) {
return {
...require('./lib/schema')(self),
...require('./lib/routesMethod')(self)
};
},
extendMethods(self) {
return {
...require('./lib/browser')(self)
};
}
};