aboutsummaryrefslogtreecommitdiffstats
path: root/library/moment/tasks/embed_locales.js
diff options
context:
space:
mode:
Diffstat (limited to 'library/moment/tasks/embed_locales.js')
-rw-r--r--library/moment/tasks/embed_locales.js47
1 files changed, 47 insertions, 0 deletions
diff --git a/library/moment/tasks/embed_locales.js b/library/moment/tasks/embed_locales.js
new file mode 100644
index 000000000..5027af10c
--- /dev/null
+++ b/library/moment/tasks/embed_locales.js
@@ -0,0 +1,47 @@
+
+module.exports = function (grunt) {
+ grunt.registerTask('embedLocales', function () {
+ var config = grunt.config('embedLocales');
+
+ var files = grunt.file.expand(config.targetLocales);
+ var embeddedContents = determineEmbeddedContent(files);
+
+ var momentContents = grunt.file.read(config.moment);
+ var modifiedContents = momentContents.replace('/* EMBED_LOCALES */', function () {
+ // If we don't do this, $ symbols in locale files may get interpreted in
+ // the regex replacement
+ return embeddedContents;
+ });
+
+ grunt.file.write(config.dest, modifiedContents);
+ });
+
+ var languageReset = 'moment.locale(\'en\');';
+
+ function determineEmbeddedContent(files) {
+ var embeddedContent = '';
+ files.forEach(function (file) {
+ embeddedContent += transformFile(file);
+ });
+ embeddedContent += '\n ' + languageReset + '\n';
+ return embeddedContent;
+ }
+
+ var reTransform = /function \(factory\) \{[^]*\}(?=\(function \(moment\) \{)/gm;
+ var replaceWith =
+ 'function (factory) {\n' +
+ ' factory(moment);\n' +
+ '}';
+
+ function transformFile(file) {
+ var fileContents = grunt.file.read(file);
+
+ if (!fileContents.match(reTransform)) {
+ grunt.warn('Warning: all locale files must use the common UMD wrapper pattern. Failed locale file: ' + file);
+ return '';
+ }
+
+ return fileContents.replace(reTransform, replaceWith);
+ }
+};
+