Skip to content

Commit

Permalink
chore(commonjs): Unwrapped wrapper helper functions
Browse files Browse the repository at this point in the history
  • Loading branch information
danielgindi authored and lukastaegert committed Feb 15, 2021
1 parent 0532b6e commit 36c3ef4
Show file tree
Hide file tree
Showing 8 changed files with 62 additions and 75 deletions.
2 changes: 1 addition & 1 deletion packages/commonjs/package.json
Expand Up @@ -63,7 +63,7 @@
"@rollup/plugin-node-resolve": "^8.4.0",
"locate-character": "^2.0.5",
"require-relative": "^0.8.7",
"rollup": "^2.38.3",
"rollup": "^2.39.0",
"shx": "^0.3.2",
"source-map": "^0.7.3",
"source-map-support": "^0.5.19",
Expand Down
27 changes: 5 additions & 22 deletions packages/commonjs/src/dynamic-packages-manager.js
@@ -1,14 +1,7 @@
import { existsSync, readFileSync } from 'fs';
import { join } from 'path';

import {
DYNAMIC_PACKAGES_ID,
DYNAMIC_REGISTER_SUFFIX,
HELPERS_ID,
isWrappedId,
unwrapId,
wrapId
} from './helpers';
import { DYNAMIC_PACKAGES_ID, DYNAMIC_REGISTER_SUFFIX, HELPERS_ID, wrapId } from './helpers';
import { getVirtualPathForDynamicRequirePath, normalizePathSlashes } from './utils';

