storybook 10.1.0-alpha.10 → 10.1.0-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/dist/_browser-chunks/Color-FTG7SQDA.js +1097 -0
  2. package/dist/_browser-chunks/WithTooltip-LMROHDUP.js +1651 -0
  3. package/dist/_browser-chunks/chunk-2FRVAXCZ.js +7 -0
  4. package/dist/_browser-chunks/chunk-3IAH5M2U.js +171 -0
  5. package/dist/_browser-chunks/chunk-3OXGAGBE.js +779 -0
  6. package/dist/_browser-chunks/{chunk-TMDZCWME.js → chunk-3PJE6VLG.js} +1 -3
  7. package/dist/_browser-chunks/{chunk-VAMFPZY3.js → chunk-45UGUKRX.js} +2 -7
  8. package/dist/_browser-chunks/chunk-6XWLIJQL.js +11 -0
  9. package/dist/_browser-chunks/{chunk-FDWKXLBI.js → chunk-74YHFU5B.js} +44 -109
  10. package/dist/_browser-chunks/{chunk-MM7DTO55.js → chunk-A242L54C.js} +10 -16
  11. package/dist/_browser-chunks/chunk-AIOS4NGK.js +252 -0
  12. package/dist/_browser-chunks/chunk-AS2HQEYC.js +14 -0
  13. package/dist/_browser-chunks/chunk-AXG2BOBL.js +836 -0
  14. package/dist/_browser-chunks/chunk-BE2DAXKJ.js +2966 -0
  15. package/dist/_browser-chunks/{chunk-MH6AXFXB.js → chunk-CHUV5WSW.js} +0 -5
  16. package/dist/_browser-chunks/chunk-EBHB6RPS.js +61 -0
  17. package/dist/_browser-chunks/chunk-EUVGDK4H.js +93 -0
  18. package/dist/_browser-chunks/chunk-EZSQOHRI.js +18 -0
  19. package/dist/_browser-chunks/{chunk-CADGRH3P.js → chunk-FNXWN6IK.js} +3 -8
  20. package/dist/_browser-chunks/chunk-GFLS4VP3.js +64 -0
  21. package/dist/_browser-chunks/{chunk-L2D73C6Z.js → chunk-H6XK3RSC.js} +13 -21
  22. package/dist/_browser-chunks/chunk-IPA5A322.js +71 -0
  23. package/dist/_browser-chunks/chunk-JP7NCOJX.js +37 -0
  24. package/dist/_browser-chunks/chunk-KJHJLCBK.js +11 -0
  25. package/dist/_browser-chunks/{chunk-QMY4G4R2.js → chunk-L4RMQ7D7.js} +17 -64
  26. package/dist/_browser-chunks/{chunk-AB7OOPUX.js → chunk-QKODTO7K.js} +0 -5
  27. package/dist/_browser-chunks/chunk-RP5RXKFU.js +2491 -0
  28. package/dist/_browser-chunks/chunk-SL75JR6Y.js +9 -0
  29. package/dist/_browser-chunks/chunk-UD6FQLAF.js +1481 -0
  30. package/dist/_browser-chunks/chunk-VYJQ7RU5.js +2853 -0
  31. package/dist/_browser-chunks/chunk-WJYERY3R.js +136 -0
  32. package/dist/_browser-chunks/chunk-WXP2XJ3O.js +950 -0
  33. package/dist/_browser-chunks/chunk-X3DUQ5RA.js +47 -0
  34. package/dist/_browser-chunks/chunk-XJNX76GA.js +85 -0
  35. package/dist/_browser-chunks/{chunk-F4Q6SGTB.js → chunk-YKE5S47A.js} +177 -399
  36. package/dist/_browser-chunks/{chunk-SN4J4IQ3.js → chunk-ZUWEVLDX.js} +1 -7
  37. package/dist/_browser-chunks/{formatter-OMEEQ6HG.js → formatter-QJ4M4OGQ.js} +4 -9
  38. package/dist/_browser-chunks/{syntaxhighlighter-RJZASWHL.js → syntaxhighlighter-WKBQ5RC7.js} +704 -1848
  39. package/dist/_node-chunks/{builder-manager-HA7CYFCK.js → builder-manager-YUOHSIUB.js} +475 -1013
  40. package/dist/_node-chunks/camelcase-JREIL7NV.js +18 -0
  41. package/dist/_node-chunks/{chunk-RMHAL25C.js → chunk-2D2IODUU.js} +88 -228
  42. package/dist/_node-chunks/chunk-2DMESZFJ.js +943 -0
  43. package/dist/_node-chunks/chunk-4FT2DHGE.js +3009 -0
  44. package/dist/_node-chunks/chunk-5HV3B5OP.js +45571 -0
  45. package/dist/_node-chunks/{chunk-OVXB5GGT.js → chunk-5KLIDWFN.js} +292 -688
  46. package/dist/_node-chunks/chunk-A4APXFQ2.js +759 -0
  47. package/dist/_node-chunks/chunk-B6JWY6PC.js +37 -0
  48. package/dist/_node-chunks/chunk-CZ5GHJCC.js +603 -0
  49. package/dist/_node-chunks/chunk-DUXPWBOK.js +61 -0
  50. package/dist/_node-chunks/chunk-DWXTZT3D.js +58 -0
  51. package/dist/_node-chunks/chunk-E5FJS66Z.js +20 -0
  52. package/dist/_node-chunks/chunk-EZWWR7AR.js +936 -0
  53. package/dist/_node-chunks/chunk-FDXFVHIL.js +1114 -0
  54. package/dist/_node-chunks/{chunk-F3XOPI6H.js → chunk-FZLRAH4N.js} +469 -983
  55. package/dist/_node-chunks/chunk-HZG65SU3.js +34 -0
  56. package/dist/_node-chunks/chunk-IXVYNBMD.js +18 -0
  57. package/dist/_node-chunks/chunk-JARUEMEP.js +4523 -0
  58. package/dist/_node-chunks/chunk-LIH7MTP7.js +3214 -0
  59. package/dist/_node-chunks/chunk-N5GIRUP5.js +1047 -0
  60. package/dist/_node-chunks/{chunk-X4XU27M6.js → chunk-NAOYEL54.js} +15 -24
  61. package/dist/_node-chunks/chunk-O5DA7YLO.js +3171 -0
  62. package/dist/_node-chunks/chunk-OP3INKUD.js +54 -0
  63. package/dist/_node-chunks/chunk-QCO2ZM7F.js +209 -0
  64. package/dist/_node-chunks/chunk-QYQIZBS6.js +26 -0
  65. package/dist/_node-chunks/chunk-SEMIAAWG.js +1564 -0
  66. package/dist/_node-chunks/chunk-TS2UUH2J.js +301 -0
  67. package/dist/_node-chunks/chunk-WA6KZQZ2.js +119 -0
  68. package/dist/_node-chunks/{chunk-ZHSCUGNP.js → chunk-WFLWJO24.js} +3799 -7849
  69. package/dist/_node-chunks/chunk-WUXQMQCB.js +72 -0
  70. package/dist/_node-chunks/{chunk-VPR5IBMG.js → chunk-XXPJ7XR3.js} +8 -10
  71. package/dist/_node-chunks/chunk-Y4E6IGQF.js +61 -0
  72. package/dist/_node-chunks/chunk-ZL3AFKRX.js +1029 -0
  73. package/dist/_node-chunks/chunk-ZXSD6L3S.js +756 -0
  74. package/dist/_node-chunks/dist-DS2B5A3J.js +121 -0
  75. package/dist/_node-chunks/globby-6THB7HVX.js +3452 -0
  76. package/dist/_node-chunks/lib-5NKX4YGG.js +366 -0
  77. package/dist/_node-chunks/mdx-N42X6CFJ-ZLT3QOFF.js +14329 -0
  78. package/dist/_node-chunks/p-limit-PDMWNG7W.js +116 -0
  79. package/dist/_node-chunks/plugin-6XMWOGPO.js +123 -0
  80. package/dist/_node-chunks/{plugin-6ZPCS4LI.js → plugin-LTOXVT6A.js} +36 -56
  81. package/dist/_node-chunks/webpack-inject-mocker-runtime-plugin-2SFE5LQS.js +46582 -0
  82. package/dist/_node-chunks/webpack-mock-plugin-CX5J2U56.js +92 -0
  83. package/dist/actions/decorator.js +21 -42
  84. package/dist/actions/index.js +3 -3
  85. package/dist/babel/index.d.ts +671 -335
  86. package/dist/babel/index.js +11 -11
  87. package/dist/bin/core.js +592 -1546
  88. package/dist/bin/dispatcher.js +26 -37
  89. package/dist/bin/loader.js +23 -34
  90. package/dist/channels/index.js +98 -234
  91. package/dist/cli/index.js +1951 -5308
  92. package/dist/client-logger/index.js +31 -61
  93. package/dist/common/index.js +20 -20
  94. package/dist/components/index.js +4211 -8586
  95. package/dist/core-events/index.js +2 -66
  96. package/dist/core-server/index.js +3054 -7290
  97. package/dist/core-server/presets/common-manager.css +2 -2
  98. package/dist/core-server/presets/common-manager.js +1806 -3427
  99. package/dist/core-server/presets/common-override-preset.js +31 -60
  100. package/dist/core-server/presets/common-preset.js +434 -924
  101. package/dist/core-server/presets/webpack/loaders/storybook-mock-transform-loader.js +15 -19
  102. package/dist/core-server/presets/webpack/loaders/webpack-automock-loader.js +12 -17
  103. package/dist/csf/index.js +534 -1179
  104. package/dist/csf-tools/index.js +9 -9
  105. package/dist/docs-tools/index.js +6 -6
  106. package/dist/highlight/index.js +2 -2
  107. package/dist/instrumenter/index.js +199 -415
  108. package/dist/manager/globals-runtime.js +24150 -47364
  109. package/dist/manager/globals.js +2 -3
  110. package/dist/manager/runtime.js +3961 -8373
  111. package/dist/manager-api/index.js +1231 -2425
  112. package/dist/manager-errors.d.ts +3 -0
  113. package/dist/manager-errors.js +3 -3
  114. package/dist/node-logger/index.js +1253 -2601
  115. package/dist/preview/globals.js +2 -3
  116. package/dist/preview/runtime.js +10364 -21990
  117. package/dist/preview-api/index.d.ts +67 -68
  118. package/dist/preview-api/index.js +13 -13
  119. package/dist/preview-errors.d.ts +3 -0
  120. package/dist/preview-errors.js +4 -4
  121. package/dist/router/index.js +347 -899
  122. package/dist/server-errors.d.ts +3 -0
  123. package/dist/server-errors.js +10 -10
  124. package/dist/telemetry/index.js +24 -24
  125. package/dist/test/index.js +5860 -11645
  126. package/dist/theming/create.js +4 -4
  127. package/dist/theming/index.d.ts +3363 -2597
  128. package/dist/theming/index.js +490 -1086
  129. package/dist/types/index.js +2 -11
  130. package/dist/viewport/index.js +3 -3
  131. package/package.json +5 -5
  132. package/dist/_browser-chunks/Color-FQNEU7YS.js +0 -1695
  133. package/dist/_browser-chunks/WithTooltip-6NHN2GXF.js +0 -2343
  134. package/dist/_browser-chunks/chunk-6A7OIVEL.js +0 -66
  135. package/dist/_browser-chunks/chunk-AW46NMGV.js +0 -1308
  136. package/dist/_browser-chunks/chunk-B4A3ADP3.js +0 -3816
  137. package/dist/_browser-chunks/chunk-FSBVR7H5.js +0 -106
  138. package/dist/_browser-chunks/chunk-FUOHXXZT.js +0 -23
  139. package/dist/_browser-chunks/chunk-GTKOCWCT.js +0 -17
  140. package/dist/_browser-chunks/chunk-HHW4FUMO.js +0 -12
  141. package/dist/_browser-chunks/chunk-JVSKG4YS.js +0 -4052
  142. package/dist/_browser-chunks/chunk-LASUB7TL.js +0 -76
  143. package/dist/_browser-chunks/chunk-LYCSRYYR.js +0 -101
  144. package/dist/_browser-chunks/chunk-NVV6MIOE.js +0 -243
  145. package/dist/_browser-chunks/chunk-OBXWFEPB.js +0 -852
  146. package/dist/_browser-chunks/chunk-OPCDBBL3.js +0 -48
  147. package/dist/_browser-chunks/chunk-PB6FZ3WE.js +0 -130
  148. package/dist/_browser-chunks/chunk-RW5PKMWM.js +0 -4182
  149. package/dist/_browser-chunks/chunk-SYS437NN.js +0 -122
  150. package/dist/_browser-chunks/chunk-U46RQHA4.js +0 -12
  151. package/dist/_browser-chunks/chunk-UTNZYD2N.js +0 -311
  152. package/dist/_browser-chunks/chunk-VUAFL5XK.js +0 -20
  153. package/dist/_browser-chunks/chunk-XDGMHOV7.js +0 -2197
  154. package/dist/_browser-chunks/chunk-XW6KSYKF.js +0 -16
  155. package/dist/_browser-chunks/chunk-Y3M7TW6K.js +0 -1041
  156. package/dist/_browser-chunks/chunk-ZNRFDIVA.js +0 -233
  157. package/dist/_node-chunks/camelcase-QALD4XFE.js +0 -18
  158. package/dist/_node-chunks/chunk-2XY53ALL.js +0 -420
  159. package/dist/_node-chunks/chunk-3CBQMG2A.js +0 -6712
  160. package/dist/_node-chunks/chunk-3WDAPZYQ.js +0 -28
  161. package/dist/_node-chunks/chunk-4ZB555EJ.js +0 -697
  162. package/dist/_node-chunks/chunk-52DXKXY3.js +0 -4272
  163. package/dist/_node-chunks/chunk-5OVB4A6F.js +0 -69
  164. package/dist/_node-chunks/chunk-AGHGNXGH.js +0 -18
  165. package/dist/_node-chunks/chunk-B23X5ZCK.js +0 -1531
  166. package/dist/_node-chunks/chunk-B2DAHWJK.js +0 -220
  167. package/dist/_node-chunks/chunk-CC4PW5MJ.js +0 -34
  168. package/dist/_node-chunks/chunk-D7NIZELR.js +0 -2256
  169. package/dist/_node-chunks/chunk-DO5Q3H4L.js +0 -1250
  170. package/dist/_node-chunks/chunk-ECK7WVFX.js +0 -304
  171. package/dist/_node-chunks/chunk-EUH3NHXA.js +0 -79
  172. package/dist/_node-chunks/chunk-FOQHPHCV.js +0 -1657
  173. package/dist/_node-chunks/chunk-G6EL47NS.js +0 -111
  174. package/dist/_node-chunks/chunk-GFLS4TJB.js +0 -90
  175. package/dist/_node-chunks/chunk-J3XZKWHE.js +0 -1586
  176. package/dist/_node-chunks/chunk-LE63EHJ5.js +0 -1518
  177. package/dist/_node-chunks/chunk-M47XA42S.js +0 -4741
  178. package/dist/_node-chunks/chunk-OOI74AL3.js +0 -61
  179. package/dist/_node-chunks/chunk-PRJHT3GJ.js +0 -61
  180. package/dist/_node-chunks/chunk-Q52PVUSU.js +0 -101
  181. package/dist/_node-chunks/chunk-SDCF5RNN.js +0 -1198
  182. package/dist/_node-chunks/chunk-UJ5SJ23M.js +0 -5029
  183. package/dist/_node-chunks/chunk-UPHK4ETU.js +0 -64658
  184. package/dist/_node-chunks/chunk-V7VURIPB.js +0 -1544
  185. package/dist/_node-chunks/dist-6TXHNR5C.js +0 -175
  186. package/dist/_node-chunks/globby-PBTV6PX6.js +0 -5222
  187. package/dist/_node-chunks/lib-4RTDZVGX.js +0 -518
  188. package/dist/_node-chunks/mdx-N42X6CFJ-COWEH7KR.js +0 -22017
  189. package/dist/_node-chunks/p-limit-PBVZQOFY.js +0 -168
  190. package/dist/_node-chunks/plugin-EOZKYZAG.js +0 -159
  191. package/dist/_node-chunks/webpack-inject-mocker-runtime-plugin-35HMSMR5.js +0 -69102
  192. package/dist/_node-chunks/webpack-mock-plugin-GT3MA5E2.js +0 -124
