Skip to content

Commit

Permalink
fix: magic :)
Browse files Browse the repository at this point in the history
  • Loading branch information
cha0s committed Jan 26, 2024
1 parent e8042c8 commit b09a339
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 44 deletions.
29 changes: 13 additions & 16 deletions packages/build/build/resolve.js
Original file line number Diff line number Diff line change
@@ -1,27 +1,24 @@
const D = require('@flecks/core/build/debug');

const debug = D('@flecks/server/build/runtime');

const Resolver = require('./resolver');

module.exports = function resolve({aliases, fallbacks}, stubs) {
module.exports = function resolve(resolverConfig, stubs) {
debug('installing resolution magic');
const {Module} = require('module');
const {require: Mr} = Module.prototype;
const resolver = new Resolver({aliases, fallbacks, useSyncFileSystemCalls: true});
Module.prototype.require = function hackedRequire(request, options) {
const resolver = new Resolver({
...resolverConfig,
modules: [],
useSyncFileSystemCalls: true,
});
Module.prototype.require = function flecksResolutionMagic(request, options) {
for (let i = 0; i < stubs.length; ++i) {
if (request.startsWith(stubs[i])) {
return undefined;
}
}
try {
return Mr.call(this, request, options);
}
catch (error) {
if (!error.message.startsWith('Cannot find module')) {
throw error;
}
const resolved = resolver.resolveSync(request);
if (!resolved) {
throw error;
}
return Mr.call(this, resolved, options);
}
return Mr.call(this, resolver.resolveSync(request) || request, options);
};
};
13 changes: 0 additions & 13 deletions packages/electron/build/flecks.bootstrap.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,6 @@
const {join} = require('path');

const {banner} = require('@flecks/build/server');

exports.hooks = {
'@flecks/build.config': (target, config) => {
if ('server' === target) {
config.plugins.push(
banner({
// Bootstrap our `require()` magic.
banner: "require('module').Module._initPaths();",
include: 'index.js',
}),
);
}
},
'@flecks/core.config': () => ({
/**
* Browser window options.
Expand Down
20 changes: 20 additions & 0 deletions packages/server/build/flecks.bootstrap.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,24 @@
const {banner} = require('@flecks/build/server');

exports.hooks = {
'@flecks/build.config.alter': ({server}, env, argv, flecks) => {
if (server) {
const resolver = JSON.stringify({
alias: server.resolve.alias,
fallback: server.resolve.fallback,
});
const stubs = JSON.stringify(flecks.stubs);
if ('{}' !== resolver || '[]' !== stubs) {
server.plugins.push(
banner({
// `require()` magic.
banner: `require('@flecks/build/build/resolve')(${resolver}, ${stubs})`,
include: 'index.js',
}),
);
}
}
},
'@flecks/build.files': () => [
/**
* Server build configuration. See: https://webpack.js.org/configuration/
Expand Down
9 changes: 0 additions & 9 deletions packages/server/build/runtime.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@ module.exports = async (config, env, argv, flecks) => {
.filter(([, resolved]) => resolved)
.map(([path]) => path);
const runtime = {
resolver: JSON.stringify({
aliases: flecks.resolver.aliases,
fallbacks: flecks.resolver.fallbacks,
}),
config: JSON.stringify(flecks.config),
loadFlecks: [
'async () => (',
Expand All @@ -42,11 +38,6 @@ module.exports = async (config, env, argv, flecks) => {
' )',
')',
].join('\n'),
stubs: (
JSON.stringify(flecks.stubs.map((stub) => (
stub instanceof RegExp ? [stub.source, stub.flags] : stub
)))
),
...await flecks.invokeAsync('@flecks/server.runtime'),
};
const runtimeString = `{${
Expand Down
7 changes: 1 addition & 6 deletions packages/server/src/entry.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const {version} = require('../package.json');

(async () => {
const runtime = await __non_webpack_require__('@flecks/server/runtime');
const {loadFlecks, resolver, stubs} = runtime;
const {loadFlecks} = runtime;
// eslint-disable-next-line no-console
console.log(`flecks server v${version}`);
try {
Expand All @@ -21,11 +21,6 @@ const {version} = require('../package.json');
}
const debug = D('@flecks/server/entry');
debug('starting server...');
const unserializedStubs = stubs.map((stub) => (Array.isArray(stub) ? new RegExp(...stub) : stub));
if (unserializedStubs.length > 0) {
debug('stubbing with %O', unserializedStubs);
__non_webpack_require__('@flecks/build/build/resolve')(resolver, unserializedStubs);
}
global.flecks = await Flecks.from({...runtime, flecks: await loadFlecks()});
try {
await Promise.all(global.flecks.invokeFlat('@flecks/core.starting'));
Expand Down

0 comments on commit b09a339

Please sign in to comment.