Skip to content

Commit

Permalink
DONE: ES MODULE HACKING DONE FOR BROWSER
Browse files Browse the repository at this point in the history
  • Loading branch information
izelnakri committed Nov 1, 2017
1 parent 2228979 commit 5536421
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 32 deletions.
17 changes: 17 additions & 0 deletions lib/browser.js
Original file line number Diff line number Diff line change
@@ -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;
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
76 changes: 44 additions & 32 deletions rollup.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand All @@ -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/**',
Expand All @@ -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(', ');
}, '') + ' };'
}
8 changes: 8 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"
Expand Down

0 comments on commit 5536421

Please sign in to comment.