@@ -0,0 +1,1029 @@
1
+ import CJS_COMPAT_NODE_URL_57ru1wfqqjv from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_57ru1wfqqjv from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_57ru1wfqqjv from "node:module";
4
+
5
+ var __filename = CJS_COMPAT_NODE_URL_57ru1wfqqjv.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_57ru1wfqqjv.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_57ru1wfqqjv.createRequire(import.meta.url);
8
+
9
+ // ------------------------------------------------------------
10
+ // end of CJS compatibility banner, injected by Storybook's esbuild configuration
11
+ // ------------------------------------------------------------
12
+ import {
13
+ any,
14
+ up2 as up
15
+ } from "./chunk-DWXTZT3D.js";
16
+ import {
17
+ invariant
18
+ } from "./chunk-QYQIZBS6.js";
19
+ import {
20
+ resolvePackageDir
21
+ } from "./chunk-A4APXFQ2.js";
22
+ import {
23
+ require_prompts
24
+ } from "./chunk-LIH7MTP7.js";
25
+ import {
26
+ require_picocolors
27
+ } from "./chunk-NAOYEL54.js";
28
+ import {
29
+ __toESM
30
+ } from "./chunk-OP3INKUD.js";
31
+
32
+ // src/cli/project_types.ts
33
+ import { minVersion, validRange } from "semver";
34
+ function eqMajor(versionRange, major) {
35
+ return validRange(versionRange) ? minVersion(versionRange)?.major === major : !1;
36
+ }
37
+ var externalFrameworks = [
38
+ { name: "qwik", packageName: "storybook-framework-qwik" },
39
+ {
40
+ name: "solid",
41
+ packageName: "storybook-solidjs-vite",
42
+ frameworks: ["storybook-solidjs-vite"],
43
+ renderer: "storybook-solidjs-vite"
44
+ },
45
+ {
46
+ name: "nuxt",
47
+ packageName: "@storybook-vue/nuxt",
48
+ frameworks: ["@storybook-vue/nuxt"],
49
+ renderer: "@storybook/vue3"
50
+ }
51
+ ], SUPPORTED_RENDERERS = [
52
+ "react",
53
+ "react-native",
54
+ "vue3",
55
+ "angular",
56
+ "ember",
57
+ "preact",
58
+ "svelte",
59
+ "qwik",
60
+ "solid"
61
+ ], ProjectType = /* @__PURE__ */ ((ProjectType2) => (ProjectType2.UNDETECTED = "UNDETECTED", ProjectType2.UNSUPPORTED = "UNSUPPORTED", ProjectType2.REACT = "REACT", ProjectType2.REACT_SCRIPTS = "REACT_SCRIPTS", ProjectType2.REACT_NATIVE = "REACT_NATIVE", ProjectType2.REACT_NATIVE_WEB = "REACT_NATIVE_WEB", ProjectType2.REACT_NATIVE_AND_RNW = "REACT_NATIVE_AND_RNW", ProjectType2.REACT_PROJECT = "REACT_PROJECT", ProjectType2.WEBPACK_REACT = "WEBPACK_REACT", ProjectType2.NEXTJS = "NEXTJS", ProjectType2.VUE3 = "VUE3", ProjectType2.NUXT = "NUXT", ProjectType2.ANGULAR = "ANGULAR", ProjectType2.EMBER = "EMBER", ProjectType2.WEB_COMPONENTS = "WEB_COMPONENTS", ProjectType2.HTML = "HTML", ProjectType2.QWIK = "QWIK", ProjectType2.PREACT = "PREACT", ProjectType2.SVELTE = "SVELTE", ProjectType2.SVELTEKIT = "SVELTEKIT", ProjectType2.SERVER = "SERVER", ProjectType2.NX = "NX", ProjectType2.SOLID = "SOLID", ProjectType2))(ProjectType || {}), CoreBuilder = /* @__PURE__ */ ((CoreBuilder2) => (CoreBuilder2.Webpack5 = "webpack5", CoreBuilder2.Vite = "vite", CoreBuilder2))(CoreBuilder || {}), CoreWebpackCompilers = /* @__PURE__ */ ((CoreWebpackCompilers2) => (CoreWebpackCompilers2.Babel = "babel", CoreWebpackCompilers2.SWC = "swc", CoreWebpackCompilers2))(CoreWebpackCompilers || {}), CommunityBuilder = /* @__PURE__ */ ((CommunityBuilder2) => (CommunityBuilder2.Rsbuild = "rsbuild", CommunityBuilder2))(CommunityBuilder || {}), compilerNameToCoreCompiler = {
62
+ "@storybook/addon-webpack5-compiler-babel": "babel" /* Babel */,
63
+ "@storybook/addon-webpack5-compiler-swc": "swc" /* SWC */
64
+ }, builderNameToCoreBuilder = {
65
+ "@storybook/builder-webpack5": "webpack5" /* Webpack5 */,
66
+ "@storybook/builder-vite": "vite" /* Vite */
67
+ }, SupportedLanguage = /* @__PURE__ */ ((SupportedLanguage2) => (SupportedLanguage2.JAVASCRIPT = "javascript", SupportedLanguage2.TYPESCRIPT = "typescript", SupportedLanguage2))(SupportedLanguage || {}), supportedTemplates = [
68
+ {
69
+ preset: "NUXT" /* NUXT */,
70
+ dependencies: ["nuxt"],
71
+ matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
72
+ },
73
+ {
74
+ preset: "VUE3" /* VUE3 */,
75
+ dependencies: {
76
+ // This Vue template works with Vue 3
77
+ vue: (versionRange) => versionRange === "next" || eqMajor(versionRange, 3)
78
+ },
79
+ matcherFunction: ({ dependencies }) => dependencies?.some(Boolean) ?? !1
80
+ },
81
+ {
82
+ preset: "EMBER" /* EMBER */,
83
+ dependencies: ["ember-cli"],
84
+ matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
85
+ },
86
+ {
87
+ preset: "NEXTJS" /* NEXTJS */,
88
+ dependencies: ["next"],
89
+ matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
90
+ },
91
+ {
92
+ preset: "QWIK" /* QWIK */,
93
+ dependencies: ["@builder.io/qwik"],
94
+ matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
95
+ },
96
+ {
97
+ preset: "REACT_PROJECT" /* REACT_PROJECT */,
98
+ peerDependencies: ["react"],
99
+ matcherFunction: ({ peerDependencies }) => peerDependencies?.every(Boolean) ?? !0
100
+ },
101
+ {
102
+ preset: "REACT_NATIVE" /* REACT_NATIVE */,
103
+ dependencies: ["react-native", "react-native-scripts"],
104
+ matcherFunction: ({ dependencies }) => dependencies?.some(Boolean) ?? !1
105
+ },
106
+ {
107
+ preset: "REACT_SCRIPTS" /* REACT_SCRIPTS */,
108
+ // For projects using a custom/forked `react-scripts` package.
109
+ files: ["/node_modules/.bin/react-scripts"],
110
+ // For standard CRA projects
111
+ dependencies: ["react-scripts"],
112
+ matcherFunction: ({ dependencies, files }) => (dependencies?.every(Boolean) || files?.every(Boolean)) ?? !1
113
+ },
114
+ {
115
+ preset: "ANGULAR" /* ANGULAR */,
116
+ dependencies: ["@angular/core"],
117
+ matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
118
+ },
119
+ {
120
+ preset: "WEB_COMPONENTS" /* WEB_COMPONENTS */,
121
+ dependencies: ["lit-element", "lit-html", "lit"],
122
+ matcherFunction: ({ dependencies }) => dependencies?.some(Boolean) ?? !1
123
+ },
124
+ {
125
+ preset: "PREACT" /* PREACT */,
126
+ dependencies: ["preact"],
127
+ matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
128
+ },
129
+ {
130
+ // TODO: This only works because it is before the SVELTE template. could be more explicit
131
+ preset: "SVELTEKIT" /* SVELTEKIT */,
132
+ dependencies: ["@sveltejs/kit"],
133
+ matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
134
+ },
135
+ {
136
+ preset: "SVELTE" /* SVELTE */,
137
+ dependencies: ["svelte"],
138
+ matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
139
+ },
140
+ {
141
+ preset: "SOLID" /* SOLID */,
142
+ dependencies: ["solid-js"],
143
+ matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
144
+ },
145
+ // DO NOT MOVE ANY TEMPLATES BELOW THIS LINE
146
+ // React is part of every Template, after Storybook is initialized once
147
+ {
148
+ preset: "WEBPACK_REACT" /* WEBPACK_REACT */,
149
+ dependencies: ["react", "webpack"],
150
+ matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
151
+ },
152
+ {
153
+ preset: "REACT" /* REACT */,
154
+ dependencies: ["react"],
155
+ matcherFunction: ({ dependencies }) => dependencies?.every(Boolean) ?? !0
156
+ }
157
+ ], unsupportedTemplate = {
158
+ preset: "UNSUPPORTED" /* UNSUPPORTED */,
159
+ dependencies: {},
160
+ matcherFunction: ({ dependencies }) => dependencies?.some(Boolean) ?? !1
161
+ }, notInstallableProjectTypes = [
162
+ "UNDETECTED" /* UNDETECTED */,
163
+ "UNSUPPORTED" /* UNSUPPORTED */,
164
+ "NX" /* NX */
165
+ ], installableProjectTypes = Object.values(ProjectType).filter((type) => !notInstallableProjectTypes.includes(type)).map((type) => type.toLowerCase());
166
+
167
+ // src/cli/dirs.ts
168
+ import { join as join2 } from "node:path";
169
+ import { Readable as Readable2 } from "node:stream";
170
+ import { pipeline as pipeline2 } from "node:stream/promises";
171
+ import { createGunzip } from "node:zlib";
172
+ import { temporaryDirectory, versions } from "storybook/internal/common";
173
+
174
+ // ../node_modules/get-npm-tarball-url/lib/index.mjs
175
+ function src_default(pkgName, pkgVersion, opts) {
176
+ let registry;
177
+ opts?.registry ? registry = opts.registry.endsWith("/") ? opts.registry : `${opts.registry}/` : registry = "https://registry.npmjs.org/";
178
+ let scopelessName = getScopelessName(pkgName);
179
+ return `${registry}${pkgName}/-/${scopelessName}-${removeBuildMetadataFromVersion(pkgVersion)}.tgz`;
180
+ }
181
+ function removeBuildMetadataFromVersion(version) {
182
+ let plusPos = version.indexOf("+");
183
+ return plusPos === -1 ? version : version.substring(0, plusPos);
184
+ }
185
+ function getScopelessName(name) {
186
+ return name[0] !== "@" ? name : name.split("/")[1];
187
+ }
188
+
189
+ // ../node_modules/modern-tar/dist/unpacker-BKKRRs7i.js
190
+ var FLAGTYPE = {
191
+ 0: "file",
192
+ 1: "link",
193
+ 2: "symlink",
194
+ 3: "character-device",
195
+ 4: "block-device",
196
+ 5: "directory",
197
+ 6: "fifo",
198
+ x: "pax-header",
199
+ g: "pax-global-header",
200
+ L: "gnu-long-name",
201
+ K: "gnu-long-link-name"
202
+ }, ZERO_BLOCK = new Uint8Array(512), encoder = new TextEncoder(), decoder = new TextDecoder();
203
+ function readString(view, offset, size) {
204
+ let end = view.indexOf(0, offset), sliceEnd = end === -1 || end > offset + size ? offset + size : end;
205
+ return decoder.decode(view.subarray(offset, sliceEnd));
206
+ }
207
+ function readOctal(view, offset, size) {
208
+ let value = 0, end = offset + size;
209
+ for (let i = offset; i < end; i++) {
210
+ let charCode = view[i];
211
+ if (charCode === 0) break;
212
+ charCode !== 32 && (value = (value << 3) + (charCode - 48));
213
+ }
214
+ return value;
215
+ }
216
+ function readNumeric(view, offset, size) {
217
+ if (view[offset] & 128) {
218
+ let result = 0;
219
+ result = view[offset] & 127;
220
+ for (let i = 1; i < size; i++) result = result * 256 + view[offset + i];
221
+ if (!Number.isSafeInteger(result)) throw new Error("TAR number too large");
222
+ return result;
223
+ }
224
+ return readOctal(view, offset, size);
225
+ }
226
+ var CHECKSUM_SPACE = 32;
227
+ function validateChecksum(block) {
228
+ let stored = readOctal(block, 148, 8), sum = 0;
229
+ for (let i = 0; i < block.length; i++) i >= 148 && i < 156 ? sum += CHECKSUM_SPACE : sum += block[i];
230
+ return stored === sum;
231
+ }
232
+ function parseUstarHeader(block, strict) {
233
+ if (strict && !validateChecksum(block)) throw new Error("Invalid tar header checksum.");
234
+ let typeflag = readString(block, 156, 1), header = {
235
+ name: readString(block, 0, 100),
236
+ mode: readOctal(block, 100, 8),
237
+ uid: readNumeric(block, 108, 8),
238
+ gid: readNumeric(block, 116, 8),
239
+ size: readNumeric(block, 124, 12),
240
+ mtime: new Date(readNumeric(block, 136, 12) * 1e3),
241
+ type: FLAGTYPE[typeflag] || "file",
242
+ linkname: readString(block, 157, 100)
243
+ }, magic = readString(block, 257, 6);
244
+ return magic.trim() === "ustar" && (header.uname = readString(block, 265, 32), header.gname = readString(block, 297, 32)), magic === "ustar" && (header.prefix = readString(block, 345, 155)), header;
245
+ }
246
+ var PAX_MAPPING = {
247
+ path: ["name", (v) => v],
248
+ linkpath: ["linkname", (v) => v],
249
+ size: ["size", (v) => parseInt(v, 10)],
250
+ mtime: ["mtime", parseFloat],
251
+ uid: ["uid", (v) => parseInt(v, 10)],
252
+ gid: ["gid", (v) => parseInt(v, 10)],
253
+ uname: ["uname", (v) => v],
254
+ gname: ["gname", (v) => v]
255
+ };
256
+ function parsePax(buffer) {
257
+ let decoder$1 = new TextDecoder("utf-8"), overrides = {}, pax = {}, offset = 0;
258
+ for (; offset < buffer.length; ) {
259
+ let spaceIndex = buffer.indexOf(32, offset);
260
+ if (spaceIndex === -1) break;
261
+ let length = parseInt(decoder$1.decode(buffer.subarray(offset, spaceIndex)), 10);
262
+ if (Number.isNaN(length) || length === 0) break;
263
+ let recordEnd = offset + length, [key, value] = decoder$1.decode(buffer.subarray(spaceIndex + 1, recordEnd - 1)).split("=", 2);
264
+ if (key && value !== void 0) {
265
+ pax[key] = value;
266
+ let mapping = PAX_MAPPING[key];
267
+ if (mapping) {
268
+ let [targetKey, parser] = mapping, parsedValue = parser(value);
269
+ (typeof parsedValue == "string" || !Number.isNaN(parsedValue)) && (overrides[targetKey] = parsedValue);
270
+ }
271
+ }
272
+ offset = recordEnd;
273
+ }
274
+ return Object.keys(pax).length > 0 && (overrides.pax = pax), overrides;
275
+ }
276
+ function applyOverrides(header, overrides) {
277
+ overrides.name !== void 0 && (header.name = overrides.name), overrides.linkname !== void 0 && (header.linkname = overrides.linkname), overrides.size !== void 0 && (header.size = overrides.size), overrides.mtime !== void 0 && (header.mtime = new Date(overrides.mtime * 1e3)), overrides.uid !== void 0 && (header.uid = overrides.uid), overrides.gid !== void 0 && (header.gid = overrides.gid), overrides.uname !== void 0 && (header.uname = overrides.uname), overrides.gname !== void 0 && (header.gname = overrides.gname), overrides.pax && (header.pax = Object.assign({}, header.pax ?? {}, overrides.pax));
278
+ }
279
+ function getMetaParser(type) {
280
+ switch (type) {
281
+ case "pax-global-header":
282
+ case "pax-header":
283
+ return parsePax;
284
+ case "gnu-long-name":
285
+ return (data) => ({ name: readString(data, 0, data.length) });
286
+ case "gnu-long-link-name":
287
+ return (data) => ({ linkname: readString(data, 0, data.length) });
288
+ default:
289
+ return;
290
+ }
291
+ }
292
+ var EOF_BUFFER = new Uint8Array(512 * 2);
293
+ function transformHeader(header, options) {
294
+ let { strip, filter, map } = options;
295
+ if (!strip && !filter && !map) return header;
296
+ let h = { ...header };
297
+ if (strip && strip > 0) {
298
+ let components = h.name.split("/").filter(Boolean);
299
+ if (strip >= components.length) return null;
300
+ let newName = components.slice(strip).join("/");
301
+ if (h.name = h.type === "directory" && !newName.endsWith("/") ? `${newName}/` : newName, h.linkname?.startsWith("/")) {
302
+ let linkComponents = h.linkname.split("/").filter(Boolean);
303
+ h.linkname = strip >= linkComponents.length ? "/" : `/${linkComponents.slice(strip).join("/")}`;
304
+ }
305
+ }
306
+ if (filter?.(h) === !1) return null;
307
+ let result = map ? map(h) : h;
308
+ return result && (!result.name || !result.name.trim() || result.name === "." || result.name === "/") ? null : result;
309
+ }
310
+ var STATE_HEADER = 0, STATE_BODY = 1, STATE_PADDING = 2, STATE_AWAIT_EOF = 3;
311
+ function createTarUnpacker(handler, options = {}) {
312
+ let strict = options.strict ?? !1, chunkQueue = [], totalAvailable = 0, state = STATE_HEADER, waitingForData = !1, currentEntry = null, paxGlobals = {}, nextEntryOverrides = {};
313
+ function consume(size, callback) {
314
+ let remaining = Math.min(size, totalAvailable), initialRemaining = remaining;
315
+ for (; remaining > 0 && chunkQueue.length > 0; ) {
316
+ let chunkNode = chunkQueue[0], available = chunkNode.data.length - chunkNode.consumed, toProcess = Math.min(remaining, available);
317
+ callback && callback(chunkNode.data.subarray(chunkNode.consumed, chunkNode.consumed + toProcess)), chunkNode.consumed += toProcess, remaining -= toProcess, chunkNode.consumed >= chunkNode.data.length && chunkQueue.shift();
318
+ }
319
+ return totalAvailable -= initialRemaining - remaining, initialRemaining - remaining;
320
+ }
321
+ function read(size) {
322
+ let toRead = Math.min(size, totalAvailable);
323
+ if (toRead === 0) return null;
324
+ let chunk = chunkQueue[0];
325
+ if (chunk && chunk.data.length - chunk.consumed >= toRead) {
326
+ let result$1 = chunk.data.subarray(chunk.consumed, chunk.consumed + toRead);
327
+ return chunk.consumed += toRead, totalAvailable -= toRead, chunk.consumed >= chunk.data.length && chunkQueue.shift(), result$1;
328
+ }
329
+ let result = new Uint8Array(toRead), offset = 0;
330
+ return consume(toRead, (data) => {
331
+ result.set(data, offset), offset += data.length;
332
+ }), result;
333
+ }
334
+ function process2() {
335
+ for (; ; ) switch (state) {
336
+ case STATE_HEADER: {
337
+ if (totalAvailable < 512) {
338
+ waitingForData = !0;
339
+ return;
340
+ }
341
+ let headerBlock = read(512);
342
+ if (!headerBlock) {
343
+ waitingForData = !0;
344
+ return;
345
+ }
346
+ if (isZeroBlock(headerBlock)) {
347
+ state = STATE_AWAIT_EOF;
348
+ continue;
349
+ }
350
+ waitingForData = !1;
351
+ try {
352
+ let internalHeader = parseUstarHeader(headerBlock, strict), header = {
353
+ ...internalHeader,
354
+ name: internalHeader.name
355
+ }, metaParser = getMetaParser(header.type);
356
+ if (metaParser) {
357
+ let paddedSize = header.size + 511 & -512;
358
+ if (totalAvailable < paddedSize) {
359
+ waitingForData = !0, chunkQueue.unshift({
360
+ data: headerBlock,
361
+ consumed: 0
362
+ }), totalAvailable += 512;
363
+ return;
364
+ }
365
+ let metaBlock = read(paddedSize);
366
+ if (!metaBlock) {
367
+ waitingForData = !0;
368
+ return;
369
+ }
370
+ let overrides = metaParser(metaBlock.subarray(0, header.size));
371
+ header.type === "pax-global-header" ? Object.assign(paxGlobals, overrides) : Object.assign(nextEntryOverrides, overrides);
372
+ continue;
373
+ }
374
+ internalHeader.prefix && (header.name = `${internalHeader.prefix}/${header.name}`), applyOverrides(header, paxGlobals), applyOverrides(header, nextEntryOverrides), nextEntryOverrides = {}, handler.onHeader(header), header.size > 0 ? (currentEntry = {
375
+ remaining: header.size,
376
+ padding: -header.size & 511
377
+ }, state = STATE_BODY) : handler.onEndEntry();
378
+ } catch (error) {
379
+ handler.onError(error);
380
+ return;
381
+ }
382
+ continue;
383
+ }
384
+ case STATE_BODY: {
385
+ if (!currentEntry) throw new Error("No current entry for body");
386
+ let toForward = Math.min(currentEntry.remaining, totalAvailable);
387
+ if (toForward > 0) {
388
+ let consumed = consume(toForward, handler.onData);
389
+ currentEntry.remaining -= consumed;
390
+ }
391
+ if (currentEntry.remaining === 0)
392
+ state = currentEntry.padding > 0 ? STATE_PADDING : STATE_HEADER, state === STATE_HEADER && (handler.onEndEntry(), currentEntry = null);
393
+ else if (totalAvailable === 0) {
394
+ waitingForData = !0;
395
+ return;
396
+ }
397
+ continue;
398
+ }
399
+ case STATE_PADDING:
400
+ if (!currentEntry) throw new Error("No current entry for padding");
401
+ if (totalAvailable < currentEntry.padding) {
402
+ waitingForData = !0;
403
+ return;
404
+ }
405
+ currentEntry.padding > 0 && consume(currentEntry.padding), handler.onEndEntry(), currentEntry = null, state = STATE_HEADER;
406
+ continue;
407
+ case STATE_AWAIT_EOF: {
408
+ if (totalAvailable < 512) {
409
+ waitingForData = !0;
410
+ return;
411
+ }
412
+ let secondBlock = read(512);
413
+ if (!secondBlock) {
414
+ waitingForData = !0;
415
+ return;
416
+ }
417
+ if (isZeroBlock(secondBlock)) return;
418
+ if (strict) {
419
+ handler.onError(new Error("Invalid EOF"));
420
+ return;
421
+ }
422
+ chunkQueue.unshift({
423
+ data: secondBlock,
424
+ consumed: 0
425
+ }), totalAvailable += 512, state = STATE_HEADER;
426
+ continue;
427
+ }
428
+ default:
429
+ throw new Error("Invalid state in tar unpacker.");
430
+ }
431
+ }
432
+ return {
433
+ write(chunk) {
434
+ if (chunk.length !== 0 && (chunkQueue.push({
435
+ data: chunk,
436
+ consumed: 0
437
+ }), totalAvailable += chunk.length, waitingForData)) {
438
+ waitingForData = !1;
439
+ try {
440
+ process2();
441
+ } catch (error) {
442
+ handler.onError(error);
443
+ }
444
+ }
445
+ },
446
+ end() {
447
+ try {
448
+ if (waitingForData || process2(), strict) {
449
+ if (currentEntry && currentEntry.remaining > 0) {
450
+ let error = new Error("Tar archive is truncated.");
451
+ throw handler.onError(error), error;
452
+ }
453
+ if (totalAvailable > 0 && read(totalAvailable)?.some((b) => b !== 0)) {
454
+ let error = new Error("Invalid EOF.");
455
+ throw handler.onError(error), error;
456
+ }
457
+ if (waitingForData) {
458
+ let error = new Error("Tar archive is truncated.");
459
+ throw handler.onError(error), error;
460
+ }
461
+ } else currentEntry && (handler.onEndEntry(), currentEntry = null);
462
+ } catch (error) {
463
+ handler.onError(error);
464
+ }
465
+ }
466
+ };
467
+ }
468
+ function isZeroBlock(block) {
469
+ if (block.byteOffset % 8 === 0) {
470
+ let view = new BigUint64Array(block.buffer, block.byteOffset, block.length / 8);
471
+ for (let i = 0; i < view.length; i++) if (view[i] !== 0n) return !1;
472
+ return !0;
473
+ }
474
+ for (let i = 0; i < block.length; i++) if (block[i] !== 0) return !1;
475
+ return !0;
476
+ }
477
+
478
+ // ../node_modules/modern-tar/dist/fs/index.js
479
+ import * as fs from "node:fs/promises";
480
+ import { cpus } from "node:os";
481
+ import * as path from "node:path";
482
+ import { PassThrough, Readable, Writable } from "node:stream";
483
+ import { createWriteStream } from "node:fs";
484
+ import { pipeline } from "node:stream/promises";
485
+ var unicodeCache = /* @__PURE__ */ new Map(), normalizeUnicode = (s) => {
486
+ let result = unicodeCache.get(s);
487
+ return result !== void 0 && unicodeCache.delete(s), result = result ?? s.normalize("NFD"), unicodeCache.set(s, result), unicodeCache.size > 1e4 && unicodeCache.delete(unicodeCache.keys().next().value), result;
488
+ };
489
+ function validateBounds(targetPath, destDir, errorMessage) {
490
+ let target = normalizeUnicode(path.resolve(targetPath)), dest = path.resolve(destDir);
491
+ if (target !== dest && !target.startsWith(dest + path.sep)) throw new Error(errorMessage);
492
+ }
493
+ var win32Reserved = {
494
+ ":": "\uF03A",
495
+ "<": "\uF03C",
496
+ ">": "\uF03E",
497
+ "|": "\uF07C",
498
+ "?": "\uF03F",
499
+ "*": "\uF02A",
500
+ '"': "\uF022"
501
+ };
502
+ function normalizeName(name) {
503
+ let path$1 = name.replace(/\\/g, "/");
504
+ if (path$1.split("/").includes("..") || /^[a-zA-Z]:\.\./.test(path$1)) throw new Error(`${name} points outside extraction directory`);
505
+ let relative = path$1;
506
+ return /^[a-zA-Z]:/.test(relative) ? relative = relative.replace(/^[a-zA-Z]:[/\\]?/, "") : relative.startsWith("/") && (relative = relative.replace(/^\/+/, "")), process.platform === "win32" ? relative.replace(/[<>:"|?*]/g, (char) => win32Reserved[char]) : relative;
507
+ }
508
+ var normalizeHeaderName = (s) => normalizeUnicode(normalizeName(s.replace(/\/+$/, "")));
509
+ function unpackTar(directoryPath, options = {}) {
510
+ let { streamTimeout = 5e3, ...fsOptions } = options, timeoutId = null, { handler, signal } = createFSHandler(directoryPath, fsOptions), unpacker = createTarUnpacker(handler, fsOptions), stream;
511
+ function resetTimeout() {
512
+ timeoutId && clearTimeout(timeoutId), streamTimeout !== 1 / 0 && streamTimeout > 0 && (timeoutId = setTimeout(() => {
513
+ let err = new Error(`Stream timed out after ${streamTimeout}ms of inactivity.`);
514
+ stream.destroy(err);
515
+ }, streamTimeout));
516
+ }
517
+ return stream = new Writable({
518
+ write(chunk, _, callback) {
519
+ if (resetTimeout(), signal.aborted) return callback(signal.reason);
520
+ try {
521
+ unpacker.write(chunk), callback();
522
+ } catch (writeErr) {
523
+ callback(writeErr);
524
+ }
525
+ },
526
+ async final(callback) {
527
+ timeoutId && clearTimeout(timeoutId);
528
+ try {
529
+ if (signal.aborted) return callback(signal.reason);
530
+ unpacker.end(), await handler.process(), callback();
531
+ } catch (finalErr) {
532
+ callback(finalErr);
533
+ }
534
+ }
535
+ }), stream.on("close", () => {
536
+ timeoutId && clearTimeout(timeoutId);
537
+ }), resetTimeout(), stream;
538
+ }
539
+ function createFSHandler(directoryPath, options) {
540
+ let { maxDepth = 1024, dmode, fmode, concurrency = cpus().length || 8 } = options, abortController = new AbortController(), { signal } = abortController, opQueue = [], activeOps = 0, pathPromises = /* @__PURE__ */ new Map(), activeEntryStream = null, processingEnded = !1, resolveDrain, drainPromise = new Promise((resolve4) => {
541
+ resolveDrain = resolve4;
542
+ }), processQueue = () => {
543
+ for (signal.aborted && (opQueue.length = 0); activeOps < concurrency && opQueue.length > 0; ) {
544
+ activeOps++;
545
+ let op = opQueue.shift();
546
+ if (!op) break;
547
+ op();
548
+ }
549
+ processingEnded && activeOps === 0 && opQueue.length === 0 && resolveDrain();
550
+ }, destDirPromise = (async () => {
551
+ let symbolic = normalizeUnicode(path.resolve(directoryPath));
552
+ await fs.mkdir(symbolic, { recursive: !0 });
553
+ try {
554
+ let real = await fs.realpath(symbolic);
555
+ return {
556
+ symbolic,
557
+ real
558
+ };
559
+ } catch (err) {
560
+ throw signal.aborted ? signal.reason : err;
561
+ }
562
+ })();
563
+ destDirPromise.catch((err) => {
564
+ signal.aborted || abortController.abort(err);
565
+ });
566
+ let ensureDirectoryExists = (dirPath) => {
567
+ let promise = pathPromises.get(dirPath);
568
+ return promise || (promise = (async () => {
569
+ if (signal.aborted) throw signal.reason;
570
+ let destDir = await destDirPromise;
571
+ if (dirPath === destDir.symbolic) return "directory";
572
+ if (await ensureDirectoryExists(path.dirname(dirPath)), signal.aborted) throw signal.reason;
573
+ try {
574
+ let stat2 = await fs.lstat(dirPath);
575
+ if (stat2.isDirectory()) return "directory";
576
+ if (stat2.isSymbolicLink()) {
577
+ let realPath = await fs.realpath(dirPath);
578
+ if (validateBounds(realPath, destDir.real, `Symlink "${dirPath}" points outside the extraction directory.`), (await fs.stat(realPath)).isDirectory()) return "directory";
579
+ }
580
+ throw new Error(`"${dirPath}" is not a valid directory component.`);
581
+ } catch (err) {
582
+ if (err.code === "ENOENT")
583
+ return await fs.mkdir(dirPath, { mode: dmode }), "directory";
584
+ throw err;
585
+ }
586
+ })(), pathPromises.set(dirPath, promise), promise);
587
+ };
588
+ return {
589
+ handler: {
590
+ onHeader(header) {
591
+ if (signal.aborted) return;
592
+ activeEntryStream = new PassThrough({ highWaterMark: header.size > 1048576 ? 524288 : void 0 });
593
+ let entryStream = activeEntryStream, startOperation = () => {
594
+ let opPromise;
595
+ try {
596
+ let transformed = transformHeader(header, options);
597
+ if (!transformed) {
598
+ entryStream.resume(), activeOps--, processQueue();
599
+ return;
600
+ }
601
+ let name = normalizeHeaderName(transformed.name), target = path.join(path.resolve(directoryPath), name);
602
+ opPromise = (pathPromises.get(target) || Promise.resolve(void 0)).then(async (priorOp) => {
603
+ if (signal.aborted) throw signal.reason;
604
+ if (priorOp && (priorOp === "directory" && transformed.type !== "directory" || priorOp !== "directory" && transformed.type === "directory"))
605
+ throw new Error(`Path conflict ${transformed.type} over existing ${priorOp} at "${transformed.name}"`);
606
+ try {
607
+ let destDir = await destDirPromise;
608
+ if (maxDepth !== 1 / 0 && name.split("/").length > maxDepth) throw new Error("Tar exceeds max specified depth.");
609
+ let outPath = path.join(destDir.symbolic, name);
610
+ validateBounds(outPath, destDir.symbolic, `Entry "${transformed.name}" points outside the extraction directory.`);
611
+ let parentDir = path.dirname(outPath);
612
+ switch (await ensureDirectoryExists(parentDir), transformed.type) {
613
+ case "directory":
614
+ await fs.mkdir(outPath, {
615
+ recursive: !0,
616
+ mode: dmode ?? transformed.mode
617
+ });
618
+ break;
619
+ case "file": {
620
+ let fileStream = createWriteStream(outPath, {
621
+ mode: fmode ?? transformed.mode,
622
+ highWaterMark: transformed.size > 1048576 ? 524288 : void 0
623
+ });
624
+ await pipeline(entryStream, fileStream);
625
+ break;
626
+ }
627
+ case "symlink": {
628
+ let { linkname } = transformed;
629
+ if (!linkname) return transformed.type;
630
+ let target$1 = path.resolve(parentDir, linkname);
631
+ validateBounds(target$1, destDir.symbolic, `Symlink "${linkname}" points outside the extraction directory.`), await fs.symlink(linkname, outPath);
632
+ break;
633
+ }
634
+ case "link": {
635
+ let { linkname } = transformed;
636
+ if (!linkname) return transformed.type;
637
+ let normalizedLink = normalizeUnicode(linkname);
638
+ if (path.isAbsolute(normalizedLink)) throw new Error(`Hardlink "${linkname}" points outside the extraction directory.`);
639
+ let linkTarget = path.join(destDir.symbolic, normalizedLink);
640
+ validateBounds(linkTarget, destDir.symbolic, `Hardlink "${linkname}" points outside the extraction directory.`), await ensureDirectoryExists(path.dirname(linkTarget));
641
+ let realTargetParent = await fs.realpath(path.dirname(linkTarget)), realLinkTarget = path.join(realTargetParent, path.basename(linkTarget));
642
+ if (validateBounds(realLinkTarget, destDir.real, `Hardlink "${linkname}" points outside the extraction directory.`), linkTarget === outPath) return transformed.type;
643
+ let targetPromise = pathPromises.get(linkTarget);
644
+ targetPromise && await targetPromise, await fs.link(linkTarget, outPath);
645
+ break;
646
+ }
647
+ default:
648
+ return transformed.type;
649
+ }
650
+ return transformed.mtime && await (transformed.type === "symlink" ? fs.lutimes : fs.utimes)(outPath, transformed.mtime, transformed.mtime).catch(() => {
651
+ }), transformed.type;
652
+ } finally {
653
+ entryStream.readableEnded || entryStream.resume();
654
+ }
655
+ }), pathPromises.set(target, opPromise);
656
+ } catch (err) {
657
+ opPromise = Promise.reject(err), abortController.abort(err);
658
+ }
659
+ opPromise.catch((err) => abortController.abort(err)).finally(() => {
660
+ activeOps--, processQueue();
661
+ });
662
+ };
663
+ opQueue.push(startOperation), processQueue();
664
+ },
665
+ onData(chunk) {
666
+ signal.aborted || activeEntryStream?.write(chunk);
667
+ },
668
+ onEndEntry() {
669
+ activeEntryStream?.end(), activeEntryStream = null;
670
+ },
671
+ onError(error) {
672
+ abortController.abort(error);
673
+ },
674
+ async process() {
675
+ if (processingEnded = !0, processQueue(), await drainPromise, signal.aborted) throw signal.reason;
676
+ }
677
+ },
678
+ signal
679
+ };
680
+ }
681
+
682
+ // src/cli/dirs.ts
683
+ var resolveUsingBranchInstall = async (packageManager, request) => {
684
+ let tempDirectory = await temporaryDirectory(), version = versions[request] || await packageManager.latestVersion(request), url = (src_default.default || src_default)(request, version, {
685
+ registry: await packageManager.getRegistryURL()
686
+ }), response = await fetch(url);
687
+ if (!response.ok || !response.body)
688
+ throw new Error(`Failed to download tarball from ${url}`);
689
+ return await pipeline2(
690
+ Readable2.fromWeb(response.body),
691
+ createGunzip(),
692
+ unpackTar(tempDirectory)
693
+ ), join2(tempDirectory, "package");
694
+ };
695
+ async function getRendererDir(packageManager, renderer) {
696
+ let externalFramework = externalFrameworks.find((framework) => framework.name === renderer), frameworkPackageName = externalFramework?.packageName || externalFramework?.renderer || `@storybook/${renderer}`, packageJsonPath = join2(frameworkPackageName, "package.json"), errors = [];
697
+ try {
698
+ return resolvePackageDir(frameworkPackageName, process.cwd());
699
+ } catch (e) {
700
+ invariant(e instanceof Error), errors.push(e);
701
+ }
702
+ try {
703
+ return await resolveUsingBranchInstall(packageManager, frameworkPackageName);
704
+ } catch (e) {
705
+ invariant(e instanceof Error), errors.push(e);
706
+ }
707
+ throw new Error(`Cannot find ${packageJsonPath}, ${errors.map((e) => e.stack).join(`
708
+
709
+ `)}`);
710
+ }
711
+
712
+ // src/cli/helpers.ts
713
+ import { cpSync, existsSync, readFileSync, writeFileSync } from "node:fs";
714
+ import { cp, readFile as readFile2, writeFile } from "node:fs/promises";
715
+ import { join as join3, resolve as resolve2 } from "node:path";
716
+ import {
717
+ frameworkToRenderer,
718
+ getProjectRoot
719
+ } from "storybook/internal/common";
720
+ import { logger } from "storybook/internal/node-logger";
721
+ var import_picocolors = __toESM(require_picocolors(), 1);
722
+ import { coerce, satisfies } from "semver";
723
+
724
+ // ../node_modules/strip-json-comments/index.js
725
+ var singleComment = Symbol("singleComment"), multiComment = Symbol("multiComment"), stripWithoutWhitespace = () => "", stripWithWhitespace = (string, start, end) => string.slice(start, end).replace(/[^ \t\r\n]/g, " "), isEscaped = (jsonString, quotePosition) => {
726
+ let index = quotePosition - 1, backslashCount = 0;
727
+ for (; jsonString[index] === "\\"; )
728
+ index -= 1, backslashCount += 1;
729
+ return !!(backslashCount % 2);
730
+ };
731
+ function stripJsonComments(jsonString, { whitespace = !0, trailingCommas = !1 } = {}) {
732
+ if (typeof jsonString != "string")
733
+ throw new TypeError(`Expected argument \`jsonString\` to be a \`string\`, got \`${typeof jsonString}\``);
734
+ let strip = whitespace ? stripWithWhitespace : stripWithoutWhitespace, isInsideString = !1, isInsideComment = !1, offset = 0, buffer = "", result = "", commaIndex = -1;
735
+ for (let index = 0; index < jsonString.length; index++) {
736
+ let currentCharacter = jsonString[index], nextCharacter = jsonString[index + 1];
737
+ if (!isInsideComment && currentCharacter === '"' && (isEscaped(jsonString, index) || (isInsideString = !isInsideString)), !isInsideString)
738
+ if (!isInsideComment && currentCharacter + nextCharacter === "//")
739
+ buffer += jsonString.slice(offset, index), offset = index, isInsideComment = singleComment, index++;
740
+ else if (isInsideComment === singleComment && currentCharacter + nextCharacter === `\r
741
+ `) {
742
+ index++, isInsideComment = !1, buffer += strip(jsonString, offset, index), offset = index;
743
+ continue;
744
+ } else if (isInsideComment === singleComment && currentCharacter === `
745
+ `)
746
+ isInsideComment = !1, buffer += strip(jsonString, offset, index), offset = index;
747
+ else if (!isInsideComment && currentCharacter + nextCharacter === "/*") {
748
+ buffer += jsonString.slice(offset, index), offset = index, isInsideComment = multiComment, index++;
749
+ continue;
750
+ } else if (isInsideComment === multiComment && currentCharacter + nextCharacter === "*/") {
751
+ index++, isInsideComment = !1, buffer += strip(jsonString, offset, index + 1), offset = index + 1;
752
+ continue;
753
+ } else trailingCommas && !isInsideComment && (commaIndex !== -1 ? currentCharacter === "}" || currentCharacter === "]" ? (buffer += jsonString.slice(offset, index), result += strip(buffer, 0, 1) + buffer.slice(1), buffer = "", offset = index, commaIndex = -1) : currentCharacter !== " " && currentCharacter !== " " && currentCharacter !== "\r" && currentCharacter !== `
754
+ ` && (buffer += jsonString.slice(offset, index), offset = index, commaIndex = -1) : currentCharacter === "," && (result += buffer + jsonString.slice(offset, index), buffer = "", offset = index, commaIndex = index));
755
+ }
756
+ let remaining = isInsideComment === singleComment ? strip(jsonString, offset) : jsonString.slice(offset);
757
+ return result + buffer + remaining;
758
+ }
759
+
760
+ // src/cli/helpers.ts
761
+ function readFileAsJson(jsonPath, allowComments) {
762
+ let filePath = resolve2(jsonPath);
763
+ if (!existsSync(filePath))
764
+ return !1;
765
+ let fileContent = readFileSync(filePath, "utf8"), jsonContent = allowComments ? stripJsonComments(fileContent) : fileContent;
766
+ try {
767
+ return JSON.parse(jsonContent);
768
+ } catch (e) {
769
+ throw logger.error(import_picocolors.default.red(`Invalid json in file: ${filePath}`)), e;
770
+ }
771
+ }
772
+ var writeFileAsJson = (jsonPath, content) => {
773
+ let filePath = resolve2(jsonPath);
774
+ return existsSync(filePath) ? (writeFileSync(filePath, `${JSON.stringify(content, null, 2)}
775
+ `), !0) : !1;
776
+ };
777
+ async function getBabelDependencies(packageManager) {
778
+ let dependenciesToAdd = [], babelLoaderVersion = "^8.0.0-0", babelCoreVersion = packageManager.getDependencyVersion("babel-core");
779
+ if (babelCoreVersion) {
780
+ let latestCompatibleBabelVersion = await packageManager.latestVersion(
781
+ "babel-core",
782
+ babelCoreVersion
783
+ );
784
+ latestCompatibleBabelVersion && satisfies(latestCompatibleBabelVersion, "^6.0.0") && (babelLoaderVersion = "^7.0.0");
785
+ } else if (!packageManager.getDependencyVersion("@babel/core")) {
786
+ let babelCoreInstallVersion = await packageManager.getVersion("@babel/core");
787
+ dependenciesToAdd.push(`@babel/core@${babelCoreInstallVersion}`);
788
+ }
789
+ if (!packageManager.getDependencyVersion("babel-loader")) {
790
+ let babelLoaderInstallVersion = await packageManager.getVersion(
791
+ "babel-loader",
792
+ babelLoaderVersion
793
+ );
794
+ dependenciesToAdd.push(`babel-loader@${babelLoaderInstallVersion}`);
795
+ }
796
+ return dependenciesToAdd;
797
+ }
798
+ function addToDevDependenciesIfNotPresent(packageJson, name, packageVersion) {
799
+ !packageJson.dependencies?.[name] && !packageJson.devDependencies?.[name] && (packageJson.devDependencies ? packageJson.devDependencies[name] = packageVersion : packageJson.devDependencies = {
800
+ [name]: packageVersion
801
+ });
802
+ }
803
+ function copyTemplate(templateRoot, destination = ".") {
804
+ let templateDir = resolve2(templateRoot, "template-csf/");
805
+ if (!existsSync(templateDir))
806
+ throw new Error("Couldn't find template dir");
807
+ cpSync(templateDir, destination, { recursive: !0 });
808
+ }
809
+ var frameworkToDefaultBuilder = {
810
+ angular: "webpack5" /* Webpack5 */,
811
+ ember: "webpack5" /* Webpack5 */,
812
+ "html-vite": "vite" /* Vite */,
813
+ nextjs: "webpack5" /* Webpack5 */,
814
+ nuxt: "vite" /* Vite */,
815
+ "nextjs-vite": "vite" /* Vite */,
816
+ "preact-vite": "vite" /* Vite */,
817
+ qwik: "vite" /* Vite */,
818
+ "react-native-web-vite": "vite" /* Vite */,
819
+ "react-vite": "vite" /* Vite */,
820
+ "react-webpack5": "webpack5" /* Webpack5 */,
821
+ "server-webpack5": "webpack5" /* Webpack5 */,
822
+ solid: "vite" /* Vite */,
823
+ "svelte-vite": "vite" /* Vite */,
824
+ sveltekit: "vite" /* Vite */,
825
+ "vue3-vite": "vite" /* Vite */,
826
+ "web-components-vite": "vite" /* Vite */,
827
+ // Only to pass type checking, will never be used
828
+ "react-rsbuild": "rsbuild" /* Rsbuild */,
829
+ "vue3-rsbuild": "rsbuild" /* Rsbuild */
830
+ };
831
+ async function getVersionSafe(packageManager, packageName) {
832
+ try {
833
+ let version = await packageManager.getInstalledVersion(packageName);
834
+ return version || (version = packageManager.getAllDependencies()[packageName] ?? ""), coerce(version, { includePrerelease: !0 })?.toString();
835
+ } catch {
836
+ }
837
+ }
838
+ var cliStoriesTargetPath = async () => existsSync("./src") ? "./src/stories" : "./stories";
839
+ async function copyTemplateFiles({
840
+ packageManager,
841
+ templateLocation,
842
+ language,
843
+ destination,
844
+ commonAssetsDir,
845
+ features
846
+ }) {
847
+ let languageFolderMapping = {
848
+ javascript: "js",
849
+ typescript: "ts"
850
+ }, templatePath = async () => {
851
+ let baseDir = await getRendererDir(packageManager, templateLocation), assetsDir = join3(baseDir, "template", "cli"), assetsLanguage = join3(assetsDir, languageFolderMapping[language]), assetsJS = join3(assetsDir, languageFolderMapping.javascript), assetsTS = join3(assetsDir, languageFolderMapping.typescript);
852
+ if (existsSync(assetsLanguage))
853
+ return assetsLanguage;
854
+ if (existsSync(assetsTS))
855
+ return assetsTS;
856
+ if (existsSync(assetsJS))
857
+ return assetsJS;
858
+ if (existsSync(assetsDir))
859
+ return assetsDir;
860
+ throw new Error(`Unsupported renderer: ${templateLocation} (${baseDir})`);
861
+ }, destinationPath = destination ?? await cliStoriesTargetPath(), filter = (file) => features.includes("docs") || !file.endsWith(".mdx");
862
+ if (commonAssetsDir && await cp(commonAssetsDir, destinationPath, { recursive: !0, filter }), await cp(await templatePath(), destinationPath, { recursive: !0, filter }), commonAssetsDir && features.includes("docs")) {
863
+ let rendererType = frameworkToRenderer[templateLocation] || "react";
864
+ rendererType === "vue3" && (rendererType = "vue"), await adjustTemplate(join3(destinationPath, "Configure.mdx"), { renderer: rendererType });
865
+ }
866
+ }
867
+ async function adjustTemplate(templatePath, templateData) {
868
+ let template = await readFile2(templatePath, { encoding: "utf8" });
869
+ Object.keys(templateData).forEach((key) => {
870
+ template = template.replaceAll(`{{${key}}}`, `${templateData[key]}`);
871
+ }), await writeFile(templatePath, template);
872
+ }
873
+ async function isNxProject() {
874
+ return up("nx.json", { last: getProjectRoot() });
875
+ }
876
+ function coerceSemver(version) {
877
+ let coercedSemver = coerce(version);
878
+ return invariant(coercedSemver != null, `Could not coerce ${version} into a semver.`), coercedSemver;
879
+ }
880
+ function hasStorybookDependencies(packageManager) {
881
+ let currentPackageDeps = packageManager.getAllDependencies();
882
+ return Object.keys(currentPackageDeps).some((dep) => dep.includes("storybook"));
883
+ }
884
+
885
+ // src/cli/detect.ts
886
+ import { existsSync as existsSync2 } from "node:fs";
887
+ import { resolve as resolve3 } from "node:path";
888
+ import { HandledError, commandLog, getProjectRoot as getProjectRoot2 } from "storybook/internal/common";
889
+ import { logger as logger2 } from "storybook/internal/node-logger";
890
+ var import_prompts = __toESM(require_prompts(), 1);
891
+ import semver from "semver";
892
+ var viteConfigFiles = ["vite.config.ts", "vite.config.js", "vite.config.mjs"], webpackConfigFiles = ["webpack.config.js"], hasDependency = (packageJson, name, matcher) => {
893
+ let version = packageJson.dependencies?.[name] || packageJson.devDependencies?.[name];
894
+ return version && typeof matcher == "function" ? matcher(version) : !!version;
895
+ }, hasPeerDependency = (packageJson, name, matcher) => {
896
+ let version = packageJson.peerDependencies?.[name];
897
+ return version && typeof matcher == "function" ? matcher(version) : !!version;
898
+ }, getFrameworkPreset = (packageJson, framework) => {
899
+ let matcher = {
900
+ dependencies: [!1],
901
+ peerDependencies: [!1],
902
+ files: [!1]
903
+ }, { preset, files, dependencies, peerDependencies, matcherFunction } = framework, dependencySearches = [];
904
+ Array.isArray(dependencies) ? dependencySearches = dependencies.map((name) => [name, void 0]) : typeof dependencies == "object" && (dependencySearches = Object.entries(dependencies)), dependencySearches.length > 0 && (matcher.dependencies = dependencySearches.map(
905
+ ([name, matchFn]) => hasDependency(packageJson, name, matchFn)
906
+ ));
907
+ let peerDependencySearches = [];
908
+ return Array.isArray(peerDependencies) ? peerDependencySearches = peerDependencies.map((name) => [name, void 0]) : typeof peerDependencies == "object" && (peerDependencySearches = Object.entries(peerDependencies)), peerDependencySearches.length > 0 && (matcher.peerDependencies = peerDependencySearches.map(
909
+ ([name, matchFn]) => hasPeerDependency(packageJson, name, matchFn)
910
+ )), Array.isArray(files) && files.length > 0 && (matcher.files = files.map((name) => existsSync2(name))), matcherFunction(matcher) ? preset : null;
911
+ };
912
+ function detectFrameworkPreset(packageJson = {}) {
913
+ let result = [...supportedTemplates, unsupportedTemplate].find((framework) => getFrameworkPreset(packageJson, framework) !== null);
914
+ return result ? result.preset : "UNDETECTED" /* UNDETECTED */;
915
+ }
916
+ async function detectBuilder(packageManager, projectType) {
917
+ let viteConfig = any(viteConfigFiles, { last: getProjectRoot2() }), webpackConfig = any(webpackConfigFiles, { last: getProjectRoot2() }), dependencies = packageManager.getAllDependencies();
918
+ if (viteConfig || dependencies.vite && dependencies.webpack === void 0)
919
+ return commandLog("Detected Vite project. Setting builder to Vite")(), "vite" /* Vite */;
920
+ if (webpackConfig || (dependencies.webpack || dependencies["@nuxt/webpack-builder"]) && dependencies.vite !== void 0)
921
+ return commandLog("Detected webpack project. Setting builder to webpack")(), "webpack5" /* Webpack5 */;
922
+ switch (projectType) {
923
+ case "REACT_NATIVE_AND_RNW" /* REACT_NATIVE_AND_RNW */:
924
+ case "REACT_NATIVE_WEB" /* REACT_NATIVE_WEB */:
925
+ return "vite" /* Vite */;
926
+ case "REACT_SCRIPTS" /* REACT_SCRIPTS */:
927
+ case "ANGULAR" /* ANGULAR */:
928
+ case "REACT_NATIVE" /* REACT_NATIVE */:
929
+ // technically react native doesn't use webpack, we just want to set something
930
+ case "NEXTJS" /* NEXTJS */:
931
+ case "EMBER" /* EMBER */:
932
+ return "webpack5" /* Webpack5 */;
933
+ case "NUXT" /* NUXT */:
934
+ return "vite" /* Vite */;
935
+ default:
936
+ let { builder } = await (0, import_prompts.default)(
937
+ {
938
+ type: "select",
939
+ name: "builder",
940
+ message: `
941
+ We were not able to detect the right builder for your project. Please select one:`,
942
+ choices: [
943
+ { title: "Vite", value: "vite" /* Vite */ },
944
+ { title: "Webpack 5", value: "webpack5" /* Webpack5 */ }
945
+ ]
946
+ },
947
+ {
948
+ onCancel: () => {
949
+ throw new HandledError("Canceled by the user");
950
+ }
951
+ }
952
+ );
953
+ return builder;
954
+ }
955
+ }
956
+ function isStorybookInstantiated(configDir = resolve3(process.cwd(), ".storybook")) {
957
+ return existsSync2(configDir);
958
+ }
959
+ async function detectPnp() {
960
+ return !!any([".pnp.js", ".pnp.cjs"]);
961
+ }
962
+ async function detectLanguage(packageManager) {
963
+ let language = "javascript" /* JAVASCRIPT */;
964
+ if (existsSync2("jsconfig.json"))
965
+ return language;
966
+ let isTypescriptDirectDependency = !!packageManager.getAllDependencies().typescript, getModulePackageJSONVersion = async (pkg) => (await packageManager.getModulePackageJSON(pkg))?.version ?? null, [
967
+ typescriptVersion,
968
+ prettierVersion,
969
+ babelPluginTransformTypescriptVersion,
970
+ typescriptEslintParserVersion,
971
+ eslintPluginStorybookVersion
972
+ ] = await Promise.all([
973
+ getModulePackageJSONVersion("typescript"),
974
+ getModulePackageJSONVersion("prettier"),
975
+ getModulePackageJSONVersion("@babel/plugin-transform-typescript"),
976
+ getModulePackageJSONVersion("@typescript-eslint/parser"),
977
+ getModulePackageJSONVersion("eslint-plugin-storybook")
978
+ ]);
979
+ return isTypescriptDirectDependency && typescriptVersion ? semver.gte(typescriptVersion, "4.9.0") && (!prettierVersion || semver.gte(prettierVersion, "2.8.0")) && (!babelPluginTransformTypescriptVersion || semver.gte(babelPluginTransformTypescriptVersion, "7.20.0")) && (!typescriptEslintParserVersion || semver.gte(typescriptEslintParserVersion, "5.44.0")) && (!eslintPluginStorybookVersion || semver.gte(eslintPluginStorybookVersion, "0.6.8")) ? language = "typescript" /* TYPESCRIPT */ : logger2.warn(
980
+ "Detected TypeScript < 4.9 or incompatible tooling, populating with JavaScript examples"
981
+ ) : existsSync2("tsconfig.json") && (language = "typescript" /* TYPESCRIPT */), language;
982
+ }
983
+ async function detect(packageManager, options = {}) {
984
+ try {
985
+ if (await isNxProject())
986
+ return "NX" /* NX */;
987
+ if (options.html)
988
+ return "HTML" /* HTML */;
989
+ let { packageJson } = packageManager.primaryPackageJson;
990
+ return detectFrameworkPreset(packageJson);
991
+ } catch {
992
+ return "UNDETECTED" /* UNDETECTED */;
993
+ }
994
+ }
995
+
996
+ export {
997
+ externalFrameworks,
998
+ SUPPORTED_RENDERERS,
999
+ ProjectType,
1000
+ CoreBuilder,
1001
+ CoreWebpackCompilers,
1002
+ CommunityBuilder,
1003
+ compilerNameToCoreCompiler,
1004
+ builderNameToCoreBuilder,
1005
+ SupportedLanguage,
1006
+ supportedTemplates,
1007
+ unsupportedTemplate,
1008
+ installableProjectTypes,
1009
+ getRendererDir,
1010
+ readFileAsJson,
1011
+ writeFileAsJson,
1012
+ getBabelDependencies,
1013
+ addToDevDependenciesIfNotPresent,
1014
+ copyTemplate,
1015
+ frameworkToDefaultBuilder,
1016
+ getVersionSafe,
1017
+ cliStoriesTargetPath,
1018
+ copyTemplateFiles,
1019
+ adjustTemplate,
1020
+ isNxProject,
1021
+ coerceSemver,
1022
+ hasStorybookDependencies,
1023
+ detectFrameworkPreset,
1024
+ detectBuilder,
1025
+ isStorybookInstantiated,
1026
+ detectPnp,
1027
+ detectLanguage,
1028
+ detect
1029
+ };