From 5536421ece12b42ff6a6056869f1f3afdbf6b1bb Mon Sep 17 00:00:00 2001 From: Izel Nakri Date: Wed, 1 Nov 2017 23:23:55 +0100 Subject: [PATCH] DONE: ES MODULE HACKING DONE FOR BROWSER --- lib/browser.js | 17 +++++++++++ package.json | 2 ++ rollup.config.js | 76 ++++++++++++++++++++++++++++-------------------- yarn.lock | 8 +++++ 4 files changed, 71 insertions(+), 32 deletions(-) create mode 100644 lib/browser.js diff --git a/lib/browser.js b/lib/browser.js new file mode 100644 index 0000000..cea9530 --- /dev/null +++ b/lib/browser.js @@ -0,0 +1,17 @@ +import models from '_memserver_models'; +import fixtures from '_memserver_fixtures' +import targetMemServer from '_memserver'; +import MEMSERVER from './mem-server'; + +const modelFixtureTree = Object.keys(models).reduce((tree, modelName) => { + return Object.assign({}, tree, { + [modelName]: { + model: models[modelName], + fixtures: fixtures[modelName] || [] + } + }); +}, {}); + +const memserver = MEMSERVER(modelFixtureTree, targetMemServer); + +export default memserver; diff --git a/package.json b/package.json index cf63d0d..798c787 100644 --- a/package.json +++ b/package.json @@ -38,10 +38,12 @@ "moment": "^2.19.1", "pryjs": "^1.0.3", "rimraf": "^2.6.2", + "rollup": "^0.50.0", "rollup-plugin-commonjs": "^8.2.6", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.1.0", "rollup-plugin-node-resolve": "^3.0.0", + "rollup-plugin-virtual": "^1.0.1", "sinon": "^4.0.1" } } diff --git a/rollup.config.js b/rollup.config.js index 581e170..b83e618 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -3,13 +3,13 @@ require('babel-register')({ }); import fs from 'fs'; -import util from 'util'; import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import globals from 'rollup-plugin-node-globals'; import builtins from 'rollup-plugin-node-builtins'; import Inflector from 'i'; import { classify, dasherize } from 'ember-cli-string-utils'; +import virtual from 'rollup-plugin-virtual'; import JSToCode from './js-to-code'; @@ -22,41 +22,22 @@ if (!fs.existsSync(targetMemServerPath)) { throw new Error('memserver/server.js doesnt exist! Please create a memserver/server.js to use MemServer'); } -const targetMemServer = require(targetMemServerPath).default; -const modelFixtureTree = modelFileNames.reduce((tree, fileName) => { - const modelName = fileName.slice(0, -3); - const fixturePath = `${process.cwd()}/memserver/fixtures/${dasherize(pluralize(modelName))}.js`; - - return Object.assign(tree, { - [classify(modelName)]: { - model: require(`${process.cwd()}/memserver/models/${fileName}`).default, - fixtures: fs.existsSync(fixturePath) ? require(fixturePath).default : [] - } - }); -}, {}); -const modelFixtureTreeCode = '{' + modelFileNames.reduce((string, modelFileName) => { - const modelName = classify(modelFileName.slice(0, -3)); - - return string + `${modelName}: { - model: ${JSToCode(modelFixtureTree[modelName].model)}, - fixtures: ${util.inspect(modelFixtureTree[modelName].fixtures, { depth: null })} - }` -}, '') + `}`; - -// TODO: INVESTIGATE ROLLUP: inject targetMemServer, modelFixtureTree from NODE -> BROWSER without dynamic import problem - export default { - input: 'lib/mem-server.js', + input: 'lib/browser.js', output: { - file: 'dist/lol.js', + file: 'memserver.dist.js', format: 'iife' }, name: 'MEMSERVER', - footer: ` - const targetNamespace = typeof global === 'object' ? global : window; - window.MemServer = MEMSERVER(${modelFixtureTreeCode}, ${targetMemServer}) - `, + footer: 'window.MemServer = MEMSERVER;', plugins: [ + virtual({ + '_memserver_models': generateInMemoryModelsImport(modelFileNames), + '_memserver_fixtures': generateInMemoryFixturesImport(modelFileNames), + '_memserver': ` + import server from '${process.cwd()}/memserver/server'; + export default server;` + }), resolve({ jsnext: true }), commonjs({ include: 'node_modules/**', @@ -66,6 +47,37 @@ export default { } }), globals(), - builtins() + builtins(), ] -}; +} + +function generateInMemoryFixturesImport(modelFileNames) { + const imports = modelFileNames.reduce((codeText, modelFileName) => { + const modelName = classify(modelFileName.slice(0, -3)); + + return codeText + `import ${modelName} from '${process.cwd()}/memserver/fixtures/${dasherize(pluralize(modelName))}';`; + }, ''); + + return imports.concat(createObjectFromModels(modelFileNames)); +} +function generateInMemoryModelsImport(modelFileNames) { + const imports = modelFileNames.reduce((codeText, modelFileName) => { + const modelName = classify(modelFileName.slice(0, -3)); + + return codeText + `import ${modelName} from '${process.cwd()}/memserver/models/${modelFileName}';`; + }, ''); + + return imports.concat(createObjectFromModels(modelFileNames)); +} + +function createObjectFromModels(modelFileNames) { + return 'export default { ' + modelFileNames.reduce((codeText, modelFileName) => { + const modelName = classify(modelFileName.slice(0, -3)); + + if (codeText === '') { + return modelName; + } + + return [codeText, modelName].join(', '); + }, '') + ' };' +} diff --git a/yarn.lock b/yarn.lock index 7374a67..e1ed14b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2294,6 +2294,10 @@ rollup-plugin-node-resolve@^3.0.0: is-module "^1.0.0" resolve "^1.1.6" +rollup-plugin-virtual@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-virtual/-/rollup-plugin-virtual-1.0.1.tgz#8227c94c605b981adfe433ea74de3551e42ffeb4" + rollup-pluginutils@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" @@ -2308,6 +2312,10 @@ rollup-pluginutils@^2.0.1: estree-walker "^0.3.0" micromatch "^2.3.11" +rollup@^0.50.0: + version "0.50.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.50.0.tgz#4c158f4e780e6cb33ff0dbfc184a52cc58cd5f3b" + route-recognizer@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/route-recognizer/-/route-recognizer-0.3.3.tgz#1d365e27fa6995e091675f7dc940a8c00353bd29"