Przeglądaj źródła

Merge pull request #7694 from weseek/imprv/122255-refactoring-migration-script

imprv: Refactoring migration script
Yuki Takei 2 lat temu
rodzic
commit
2c734fdb4e

+ 0 - 0
bin/data-migrations/v6/README.md → bin/data-migrations/README.md


+ 13 - 17
bin/data-migrations/v6/src/migration.js → bin/data-migrations/src/index.js

@@ -5,35 +5,30 @@
 var pagesCollection = db.getCollection('pages');
 var revisionsCollection = db.getCollection('revisions');
 
-var getProcessorArray = require('./processor.js');
+var batchSize = process.env.BATCH_SIZE ?? 100; // default 100 revisions in 1 bulkwrite
+var batchSizeInterval = process.env.BATCH_INTERVAL ?? 3000; // default 3 sec
 
-var migrationType = process.env.MIGRATION_TYPE;
-var processors = getProcessorArray(migrationType);
+var migrationModule = process.env.MIGRATION_MODULE;
 
-var operations = [];
+var migrationModules = require(`./migrations/${migrationModule}`);
 
-var batchSize = process.env.BATCH_SIZE ?? 100; // default 100 revisions in 1 bulkwrite
-var batchSizeInterval = process.env.BATCH_INTERVAL ?? 3000; // default 3 sec
+if (migrationModules.length === 0) {
+  throw Error('No valid migrationModules found. Please enter a valid environment variable');
+}
 
-// ===========================================
-// replace method with processors
-// ===========================================
-function replaceLatestRevisions(body, processors) {
+function replaceLatestRevisions(body, migrationModules) {
   var replacedBody = body;
-  processors.forEach((processor) => {
-    replacedBody = processor(replacedBody);
+  migrationModules.forEach((migrationModule) => {
+    replacedBody = migrationModule(replacedBody);
   });
   return replacedBody;
 }
 
-if (processors.length === 0) {
-  throw Error('No valid processors found. Please enter a valid environment variable');
-}
-
+var operations = [];
 pagesCollection.find({}).forEach((doc) => {
   if (doc.revision) {
     var revision = revisionsCollection.findOne({ _id: doc.revision });
-    var replacedBody = replaceLatestRevisions(revision.body, [...processors]);
+    var replacedBody = replaceLatestRevisions(revision.body, [...migrationModules]);
     var operation = {
       updateOne: {
         filter: { _id: revision._id },
@@ -54,4 +49,5 @@ pagesCollection.find({}).forEach((doc) => {
   }
 });
 revisionsCollection.bulkWrite(operations);
+
 print('migration complete!');

+ 8 - 0
bin/data-migrations/src/migrations/custom.js

@@ -0,0 +1,8 @@
+module.exports = [
+  (body) => {
+    // processor for MIGRATION_MODULE=custom
+    // ADD YOUR PROCESS HERE!
+    // https://github.com/weseek/growi/discussions/7180
+    return body;
+  },
+];

+ 8 - 0
bin/data-migrations/src/migrations/v60x/bracketlink.js

@@ -0,0 +1,8 @@
+module.exports = [
+  (body) => {
+    // https://regex101.com/r/btZ4hc/1
+    // eslint-disable-next-line regex/invalid
+    const oldBracketLinkRegExp = /(?<!\[)\[{1}(\/.*?)\]{1}(?!\])/g; // Page Link old format
+    return body.replace(oldBracketLinkRegExp, '[[$1]]');
+  },
+];

+ 6 - 0
bin/data-migrations/src/migrations/v60x/csv.js

@@ -0,0 +1,6 @@
+module.exports = [
+  (body) => {
+    const oldCsvTableRegExp = /::: csv(-h)?\n([\s\S]*?)\n:::/g; // CSV old format
+    return body.replace(oldCsvTableRegExp, '``` csv$1\n$2\n```');
+  },
+];

+ 6 - 0
bin/data-migrations/src/migrations/v60x/drawio.js

@@ -0,0 +1,6 @@
+module.exports = [
+  (body) => {
+    const oldDrawioRegExp = /:::\s?drawio\n(.+?)\n:::/g; // drawio old format
+    return body.replace(oldDrawioRegExp, '``` drawio\n$1\n```');
+  },
+];

+ 6 - 0
bin/data-migrations/src/migrations/v60x/index.js

@@ -0,0 +1,6 @@
+const bracketlink = require('./bracketlink');
+const csv = require('./csv');
+const plantUML = require('./plantuml');
+const tsv = require('./tsv');
+
+module.exports = [...bracketlink, ...csv, ...plantUML, ...tsv];

+ 6 - 0
bin/data-migrations/src/migrations/v60x/plantuml.js

@@ -0,0 +1,6 @@
+module.exports = [
+  (body) => {
+    const oldDrawioRegExp = /:::\s?drawio\n(.+?)\n:::/g; // drawio old format
+    return body.replace(oldDrawioRegExp, '``` drawio\n$1\n```');
+  },
+];

+ 6 - 0
bin/data-migrations/src/migrations/v60x/tsv.js

@@ -0,0 +1,6 @@
+module.exports = [
+  (body) => {
+    const oldTsvTableRegExp = /::: tsv(-h)?\n([\s\S]*?)\n:::/g; // TSV old format
+    return body.replace(oldTsvTableRegExp, '``` tsv$1\n$2\n```');
+  },
+];

+ 3 - 0
bin/data-migrations/src/migrations/v61x/index.js

@@ -0,0 +1,3 @@
+const mdcont = require('./mdcont');
+
+module.exports = [...mdcont];

+ 6 - 0
bin/data-migrations/src/migrations/v61x/mdcont.js

@@ -0,0 +1,6 @@
+module.exports = [
+  (body) => {
+    const oldMdcontPrefixRegExp = /#mdcont-/g;
+    return body.replace(oldMdcontPrefixRegExp, '#');
+  },
+];

+ 0 - 83
bin/data-migrations/v6/src/processor.js

@@ -1,83 +0,0 @@
-
-/* eslint-disable no-undef, no-var, vars-on-top, no-restricted-globals, regex/invalid */
-// ignore lint error because this file is js as mongoshell
-
-// ===========================================
-// processors for old format
-// ===========================================
-function drawioProcessor(body) {
-  var oldDrawioRegExp = /:::\s?drawio\n(.+?)\n:::/g; // drawio old format
-  return body.replace(oldDrawioRegExp, '``` drawio\n$1\n```');
-}
-
-function plantumlProcessor(body) {
-  var oldPlantUmlRegExp = /@startuml\n([\s\S]*?)\n@enduml/g; // plantUML old format
-  return body.replace(oldPlantUmlRegExp, '``` plantuml\n$1\n```');
-}
-
-function tsvProcessor(body) {
-  var oldTsvTableRegExp = /::: tsv(-h)?\n([\s\S]*?)\n:::/g; // TSV old format
-  return body.replace(oldTsvTableRegExp, '``` tsv$1\n$2\n```');
-}
-
-function csvProcessor(body) {
-  var oldCsvTableRegExp = /::: csv(-h)?\n([\s\S]*?)\n:::/g; // CSV old format
-  return body.replace(oldCsvTableRegExp, '``` csv$1\n$2\n```');
-}
-
-function bracketlinkProcessor(body) {
-  // https://regex101.com/r/btZ4hc/1
-  var oldBracketLinkRegExp = /(?<!\[)\[{1}(\/.*?)\]{1}(?!\])/g; // Page Link old format
-  return body.replace(oldBracketLinkRegExp, '[[$1]]');
-}
-
-function mdcontPrefixProcessor(body) {
-  var oldMdcontPrefixRegExp = /#mdcont-/g;
-  return body.replace(oldMdcontPrefixRegExp, '#');
-}
-
-// processor for MIGRATION_TYPE=custom
-function customProcessor(body) {
-  // ADD YOUR PROCESS HERE!
-  // https://github.com/weseek/growi/discussions/7180
-  return body;
-}
-
-// ===========================================
-// define processors
-// ===========================================
-
-function getProcessorArray(migrationType) {
-  var oldFormatProcessors;
-  switch (migrationType) {
-    case 'v6-drawio':
-      oldFormatProcessors = [drawioProcessor];
-      break;
-    case 'v6-plantuml':
-      oldFormatProcessors = [plantumlProcessor];
-      break;
-    case 'v6-tsv':
-      oldFormatProcessors = [tsvProcessor];
-      break;
-    case 'v6-csv':
-      oldFormatProcessors = [csvProcessor];
-      break;
-    case 'v6-bracketlink':
-      oldFormatProcessors = [bracketlinkProcessor];
-      break;
-    case 'mdcont':
-      oldFormatProcessors = [mdcontPrefixProcessor];
-      break;
-    case 'v6':
-      oldFormatProcessors = [drawioProcessor, plantumlProcessor, tsvProcessor, csvProcessor, bracketlinkProcessor];
-      break;
-    case 'custom':
-      oldFormatProcessors = [customProcessor];
-      break;
-    default:
-      oldFormatProcessors = [];
-  }
-  return oldFormatProcessors;
-}
-
-module.exports = getProcessorArray;