Skip to content
This repository has been archived by the owner on Jan 13, 2024. It is now read-only.

Support RegExp mountpoints #1121

Merged
merged 10 commits into from
Apr 24, 2021
17 changes: 14 additions & 3 deletions prelude/bootstrap.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,13 +93,19 @@ EXECSTAT.birthtimeMs = EXECSTAT.birthtime.getTime();

var mountpoints = [];

function isRegExp(val) {
return require('util').types.isRegExp(val);
}

function insideMountpoint(f) {
if (!insideSnapshot(f)) return null;
var file = normalizePath(f);
var found = mountpoints
.map((mountpoint) => {
var { interior } = mountpoint;
var { exterior } = mountpoint;
if (isRegExp(interior) && interior.test(file))
return file.replace(interior, exterior);
if (interior === file) return exterior;
var left = interior + require('path').sep;
if (file.slice(0, left.length) !== left) return null;
Expand All @@ -113,9 +119,14 @@ function insideMountpoint(f) {

function readdirMountpoints(path) {
return mountpoints
.map((mountpoint) => mountpoint.interior)
.filter((interior) => require('path').dirname(interior) === path)
.map((interior) => require('path').basename(interior));
.filter(({ interior }) => {
if (isRegExp(interior)) return interior.test(path);
return require('path').dirname(interior) === path;
})
.map(({ interior, exterior }) => {
if (isRegExp(interior)) return path.replace(interior, exterior);
return require('path').basename(interior);
});
}

function translate(f) {
Expand Down
34 changes: 34 additions & 0 deletions test/test-1121-regexp-mountpoints/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/usr/bin/env node

'use strict';

const fs = require('fs');
const path = require('path');
const assert = require('assert');
const utils = require('../utils.js');

assert(!module.parent);
assert(__dirname === process.cwd());

const target = process.argv[2] || 'host';
const input = './test-x-index.js';
const output = './run-time/test-output.exe';

let right;
utils.mkdirp.sync(path.dirname(output));
utils.mkdirp.sync(path.join(path.dirname(output), 'plugins-D-ext'));

fs.writeFileSync(
path.join(path.dirname(output), 'plugins-D-ext/test-y-require-D.js'),
fs.readFileSync('./plugins-D-ext/test-y-require-D.js')
);

utils.pkg.sync(['--target', target, '--output', output, input]);

right = utils.spawn.sync('./' + path.basename(output), [], {
cwd: path.dirname(output),
});

assert.strictEqual(right, 'I am D\ntest-x-index.js\n');

utils.vacuum.sync(path.dirname(output));
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
'use strict';

var assert = require('assert');

if (__dirname.indexOf('snapshot') < 0) {
console.log(__dirname);
assert(false);
}

console.log('I am D');
17 changes: 17 additions & 0 deletions test/test-1121-regexp-mountpoints/test-x-index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
'use strict';

var fs = require('fs');
var path = require('path');

var myDirectory = path.dirname(process.execPath);

process.pkg.mount(
/^(.*)regexp_mountpoint_test(.*)$/,
function (match, group1, group2) {
return path.join(myDirectory, 'plugins-D-ext', group2);
}
);

require('./regexp_mountpoint_test/test-y-require-D.js'.slice());

console.log(fs.readdirSync(__dirname).join('\n'));