@storm-stack/core
Version:
A build toolkit and runtime used by Storm Software in TypeScript applications
96 lines (94 loc) • 3.43 kB
JavaScript
import { listExports } from './chunk-HQNYXPKX.js';
import { parseAst } from './chunk-EMQ6Z6RZ.js';
import { writeFile } from './chunk-2LIG4LH7.js';
import { __name } from './chunk-43IZMM3W.js';
import { LogLevelLabel } from '@storm-software/config-tools/types';
import { createDirectory } from '@stryke/fs/helpers';
import { throttle } from '@stryke/helpers/throttle';
import { StormJSON } from '@stryke/json/storm-json';
import { joinPaths, existsSync, findFilePath } from '@stryke/path/index';
import { isSetString } from '@stryke/type-checks/is-set-string';
import { createUnimport as createUnimport$1 } from 'unimport';
var lastImportsDump;
var DEFAULT_UNIMPORT_CONFIG = {
commentsDisable: [
"@unimport-disable",
"@imports-disable",
"@storm-disable",
"@storm-ignore"
],
commentsDebug: [
"@unimport-debug",
"@imports-debug",
"@storm-debug"
],
injectAtEnd: true
};
function createUnimport(context) {
context.log(LogLevelLabel.TRACE, "Creating Unimport context with Storm Stack presets");
let unimport = createUnimport$1({
...DEFAULT_UNIMPORT_CONFIG,
presets: []
});
async function refreshRuntimeImports() {
const presets = [];
for (const id of context.vfs.runtimeIdMap.keys()) {
const contents = await context.vfs.readFile(id);
if (contents) {
context.log(LogLevelLabel.TRACE, `Processing exports from runtime file: ${id}`);
const importNames = listExports(parseAst(contents)).filter((importName) => !presets.some((preset) => preset?.imports && !preset?.imports.some((presetImport) => isSetString(presetImport) && presetImport === importName || Array.isArray(presetImport) && presetImport[0] === importName)));
if (importNames.length > 0) {
presets.push({
imports: importNames,
from: id
});
}
}
}
unimport = createUnimport$1({
...DEFAULT_UNIMPORT_CONFIG,
presets,
virtualImports: Array.from(context.vfs.runtimeIdMap.keys())
});
await unimport.init();
}
__name(refreshRuntimeImports, "refreshRuntimeImports");
async function dumpImports() {
context.log(LogLevelLabel.TRACE, "Dumping import file...");
const items = await unimport.getImports();
const importDumpFile = joinPaths(context.dataPath, "imports-dump.json");
if (!existsSync(findFilePath(importDumpFile))) {
await createDirectory(findFilePath(importDumpFile));
}
context.log(LogLevelLabel.TRACE, `Writing imports-dump JSON file: ${importDumpFile}`);
const content = StormJSON.stringify(items);
if (content.trim() !== lastImportsDump?.trim()) {
lastImportsDump = content;
await writeFile(context.log, importDumpFile, content);
}
}
__name(dumpImports, "dumpImports");
const dumpImportsThrottled = throttle(dumpImports, 500);
async function injectImports(source) {
const result = await unimport.injectImports(source.code, source.id);
if (!source.code.hasChanged()) {
return source;
}
await dumpImportsThrottled();
return {
...source,
code: result.s
};
}
__name(injectImports, "injectImports");
return {
...unimport,
dumpImports: dumpImportsThrottled,
injectImports,
refreshRuntimeImports
};
}
__name(createUnimport, "createUnimport");
export { createUnimport };
//# sourceMappingURL=chunk-KRRKXJET.js.map
//# sourceMappingURL=chunk-KRRKXJET.js.map