From 2aae6b6e77397b085eeef91defd0fbb3f186bc52 Mon Sep 17 00:00:00 2001 From: Wilfred Hughes Date: Tue, 27 Jul 2021 23:48:03 -0700 Subject: [PATCH] Add a JS test file showing a larger change --- sample_files/load_after.js | 243 ++++++++++++++++++++++++++++++++++++ sample_files/load_before.js | 240 +++++++++++++++++++++++++++++++++++ 2 files changed, 483 insertions(+) create mode 100644 sample_files/load_after.js create mode 100644 sample_files/load_before.js diff --git a/sample_files/load_after.js b/sample_files/load_after.js new file mode 100644 index 000000000..0e2a5e8b1 --- /dev/null +++ b/sample_files/load_after.js @@ -0,0 +1,243 @@ +"use strict"; + +// TODO: rename this file fresh-db.js and separate out metawiki file +// loading from 3rd party code loading. + +var fs = require("fs"); +var async = require("async"); +var path = require("path"); + +var db = require("./db.js"); +var models = require("./models.js"); + +var total = 0; + +function createResource(resourcePath, localPath) { + var MIME_TYPES = { + ".css": "text/css", + ".html": "text/html", + ".js": "application/javascript", + "": "text/x-markdown", + }; + + return function (cb) { + total++; + new models.Resource({ + path: resourcePath, + mimeType: MIME_TYPES[path.extname(localPath)], + content: fs.readFileSync(localPath, { + encoding: "utf8", + }), + created: Date.now(), + bootstrapPath: localPath, + }).save(cb); + }; +} + +function createBinaryResource(opts) { + return function (cb) { + total++; + new models.Resource({ + path: opts.path, + mimeType: opts.mimeType, + created: Date.now(), + localPath: opts.localPath, + }).save(cb); + }; +} + +async.series( + [ + // Remove all existing resources, install a fresh set, and cleanup. + db.connect, + function (cb) { + models.Resource.remove({}, cb); + }, + function (_cb) { + models.Counter.remove({}, _cb); + }, + function (_cb) { + new models.Counter({ name: "Resource", value: 1 }).save(_cb); + }, + function (cb) { + async.parallel( + [ + createBinaryResource({ + path: "logo.jpg", + mimeType: "image/jpeg", + localPath: "ouroboros.jpg", + }), + + // Base codemirror + createResource( + "codemirror/lib/codemirror.css", + "node_modules/codemirror/lib/codemirror.css" + ), + createResource( + "codemirror/lib/codemirror.js", + "node_modules/codemirror/lib/codemirror.js" + ), + + // Editor conveniences + createResource( + "codemirror/addon/edit/closebrackets.js", + "node_modules/codemirror/addon/edit/closebrackets.js" + ), + createResource( + "codemirror/addon/edit/matchbrackets.js", + "node_modules/codemirror/addon/edit/matchbrackets.js" + ), + createResource( + "codemirror/addon/selection/active-line.js", + "node_modules/codemirror/addon/selection/active-line.js" + ), + + // Linting in editor. + createResource( + "codemirror/addon/lint/lint.css", + "node_modules/codemirror/addon/lint/lint.css" + ), + createResource( + "codemirror/addon/lint/lint.js", + "node_modules/codemirror/addon/lint/lint.js" + ), + createResource( + "codemirror/addon/lint/javascript-lint.js", + "node_modules/codemirror/addon/lint/javascript-lint.js" + ), + + // Basic, dumb completion (dabbrev style). + createResource( + "codemirror/addon/hint/show-hint.css", + "node_modules/codemirror/addon/hint/show-hint.css" + ), + createResource( + "codemirror/addon/hint/show-hint.js", + "node_modules/codemirror/addon/hint/show-hint.js" + ), + createResource( + "codemirror/addon/hint/anyword-hint.js", + "node_modules/codemirror/addon/hint/anyword-hint.js" + ), + createResource( + "codemirror/addon/hint/css-hint.js", + "node_modules/codemirror/addon/hint/css-hint.js" + ), + createResource( + "codemirror/addon/hint/html-hint.js", + "node_modules/codemirror/addon/hint/html-hint.js" + ), + createResource( + "codemirror/addon/hint/xml-hint.js", + "node_modules/codemirror/addon/hint/xml-hint.js" + ), + + // Syntax highlighting + createResource( + "codemirror/mode/javascript/javascript.js", + "node_modules/codemirror/mode/javascript/javascript.js" + ), + createResource( + "codemirror/mode/meta.js", + "node_modules/codemirror/mode/meta.js" + ), + createResource( + "codemirror/mode/markdown/markdown.js", + "node_modules/codemirror/mode/markdown/markdown.js" + ), + createResource( + "codemirror/mode/xml/xml.js", + "node_modules/codemirror/mode/xml/xml.js" + ), + createResource( + "codemirror/mode/css/css.js", + "node_modules/codemirror/mode/css/css.js" + ), + + createResource( + "requirejs/require.js", + "node_modules/requirejs/require.js" + ), + + createResource("backbone.js", "node_modules/backbone/backbone.js"), + + createResource( + "underscore.js", + "node_modules/underscore/underscore.js" + ), + + createResource("jquery.js", "node_modules/jquery/dist/jquery.js"), + + createResource( + "marked/marked.js", + "node_modules/marked/lib/marked.js" + ), + + createResource( + "handlebars/handlebars.js", + "node_modules/handlebars/dist/handlebars.js" + ), + + // Notifications + createResource("push/push.js", "node_modules/push.js/push.js"), + + // Icons. + createBinaryResource({ + path: "Ok.png", + mimeType: "image/png", + localPath: "icons/Ok.png", + }), + createBinaryResource({ + path: "Error.png", + mimeType: "image/png", + localPath: "icons/Error-48.png", + }), + + // TODO: it would be nice to have more systematic naming + // of our paths, based on the node_modules path. + createResource("mocha/mocha.js", "node_modules/mocha/mocha.js"), + createResource("mocha/mocha.css", "node_modules/mocha/mocha.css"), + + createResource("metawiki/index.html", "src/frontend/index.html"), + + // TODO: use globbing rather than spelling this out. + createResource("metawiki/routing.js", "src/frontend/routing.js"), + createResource("metawiki/models.js", "src/frontend/models.js"), + createResource( + "metawiki/controllers.js", + "src/frontend/controllers.js" + ), + createResource( + "metawiki/AllPagesController.js", + "src/frontend/AllPagesController.js" + ), + createResource("metawiki/ReadView.js", "src/frontend/ReadView.js"), + createResource("metawiki/EditView.js", "src/frontend/EditView.js"), + createResource("metawiki/templates.js", "src/frontend/templates.js"), + createResource("metawiki/messages.js", "src/frontend/messages.js"), + createResource("metawiki/editor.js", "src/frontend/editor.js"), + createResource("metawiki/app.js", "src/frontend/app.js"), + + createResource("metawiki/metawiki.css", "src/frontend/metawiki.css"), + + createResource("page/Home", "src/frontend/Home"), + createResource("page/Bugs", "src/frontend/Bugs"), + createResource("page/Challenges", "src/frontend/Challenges"), + createResource("page/Bugs", "src/frontend/Bugs"), + createResource("page/Related", "src/frontend/Related"), + createResource("page/Security", "src/frontend/Security"), + createResource("page/Design", "src/frontend/Design"), + ], + cb + ); + }, + db.disconnect, + ], + function (err) { + if (err) { + console.log(["Failed:", err]); + } else { + console.log("Created/updated %s resources.", total); + } + } +); diff --git a/sample_files/load_before.js b/sample_files/load_before.js new file mode 100644 index 000000000..dfdf5e7cd --- /dev/null +++ b/sample_files/load_before.js @@ -0,0 +1,240 @@ +"use strict"; + +// TODO: rename this file fresh-db.js and separate out metawiki file +// loading from 3rd party code loading. + +var fs = require("fs"); +var async = require("async"); +var path = require("path"); + +var db = require("./db.js"); +var models = require("./models.js"); + +var total = 0; + +var MIME_TYPES = { + ".css": "text/css", + ".html": "text/html", + ".js": "application/javascript", + "": "text/x-markdown", +}; + +// Write localPath to the database. +// +// If no resourcePath is provided, convert "node_modules/foo/bar.js" to +// "foo/bar.js". +function createNodeModuleResource(localPath, resourcePath) { + if (resourcePath == null) { + resourcePath = path.relative("node_modules", localPath); + } + + return function (cb) { + total++; + new models.Resource({ + path: resourcePath, + mimeType: MIME_TYPES[path.extname(localPath)], + content: fs.readFileSync(localPath, { + encoding: "utf8", + }), + created: Date.now(), + bootstrapPath: localPath, + }).save(cb); + }; +} + +function createResource(resourcePath, localPath) { + return function (cb) { + total++; + new models.Resource({ + path: resourcePath, + mimeType: MIME_TYPES[path.extname(localPath)], + content: fs.readFileSync(localPath, { + encoding: "utf8", + }), + created: Date.now(), + bootstrapPath: localPath, + }).save(cb); + }; +} + +function createBinaryResource(opts) { + return function (cb) { + total++; + new models.Resource({ + path: opts.path, + mimeType: opts.mimeType, + created: Date.now(), + localPath: opts.localPath, + }).save(cb); + }; +} + +async.series( + [ + // Remove all existing resources, install a fresh set, and cleanup. + db.connect, + function (cb) { + models.Resource.remove({}, cb); + }, + function (_cb) { + models.Counter.remove({}, _cb); + }, + function (_cb) { + new models.Counter({ name: "Resource", value: 1 }).save(_cb); + }, + function (cb) { + async.parallel( + [ + createBinaryResource({ + path: "logo.jpg", + mimeType: "image/jpeg", + localPath: "ouroboros.jpg", + }), + + // Base codemirror + createNodeModuleResource( + "node_modules/codemirror/lib/codemirror.css" + ), + createNodeModuleResource("node_modules/codemirror/lib/codemirror.js"), + + // Editor conveniences + createNodeModuleResource( + "node_modules/codemirror/addon/edit/closebrackets.js" + ), + createNodeModuleResource( + "node_modules/codemirror/addon/edit/matchbrackets.js" + ), + createNodeModuleResource( + "node_modules/codemirror/addon/selection/active-line.js" + ), + + // Linting in editor. + createNodeModuleResource( + "node_modules/codemirror/addon/lint/lint.css" + ), + createNodeModuleResource( + "node_modules/codemirror/addon/lint/lint.js" + ), + createNodeModuleResource( + "node_modules/codemirror/addon/lint/javascript-lint.js" + ), + + // Basic, dumb completion (dabbrev style). + createNodeModuleResource( + "node_modules/codemirror/addon/hint/show-hint.css" + ), + createNodeModuleResource( + "node_modules/codemirror/addon/hint/show-hint.js" + ), + createNodeModuleResource( + "node_modules/codemirror/addon/hint/anyword-hint.js" + ), + createNodeModuleResource( + "node_modules/codemirror/addon/hint/css-hint.js" + ), + createNodeModuleResource( + "node_modules/codemirror/addon/hint/html-hint.js" + ), + createNodeModuleResource( + "node_modules/codemirror/addon/hint/xml-hint.js" + ), + + // Syntax highlighting + createNodeModuleResource( + "node_modules/codemirror/mode/javascript/javascript.js" + ), + createNodeModuleResource("node_modules/codemirror/mode/meta.js"), + createNodeModuleResource( + "node_modules/codemirror/mode/markdown/markdown.js" + ), + createNodeModuleResource("node_modules/codemirror/mode/xml/xml.js"), + createNodeModuleResource("node_modules/codemirror/mode/css/css.js"), + + createNodeModuleResource("node_modules/requirejs/require.js"), + + createNodeModuleResource( + "node_modules/backbone/backbone.js", + "backbone.js" + ), + + createNodeModuleResource( + "node_modules/underscore/underscore.js", + "underscore.js" + ), + + createNodeModuleResource( + "node_modules/jquery/dist/jquery.js", + "jquery.js" + ), + + createNodeModuleResource( + "node_modules/marked/lib/marked.js", + "marked/marked.js" + ), + + createNodeModuleResource( + "node_modules/handlebars/dist/handlebars.js", + "handlebars/handlebars.js" + ), + + // Notifications + createResource("push/push.js", "node_modules/push.js/push.js"), + + // Icons. + createBinaryResource({ + path: "Ok.png", + mimeType: "image/png", + localPath: "icons/Ok.png", + }), + createBinaryResource({ + path: "Error.png", + mimeType: "image/png", + localPath: "icons/Error-48.png", + }), + + createNodeModuleResource("node_modules/mocha/mocha.js"), + createNodeModuleResource("node_modules/mocha/mocha.css"), + + createResource("metawiki/index.html", "src/frontend/index.html"), + + // TODO: use globbing rather than spelling this out. + createResource("metawiki/routing.js", "src/frontend/routing.js"), + createResource("metawiki/models.js", "src/frontend/models.js"), + createResource( + "metawiki/controllers.js", + "src/frontend/controllers.js" + ), + createResource( + "metawiki/AllPagesController.js", + "src/frontend/AllPagesController.js" + ), + createResource("metawiki/ReadView.js", "src/frontend/ReadView.js"), + createResource("metawiki/EditView.js", "src/frontend/EditView.js"), + createResource("metawiki/templates.js", "src/frontend/templates.js"), + createResource("metawiki/messages.js", "src/frontend/messages.js"), + createResource("metawiki/editor.js", "src/frontend/editor.js"), + createResource("metawiki/app.js", "src/frontend/app.js"), + + createResource("metawiki/metawiki.css", "src/frontend/metawiki.css"), + + createResource("page/Home", "src/frontend/Home"), + createResource("page/Bugs", "src/frontend/Bugs"), + createResource("page/Challenges", "src/frontend/Challenges"), + createResource("page/Bugs", "src/frontend/Bugs"), + createResource("page/Related", "src/frontend/Related"), + createResource("page/Security", "src/frontend/Security"), + createResource("page/Design", "src/frontend/Design"), + ], + cb + ); + }, + db.disconnect, + ], + function (err) { + if (err) { + console.log(["Failed:", err]); + } else { + console.log("Created/updated %s resources.", total); + } + } +);