match-path-data.ts 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. import { join, dirname } from "path";
  2. import { removeExtension } from "../../src/filesystem";
  3. export interface OneTest {
  4. readonly name: string;
  5. readonly only?: boolean;
  6. readonly skip?: boolean;
  7. readonly absoluteBaseUrl: string;
  8. readonly paths: { [key: string]: Array<string> };
  9. readonly mainFields?: string[];
  10. readonly addMatchAll?: boolean;
  11. readonly existingFiles: ReadonlyArray<string>;
  12. readonly requestedModule: string;
  13. readonly extensions?: ReadonlyArray<string>;
  14. readonly packageJson?: {};
  15. readonly expectedPath: string | undefined;
  16. }
  17. export const tests: ReadonlyArray<OneTest> = [
  18. {
  19. name: "should locate path that matches with star and exists",
  20. absoluteBaseUrl: "/root/",
  21. paths: {
  22. "lib/*": ["location/*"]
  23. },
  24. existingFiles: [join("/root", "location", "mylib", "index.ts")],
  25. requestedModule: "lib/mylib",
  26. expectedPath: dirname(join("/root", "location", "mylib", "index.ts"))
  27. },
  28. {
  29. name: "should resolve to correct path when many are specified",
  30. absoluteBaseUrl: "/root/",
  31. paths: {
  32. "lib/*": ["foo1/*", "foo2/*", "location/*", "foo3/*"]
  33. },
  34. existingFiles: [join("/root", "location", "mylib", "index.ts")],
  35. requestedModule: "lib/mylib",
  36. extensions: [".ts"],
  37. expectedPath: dirname(join("/root", "location", "mylib", "index.ts"))
  38. },
  39. {
  40. name:
  41. "should locate path that matches with star and prioritize pattern with longest prefix",
  42. absoluteBaseUrl: "/root/",
  43. paths: {
  44. "*": ["location/*"],
  45. "lib/*": ["location/*"]
  46. },
  47. existingFiles: [
  48. join("/root", "location", "lib", "mylib", "index.ts"),
  49. join("/root", "location", "mylib", "index.ts")
  50. ],
  51. requestedModule: "lib/mylib",
  52. expectedPath: dirname(join("/root", "location", "mylib", "index.ts"))
  53. },
  54. {
  55. name: "should locate path that matches with star and exists with extension",
  56. absoluteBaseUrl: "/root/",
  57. paths: { "lib/*": ["location/*"] },
  58. existingFiles: [join("/root", "location", "mylib.myext")],
  59. requestedModule: "lib/mylib",
  60. extensions: [".js", ".myext"],
  61. expectedPath: removeExtension(join("/root", "location", "mylib.myext"))
  62. },
  63. {
  64. name: "should resolve request with extension specified",
  65. absoluteBaseUrl: "/root/",
  66. paths: { "lib/*": ["location/*"] },
  67. existingFiles: [join("/root", "location", "test.jpg")],
  68. requestedModule: "lib/test.jpg",
  69. expectedPath: join("/root", "location", "test.jpg")
  70. },
  71. {
  72. name: "should locate path that matches without star and exists",
  73. absoluteBaseUrl: "/root/",
  74. paths: {
  75. "lib/foo": ["location/foo"]
  76. },
  77. existingFiles: [join("/root", "location", "foo.ts")],
  78. requestedModule: "lib/foo",
  79. expectedPath: removeExtension(join("/root", "location", "foo.ts"))
  80. },
  81. {
  82. name: "should resolve to parent folder when filename is in subfolder",
  83. absoluteBaseUrl: "/root/",
  84. paths: { "lib/*": ["location/*"] },
  85. existingFiles: [join("/root", "location", "mylib", "index.ts")],
  86. requestedModule: "lib/mylib",
  87. expectedPath: dirname(join("/root", "location", "mylib", "index.ts"))
  88. },
  89. {
  90. name: "should resolve from main field in package.json",
  91. absoluteBaseUrl: "/root/",
  92. paths: { "lib/*": ["location/*"] },
  93. existingFiles: [join("/root", "location", "mylib", "kalle.ts")],
  94. packageJson: { main: "./kalle.ts" },
  95. requestedModule: "lib/mylib",
  96. expectedPath: removeExtension(
  97. join("/root", "location", "mylib", "kalle.ts")
  98. )
  99. },
  100. {
  101. name: "should resolve from main field in package.json (js)",
  102. absoluteBaseUrl: "/root",
  103. paths: { "lib/*": ["location/*"] },
  104. existingFiles: [join("/root", "location", "mylib.js", "kalle.js")],
  105. packageJson: { main: "./kalle.js" },
  106. requestedModule: "lib/mylib.js",
  107. extensions: [".ts", ".js"],
  108. expectedPath: removeExtension(
  109. join("/root", "location", "mylib.js", "kalle.js")
  110. )
  111. },
  112. {
  113. name:
  114. "should resolve from main field in package.json and correctly remove file extension",
  115. absoluteBaseUrl: "/root/",
  116. paths: { "lib/*": ["location/*"] },
  117. existingFiles: [join("/root", "location", "mylibjs", "kalle.js")],
  118. packageJson: { main: "./kalle.js" },
  119. extensions: [".ts", ".js"],
  120. requestedModule: "lib/mylibjs",
  121. expectedPath: removeExtension(
  122. join("/root", "location", "mylibjs", "kalle.js")
  123. )
  124. },
  125. {
  126. name: "should resolve from list of fields by priority in package.json",
  127. absoluteBaseUrl: "/root/",
  128. paths: { "lib/*": ["location/*"] },
  129. mainFields: ["missing", "browser", "main"],
  130. packageJson: { main: "./main.js", browser: "./browser.js" },
  131. existingFiles: [
  132. join("/root", "location", "mylibjs", "main.js"), // mainFilePath
  133. join("/root", "location", "mylibjs", "browser.js") // browserFilePath
  134. ],
  135. extensions: [".ts", ".js"],
  136. requestedModule: "lib/mylibjs",
  137. expectedPath: removeExtension(
  138. join("/root", "location", "mylibjs", "browser.js")
  139. )
  140. },
  141. {
  142. name: "should ignore field mappings to missing files in package.json",
  143. absoluteBaseUrl: "/root/",
  144. paths: { "lib/*": ["location/*"] },
  145. mainFields: ["browser", "main"],
  146. existingFiles: [join("/root", "location", "mylibjs", "kalle.js")],
  147. requestedModule: "lib/mylibjs",
  148. packageJson: {
  149. main: "./kalle.js",
  150. browser: "./nope.js"
  151. },
  152. extensions: [".ts", ".js"],
  153. expectedPath: removeExtension(
  154. join("/root", "location", "mylibjs", "kalle.js")
  155. )
  156. },
  157. {
  158. name: "should ignore advanced field mappings in package.json",
  159. absoluteBaseUrl: "/root/",
  160. paths: { "lib/*": ["location/*"] },
  161. existingFiles: [
  162. join("/root", "location", "mylibjs", "kalle.js"),
  163. join("/root", "location", "mylibjs", "browser.js")
  164. ],
  165. requestedModule: "lib/mylibjs",
  166. packageJson: {
  167. main: "./kalle.js",
  168. browser: { mylibjs: "./browser.js", "./kalle.js": "./browser.js" }
  169. },
  170. extensions: [".ts", ".js"],
  171. expectedPath: removeExtension(
  172. join("/root", "location", "mylibjs", "kalle.js")
  173. )
  174. },
  175. {
  176. name: "should resolve to with the help of baseUrl when not explicitly set",
  177. absoluteBaseUrl: "/root/",
  178. paths: {},
  179. existingFiles: [join("/root", "mylib", "index.ts")],
  180. requestedModule: "mylib",
  181. expectedPath: dirname(join("/root", "mylib", "index.ts"))
  182. },
  183. {
  184. name: "should not resolve with the help of baseUrl when asked not to",
  185. absoluteBaseUrl: "/root/",
  186. paths: {},
  187. addMatchAll: false,
  188. existingFiles: [join("/root", "mylib", "index.ts")],
  189. requestedModule: "mylib",
  190. expectedPath: undefined
  191. },
  192. {
  193. name: "should not locate path that does not match",
  194. absoluteBaseUrl: "/root/",
  195. paths: { "lib/*": ["location/*"] },
  196. existingFiles: [join("root", "location", "mylib")],
  197. requestedModule: "mylib",
  198. expectedPath: undefined
  199. },
  200. {
  201. name: "should not resolve typings file (index.d.ts)",
  202. absoluteBaseUrl: "/root/",
  203. paths: {
  204. "lib/*": ["location/*"]
  205. },
  206. existingFiles: [join("/root", "location", "mylib", "index.d.ts")],
  207. requestedModule: "lib/mylib",
  208. expectedPath: undefined
  209. }
  210. ];