@storm-stack/core
Version:
A build toolkit and runtime used by Storm Software in TypeScript applications
1 lines • 10.4 kB
Source Map (JSON)
{"version":3,"sources":["../../src/lib/esbuild/resolver-plugin.ts"],"names":["NON_NODE_MODULE_REGEX","resolverPlugin","__name","context","options","name","setup","build","skipNodeModulesBundle","external","noExternal","resolvePatterns","tsconfigPathsToRegExp","tsconfig","paths","onResolve","filter","args","path","vfs","isVirtualFile","resolveDir","importer","resolvedPath","resolvePath","projectType","isTsconfigPath","tsconfigPath","resolveTsconfigPath","tsconfigPathPackage","resolveTsconfigPathPackage","includes","match","startsWith","test","isRuntimeFile"],"mappings":"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","file":"chunk-J5FGHGMA.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 { match, tsconfigPathsToRegExp } from \"bundle-require\";\nimport type { Plugin } from \"esbuild\";\nimport type { ResolvedOptions } from \"../../types/build\";\nimport type { Context } from \"../../types/context\";\n\n// Must not start with \"/\" or \"./\" or \"../\" or \"C:\\\" or be the exact strings \"..\" or \".\"\nconst NON_NODE_MODULE_REGEX = /^[A-Z]:[/\\\\]|^\\.{0,2}\\/|^\\.{1,2}$/;\n\nexport const resolverPlugin = (\n context: Context,\n options: Pick<\n ResolvedOptions,\n \"external\" | \"noExternal\" | \"skipNodeModulesBundle\"\n > = {}\n): Plugin => {\n return {\n name: \"storm-stack:resolver\",\n setup(build) {\n const skipNodeModulesBundle =\n options.skipNodeModulesBundle ?? context.options.skipNodeModulesBundle;\n const external = options.external ?? context.options.external ?? [];\n const noExternal = options.noExternal ?? context.options.noExternal ?? [];\n\n if (skipNodeModulesBundle) {\n const resolvePatterns = tsconfigPathsToRegExp(\n context.tsconfig.options.paths ?? []\n );\n\n build.onResolve({ filter: /.*/ }, args => {\n if (args.path) {\n if (\n context.vfs.isVirtualFile(args.path, {\n paths: [args.resolveDir]\n }) ||\n (args.importer && context.vfs.isVirtualFile(args.importer))\n ) {\n const resolvedPath = context.vfs.resolvePath(args.path, {\n paths: [args.resolveDir]\n });\n if (resolvedPath) {\n return {\n path: resolvedPath,\n external: context.options.projectType !== \"application\"\n };\n }\n }\n\n if (context.vfs.isTsconfigPath(args.path)) {\n const tsconfigPath = context.vfs.resolveTsconfigPath(args.path);\n const tsconfigPathPackage =\n context.vfs.resolveTsconfigPathPackage(args.path);\n if (tsconfigPath && tsconfigPathPackage) {\n return {\n path: tsconfigPath,\n external:\n !noExternal.includes(tsconfigPathPackage) &&\n (external.includes(tsconfigPathPackage) ||\n context.options.projectType !== \"application\")\n };\n }\n }\n\n if (\n match(args.path, resolvePatterns) ||\n match(args.path, noExternal) ||\n args.path.startsWith(\"internal:\") ||\n args.path.startsWith(\"virtual:\")\n ) {\n return;\n }\n\n if (match(args.path, external) || args.path.startsWith(\"node:\")) {\n return { external: true };\n }\n\n // Exclude any other import that looks like a Node module\n if (!NON_NODE_MODULE_REGEX.test(args.path)) {\n return {\n path: args.path,\n external: true\n };\n }\n }\n\n // eslint-disable-next-line no-useless-return\n return;\n });\n } else {\n build.onResolve({ filter: /.*/ }, args => {\n if (args.path) {\n if (\n context.vfs.isVirtualFile(args.path, {\n paths: [args.resolveDir]\n }) ||\n (args.importer && context.vfs.isVirtualFile(args.importer))\n ) {\n const resolvedPath = context.vfs.resolvePath(args.path, {\n paths: [args.resolveDir]\n });\n if (resolvedPath) {\n return {\n path: resolvedPath,\n external: context.options.projectType !== \"application\"\n };\n }\n }\n\n if (context.vfs.isTsconfigPath(args.path)) {\n const tsconfigPath = context.vfs.resolveTsconfigPath(args.path);\n const tsconfigPathPackage =\n context.vfs.resolveTsconfigPathPackage(args.path);\n if (tsconfigPath && tsconfigPathPackage) {\n return {\n path: tsconfigPath,\n external:\n !noExternal.includes(tsconfigPathPackage) &&\n (external.includes(tsconfigPathPackage) ||\n context.options.projectType !== \"application\")\n };\n }\n }\n\n if (\n match(args.path, noExternal) ||\n context.vfs.isRuntimeFile(args.path, {\n paths: [args.resolveDir, args.importer]\n })\n ) {\n return;\n }\n\n if (match(args.path, external) || args.path.startsWith(\"node:\")) {\n return { external: true };\n }\n }\n\n // eslint-disable-next-line no-useless-return\n return;\n });\n }\n }\n };\n};\n"]}