export function getPackageEntryPoint(dirPath) {
Expand Down Expand Up @@ -47,28 +40,18 @@ export function getDynamicPackagesEntryIntro(
) {
let dynamicImports = Array.from(
dynamicRequireModuleSet,
(dynamicId) => `require(${JSON.stringify(wrapModuleRegisterProxy(dynamicId))});`
(dynamicId) => `require(${JSON.stringify(wrapId(dynamicId, DYNAMIC_REGISTER_SUFFIX))});`
).join('\n');

if (dynamicRequireModuleDirPaths.length) {
dynamicImports += `require(${JSON.stringify(wrapModuleRegisterProxy(DYNAMIC_PACKAGES_ID))});`;
dynamicImports += `require(${JSON.stringify(
wrapId(DYNAMIC_PACKAGES_ID, DYNAMIC_REGISTER_SUFFIX)
)});`;
}

return dynamicImports;
}

export function wrapModuleRegisterProxy(id) {
return wrapId(id, DYNAMIC_REGISTER_SUFFIX);
}

export function unwrapModuleRegisterProxy(id) {
return unwrapId(id, DYNAMIC_REGISTER_SUFFIX);
}

export function isModuleRegisterProxy(id) {
return isWrappedId(id, DYNAMIC_REGISTER_SUFFIX);
}

export function isDynamicModuleImport(id, dynamicRequireModuleSet) {
const normalizedPath = normalizePathSlashes(id);
return dynamicRequireModuleSet.has(normalizedPath) && !normalizedPath.endsWith('.json');
Expand Down
22 changes: 10 additions & 12 deletions packages/commonjs/src/index.js
Expand Up @@ -10,14 +10,13 @@ import analyzeTopLevelStatements from './analyze-top-level-statements';
import {
getDynamicPackagesEntryIntro,
getDynamicPackagesModule,
isDynamicModuleImport,
isModuleRegisterProxy,
unwrapModuleRegisterProxy
isDynamicModuleImport
} from './dynamic-packages-manager';
import getDynamicRequirePaths from './dynamic-require-paths';
import {
DYNAMIC_JSON_PREFIX,
DYNAMIC_PACKAGES_ID,
DYNAMIC_REGISTER_SUFFIX,
EXPORTS_SUFFIX,
EXTERNAL_SUFFIX,
getHelpersModule,
Expand Down Expand Up @@ -123,12 +122,11 @@ export default function commonjs(options = {}) {
return { meta: { commonjs: { isCommonJS: false } } };
}

let disableWrap = false;

// avoid wrapping as this is a commonjsRegister call
if (isModuleRegisterProxy(id)) {
disableWrap = true;
id = unwrapModuleRegisterProxy(id);
const disableWrap = isWrappedId(id, DYNAMIC_REGISTER_SUFFIX);
if (disableWrap) {
// eslint-disable-next-line no-param-reassign
id = unwrapId(id, DYNAMIC_REGISTER_SUFFIX);
}

return transformCommonjs(
Expand Down Expand Up @@ -224,9 +222,9 @@ export default function commonjs(options = {}) {
return `export default require(${JSON.stringify(normalizePathSlashes(id))});`;
}

if (isModuleRegisterProxy(id)) {
if (isWrappedId(id, DYNAMIC_REGISTER_SUFFIX)) {
return getDynamicRequireProxy(
normalizePathSlashes(unwrapModuleRegisterProxy(id)),
normalizePathSlashes(unwrapId(id, DYNAMIC_REGISTER_SUFFIX)),
commonDir
);
}
Expand All @@ -247,8 +245,8 @@ export default function commonjs(options = {}) {
transform(code, rawId) {
let id = rawId;

if (isModuleRegisterProxy(id)) {
id = unwrapModuleRegisterProxy(id);
if (isWrappedId(id, DYNAMIC_REGISTER_SUFFIX)) {
id = unwrapId(id, DYNAMIC_REGISTER_SUFFIX);
}

const extName = extname(id);
Expand Down
23 changes: 10 additions & 13 deletions packages/commonjs/src/resolve-id.js
Expand Up @@ -6,6 +6,7 @@ import { dirname, resolve, sep } from 'path';
import {
DYNAMIC_JSON_PREFIX,
DYNAMIC_PACKAGES_ID,
DYNAMIC_REGISTER_SUFFIX,
EXPORTS_SUFFIX,
EXTERNAL_SUFFIX,
HELPERS_ID,
Expand All @@ -16,11 +17,6 @@ import {
unwrapId,
wrapId
} from './helpers';
import {
isModuleRegisterProxy,
unwrapModuleRegisterProxy,
wrapModuleRegisterProxy
} from './dynamic-packages-manager';

function getCandidatesForExtension(resolved, extension) {
return [resolved + extension, `${resolved}${sep}index${extension}`];
Expand Down Expand Up @@ -54,14 +50,15 @@ export default function getResolveId(extensions) {
}

return function resolveId(importee, rawImporter) {
const importer =
rawImporter && isModuleRegisterProxy(rawImporter)
? unwrapModuleRegisterProxy(rawImporter)
: rawImporter;

if (isWrappedId(importee, MODULE_SUFFIX) || isWrappedId(importee, EXPORTS_SUFFIX)) {
return importee;
}

const importer =
rawImporter && isWrappedId(rawImporter, DYNAMIC_REGISTER_SUFFIX)
? unwrapId(rawImporter, DYNAMIC_REGISTER_SUFFIX)
: rawImporter;

// Except for exports, proxies are only importing resolved ids,
// no need to resolve again
if (importer && isWrappedId(importer, PROXY_SUFFIX)) {
Expand All @@ -77,9 +74,9 @@ export default function getResolveId(extensions) {
} else if (isRequiredModule) {
importee = unwrapId(importee, REQUIRE_SUFFIX);

isModuleRegistration = isModuleRegisterProxy(importee);
isModuleRegistration = isWrappedId(importee, DYNAMIC_REGISTER_SUFFIX);
if (isModuleRegistration) {
importee = unwrapModuleRegisterProxy(importee);
importee = unwrapId(importee, DYNAMIC_REGISTER_SUFFIX);
}
}

Expand All @@ -106,7 +103,7 @@ export default function getResolveId(extensions) {
resolved.id = wrapId(resolved.id, resolved.external ? EXTERNAL_SUFFIX : PROXY_SUFFIX);
resolved.external = false;
} else if (resolved && isModuleRegistration) {
resolved.id = wrapModuleRegisterProxy(resolved.id);
resolved.id = wrapId(resolved.id, DYNAMIC_REGISTER_SUFFIX);
} else if (!resolved && (isProxyModule || isRequiredModule)) {
return { id: wrapId(importee, EXTERNAL_SUFFIX), external: false };
}
Expand Down
20 changes: 10 additions & 10 deletions packages/commonjs/src/transform-commonjs.js
Expand Up @@ -26,14 +26,15 @@ import {
isRequireStatement,
isStaticRequireStatement
} from './generate-imports';
import { DYNAMIC_JSON_PREFIX } from './helpers';
import {
DYNAMIC_JSON_PREFIX,
DYNAMIC_REGISTER_SUFFIX,
isWrappedId,
unwrapId,
wrapId
} from './helpers';
import { tryParse } from './parse';
import { deconflict, getName, getVirtualPathForDynamicRequirePath } from './utils';
import {
isModuleRegisterProxy,
unwrapModuleRegisterProxy,
wrapModuleRegisterProxy
} from './dynamic-packages-manager';

const exportsPattern = /^(?:module\.)?exports(?:\.([a-zA-Z_$][a-zA-Z_$0-9]*))?$/;

Expand Down Expand Up @@ -230,13 +231,13 @@ export default function transformCommonjs(
}

let sourceId = getRequireStringArg(node);
const isDynamicRegister = isModuleRegisterProxy(sourceId);
const isDynamicRegister = isWrappedId(sourceId, DYNAMIC_REGISTER_SUFFIX);
if (isDynamicRegister) {
sourceId = unwrapModuleRegisterProxy(sourceId);
sourceId = unwrapId(sourceId, DYNAMIC_REGISTER_SUFFIX);
if (sourceId.endsWith('.json')) {
sourceId = DYNAMIC_JSON_PREFIX + sourceId;
}
dynamicRegisterSources.add(wrapModuleRegisterProxy(sourceId));
dynamicRegisterSources.add(wrapId(sourceId, DYNAMIC_REGISTER_SUFFIX));
} else {
if (
!sourceId.endsWith('.json') &&
Expand Down Expand Up @@ -332,7 +333,6 @@ export default function transformCommonjs(
storeName: true
});
}

usesDynamicRequire = true;
return;
case 'module':
Expand Down
2 changes: 1 addition & 1 deletion packages/commonjs/test/snapshots/function.js.md
Expand Up @@ -6371,7 +6371,7 @@ Generated by [AVA](https://avajs.dev).
/* eslint-disable */␊
var main = b ;␊
var main = b ;␊
module.exports = main;␊
`,
Expand Down
Binary file modified packages/commonjs/test/snapshots/function.js.snap
Binary file not shown.
41 changes: 25 additions & 16 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 36c3ef4

Please sign in to comment.