@storm-stack/core
Version:
A build toolkit and runtime used by Storm Software in TypeScript applications
1 lines • 8.72 kB
Source Map (JSON)
{"version":3,"sources":["../../src/lib/unimport.ts"],"names":["lastImportsDump","DEFAULT_UNIMPORT_CONFIG","commentsDisable","commentsDebug","injectAtEnd","createUnimport","context","log","LogLevelLabel","TRACE","unimport","createUnimportExternal","presets","refreshRuntimeImports","id","vfs","runtimeIdMap","keys","contents","readFile","importNames","listExports","parseAst","filter","importName","some","preset","imports","presetImport","isSetString","Array","isArray","length","push","from","virtualImports","init","dumpImports","items","getImports","importDumpFile","joinPaths","dataPath","existsSync","findFilePath","createDirectory","content","StormJSON","stringify","trim","writeFile","dumpImportsThrottled","throttle","injectImports","source","result","code","hasChanged","s"],"mappings":"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","file":"chunk-CV2HBLLG.cjs","sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Storm Stack\n\n This code was released as part of the Storm Stack project. Storm Stack\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/storm-stack.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/storm-stack\n Documentation: https://docs.stormsoftware.com/projects/storm-stack\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { LogLevelLabel } from \"@storm-software/config-tools/types\";\nimport { createDirectory } from \"@stryke/fs/helpers\";\nimport { throttle } from \"@stryke/helpers/throttle\";\nimport { StormJSON } from \"@stryke/json/storm-json\";\nimport { existsSync, findFilePath, joinPaths } from \"@stryke/path/index\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport {\n createUnimport as createUnimportExternal,\n InlinePreset,\n Preset\n} from \"unimport\";\nimport type { SourceFile } from \"../types/compiler\";\nimport { Context, UnimportContext } from \"../types/context\";\nimport { parseAst } from \"./babel/ast\";\nimport { listExports } from \"./babel/module\";\nimport { writeFile } from \"./utilities/write-file\";\n\nlet lastImportsDump: string | undefined;\n\nconst DEFAULT_UNIMPORT_CONFIG = {\n commentsDisable: [\n \"@unimport-disable\",\n \"@imports-disable\",\n \"@storm-disable\",\n \"@storm-ignore\"\n ],\n commentsDebug: [\"@unimport-debug\", \"@imports-debug\", \"@storm-debug\"],\n injectAtEnd: true\n};\n\nexport function createUnimport(context: Context): UnimportContext {\n context.log(\n LogLevelLabel.TRACE,\n \"Creating Unimport context with Storm Stack presets\"\n );\n\n let unimport = createUnimportExternal({\n ...DEFAULT_UNIMPORT_CONFIG,\n presets: [] as Preset[]\n // parser: \"acorn\"\n });\n\n async function refreshRuntimeImports() {\n const presets = [] as Preset[];\n for (const id of context.vfs.runtimeIdMap.keys()) {\n const contents = await context.vfs.readFile(id);\n if (contents) {\n context.log(\n LogLevelLabel.TRACE,\n `Processing exports from runtime file: ${id}`\n );\n\n const importNames = listExports(parseAst(contents)).filter(\n importName =>\n !presets.some(\n preset =>\n (preset as InlinePreset)?.imports &&\n !(preset as InlinePreset)?.imports.some(\n presetImport =>\n (isSetString(presetImport) &&\n presetImport === importName) ||\n (Array.isArray(presetImport) &&\n presetImport[0] === importName)\n )\n )\n );\n if (importNames.length > 0) {\n presets.push({\n imports: importNames,\n from: id\n });\n }\n }\n }\n\n unimport = createUnimportExternal({\n ...DEFAULT_UNIMPORT_CONFIG,\n presets,\n virtualImports: Array.from(context.vfs.runtimeIdMap.keys())\n });\n await unimport.init();\n }\n\n async function dumpImports() {\n context.log(LogLevelLabel.TRACE, \"Dumping import file...\");\n\n const items = await unimport.getImports();\n const importDumpFile = joinPaths(context.dataPath, \"imports-dump.json\");\n if (!existsSync(findFilePath(importDumpFile))) {\n await createDirectory(findFilePath(importDumpFile));\n }\n\n context.log(\n LogLevelLabel.TRACE,\n `Writing imports-dump JSON file: ${importDumpFile}`\n );\n\n const content = StormJSON.stringify(items);\n if (content.trim() !== lastImportsDump?.trim()) {\n lastImportsDump = content;\n await writeFile(context.log, importDumpFile, content);\n }\n }\n\n const dumpImportsThrottled = throttle(dumpImports, 500);\n\n async function injectImports(source: SourceFile) {\n const result = await unimport.injectImports(source.code, source.id);\n\n if (!source.code.hasChanged()) {\n return source;\n }\n\n await dumpImportsThrottled();\n\n // return {\n // s: source.code,\n // imports: [],\n // code: source.code.toString(),\n // map: source.code.generateMap({\n // source: source.id,\n // includeContent: true,\n // hires: true\n // })\n // };\n\n return {\n ...source,\n code: result.s\n };\n }\n\n return {\n ...unimport,\n dumpImports: dumpImportsThrottled,\n injectImports,\n refreshRuntimeImports\n };\n}\n"]}