@analogjs/vitest-angular
Version:
Vitest Builder for Angular
82 lines • 12 kB
JavaScript
;
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.dev/license
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.createAngularMemoryPlugin = createAngularMemoryPlugin;
// import assert from 'node:assert';
const node_path_1 = require("node:path");
async function createAngularMemoryPlugin(options) {
const { normalizePath } = await Function('return import("vite")')();
const { outputFiles, external } = options;
let config;
let projectRoot;
const workspaceRoot = options?.workspaceRoot || process.cwd();
return {
name: 'vite:angular-memory',
// Ensures plugin hooks run before built-in Vite hooks
enforce: 'pre',
config(userConfig) {
config = userConfig;
projectRoot = (0, node_path_1.resolve)(workspaceRoot, config.root || '.');
},
async resolveId(source, importer) {
// Prevent vite from resolving an explicit external dependency (`externalDependencies` option)
if (external?.includes(source)) {
// This is still not ideal since Vite will still transform the import specifier to
// `/@id/${source}` but is currently closer to a raw external than a resolved file path.
return source;
}
if (importer) {
if (source[0] === '.' &&
normalizePath(importer).startsWith(projectRoot)) {
// Remove query if present
const [importerFile] = importer.split('?', 1);
source =
'/' + (0, node_path_1.join)((0, node_path_1.dirname)((0, node_path_1.relative)(projectRoot, importerFile)), source);
}
}
const [file] = source.split('?', 1);
const fileSplits = file.split('/');
if (outputFiles.has(fileSplits[fileSplits.length - 1])) {
return fileSplits[fileSplits.length - 1];
}
if (outputFiles.has(file)) {
return (0, node_path_1.join)(projectRoot, source);
}
return;
},
load(id) {
const [file] = id.split('?', 1);
const relativeFile = options.angularVersion < 19
? normalizePath((0, node_path_1.relative)(projectRoot, file))
.replace(/^.*\//, '')
.replace('.ts', '.js')
: 'spec-' +
normalizePath((0, node_path_1.relative)(projectRoot, file))
.replace('.ts', '.js')
.replace(/^[./]+/, '_')
.replace(/\//g, '-');
const codeContents = outputFiles.get(relativeFile)?.contents ||
outputFiles.get(id)?.contents;
if (codeContents === undefined) {
return undefined;
}
const code = Buffer.from(codeContents).toString('utf-8');
const mapContents = outputFiles.get(relativeFile + '.map')?.contents;
return {
// Remove source map URL comments from the code if a sourcemap is present.
// Vite will inline and add an additional sourcemap URL for the sourcemap.
code: mapContents
? code.replace(/^\/\/# sourceMappingURL=[^\r\n]*/gm, '')
: code,
map: mapContents && Buffer.from(mapContents).toString('utf-8'),
};
},
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1tZW1vcnktcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdml0ZXN0LWFuZ3VsYXIvc3JjL2xpYi9idWlsZGVycy9idWlsZC9wbHVnaW5zL2FuZ3VsYXItbWVtb3J5LXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOztBQWNILDhEQW9GQztBQWhHRCxvQ0FBb0M7QUFDcEMseUNBQTZEO0FBV3RELEtBQUssVUFBVSx5QkFBeUIsQ0FDN0MsT0FBbUM7SUFFbkMsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLE1BQU8sUUFBUSxDQUN2Qyx1QkFBdUIsQ0FDeEIsRUFBcUMsQ0FBQztJQUN2QyxNQUFNLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUMxQyxJQUFJLE1BQU0sQ0FBQztJQUNYLElBQUksV0FBbUIsQ0FBQztJQUN4QixNQUFNLGFBQWEsR0FBRyxPQUFPLEVBQUUsYUFBYSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUU5RCxPQUFPO1FBQ0wsSUFBSSxFQUFFLHFCQUFxQjtRQUMzQixzREFBc0Q7UUFDdEQsT0FBTyxFQUFFLEtBQUs7UUFDZCxNQUFNLENBQUMsVUFBZTtZQUNwQixNQUFNLEdBQUcsVUFBVSxDQUFDO1lBQ3BCLFdBQVcsR0FBRyxJQUFBLG1CQUFPLEVBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBYyxFQUFFLFFBQWdCO1lBQzlDLDhGQUE4RjtZQUM5RixJQUFJLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDL0Isa0ZBQWtGO2dCQUNsRix3RkFBd0Y7Z0JBQ3hGLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFFRCxJQUFJ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LE9BQU8sQ0FBQzthQUMvRCxDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuZGV2L2xpY2Vuc2VcbiAqL1xuXG4vLyBpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0JztcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4sIHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgQW5ndWxhck1lbW9yeU91dHB1dEZpbGVzIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5pbnRlcmZhY2UgQW5ndWxhck1lbW9yeVBsdWdpbk9wdGlvbnMge1xuICB3b3Jrc3BhY2VSb290Pzogc3RyaW5nO1xuICBhbmd1bGFyVmVyc2lvbjogbnVtYmVyO1xuICBvdXRwdXRGaWxlczogQW5ndWxhck1lbW9yeU91dHB1dEZpbGVzO1xuICBleHRlcm5hbD86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQW5ndWxhck1lbW9yeVBsdWdpbihcbiAgb3B0aW9uczogQW5ndWxhck1lbW9yeVBsdWdpbk9wdGlvbnMsXG4pIHtcbiAgY29uc3QgeyBub3JtYWxpemVQYXRoIH0gPSBhd2FpdCAoRnVuY3Rpb24oXG4gICAgJ3JldHVybiBpbXBvcnQoXCJ2aXRlXCIpJyxcbiAgKSgpIGFzIFByb21pc2U8dHlwZW9mIGltcG9ydCgndml0ZScpPik7XG4gIGNvbnN0IHsgb3V0cHV0RmlsZXMsIGV4dGVybmFsIH0gPSBvcHRpb25zO1xuICBsZXQgY29uZmlnO1xuICBsZXQgcHJvamVjdFJvb3Q6IHN0cmluZztcbiAgY29uc3Qgd29ya3NwYWNlUm9vdCA9IG9wdGlvbnM/LndvcmtzcGFjZVJvb3QgfHwgcHJvY2Vzcy5jd2QoKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICd2aXRlOmFuZ3VsYXItbWVtb3J5JyxcbiAgICAvLyBFbnN1cmVzIHBsdWdpbiBob29rcyBydW4gYmVmb3JlIGJ1aWx0LWluIFZpdGUgaG9va3NcbiAgICBlbmZvcmNlOiAncHJlJyxcbiAgICBjb25maWcodXNlckNvbmZpZzogYW55KSB7XG4gICAgICBjb25maWcgPSB1c2VyQ29uZmlnO1xuICAgICAgcHJvamVjdFJvb3QgPSByZXNvbHZlKHdvcmtzcGFjZVJvb3QsIGNvbmZpZy5yb290IHx8ICcuJyk7XG4gICAgfSxcbiAgICBhc3luYyByZXNvbHZlSWQoc291cmNlOiBzdHJpbmcsIGltcG9ydGVyOiBzdHJpbmcpIHtcbiAgICAgIC8vIFByZXZlbnQgdml0ZSBmcm9tIHJlc29sdmluZyBhbiBleHBsaWNpdCBleHRlcm5hbCBkZXBlbmRlbmN5IChgZXh0ZXJuYWxEZXBlbmRlbmNpZXNgIG9wdGlvbilcbiAgICAgIGlmIChleHRlcm5hbD8uaW5jbHVkZXMoc291cmNlKSkge1xuICAgICAgICAvLyBUaGlzIGlzIHN0aWxsIG5vdCBpZGVhbCBzaW5jZSBWaXRlIHdpbGwgc3RpbGwgdHJhbnNmb3JtIHRoZSBpbXBvcnQgc3BlY2lmaWVyIHRvXG4gICAgICAgIC8vIGAvQGlkLyR7c291cmNlfWAgYnV0IGlzIGN1cnJlbnRseSBjbG9zZXIgdG8gYSByYXcgZXh0ZXJuYWwgdGhhbiBhIHJlc29sdmVkIGZpbGUgcGF0aC5cbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGltcG9ydGVyKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzb3VyY2VbMF0gPT09ICcuJyAmJlxuICAgICAgICAgIG5vcm1hbGl6ZVBhdGgoaW1wb3J0ZXIpLnN0YXJ0c1dpdGgocHJvamVjdFJvb3QpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFJlbW92ZSBxdWVyeSBpZiBwcmVzZW50XG4gICAgICAgICAgY29uc3QgW2ltcG9ydGVyRmlsZV0gPSBpbXBvcnRlci5zcGxpdCgnPycsIDEpO1xuICAgICAgICAgIHNvdXJjZSA9XG4gICAgICAgICAgICAnLycgKyBqb2luKGRpcm5hbWUocmVsYXRpdmUocHJvamVjdFJvb3QsIGltcG9ydGVyRmlsZSkpLCBzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtmaWxlXSA9IHNvdXJjZS5zcGxpdCgnPycsIDEpO1xuICAgICAgY29uc3QgZmlsZVNwbGl0cyA9IGZpbGUuc3BsaXQoJy8nKTtcblxuICAgICAgaWYgKG91dHB1dEZpbGVzLmhhcyhmaWxlU3BsaXRzW2ZpbGVTcGxpdHMubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgIHJldHVybiBmaWxlU3BsaXRzW2ZpbGVTcGxpdHMubGVuZ3RoIC0gMV07XG4gICAgICB9XG5cbiAgICAgIGlmIChvdXRwdXRGaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuIGpvaW4ocHJvamVjdFJvb3QsIHNvdXJjZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfSxcbiAgICBsb2FkKGlkOiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IFtmaWxlXSA9IGlkLnNwbGl0KCc/JywgMSk7XG4gICAgICBjb25zdCByZWxhdGl2ZUZpbGUgPVxuICAgICAgICBvcHRpb25zLmFuZ3VsYXJWZXJzaW9uIDwgMTlcbiAgICAgICAgICA/IG5vcm1hbGl6ZVBhdGgocmVsYXRpdmUocHJvamVjdFJvb3QsIGZpbGUpKVxuICAgICAgICAgICAgICAucmVwbGFjZSgvXi4qXFwvLywgJycpXG4gICAgICAgICAgICAgIC5yZXBsYWNlKCcudHMnLCAnLmpzJylcbiAgICAgICAgICA6ICdzcGVjLScgK1xuICAgICAgICAgICAgbm9ybWFsaXplUGF0aChyZWxhdGl2ZShwcm9qZWN0Um9vdCwgZmlsZSkpXG4gICAgICAgICAgICAgIC5yZXBsYWNlKCcudHMnLCAnLmpzJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL15bLi9dKy8sICdfJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnLScpO1xuXG4gICAgICBjb25zdCBjb2RlQ29udGVudHMgPVxuICAgICAgICBvdXRwdXRGaWxlcy5nZXQocmVsYXRpdmVGaWxlKT8uY29udGVudHMgfHxcbiAgICAgICAgb3V0cHV0RmlsZXMuZ2V0KGlkKT8uY29udGVudHM7XG4gICAgICBpZiAoY29kZUNvbnRlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29kZSA9IEJ1ZmZlci5mcm9tKGNvZGVDb250ZW50cykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBtYXBDb250ZW50cyA9IG91dHB1dEZpbGVzLmdldChyZWxhdGl2ZUZpbGUgKyAnLm1hcCcpPy5jb250ZW50cztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gUmVtb3ZlIHNvdXJjZSBtYXAgVVJMIGNvbW1lbnRzIGZyb20gdGhlIGNvZGUgaWYgYSBzb3VyY2VtYXAgaXMgcHJlc2VudC5cbiAgICAgICAgLy8gVml0ZSB3aWxsIGlubGluZSBhbmQgYWRkIGFuIGFkZGl0aW9uYWwgc291cmNlbWFwIFVSTCBmb3IgdGhlIHNvdXJjZW1hcC5cbiAgICAgICAgY29kZTogbWFwQ29udGVudHNcbiAgICAgICAgICA/IGNvZGUucmVwbGFjZSgvXlxcL1xcLyMgc291cmNlTWFwcGluZ1VSTD1bXlxcclxcbl0qL2dtLCAnJylcbiAgICAgICAgICA6IGNvZGUsXG4gICAgICAgIG1hcDogbWFwQ29udGVudHMgJiYgQnVmZmVyLmZyb20obWFwQ29udGVudHMpLnRvU3RyaW5nKCd1dGYtOCcpLFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuIl19