vite-plugin-solid 2.4.0 → 2.6.0

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.
package/README.md CHANGED
@@ -22,9 +22,9 @@ Join [solid discord](https://discord.com/invite/solidjs) and check the [troubles
22
22
 
23
23
  ## Requirements
24
24
 
25
- This module 100% esm compatible. As per [this document](https://nodejs.org/api/esm.html) it is strongly recommended to have at least the version `14.13.0` of node installed.
25
+ This module 100% ESM compatible and requires NodeJS `14.18.0` or later.
26
26
 
27
- You can check your current version of node by typing `node -v` in your terminal. If your version is below that one version I'd encourage you to either do an update globally or use a node version management tool such as [volta](https://volta.sh/) or [nvm](https://github.com/nvm-sh/nvm).
27
+ You can check your current version of NodeJS by typing `node -v` in your terminal. If your version is below that one version I'd encourage you to either do an update globally or use a NodeJS version management tool such as [Volta](https://volta.sh/) or [nvm](https://github.com/nvm-sh/nvm).
28
28
 
29
29
  ## Quickstart
30
30
 
@@ -40,7 +40,7 @@ $ npm run build # builds to /dist
40
40
 
41
41
  ## Installation
42
42
 
43
- Install `vite`, `vite-plugin-solid` and `babel-preset-solid` as dev dependencies.
43
+ Install `vite`, `vite-plugin-solid` as dev dependencies.
44
44
 
45
45
  Install `solid-js` as dependency.
46
46
 
@@ -48,15 +48,15 @@ You have to install those so that you are in control to which solid version is u
48
48
 
49
49
  ```bash
50
50
  # with npm
51
- $ npm install -D vite vite-plugin-solid babel-preset-solid
51
+ $ npm install -D vite vite-plugin-solid
52
52
  $ npm install solid-js
53
53
 
54
54
  # with pnpm
55
- $ pnpm add -D vite vite-plugin-solid babel-preset-solid
55
+ $ pnpm add -D vite vite-plugin-solid
56
56
  $ pnpm add solid-js
57
57
 
58
58
  # with yarn
59
- $ yarn add -D vite vite-plugin-solid babel-preset-solid
59
+ $ yarn add -D vite vite-plugin-solid
60
60
  $ yarn add solid-js
61
61
  ```
62
62
 
@@ -6,41 +6,38 @@ var solid = require('babel-preset-solid');
6
6
  var fs = require('fs');
7
7
  var mergeAnything = require('merge-anything');
8
8
  var module$1 = require('module');
9
- var solidRefresh = require('solid-refresh/babel.js');
9
+ var solidRefresh = require('solid-refresh/babel');
10
10
  var vitefu = require('vitefu');
11
11
 
12
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
-
14
- var ts__default = /*#__PURE__*/_interopDefaultLegacy(ts);
15
- var solid__default = /*#__PURE__*/_interopDefaultLegacy(solid);
16
- var solidRefresh__default = /*#__PURE__*/_interopDefaultLegacy(solidRefresh);
17
-
18
12
  const require$1 = module$1.createRequire((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index.cjs', document.baseURI).href)));
19
-
20
13
  const runtimePublicPath = '/@solid-refresh';
21
-
22
14
  const runtimeFilePath = require$1.resolve('solid-refresh/dist/solid-refresh.mjs');
23
-
24
15
  const runtimeCode = fs.readFileSync(runtimeFilePath, 'utf-8');
16
+
25
17
  /** Possible options for the extensions property */
26
18
 
27
19
  function getExtension(filename) {
28
20
  const index = filename.lastIndexOf('.');
29
21
  return index < 0 ? '' : filename.substring(index).replace(/\?.+$/, '');
30
22
  }
31
-
32
23
  function containsSolidField(fields) {
33
24
  const keys = Object.keys(fields);
34
-
35
25
  for (let i = 0; i < keys.length; i++) {
36
26
  const key = keys[i];
37
27
  if (key === 'solid') return true;
38
28
  if (typeof fields[key] === 'object' && fields[key] != null && containsSolidField(fields[key])) return true;
39
29
  }
40
-
41
30
  return false;
42
31
  }
43
-
32
+ function isJestDomInstalled() {
33
+ try {
34
+ // attempt to reference a file that will not throw error because expect is missing
35
+ require$1('@testing-library/jest-dom/dist/utils');
36
+ return true;
37
+ } catch (e) {
38
+ return false;
39
+ }
40
+ }
44
41
  function solidPlugin(options = {}) {
45
42
  let needHmr = false;
46
43
  let replaceDev = false;
@@ -48,7 +45,6 @@ function solidPlugin(options = {}) {
48
45
  return {
49
46
  name: 'solid',
50
47
  enforce: 'pre',
51
-
52
48
  async config(userConfig, {
53
49
  command
54
50
  }) {
@@ -58,16 +54,34 @@ function solidPlugin(options = {}) {
58
54
  if (!userConfig.resolve) userConfig.resolve = {};
59
55
  userConfig.resolve.alias = normalizeAliases(userConfig.resolve && userConfig.resolve.alias);
60
56
  const solidPkgsConfig = await vitefu.crawlFrameworkPkgs({
57
+ viteUserConfig: userConfig,
61
58
  root: projectRoot || process.cwd(),
62
59
  isBuild: command === 'build',
63
-
64
60
  isFrameworkPkgByJson(pkgJson) {
65
61
  return containsSolidField(pkgJson.exports || {});
66
62
  }
63
+ });
67
64
 
68
- }); // fix for bundling dev in production
69
-
65
+ // fix for bundling dev in production
70
66
  const nestedDeps = replaceDev ? ['solid-js', 'solid-js/web', 'solid-js/store', 'solid-js/html', 'solid-js/h'] : [];
67
+ const test = userConfig.mode === 'test' ? {
68
+ test: {
69
+ globals: true,
70
+ ...(options.ssr ? {} : {
71
+ environment: 'jsdom'
72
+ }),
73
+ transformMode: {
74
+ [options.ssr ? 'ssr' : 'web']: [/\.[jt]sx?$/]
75
+ },
76
+ ...(isJestDomInstalled() ? {
77
+ setupFiles: ['node_modules/@testing-library/jest-dom/extend-expect.js']
78
+ } : {}),
79
+ deps: {
80
+ registerNodeLoader: true
81
+ },
82
+ ...userConfig.test
83
+ }
84
+ } : {};
71
85
  return {
72
86
  /**
73
87
  * We only need esbuild on .ts or .js files.
@@ -77,7 +91,7 @@ function solidPlugin(options = {}) {
77
91
  include: /\.ts$/
78
92
  },
79
93
  resolve: {
80
- conditions: ['solid', ...(replaceDev ? ['development'] : [])],
94
+ conditions: ['solid', ...(replaceDev ? ['development'] : []), ...(userConfig.mode === 'test' && !options.ssr ? ['browser'] : [])],
81
95
  dedupe: nestedDeps,
82
96
  alias: [{
83
97
  find: /^solid-refresh$/,
@@ -88,36 +102,31 @@ function solidPlugin(options = {}) {
88
102
  include: [...nestedDeps, ...solidPkgsConfig.optimizeDeps.include],
89
103
  exclude: solidPkgsConfig.optimizeDeps.exclude
90
104
  },
91
- ssr: solidPkgsConfig.ssr
105
+ ssr: solidPkgsConfig.ssr,
106
+ ...test
92
107
  };
93
108
  },
94
-
95
109
  configResolved(config) {
96
110
  needHmr = config.command === 'serve' && config.mode !== 'production' && options.hot !== false;
97
111
  },
98
-
99
112
  resolveId(id) {
100
113
  if (id === runtimePublicPath) return id;
101
114
  },
102
-
103
115
  load(id) {
104
116
  if (id === runtimePublicPath) return runtimeCode;
105
117
  },
106
-
107
118
  async transform(source, id, transformOptions) {
108
119
  const isSsr = transformOptions && transformOptions.ssr;
109
120
  const currentFileExtension = getExtension(id);
110
121
  const extensionsToWatch = [...(options.extensions || []), '.tsx', '.jsx'];
111
- const allExtensions = extensionsToWatch.map(extension => // An extension can be a string or a tuple [extension, options]
122
+ const allExtensions = extensionsToWatch.map(extension =>
123
+ // An extension can be a string or a tuple [extension, options]
112
124
  typeof extension === 'string' ? extension : extension[0]);
113
-
114
125
  if (!allExtensions.includes(currentFileExtension)) {
115
126
  return null;
116
127
  }
117
-
118
128
  const inNodeModules = /node_modules/.test(id);
119
129
  let solidOptions;
120
-
121
130
  if (options.ssr) {
122
131
  if (isSsr) {
123
132
  solidOptions = {
@@ -136,7 +145,6 @@ function solidPlugin(options = {}) {
136
145
  hydratable: false
137
146
  };
138
147
  }
139
-
140
148
  id = id.replace(/\?.+$/, '');
141
149
  const opts = {
142
150
  babelrc: false,
@@ -144,34 +152,33 @@ function solidPlugin(options = {}) {
144
152
  root: projectRoot,
145
153
  filename: id,
146
154
  sourceFileName: id,
147
- presets: [[solid__default["default"], { ...solidOptions,
155
+ presets: [[solid, {
156
+ ...solidOptions,
148
157
  ...(options.solid || {})
149
158
  }]],
150
- plugins: needHmr && !isSsr && !inNodeModules ? [[solidRefresh__default["default"], {
159
+ plugins: needHmr && !isSsr && !inNodeModules ? [[solidRefresh, {
151
160
  bundler: 'vite'
152
161
  }]] : [],
153
162
  sourceMaps: true,
154
163
  // Vite handles sourcemap flattening
155
164
  inputSourceMap: false
156
- }; // We need to know if the current file extension has a typescript options tied to it
165
+ };
157
166
 
167
+ // We need to know if the current file extension has a typescript options tied to it
158
168
  const shouldBeProcessedWithTypescript = extensionsToWatch.some(extension => {
159
169
  if (typeof extension === 'string') {
160
170
  return extension.includes('tsx');
161
171
  }
162
-
163
172
  const [extensionName, extensionOptions] = extension;
164
173
  if (extensionName !== currentFileExtension) return false;
165
174
  return extensionOptions.typescript;
166
175
  });
167
-
168
176
  if (shouldBeProcessedWithTypescript) {
169
- opts.presets.push([ts__default["default"], options.typescript || {}]);
170
- } // Default value for babel user options
171
-
177
+ opts.presets.push([ts, options.typescript || {}]);
178
+ }
172
179
 
180
+ // Default value for babel user options
173
181
  let babelUserOptions = {};
174
-
175
182
  if (options.babel) {
176
183
  if (typeof options.babel === 'function') {
177
184
  const babelOptions = options.babel(source, id, isSsr);
@@ -180,7 +187,6 @@ function solidPlugin(options = {}) {
180
187
  babelUserOptions = options.babel;
181
188
  }
182
189
  }
183
-
184
190
  const babelOptions = mergeAnything.mergeAndConcat(babelUserOptions, opts);
185
191
  const {
186
192
  code,
@@ -191,16 +197,15 @@ function solidPlugin(options = {}) {
191
197
  map
192
198
  };
193
199
  }
194
-
195
200
  };
196
201
  }
202
+
197
203
  /**
198
204
  * This basically normalize all aliases of the config into
199
205
  * the array format of the alias.
200
206
  *
201
207
  * eg: alias: { '@': 'src/' } => [{ find: '@', replacement: 'src/' }]
202
208
  */
203
-
204
209
  function normalizeAliases(alias = []) {
205
210
  return Array.isArray(alias) ? alias : Object.entries(alias).map(([find, replacement]) => ({
206
211
  find,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["import { transformAsync, TransformOptions } from '@babel/core';\nimport ts from '@babel/preset-typescript';\nimport solid from 'babel-preset-solid';\nimport { readFileSync } from 'fs';\nimport { mergeAndConcat } from 'merge-anything';\nimport { createRequire } from 'module';\nimport solidRefresh from 'solid-refresh/babel.js';\nimport type { Alias, AliasOptions, Plugin } from 'vite';\nimport { crawlFrameworkPkgs } from 'vitefu';\n\nconst require = createRequire(import.meta.url);\n\nconst runtimePublicPath = '/@solid-refresh';\nconst runtimeFilePath = require.resolve('solid-refresh/dist/solid-refresh.mjs');\nconst runtimeCode = readFileSync(runtimeFilePath, 'utf-8');\n\n/** Possible options for the extensions property */\nexport interface ExtensionOptions {\n typescript?: boolean;\n}\n\n/** Configuration options for vite-plugin-solid. */\nexport interface Options {\n /**\n * This will inject solid-js/dev in place of solid-js in dev mode. Has no\n * effect in prod. If set to `false`, it won't inject it in dev. This is\n * useful for extra logs and debugging.\n *\n * @default true\n */\n dev: boolean;\n /**\n * This will force SSR code in the produced files. This is experiemental\n * and mostly not working yet.\n *\n * @default false\n */\n ssr: boolean;\n /**\n * This will inject HMR runtime in dev mode. Has no effect in prod. If\n * set to `false`, it won't inject the runtime in dev.\n *\n * @default true\n */\n hot: boolean;\n /**\n * This registers additional extensions that should be processed by\n * vite-plugin-solid.\n *\n * @default undefined\n */\n extensions?: (string | [string, ExtensionOptions])[];\n /**\n * Pass any additional babel transform options. They will be merged with\n * the transformations required by Solid.\n *\n * @default {}\n */\n babel:\n | TransformOptions\n | ((source: string, id: string, ssr: boolean) => TransformOptions)\n | ((source: string, id: string, ssr: boolean) => Promise<TransformOptions>);\n typescript: {\n /**\n * Forcibly enables jsx parsing. Otherwise angle brackets will be treated as\n * typescript's legacy type assertion var foo = <string>bar;. Also, isTSX:\n * true requires allExtensions: true.\n *\n * @default false\n */\n isTSX?: boolean;\n\n /**\n * Replace the function used when compiling JSX expressions. This is so that\n * we know that the import is not a type import, and should not be removed.\n *\n * @default React\n */\n jsxPragma?: string;\n\n /**\n * Replace the function used when compiling JSX fragment expressions. This\n * is so that we know that the import is not a type import, and should not\n * be removed.\n *\n * @default React.Fragment\n */\n jsxPragmaFrag?: string;\n\n /**\n * Indicates that every file should be parsed as TS or TSX (depending on the\n * isTSX option).\n *\n * @default false\n */\n allExtensions?: boolean;\n\n /**\n * Enables compilation of TypeScript namespaces.\n *\n * @default uses the default set by @babel/plugin-transform-typescript.\n */\n allowNamespaces?: boolean;\n\n /**\n * When enabled, type-only class fields are only removed if they are\n * prefixed with the declare modifier:\n *\n * > NOTE: This will be enabled by default in Babel 8\n *\n * @default false\n *\n * @example\n * ```ts\n * class A {\n * declare foo: string; // Removed\n * bar: string; // Initialized to undefined\n * prop?: string; // Initialized to undefined\n * prop1!: string // Initialized to undefined\n * }\n * ```\n */\n allowDeclareFields?: boolean;\n\n /**\n * When set to true, the transform will only remove type-only imports\n * (introduced in TypeScript 3.8). This should only be used if you are using\n * TypeScript >= 3.8.\n *\n * @default false\n */\n onlyRemoveTypeImports?: boolean;\n\n /**\n * When set to true, Babel will inline enum values rather than using the\n * usual enum output:\n *\n * This option differs from TypeScript's --isolatedModules behavior, which\n * ignores the const modifier and compiles them as normal enums, and aligns\n * Babel's behavior with TypeScript's default behavior.\n *\n * ```ts\n * // Input\n * const enum Animals {\n * Fish\n * }\n * console.log(Animals.Fish);\n *\n * // Default output\n * var Animals;\n *\n * (function (Animals) {\n * Animals[Animals[\"Fish\"] = 0] = \"Fish\";\n * })(Animals || (Animals = {}));\n *\n * console.log(Animals.Fish);\n *\n * // `optimizeConstEnums` output\n * console.log(0);\n * ```\n *\n * However, when exporting a const enum Babel will compile it to a plain\n * object literal so that it doesn't need to rely on cross-file analysis\n * when compiling it:\n *\n * ```ts\n * // Input\n * export const enum Animals {\n * Fish,\n * }\n *\n * // `optimizeConstEnums` output\n * export var Animals = {\n * Fish: 0,\n * };\n * ```\n *\n * @default false\n */\n optimizeConstEnums?: boolean;\n };\n /**\n * Pass any additional [babel-plugin-jsx-dom-expressions](https://github.com/ryansolid/dom-expressions/tree/main/packages/babel-plugin-jsx-dom-expressions#plugin-options).\n * They will be merged with the defaults sets by [babel-preset-solid](https://github.com/solidjs/solid/blob/main/packages/babel-preset-solid/index.js#L8-L25).\n *\n * @default {}\n */\n solid: {\n /**\n * The name of the runtime module to import the methods from.\n *\n * @default \"solid-js/web\"\n */\n moduleName?: string;\n\n /**\n * The output mode of the compiler.\n * Can be:\n * - \"dom\" is standard output\n * - \"ssr\" is for server side rendering of strings.\n * - \"universal\" is for using custom renderers from solid-js/universal\n *\n * @default \"dom\"\n */\n generate?: 'ssr' | 'dom' | 'universal';\n\n /**\n * Indicate whether the output should contain hydratable markers.\n *\n * @default false\n */\n hydratable?: boolean;\n\n /**\n * Boolean to indicate whether to enable automatic event delegation on camelCase.\n *\n * @default true\n */\n delegateEvents?: boolean;\n\n /**\n * Boolean indicates whether smart conditional detection should be used.\n * This optimizes simple boolean expressions and ternaries in JSX.\n *\n * @default true\n */\n wrapConditionals?: boolean;\n\n /**\n * Boolean indicates whether to set current render context on Custom Elements and slots.\n * Useful for seemless Context API with Web Components.\n *\n * @default true\n */\n contextToCustomElements?: boolean;\n\n /**\n * Array of Component exports from module, that aren't included by default with the library.\n * This plugin will automatically import them if it comes across them in the JSX.\n *\n * @default [\"For\",\"Show\",\"Switch\",\"Match\",\"Suspense\",\"SuspenseList\",\"Portal\",\"Index\",\"Dynamic\",\"ErrorBoundary\"]\n */\n builtIns?: string[];\n };\n}\n\nfunction getExtension(filename: string): string {\n const index = filename.lastIndexOf('.');\n return index < 0 ? '' : filename.substring(index).replace(/\\?.+$/, '');\n}\nfunction containsSolidField(fields) {\n const keys = Object.keys(fields);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key === 'solid') return true;\n if (typeof fields[key] === 'object' && fields[key] != null && containsSolidField(fields[key]))\n return true;\n }\n return false;\n}\n\nexport default function solidPlugin(options: Partial<Options> = {}): Plugin {\n let needHmr = false;\n let replaceDev = false;\n let projectRoot = process.cwd();\n\n return {\n name: 'solid',\n enforce: 'pre',\n\n async config(userConfig, { command }) {\n // We inject the dev mode only if the user explicitely wants it or if we are in dev (serve) mode\n replaceDev = options.dev === true || (options.dev !== false && command === 'serve');\n projectRoot = userConfig.root;\n\n if (!userConfig.resolve) userConfig.resolve = {};\n userConfig.resolve.alias = normalizeAliases(userConfig.resolve && userConfig.resolve.alias);\n\n const solidPkgsConfig = await crawlFrameworkPkgs({\n root: projectRoot || process.cwd(),\n isBuild: command === 'build',\n isFrameworkPkgByJson(pkgJson) {\n return containsSolidField(pkgJson.exports || {});\n },\n });\n\n // fix for bundling dev in production\n const nestedDeps = replaceDev\n ? ['solid-js', 'solid-js/web', 'solid-js/store', 'solid-js/html', 'solid-js/h']\n : [];\n\n return {\n /**\n * We only need esbuild on .ts or .js files.\n * .tsx & .jsx files are handled by us\n */\n esbuild: { include: /\\.ts$/ },\n resolve: {\n conditions: ['solid', ...(replaceDev ? ['development'] : [])],\n dedupe: nestedDeps,\n alias: [{ find: /^solid-refresh$/, replacement: runtimePublicPath }],\n },\n optimizeDeps: {\n include: [...nestedDeps, ...solidPkgsConfig.optimizeDeps.include],\n exclude: solidPkgsConfig.optimizeDeps.exclude,\n },\n ssr: solidPkgsConfig.ssr,\n };\n },\n\n configResolved(config) {\n needHmr = config.command === 'serve' && config.mode !== 'production' && options.hot !== false;\n },\n\n resolveId(id) {\n if (id === runtimePublicPath) return id;\n },\n\n load(id) {\n if (id === runtimePublicPath) return runtimeCode;\n },\n\n async transform(source, id, transformOptions) {\n const isSsr = transformOptions && transformOptions.ssr;\n const currentFileExtension = getExtension(id);\n\n const extensionsToWatch = [...(options.extensions || []), '.tsx', '.jsx'];\n const allExtensions = extensionsToWatch.map((extension) =>\n // An extension can be a string or a tuple [extension, options]\n typeof extension === 'string' ? extension : extension[0],\n );\n\n if (!allExtensions.includes(currentFileExtension)) {\n return null;\n }\n\n const inNodeModules = /node_modules/.test(id);\n\n let solidOptions: { generate: 'ssr' | 'dom'; hydratable: boolean };\n\n if (options.ssr) {\n if (isSsr) {\n solidOptions = { generate: 'ssr', hydratable: true };\n } else {\n solidOptions = { generate: 'dom', hydratable: true };\n }\n } else {\n solidOptions = { generate: 'dom', hydratable: false };\n }\n\n id = id.replace(/\\?.+$/, '');\n\n const opts: TransformOptions = {\n babelrc: false,\n configFile: false,\n root: projectRoot,\n filename: id,\n sourceFileName: id,\n presets: [[solid, { ...solidOptions, ...(options.solid || {}) }]],\n plugins: needHmr && !isSsr && !inNodeModules ? [[solidRefresh, { bundler: 'vite' }]] : [],\n sourceMaps: true,\n // Vite handles sourcemap flattening\n inputSourceMap: false as any,\n };\n\n // We need to know if the current file extension has a typescript options tied to it\n const shouldBeProcessedWithTypescript = extensionsToWatch.some((extension) => {\n if (typeof extension === 'string') {\n return extension.includes('tsx');\n }\n\n const [extensionName, extensionOptions] = extension;\n if (extensionName !== currentFileExtension) return false;\n\n return extensionOptions.typescript;\n });\n\n if (shouldBeProcessedWithTypescript) {\n opts.presets.push([ts, options.typescript || {}]);\n }\n\n // Default value for babel user options\n let babelUserOptions: TransformOptions = {};\n\n if (options.babel) {\n if (typeof options.babel === 'function') {\n const babelOptions = options.babel(source, id, isSsr);\n babelUserOptions = babelOptions instanceof Promise ? await babelOptions : babelOptions;\n } else {\n babelUserOptions = options.babel;\n }\n }\n\n const babelOptions = mergeAndConcat(babelUserOptions, opts) as TransformOptions;\n\n const { code, map } = await transformAsync(source, babelOptions);\n\n return { code, map };\n },\n };\n}\n\n/**\n * This basically normalize all aliases of the config into\n * the array format of the alias.\n *\n * eg: alias: { '@': 'src/' } => [{ find: '@', replacement: 'src/' }]\n */\nfunction normalizeAliases(alias: AliasOptions = []): Alias[] {\n return Array.isArray(alias)\n ? alias\n : Object.entries(alias).map(([find, replacement]) => ({ find, replacement }));\n}\n"],"names":["require","createRequire","import","runtimePublicPath","runtimeFilePath","resolve","runtimeCode","readFileSync","getExtension","filename","index","lastIndexOf","substring","replace","containsSolidField","fields","keys","Object","i","length","key","solidPlugin","options","needHmr","replaceDev","projectRoot","process","cwd","name","enforce","config","userConfig","command","dev","root","alias","normalizeAliases","solidPkgsConfig","crawlFrameworkPkgs","isBuild","isFrameworkPkgByJson","pkgJson","exports","nestedDeps","esbuild","include","conditions","dedupe","find","replacement","optimizeDeps","exclude","ssr","configResolved","mode","hot","resolveId","id","load","transform","source","transformOptions","isSsr","currentFileExtension","extensionsToWatch","extensions","allExtensions","map","extension","includes","inNodeModules","test","solidOptions","generate","hydratable","opts","babelrc","configFile","sourceFileName","presets","solid","plugins","solidRefresh","bundler","sourceMaps","inputSourceMap","shouldBeProcessedWithTypescript","some","extensionName","extensionOptions","typescript","push","ts","babelUserOptions","babel","babelOptions","Promise","mergeAndConcat","code","transformAsync","Array","isArray","entries"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["import { transformAsync, TransformOptions } from '@babel/core';\nimport ts from '@babel/preset-typescript';\nimport solid from 'babel-preset-solid';\nimport { readFileSync } from 'fs';\nimport { mergeAndConcat } from 'merge-anything';\nimport { createRequire } from 'module';\nimport solidRefresh from 'solid-refresh/babel';\nimport type { Alias, AliasOptions, Plugin, UserConfig } from 'vite';\nimport { crawlFrameworkPkgs } from 'vitefu';\n\nconst require = createRequire(import.meta.url);\n\nconst runtimePublicPath = '/@solid-refresh';\nconst runtimeFilePath = require.resolve('solid-refresh/dist/solid-refresh.mjs');\nconst runtimeCode = readFileSync(runtimeFilePath, 'utf-8');\n\n/** Possible options for the extensions property */\nexport interface ExtensionOptions {\n typescript?: boolean;\n}\n\n/** Configuration options for vite-plugin-solid. */\nexport interface Options {\n /**\n * This will inject solid-js/dev in place of solid-js in dev mode. Has no\n * effect in prod. If set to `false`, it won't inject it in dev. This is\n * useful for extra logs and debugging.\n *\n * @default true\n */\n dev: boolean;\n /**\n * This will force SSR code in the produced files. This is experiemental\n * and mostly not working yet.\n *\n * @default false\n */\n ssr: boolean;\n /**\n * This will inject HMR runtime in dev mode. Has no effect in prod. If\n * set to `false`, it won't inject the runtime in dev.\n *\n * @default true\n */\n hot: boolean;\n /**\n * This registers additional extensions that should be processed by\n * vite-plugin-solid.\n *\n * @default undefined\n */\n extensions?: (string | [string, ExtensionOptions])[];\n /**\n * Pass any additional babel transform options. They will be merged with\n * the transformations required by Solid.\n *\n * @default {}\n */\n babel:\n | TransformOptions\n | ((source: string, id: string, ssr: boolean) => TransformOptions)\n | ((source: string, id: string, ssr: boolean) => Promise<TransformOptions>);\n typescript: {\n /**\n * Forcibly enables jsx parsing. Otherwise angle brackets will be treated as\n * typescript's legacy type assertion var foo = <string>bar;. Also, isTSX:\n * true requires allExtensions: true.\n *\n * @default false\n */\n isTSX?: boolean;\n\n /**\n * Replace the function used when compiling JSX expressions. This is so that\n * we know that the import is not a type import, and should not be removed.\n *\n * @default React\n */\n jsxPragma?: string;\n\n /**\n * Replace the function used when compiling JSX fragment expressions. This\n * is so that we know that the import is not a type import, and should not\n * be removed.\n *\n * @default React.Fragment\n */\n jsxPragmaFrag?: string;\n\n /**\n * Indicates that every file should be parsed as TS or TSX (depending on the\n * isTSX option).\n *\n * @default false\n */\n allExtensions?: boolean;\n\n /**\n * Enables compilation of TypeScript namespaces.\n *\n * @default uses the default set by @babel/plugin-transform-typescript.\n */\n allowNamespaces?: boolean;\n\n /**\n * When enabled, type-only class fields are only removed if they are\n * prefixed with the declare modifier:\n *\n * > NOTE: This will be enabled by default in Babel 8\n *\n * @default false\n *\n * @example\n * ```ts\n * class A {\n * declare foo: string; // Removed\n * bar: string; // Initialized to undefined\n * prop?: string; // Initialized to undefined\n * prop1!: string // Initialized to undefined\n * }\n * ```\n */\n allowDeclareFields?: boolean;\n\n /**\n * When set to true, the transform will only remove type-only imports\n * (introduced in TypeScript 3.8). This should only be used if you are using\n * TypeScript >= 3.8.\n *\n * @default false\n */\n onlyRemoveTypeImports?: boolean;\n\n /**\n * When set to true, Babel will inline enum values rather than using the\n * usual enum output:\n *\n * This option differs from TypeScript's --isolatedModules behavior, which\n * ignores the const modifier and compiles them as normal enums, and aligns\n * Babel's behavior with TypeScript's default behavior.\n *\n * ```ts\n * // Input\n * const enum Animals {\n * Fish\n * }\n * console.log(Animals.Fish);\n *\n * // Default output\n * var Animals;\n *\n * (function (Animals) {\n * Animals[Animals[\"Fish\"] = 0] = \"Fish\";\n * })(Animals || (Animals = {}));\n *\n * console.log(Animals.Fish);\n *\n * // `optimizeConstEnums` output\n * console.log(0);\n * ```\n *\n * However, when exporting a const enum Babel will compile it to a plain\n * object literal so that it doesn't need to rely on cross-file analysis\n * when compiling it:\n *\n * ```ts\n * // Input\n * export const enum Animals {\n * Fish,\n * }\n *\n * // `optimizeConstEnums` output\n * export var Animals = {\n * Fish: 0,\n * };\n * ```\n *\n * @default false\n */\n optimizeConstEnums?: boolean;\n };\n /**\n * Pass any additional [babel-plugin-jsx-dom-expressions](https://github.com/ryansolid/dom-expressions/tree/main/packages/babel-plugin-jsx-dom-expressions#plugin-options).\n * They will be merged with the defaults sets by [babel-preset-solid](https://github.com/solidjs/solid/blob/main/packages/babel-preset-solid/index.js#L8-L25).\n *\n * @default {}\n */\n solid: {\n /**\n * The name of the runtime module to import the methods from.\n *\n * @default \"solid-js/web\"\n */\n moduleName?: string;\n\n /**\n * The output mode of the compiler.\n * Can be:\n * - \"dom\" is standard output\n * - \"ssr\" is for server side rendering of strings.\n * - \"universal\" is for using custom renderers from solid-js/universal\n *\n * @default \"dom\"\n */\n generate?: 'ssr' | 'dom' | 'universal';\n\n /**\n * Indicate whether the output should contain hydratable markers.\n *\n * @default false\n */\n hydratable?: boolean;\n\n /**\n * Boolean to indicate whether to enable automatic event delegation on camelCase.\n *\n * @default true\n */\n delegateEvents?: boolean;\n\n /**\n * Boolean indicates whether smart conditional detection should be used.\n * This optimizes simple boolean expressions and ternaries in JSX.\n *\n * @default true\n */\n wrapConditionals?: boolean;\n\n /**\n * Boolean indicates whether to set current render context on Custom Elements and slots.\n * Useful for seemless Context API with Web Components.\n *\n * @default true\n */\n contextToCustomElements?: boolean;\n\n /**\n * Array of Component exports from module, that aren't included by default with the library.\n * This plugin will automatically import them if it comes across them in the JSX.\n *\n * @default [\"For\",\"Show\",\"Switch\",\"Match\",\"Suspense\",\"SuspenseList\",\"Portal\",\"Index\",\"Dynamic\",\"ErrorBoundary\"]\n */\n builtIns?: string[];\n };\n}\n\nfunction getExtension(filename: string): string {\n const index = filename.lastIndexOf('.');\n return index < 0 ? '' : filename.substring(index).replace(/\\?.+$/, '');\n}\nfunction containsSolidField(fields) {\n const keys = Object.keys(fields);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key === 'solid') return true;\n if (typeof fields[key] === 'object' && fields[key] != null && containsSolidField(fields[key]))\n return true;\n }\n return false;\n}\nfunction isJestDomInstalled() {\n try {\n // attempt to reference a file that will not throw error because expect is missing\n require('@testing-library/jest-dom/dist/utils');\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport default function solidPlugin(options: Partial<Options> = {}): Plugin {\n let needHmr = false;\n let replaceDev = false;\n let projectRoot = process.cwd();\n\n return {\n name: 'solid',\n enforce: 'pre',\n\n async config(userConfig, { command }) {\n // We inject the dev mode only if the user explicitely wants it or if we are in dev (serve) mode\n replaceDev = options.dev === true || (options.dev !== false && command === 'serve');\n projectRoot = userConfig.root;\n\n if (!userConfig.resolve) userConfig.resolve = {};\n userConfig.resolve.alias = normalizeAliases(userConfig.resolve && userConfig.resolve.alias);\n\n const solidPkgsConfig = await crawlFrameworkPkgs({\n viteUserConfig: userConfig,\n root: projectRoot || process.cwd(),\n isBuild: command === 'build',\n isFrameworkPkgByJson(pkgJson) {\n return containsSolidField(pkgJson.exports || {});\n },\n });\n\n // fix for bundling dev in production\n const nestedDeps = replaceDev\n ? ['solid-js', 'solid-js/web', 'solid-js/store', 'solid-js/html', 'solid-js/h']\n : [];\n\n const test =\n userConfig.mode === 'test'\n ? {\n test: {\n globals: true,\n ...(options.ssr ? {} : { environment: 'jsdom' }),\n transformMode: {\n [options.ssr ? 'ssr' : 'web']: [/\\.[jt]sx?$/],\n },\n ...(isJestDomInstalled()\n ? { setupFiles: ['node_modules/@testing-library/jest-dom/extend-expect.js'] }\n : {}),\n deps: { registerNodeLoader: true },\n ...(userConfig as UserConfig & { test: Record<string, any> }).test,\n },\n }\n : {};\n\n return {\n /**\n * We only need esbuild on .ts or .js files.\n * .tsx & .jsx files are handled by us\n */\n esbuild: { include: /\\.ts$/ },\n resolve: {\n conditions: [\n 'solid',\n ...(replaceDev ? ['development'] : []),\n ...(userConfig.mode === 'test' && !options.ssr ? ['browser'] : []),\n ],\n dedupe: nestedDeps,\n alias: [{ find: /^solid-refresh$/, replacement: runtimePublicPath }],\n },\n optimizeDeps: {\n include: [...nestedDeps, ...solidPkgsConfig.optimizeDeps.include],\n exclude: solidPkgsConfig.optimizeDeps.exclude,\n },\n ssr: solidPkgsConfig.ssr,\n ...test,\n };\n },\n\n configResolved(config) {\n needHmr = config.command === 'serve' && config.mode !== 'production' && options.hot !== false;\n },\n\n resolveId(id) {\n if (id === runtimePublicPath) return id;\n },\n\n load(id) {\n if (id === runtimePublicPath) return runtimeCode;\n },\n\n async transform(source, id, transformOptions) {\n const isSsr = transformOptions && transformOptions.ssr;\n const currentFileExtension = getExtension(id);\n\n const extensionsToWatch = [...(options.extensions || []), '.tsx', '.jsx'];\n const allExtensions = extensionsToWatch.map((extension) =>\n // An extension can be a string or a tuple [extension, options]\n typeof extension === 'string' ? extension : extension[0],\n );\n\n if (!allExtensions.includes(currentFileExtension)) {\n return null;\n }\n\n const inNodeModules = /node_modules/.test(id);\n\n let solidOptions: { generate: 'ssr' | 'dom'; hydratable: boolean };\n\n if (options.ssr) {\n if (isSsr) {\n solidOptions = { generate: 'ssr', hydratable: true };\n } else {\n solidOptions = { generate: 'dom', hydratable: true };\n }\n } else {\n solidOptions = { generate: 'dom', hydratable: false };\n }\n\n id = id.replace(/\\?.+$/, '');\n\n const opts: TransformOptions = {\n babelrc: false,\n configFile: false,\n root: projectRoot,\n filename: id,\n sourceFileName: id,\n presets: [[solid, { ...solidOptions, ...(options.solid || {}) }]],\n plugins: needHmr && !isSsr && !inNodeModules ? [[solidRefresh, { bundler: 'vite' }]] : [],\n sourceMaps: true,\n // Vite handles sourcemap flattening\n inputSourceMap: false as any,\n };\n\n // We need to know if the current file extension has a typescript options tied to it\n const shouldBeProcessedWithTypescript = extensionsToWatch.some((extension) => {\n if (typeof extension === 'string') {\n return extension.includes('tsx');\n }\n\n const [extensionName, extensionOptions] = extension;\n if (extensionName !== currentFileExtension) return false;\n\n return extensionOptions.typescript;\n });\n\n if (shouldBeProcessedWithTypescript) {\n opts.presets.push([ts, options.typescript || {}]);\n }\n\n // Default value for babel user options\n let babelUserOptions: TransformOptions = {};\n\n if (options.babel) {\n if (typeof options.babel === 'function') {\n const babelOptions = options.babel(source, id, isSsr);\n babelUserOptions = babelOptions instanceof Promise ? await babelOptions : babelOptions;\n } else {\n babelUserOptions = options.babel;\n }\n }\n\n const babelOptions = mergeAndConcat(babelUserOptions, opts) as TransformOptions;\n\n const { code, map } = await transformAsync(source, babelOptions);\n\n return { code, map };\n },\n };\n}\n\n/**\n * This basically normalize all aliases of the config into\n * the array format of the alias.\n *\n * eg: alias: { '@': 'src/' } => [{ find: '@', replacement: 'src/' }]\n */\nfunction normalizeAliases(alias: AliasOptions = []): Alias[] {\n return Array.isArray(alias)\n ? alias\n : Object.entries(alias).map(([find, replacement]) => ({ find, replacement }));\n}\n"],"names":["require","createRequire","import","runtimePublicPath","runtimeFilePath","resolve","runtimeCode","readFileSync","getExtension","filename","index","lastIndexOf","substring","replace","containsSolidField","fields","keys","Object","i","length","key","isJestDomInstalled","e","solidPlugin","options","needHmr","replaceDev","projectRoot","process","cwd","name","enforce","config","userConfig","command","dev","root","alias","normalizeAliases","solidPkgsConfig","crawlFrameworkPkgs","viteUserConfig","isBuild","isFrameworkPkgByJson","pkgJson","exports","nestedDeps","test","mode","globals","ssr","environment","transformMode","setupFiles","deps","registerNodeLoader","esbuild","include","conditions","dedupe","find","replacement","optimizeDeps","exclude","configResolved","hot","resolveId","id","load","transform","source","transformOptions","isSsr","currentFileExtension","extensionsToWatch","extensions","allExtensions","map","extension","includes","inNodeModules","solidOptions","generate","hydratable","opts","babelrc","configFile","sourceFileName","presets","solid","plugins","solidRefresh","bundler","sourceMaps","inputSourceMap","shouldBeProcessedWithTypescript","some","extensionName","extensionOptions","typescript","push","ts","babelUserOptions","babel","babelOptions","Promise","mergeAndConcat","code","transformAsync","Array","isArray","entries"],"mappings":"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"}
@@ -4,35 +4,38 @@ import solid from 'babel-preset-solid';
4
4
  import { readFileSync } from 'fs';
5
5
  import { mergeAndConcat } from 'merge-anything';
6
6
  import { createRequire } from 'module';
7
- import solidRefresh from 'solid-refresh/babel.js';
7
+ import solidRefresh from 'solid-refresh/babel';
8
8
  import { crawlFrameworkPkgs } from 'vitefu';
9
9
 
10
10
  const require = createRequire(import.meta.url);
11
-
12
11
  const runtimePublicPath = '/@solid-refresh';
13
-
14
12
  const runtimeFilePath = require.resolve('solid-refresh/dist/solid-refresh.mjs');
15
-
16
13
  const runtimeCode = readFileSync(runtimeFilePath, 'utf-8');
14
+
17
15
  /** Possible options for the extensions property */
18
16
 
19
17
  function getExtension(filename) {
20
18
  const index = filename.lastIndexOf('.');
21
19
  return index < 0 ? '' : filename.substring(index).replace(/\?.+$/, '');
22
20
  }
23
-
24
21
  function containsSolidField(fields) {
25
22
  const keys = Object.keys(fields);
26
-
27
23
  for (let i = 0; i < keys.length; i++) {
28
24
  const key = keys[i];
29
25
  if (key === 'solid') return true;
30
26
  if (typeof fields[key] === 'object' && fields[key] != null && containsSolidField(fields[key])) return true;
31
27
  }
32
-
33
28
  return false;
34
29
  }
35
-
30
+ function isJestDomInstalled() {
31
+ try {
32
+ // attempt to reference a file that will not throw error because expect is missing
33
+ require('@testing-library/jest-dom/dist/utils');
34
+ return true;
35
+ } catch (e) {
36
+ return false;
37
+ }
38
+ }
36
39
  function solidPlugin(options = {}) {
37
40
  let needHmr = false;
38
41
  let replaceDev = false;
@@ -40,7 +43,6 @@ function solidPlugin(options = {}) {
40
43
  return {
41
44
  name: 'solid',
42
45
  enforce: 'pre',
43
-
44
46
  async config(userConfig, {
45
47
  command
46
48
  }) {
@@ -50,16 +52,34 @@ function solidPlugin(options = {}) {
50
52
  if (!userConfig.resolve) userConfig.resolve = {};
51
53
  userConfig.resolve.alias = normalizeAliases(userConfig.resolve && userConfig.resolve.alias);
52
54
  const solidPkgsConfig = await crawlFrameworkPkgs({
55
+ viteUserConfig: userConfig,
53
56
  root: projectRoot || process.cwd(),
54
57
  isBuild: command === 'build',
55
-
56
58
  isFrameworkPkgByJson(pkgJson) {
57
59
  return containsSolidField(pkgJson.exports || {});
58
60
  }
61
+ });
59
62
 
60
- }); // fix for bundling dev in production
61
-
63
+ // fix for bundling dev in production
62
64
  const nestedDeps = replaceDev ? ['solid-js', 'solid-js/web', 'solid-js/store', 'solid-js/html', 'solid-js/h'] : [];
65
+ const test = userConfig.mode === 'test' ? {
66
+ test: {
67
+ globals: true,
68
+ ...(options.ssr ? {} : {
69
+ environment: 'jsdom'
70
+ }),
71
+ transformMode: {
72
+ [options.ssr ? 'ssr' : 'web']: [/\.[jt]sx?$/]
73
+ },
74
+ ...(isJestDomInstalled() ? {
75
+ setupFiles: ['node_modules/@testing-library/jest-dom/extend-expect.js']
76
+ } : {}),
77
+ deps: {
78
+ registerNodeLoader: true
79
+ },
80
+ ...userConfig.test
81
+ }
82
+ } : {};
63
83
  return {
64
84
  /**
65
85
  * We only need esbuild on .ts or .js files.
@@ -69,7 +89,7 @@ function solidPlugin(options = {}) {
69
89
  include: /\.ts$/
70
90
  },
71
91
  resolve: {
72
- conditions: ['solid', ...(replaceDev ? ['development'] : [])],
92
+ conditions: ['solid', ...(replaceDev ? ['development'] : []), ...(userConfig.mode === 'test' && !options.ssr ? ['browser'] : [])],
73
93
  dedupe: nestedDeps,
74
94
  alias: [{
75
95
  find: /^solid-refresh$/,
@@ -80,36 +100,31 @@ function solidPlugin(options = {}) {
80
100
  include: [...nestedDeps, ...solidPkgsConfig.optimizeDeps.include],
81
101
  exclude: solidPkgsConfig.optimizeDeps.exclude
82
102
  },
83
- ssr: solidPkgsConfig.ssr
103
+ ssr: solidPkgsConfig.ssr,
104
+ ...test
84
105
  };
85
106
  },
86
-
87
107
  configResolved(config) {
88
108
  needHmr = config.command === 'serve' && config.mode !== 'production' && options.hot !== false;
89
109
  },
90
-
91
110
  resolveId(id) {
92
111
  if (id === runtimePublicPath) return id;
93
112
  },
94
-
95
113
  load(id) {
96
114
  if (id === runtimePublicPath) return runtimeCode;
97
115
  },
98
-
99
116
  async transform(source, id, transformOptions) {
100
117
  const isSsr = transformOptions && transformOptions.ssr;
101
118
  const currentFileExtension = getExtension(id);
102
119
  const extensionsToWatch = [...(options.extensions || []), '.tsx', '.jsx'];
103
- const allExtensions = extensionsToWatch.map(extension => // An extension can be a string or a tuple [extension, options]
120
+ const allExtensions = extensionsToWatch.map(extension =>
121
+ // An extension can be a string or a tuple [extension, options]
104
122
  typeof extension === 'string' ? extension : extension[0]);
105
-
106
123
  if (!allExtensions.includes(currentFileExtension)) {
107
124
  return null;
108
125
  }
109
-
110
126
  const inNodeModules = /node_modules/.test(id);
111
127
  let solidOptions;
112
-
113
128
  if (options.ssr) {
114
129
  if (isSsr) {
115
130
  solidOptions = {
@@ -128,7 +143,6 @@ function solidPlugin(options = {}) {
128
143
  hydratable: false
129
144
  };
130
145
  }
131
-
132
146
  id = id.replace(/\?.+$/, '');
133
147
  const opts = {
134
148
  babelrc: false,
@@ -136,7 +150,8 @@ function solidPlugin(options = {}) {
136
150
  root: projectRoot,
137
151
  filename: id,
138
152
  sourceFileName: id,
139
- presets: [[solid, { ...solidOptions,
153
+ presets: [[solid, {
154
+ ...solidOptions,
140
155
  ...(options.solid || {})
141
156
  }]],
142
157
  plugins: needHmr && !isSsr && !inNodeModules ? [[solidRefresh, {
@@ -145,25 +160,23 @@ function solidPlugin(options = {}) {
145
160
  sourceMaps: true,
146
161
  // Vite handles sourcemap flattening
147
162
  inputSourceMap: false
148
- }; // We need to know if the current file extension has a typescript options tied to it
163
+ };
149
164
 
165
+ // We need to know if the current file extension has a typescript options tied to it
150
166
  const shouldBeProcessedWithTypescript = extensionsToWatch.some(extension => {
151
167
  if (typeof extension === 'string') {
152
168
  return extension.includes('tsx');
153
169
  }
154
-
155
170
  const [extensionName, extensionOptions] = extension;
156
171
  if (extensionName !== currentFileExtension) return false;
157
172
  return extensionOptions.typescript;
158
173
  });
159
-
160
174
  if (shouldBeProcessedWithTypescript) {
161
175
  opts.presets.push([ts, options.typescript || {}]);
162
- } // Default value for babel user options
163
-
176
+ }
164
177
 
178
+ // Default value for babel user options
165
179
  let babelUserOptions = {};
166
-
167
180
  if (options.babel) {
168
181
  if (typeof options.babel === 'function') {
169
182
  const babelOptions = options.babel(source, id, isSsr);
@@ -172,7 +185,6 @@ function solidPlugin(options = {}) {
172
185
  babelUserOptions = options.babel;
173
186
  }
174
187
  }
175
-
176
188
  const babelOptions = mergeAndConcat(babelUserOptions, opts);
177
189
  const {
178
190
  code,
@@ -183,16 +195,15 @@ function solidPlugin(options = {}) {
183
195
  map
184
196
  };
185
197
  }
186
-
187
198
  };
188
199
  }
200
+
189
201
  /**
190
202
  * This basically normalize all aliases of the config into
191
203
  * the array format of the alias.
192
204
  *
193
205
  * eg: alias: { '@': 'src/' } => [{ find: '@', replacement: 'src/' }]
194
206
  */
195
-
196
207
  function normalizeAliases(alias = []) {
197
208
  return Array.isArray(alias) ? alias : Object.entries(alias).map(([find, replacement]) => ({
198
209
  find,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["import { transformAsync, TransformOptions } from '@babel/core';\nimport ts from '@babel/preset-typescript';\nimport solid from 'babel-preset-solid';\nimport { readFileSync } from 'fs';\nimport { mergeAndConcat } from 'merge-anything';\nimport { createRequire } from 'module';\nimport solidRefresh from 'solid-refresh/babel.js';\nimport type { Alias, AliasOptions, Plugin } from 'vite';\nimport { crawlFrameworkPkgs } from 'vitefu';\n\nconst require = createRequire(import.meta.url);\n\nconst runtimePublicPath = '/@solid-refresh';\nconst runtimeFilePath = require.resolve('solid-refresh/dist/solid-refresh.mjs');\nconst runtimeCode = readFileSync(runtimeFilePath, 'utf-8');\n\n/** Possible options for the extensions property */\nexport interface ExtensionOptions {\n typescript?: boolean;\n}\n\n/** Configuration options for vite-plugin-solid. */\nexport interface Options {\n /**\n * This will inject solid-js/dev in place of solid-js in dev mode. Has no\n * effect in prod. If set to `false`, it won't inject it in dev. This is\n * useful for extra logs and debugging.\n *\n * @default true\n */\n dev: boolean;\n /**\n * This will force SSR code in the produced files. This is experiemental\n * and mostly not working yet.\n *\n * @default false\n */\n ssr: boolean;\n /**\n * This will inject HMR runtime in dev mode. Has no effect in prod. If\n * set to `false`, it won't inject the runtime in dev.\n *\n * @default true\n */\n hot: boolean;\n /**\n * This registers additional extensions that should be processed by\n * vite-plugin-solid.\n *\n * @default undefined\n */\n extensions?: (string | [string, ExtensionOptions])[];\n /**\n * Pass any additional babel transform options. They will be merged with\n * the transformations required by Solid.\n *\n * @default {}\n */\n babel:\n | TransformOptions\n | ((source: string, id: string, ssr: boolean) => TransformOptions)\n | ((source: string, id: string, ssr: boolean) => Promise<TransformOptions>);\n typescript: {\n /**\n * Forcibly enables jsx parsing. Otherwise angle brackets will be treated as\n * typescript's legacy type assertion var foo = <string>bar;. Also, isTSX:\n * true requires allExtensions: true.\n *\n * @default false\n */\n isTSX?: boolean;\n\n /**\n * Replace the function used when compiling JSX expressions. This is so that\n * we know that the import is not a type import, and should not be removed.\n *\n * @default React\n */\n jsxPragma?: string;\n\n /**\n * Replace the function used when compiling JSX fragment expressions. This\n * is so that we know that the import is not a type import, and should not\n * be removed.\n *\n * @default React.Fragment\n */\n jsxPragmaFrag?: string;\n\n /**\n * Indicates that every file should be parsed as TS or TSX (depending on the\n * isTSX option).\n *\n * @default false\n */\n allExtensions?: boolean;\n\n /**\n * Enables compilation of TypeScript namespaces.\n *\n * @default uses the default set by @babel/plugin-transform-typescript.\n */\n allowNamespaces?: boolean;\n\n /**\n * When enabled, type-only class fields are only removed if they are\n * prefixed with the declare modifier:\n *\n * > NOTE: This will be enabled by default in Babel 8\n *\n * @default false\n *\n * @example\n * ```ts\n * class A {\n * declare foo: string; // Removed\n * bar: string; // Initialized to undefined\n * prop?: string; // Initialized to undefined\n * prop1!: string // Initialized to undefined\n * }\n * ```\n */\n allowDeclareFields?: boolean;\n\n /**\n * When set to true, the transform will only remove type-only imports\n * (introduced in TypeScript 3.8). This should only be used if you are using\n * TypeScript >= 3.8.\n *\n * @default false\n */\n onlyRemoveTypeImports?: boolean;\n\n /**\n * When set to true, Babel will inline enum values rather than using the\n * usual enum output:\n *\n * This option differs from TypeScript's --isolatedModules behavior, which\n * ignores the const modifier and compiles them as normal enums, and aligns\n * Babel's behavior with TypeScript's default behavior.\n *\n * ```ts\n * // Input\n * const enum Animals {\n * Fish\n * }\n * console.log(Animals.Fish);\n *\n * // Default output\n * var Animals;\n *\n * (function (Animals) {\n * Animals[Animals[\"Fish\"] = 0] = \"Fish\";\n * })(Animals || (Animals = {}));\n *\n * console.log(Animals.Fish);\n *\n * // `optimizeConstEnums` output\n * console.log(0);\n * ```\n *\n * However, when exporting a const enum Babel will compile it to a plain\n * object literal so that it doesn't need to rely on cross-file analysis\n * when compiling it:\n *\n * ```ts\n * // Input\n * export const enum Animals {\n * Fish,\n * }\n *\n * // `optimizeConstEnums` output\n * export var Animals = {\n * Fish: 0,\n * };\n * ```\n *\n * @default false\n */\n optimizeConstEnums?: boolean;\n };\n /**\n * Pass any additional [babel-plugin-jsx-dom-expressions](https://github.com/ryansolid/dom-expressions/tree/main/packages/babel-plugin-jsx-dom-expressions#plugin-options).\n * They will be merged with the defaults sets by [babel-preset-solid](https://github.com/solidjs/solid/blob/main/packages/babel-preset-solid/index.js#L8-L25).\n *\n * @default {}\n */\n solid: {\n /**\n * The name of the runtime module to import the methods from.\n *\n * @default \"solid-js/web\"\n */\n moduleName?: string;\n\n /**\n * The output mode of the compiler.\n * Can be:\n * - \"dom\" is standard output\n * - \"ssr\" is for server side rendering of strings.\n * - \"universal\" is for using custom renderers from solid-js/universal\n *\n * @default \"dom\"\n */\n generate?: 'ssr' | 'dom' | 'universal';\n\n /**\n * Indicate whether the output should contain hydratable markers.\n *\n * @default false\n */\n hydratable?: boolean;\n\n /**\n * Boolean to indicate whether to enable automatic event delegation on camelCase.\n *\n * @default true\n */\n delegateEvents?: boolean;\n\n /**\n * Boolean indicates whether smart conditional detection should be used.\n * This optimizes simple boolean expressions and ternaries in JSX.\n *\n * @default true\n */\n wrapConditionals?: boolean;\n\n /**\n * Boolean indicates whether to set current render context on Custom Elements and slots.\n * Useful for seemless Context API with Web Components.\n *\n * @default true\n */\n contextToCustomElements?: boolean;\n\n /**\n * Array of Component exports from module, that aren't included by default with the library.\n * This plugin will automatically import them if it comes across them in the JSX.\n *\n * @default [\"For\",\"Show\",\"Switch\",\"Match\",\"Suspense\",\"SuspenseList\",\"Portal\",\"Index\",\"Dynamic\",\"ErrorBoundary\"]\n */\n builtIns?: string[];\n };\n}\n\nfunction getExtension(filename: string): string {\n const index = filename.lastIndexOf('.');\n return index < 0 ? '' : filename.substring(index).replace(/\\?.+$/, '');\n}\nfunction containsSolidField(fields) {\n const keys = Object.keys(fields);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key === 'solid') return true;\n if (typeof fields[key] === 'object' && fields[key] != null && containsSolidField(fields[key]))\n return true;\n }\n return false;\n}\n\nexport default function solidPlugin(options: Partial<Options> = {}): Plugin {\n let needHmr = false;\n let replaceDev = false;\n let projectRoot = process.cwd();\n\n return {\n name: 'solid',\n enforce: 'pre',\n\n async config(userConfig, { command }) {\n // We inject the dev mode only if the user explicitely wants it or if we are in dev (serve) mode\n replaceDev = options.dev === true || (options.dev !== false && command === 'serve');\n projectRoot = userConfig.root;\n\n if (!userConfig.resolve) userConfig.resolve = {};\n userConfig.resolve.alias = normalizeAliases(userConfig.resolve && userConfig.resolve.alias);\n\n const solidPkgsConfig = await crawlFrameworkPkgs({\n root: projectRoot || process.cwd(),\n isBuild: command === 'build',\n isFrameworkPkgByJson(pkgJson) {\n return containsSolidField(pkgJson.exports || {});\n },\n });\n\n // fix for bundling dev in production\n const nestedDeps = replaceDev\n ? ['solid-js', 'solid-js/web', 'solid-js/store', 'solid-js/html', 'solid-js/h']\n : [];\n\n return {\n /**\n * We only need esbuild on .ts or .js files.\n * .tsx & .jsx files are handled by us\n */\n esbuild: { include: /\\.ts$/ },\n resolve: {\n conditions: ['solid', ...(replaceDev ? ['development'] : [])],\n dedupe: nestedDeps,\n alias: [{ find: /^solid-refresh$/, replacement: runtimePublicPath }],\n },\n optimizeDeps: {\n include: [...nestedDeps, ...solidPkgsConfig.optimizeDeps.include],\n exclude: solidPkgsConfig.optimizeDeps.exclude,\n },\n ssr: solidPkgsConfig.ssr,\n };\n },\n\n configResolved(config) {\n needHmr = config.command === 'serve' && config.mode !== 'production' && options.hot !== false;\n },\n\n resolveId(id) {\n if (id === runtimePublicPath) return id;\n },\n\n load(id) {\n if (id === runtimePublicPath) return runtimeCode;\n },\n\n async transform(source, id, transformOptions) {\n const isSsr = transformOptions && transformOptions.ssr;\n const currentFileExtension = getExtension(id);\n\n const extensionsToWatch = [...(options.extensions || []), '.tsx', '.jsx'];\n const allExtensions = extensionsToWatch.map((extension) =>\n // An extension can be a string or a tuple [extension, options]\n typeof extension === 'string' ? extension : extension[0],\n );\n\n if (!allExtensions.includes(currentFileExtension)) {\n return null;\n }\n\n const inNodeModules = /node_modules/.test(id);\n\n let solidOptions: { generate: 'ssr' | 'dom'; hydratable: boolean };\n\n if (options.ssr) {\n if (isSsr) {\n solidOptions = { generate: 'ssr', hydratable: true };\n } else {\n solidOptions = { generate: 'dom', hydratable: true };\n }\n } else {\n solidOptions = { generate: 'dom', hydratable: false };\n }\n\n id = id.replace(/\\?.+$/, '');\n\n const opts: TransformOptions = {\n babelrc: false,\n configFile: false,\n root: projectRoot,\n filename: id,\n sourceFileName: id,\n presets: [[solid, { ...solidOptions, ...(options.solid || {}) }]],\n plugins: needHmr && !isSsr && !inNodeModules ? [[solidRefresh, { bundler: 'vite' }]] : [],\n sourceMaps: true,\n // Vite handles sourcemap flattening\n inputSourceMap: false as any,\n };\n\n // We need to know if the current file extension has a typescript options tied to it\n const shouldBeProcessedWithTypescript = extensionsToWatch.some((extension) => {\n if (typeof extension === 'string') {\n return extension.includes('tsx');\n }\n\n const [extensionName, extensionOptions] = extension;\n if (extensionName !== currentFileExtension) return false;\n\n return extensionOptions.typescript;\n });\n\n if (shouldBeProcessedWithTypescript) {\n opts.presets.push([ts, options.typescript || {}]);\n }\n\n // Default value for babel user options\n let babelUserOptions: TransformOptions = {};\n\n if (options.babel) {\n if (typeof options.babel === 'function') {\n const babelOptions = options.babel(source, id, isSsr);\n babelUserOptions = babelOptions instanceof Promise ? await babelOptions : babelOptions;\n } else {\n babelUserOptions = options.babel;\n }\n }\n\n const babelOptions = mergeAndConcat(babelUserOptions, opts) as TransformOptions;\n\n const { code, map } = await transformAsync(source, babelOptions);\n\n return { code, map };\n },\n };\n}\n\n/**\n * This basically normalize all aliases of the config into\n * the array format of the alias.\n *\n * eg: alias: { '@': 'src/' } => [{ find: '@', replacement: 'src/' }]\n */\nfunction normalizeAliases(alias: AliasOptions = []): Alias[] {\n return Array.isArray(alias)\n ? alias\n : Object.entries(alias).map(([find, replacement]) => ({ find, replacement }));\n}\n"],"names":["require","createRequire","import","meta","url","runtimePublicPath","runtimeFilePath","resolve","runtimeCode","readFileSync","getExtension","filename","index","lastIndexOf","substring","replace","containsSolidField","fields","keys","Object","i","length","key","solidPlugin","options","needHmr","replaceDev","projectRoot","process","cwd","name","enforce","config","userConfig","command","dev","root","alias","normalizeAliases","solidPkgsConfig","crawlFrameworkPkgs","isBuild","isFrameworkPkgByJson","pkgJson","exports","nestedDeps","esbuild","include","conditions","dedupe","find","replacement","optimizeDeps","exclude","ssr","configResolved","mode","hot","resolveId","id","load","transform","source","transformOptions","isSsr","currentFileExtension","extensionsToWatch","extensions","allExtensions","map","extension","includes","inNodeModules","test","solidOptions","generate","hydratable","opts","babelrc","configFile","sourceFileName","presets","solid","plugins","solidRefresh","bundler","sourceMaps","inputSourceMap","shouldBeProcessedWithTypescript","some","extensionName","extensionOptions","typescript","push","ts","babelUserOptions","babel","babelOptions","Promise","mergeAndConcat","code","transformAsync","Array","isArray","entries"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["import { transformAsync, TransformOptions } from '@babel/core';\nimport ts from '@babel/preset-typescript';\nimport solid from 'babel-preset-solid';\nimport { readFileSync } from 'fs';\nimport { mergeAndConcat } from 'merge-anything';\nimport { createRequire } from 'module';\nimport solidRefresh from 'solid-refresh/babel';\nimport type { Alias, AliasOptions, Plugin, UserConfig } from 'vite';\nimport { crawlFrameworkPkgs } from 'vitefu';\n\nconst require = createRequire(import.meta.url);\n\nconst runtimePublicPath = '/@solid-refresh';\nconst runtimeFilePath = require.resolve('solid-refresh/dist/solid-refresh.mjs');\nconst runtimeCode = readFileSync(runtimeFilePath, 'utf-8');\n\n/** Possible options for the extensions property */\nexport interface ExtensionOptions {\n typescript?: boolean;\n}\n\n/** Configuration options for vite-plugin-solid. */\nexport interface Options {\n /**\n * This will inject solid-js/dev in place of solid-js in dev mode. Has no\n * effect in prod. If set to `false`, it won't inject it in dev. This is\n * useful for extra logs and debugging.\n *\n * @default true\n */\n dev: boolean;\n /**\n * This will force SSR code in the produced files. This is experiemental\n * and mostly not working yet.\n *\n * @default false\n */\n ssr: boolean;\n /**\n * This will inject HMR runtime in dev mode. Has no effect in prod. If\n * set to `false`, it won't inject the runtime in dev.\n *\n * @default true\n */\n hot: boolean;\n /**\n * This registers additional extensions that should be processed by\n * vite-plugin-solid.\n *\n * @default undefined\n */\n extensions?: (string | [string, ExtensionOptions])[];\n /**\n * Pass any additional babel transform options. They will be merged with\n * the transformations required by Solid.\n *\n * @default {}\n */\n babel:\n | TransformOptions\n | ((source: string, id: string, ssr: boolean) => TransformOptions)\n | ((source: string, id: string, ssr: boolean) => Promise<TransformOptions>);\n typescript: {\n /**\n * Forcibly enables jsx parsing. Otherwise angle brackets will be treated as\n * typescript's legacy type assertion var foo = <string>bar;. Also, isTSX:\n * true requires allExtensions: true.\n *\n * @default false\n */\n isTSX?: boolean;\n\n /**\n * Replace the function used when compiling JSX expressions. This is so that\n * we know that the import is not a type import, and should not be removed.\n *\n * @default React\n */\n jsxPragma?: string;\n\n /**\n * Replace the function used when compiling JSX fragment expressions. This\n * is so that we know that the import is not a type import, and should not\n * be removed.\n *\n * @default React.Fragment\n */\n jsxPragmaFrag?: string;\n\n /**\n * Indicates that every file should be parsed as TS or TSX (depending on the\n * isTSX option).\n *\n * @default false\n */\n allExtensions?: boolean;\n\n /**\n * Enables compilation of TypeScript namespaces.\n *\n * @default uses the default set by @babel/plugin-transform-typescript.\n */\n allowNamespaces?: boolean;\n\n /**\n * When enabled, type-only class fields are only removed if they are\n * prefixed with the declare modifier:\n *\n * > NOTE: This will be enabled by default in Babel 8\n *\n * @default false\n *\n * @example\n * ```ts\n * class A {\n * declare foo: string; // Removed\n * bar: string; // Initialized to undefined\n * prop?: string; // Initialized to undefined\n * prop1!: string // Initialized to undefined\n * }\n * ```\n */\n allowDeclareFields?: boolean;\n\n /**\n * When set to true, the transform will only remove type-only imports\n * (introduced in TypeScript 3.8). This should only be used if you are using\n * TypeScript >= 3.8.\n *\n * @default false\n */\n onlyRemoveTypeImports?: boolean;\n\n /**\n * When set to true, Babel will inline enum values rather than using the\n * usual enum output:\n *\n * This option differs from TypeScript's --isolatedModules behavior, which\n * ignores the const modifier and compiles them as normal enums, and aligns\n * Babel's behavior with TypeScript's default behavior.\n *\n * ```ts\n * // Input\n * const enum Animals {\n * Fish\n * }\n * console.log(Animals.Fish);\n *\n * // Default output\n * var Animals;\n *\n * (function (Animals) {\n * Animals[Animals[\"Fish\"] = 0] = \"Fish\";\n * })(Animals || (Animals = {}));\n *\n * console.log(Animals.Fish);\n *\n * // `optimizeConstEnums` output\n * console.log(0);\n * ```\n *\n * However, when exporting a const enum Babel will compile it to a plain\n * object literal so that it doesn't need to rely on cross-file analysis\n * when compiling it:\n *\n * ```ts\n * // Input\n * export const enum Animals {\n * Fish,\n * }\n *\n * // `optimizeConstEnums` output\n * export var Animals = {\n * Fish: 0,\n * };\n * ```\n *\n * @default false\n */\n optimizeConstEnums?: boolean;\n };\n /**\n * Pass any additional [babel-plugin-jsx-dom-expressions](https://github.com/ryansolid/dom-expressions/tree/main/packages/babel-plugin-jsx-dom-expressions#plugin-options).\n * They will be merged with the defaults sets by [babel-preset-solid](https://github.com/solidjs/solid/blob/main/packages/babel-preset-solid/index.js#L8-L25).\n *\n * @default {}\n */\n solid: {\n /**\n * The name of the runtime module to import the methods from.\n *\n * @default \"solid-js/web\"\n */\n moduleName?: string;\n\n /**\n * The output mode of the compiler.\n * Can be:\n * - \"dom\" is standard output\n * - \"ssr\" is for server side rendering of strings.\n * - \"universal\" is for using custom renderers from solid-js/universal\n *\n * @default \"dom\"\n */\n generate?: 'ssr' | 'dom' | 'universal';\n\n /**\n * Indicate whether the output should contain hydratable markers.\n *\n * @default false\n */\n hydratable?: boolean;\n\n /**\n * Boolean to indicate whether to enable automatic event delegation on camelCase.\n *\n * @default true\n */\n delegateEvents?: boolean;\n\n /**\n * Boolean indicates whether smart conditional detection should be used.\n * This optimizes simple boolean expressions and ternaries in JSX.\n *\n * @default true\n */\n wrapConditionals?: boolean;\n\n /**\n * Boolean indicates whether to set current render context on Custom Elements and slots.\n * Useful for seemless Context API with Web Components.\n *\n * @default true\n */\n contextToCustomElements?: boolean;\n\n /**\n * Array of Component exports from module, that aren't included by default with the library.\n * This plugin will automatically import them if it comes across them in the JSX.\n *\n * @default [\"For\",\"Show\",\"Switch\",\"Match\",\"Suspense\",\"SuspenseList\",\"Portal\",\"Index\",\"Dynamic\",\"ErrorBoundary\"]\n */\n builtIns?: string[];\n };\n}\n\nfunction getExtension(filename: string): string {\n const index = filename.lastIndexOf('.');\n return index < 0 ? '' : filename.substring(index).replace(/\\?.+$/, '');\n}\nfunction containsSolidField(fields) {\n const keys = Object.keys(fields);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key === 'solid') return true;\n if (typeof fields[key] === 'object' && fields[key] != null && containsSolidField(fields[key]))\n return true;\n }\n return false;\n}\nfunction isJestDomInstalled() {\n try {\n // attempt to reference a file that will not throw error because expect is missing\n require('@testing-library/jest-dom/dist/utils');\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport default function solidPlugin(options: Partial<Options> = {}): Plugin {\n let needHmr = false;\n let replaceDev = false;\n let projectRoot = process.cwd();\n\n return {\n name: 'solid',\n enforce: 'pre',\n\n async config(userConfig, { command }) {\n // We inject the dev mode only if the user explicitely wants it or if we are in dev (serve) mode\n replaceDev = options.dev === true || (options.dev !== false && command === 'serve');\n projectRoot = userConfig.root;\n\n if (!userConfig.resolve) userConfig.resolve = {};\n userConfig.resolve.alias = normalizeAliases(userConfig.resolve && userConfig.resolve.alias);\n\n const solidPkgsConfig = await crawlFrameworkPkgs({\n viteUserConfig: userConfig,\n root: projectRoot || process.cwd(),\n isBuild: command === 'build',\n isFrameworkPkgByJson(pkgJson) {\n return containsSolidField(pkgJson.exports || {});\n },\n });\n\n // fix for bundling dev in production\n const nestedDeps = replaceDev\n ? ['solid-js', 'solid-js/web', 'solid-js/store', 'solid-js/html', 'solid-js/h']\n : [];\n\n const test =\n userConfig.mode === 'test'\n ? {\n test: {\n globals: true,\n ...(options.ssr ? {} : { environment: 'jsdom' }),\n transformMode: {\n [options.ssr ? 'ssr' : 'web']: [/\\.[jt]sx?$/],\n },\n ...(isJestDomInstalled()\n ? { setupFiles: ['node_modules/@testing-library/jest-dom/extend-expect.js'] }\n : {}),\n deps: { registerNodeLoader: true },\n ...(userConfig as UserConfig & { test: Record<string, any> }).test,\n },\n }\n : {};\n\n return {\n /**\n * We only need esbuild on .ts or .js files.\n * .tsx & .jsx files are handled by us\n */\n esbuild: { include: /\\.ts$/ },\n resolve: {\n conditions: [\n 'solid',\n ...(replaceDev ? ['development'] : []),\n ...(userConfig.mode === 'test' && !options.ssr ? ['browser'] : []),\n ],\n dedupe: nestedDeps,\n alias: [{ find: /^solid-refresh$/, replacement: runtimePublicPath }],\n },\n optimizeDeps: {\n include: [...nestedDeps, ...solidPkgsConfig.optimizeDeps.include],\n exclude: solidPkgsConfig.optimizeDeps.exclude,\n },\n ssr: solidPkgsConfig.ssr,\n ...test,\n };\n },\n\n configResolved(config) {\n needHmr = config.command === 'serve' && config.mode !== 'production' && options.hot !== false;\n },\n\n resolveId(id) {\n if (id === runtimePublicPath) return id;\n },\n\n load(id) {\n if (id === runtimePublicPath) return runtimeCode;\n },\n\n async transform(source, id, transformOptions) {\n const isSsr = transformOptions && transformOptions.ssr;\n const currentFileExtension = getExtension(id);\n\n const extensionsToWatch = [...(options.extensions || []), '.tsx', '.jsx'];\n const allExtensions = extensionsToWatch.map((extension) =>\n // An extension can be a string or a tuple [extension, options]\n typeof extension === 'string' ? extension : extension[0],\n );\n\n if (!allExtensions.includes(currentFileExtension)) {\n return null;\n }\n\n const inNodeModules = /node_modules/.test(id);\n\n let solidOptions: { generate: 'ssr' | 'dom'; hydratable: boolean };\n\n if (options.ssr) {\n if (isSsr) {\n solidOptions = { generate: 'ssr', hydratable: true };\n } else {\n solidOptions = { generate: 'dom', hydratable: true };\n }\n } else {\n solidOptions = { generate: 'dom', hydratable: false };\n }\n\n id = id.replace(/\\?.+$/, '');\n\n const opts: TransformOptions = {\n babelrc: false,\n configFile: false,\n root: projectRoot,\n filename: id,\n sourceFileName: id,\n presets: [[solid, { ...solidOptions, ...(options.solid || {}) }]],\n plugins: needHmr && !isSsr && !inNodeModules ? [[solidRefresh, { bundler: 'vite' }]] : [],\n sourceMaps: true,\n // Vite handles sourcemap flattening\n inputSourceMap: false as any,\n };\n\n // We need to know if the current file extension has a typescript options tied to it\n const shouldBeProcessedWithTypescript = extensionsToWatch.some((extension) => {\n if (typeof extension === 'string') {\n return extension.includes('tsx');\n }\n\n const [extensionName, extensionOptions] = extension;\n if (extensionName !== currentFileExtension) return false;\n\n return extensionOptions.typescript;\n });\n\n if (shouldBeProcessedWithTypescript) {\n opts.presets.push([ts, options.typescript || {}]);\n }\n\n // Default value for babel user options\n let babelUserOptions: TransformOptions = {};\n\n if (options.babel) {\n if (typeof options.babel === 'function') {\n const babelOptions = options.babel(source, id, isSsr);\n babelUserOptions = babelOptions instanceof Promise ? await babelOptions : babelOptions;\n } else {\n babelUserOptions = options.babel;\n }\n }\n\n const babelOptions = mergeAndConcat(babelUserOptions, opts) as TransformOptions;\n\n const { code, map } = await transformAsync(source, babelOptions);\n\n return { code, map };\n },\n };\n}\n\n/**\n * This basically normalize all aliases of the config into\n * the array format of the alias.\n *\n * eg: alias: { '@': 'src/' } => [{ find: '@', replacement: 'src/' }]\n */\nfunction normalizeAliases(alias: AliasOptions = []): Alias[] {\n return Array.isArray(alias)\n ? alias\n : Object.entries(alias).map(([find, replacement]) => ({ find, replacement }));\n}\n"],"names":["require","createRequire","import","meta","url","runtimePublicPath","runtimeFilePath","resolve","runtimeCode","readFileSync","getExtension","filename","index","lastIndexOf","substring","replace","containsSolidField","fields","keys","Object","i","length","key","isJestDomInstalled","e","solidPlugin","options","needHmr","replaceDev","projectRoot","process","cwd","name","enforce","config","userConfig","command","dev","root","alias","normalizeAliases","solidPkgsConfig","crawlFrameworkPkgs","viteUserConfig","isBuild","isFrameworkPkgByJson","pkgJson","exports","nestedDeps","test","mode","globals","ssr","environment","transformMode","setupFiles","deps","registerNodeLoader","esbuild","include","conditions","dedupe","find","replacement","optimizeDeps","exclude","configResolved","hot","resolveId","id","load","transform","source","transformOptions","isSsr","currentFileExtension","extensionsToWatch","extensions","allExtensions","map","extension","includes","inNodeModules","solidOptions","generate","hydratable","opts","babelrc","configFile","sourceFileName","presets","solid","plugins","solidRefresh","bundler","sourceMaps","inputSourceMap","shouldBeProcessedWithTypescript","some","extensionName","extensionOptions","typescript","push","ts","babelUserOptions","babel","babelOptions","Promise","mergeAndConcat","code","transformAsync","Array","isArray","entries"],"mappings":";;;;;;;;;AAUA,MAAMA,OAAO,GAAGC,aAAa,CAACC,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,CAAA;AAE9C,MAAMC,iBAAiB,GAAG,iBAAiB,CAAA;AAC3C,MAAMC,eAAe,GAAGN,OAAO,CAACO,OAAO,CAAC,sCAAsC,CAAC,CAAA;AAC/E,MAAMC,WAAW,GAAGC,YAAY,CAACH,eAAe,EAAE,OAAO,CAAC,CAAA;;AAE1D;;AAsOA,SAASI,YAAY,CAACC,QAAgB,EAAU;AAC9C,EAAA,MAAMC,KAAK,GAAGD,QAAQ,CAACE,WAAW,CAAC,GAAG,CAAC,CAAA;AACvC,EAAA,OAAOD,KAAK,GAAG,CAAC,GAAG,EAAE,GAAGD,QAAQ,CAACG,SAAS,CAACF,KAAK,CAAC,CAACG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;AACxE,CAAA;AACA,SAASC,kBAAkB,CAACC,MAAM,EAAE;AAClC,EAAA,MAAMC,IAAI,GAAGC,MAAM,CAACD,IAAI,CAACD,MAAM,CAAC,CAAA;AAChC,EAAA,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,IAAI,CAACG,MAAM,EAAED,CAAC,EAAE,EAAE;AACpC,IAAA,MAAME,GAAG,GAAGJ,IAAI,CAACE,CAAC,CAAC,CAAA;AACnB,IAAA,IAAIE,GAAG,KAAK,OAAO,EAAE,OAAO,IAAI,CAAA;IAChC,IAAI,OAAOL,MAAM,CAACK,GAAG,CAAC,KAAK,QAAQ,IAAIL,MAAM,CAACK,GAAG,CAAC,IAAI,IAAI,IAAIN,kBAAkB,CAACC,MAAM,CAACK,GAAG,CAAC,CAAC,EAC3F,OAAO,IAAI,CAAA;AACf,GAAA;AACA,EAAA,OAAO,KAAK,CAAA;AACd,CAAA;AACA,SAASC,kBAAkB,GAAG;EAC5B,IAAI;AACF;IACAvB,OAAO,CAAC,sCAAsC,CAAC,CAAA;AAC/C,IAAA,OAAO,IAAI,CAAA;GACZ,CAAC,OAAOwB,CAAC,EAAE;AACV,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;AACF,CAAA;AAEe,SAASC,WAAW,CAACC,OAAyB,GAAG,EAAE,EAAU;EAC1E,IAAIC,OAAO,GAAG,KAAK,CAAA;EACnB,IAAIC,UAAU,GAAG,KAAK,CAAA;AACtB,EAAA,IAAIC,WAAW,GAAGC,OAAO,CAACC,GAAG,EAAE,CAAA;EAE/B,OAAO;AACLC,IAAAA,IAAI,EAAE,OAAO;AACbC,IAAAA,OAAO,EAAE,KAAK;IAEd,MAAMC,MAAM,CAACC,UAAU,EAAE;AAAEC,MAAAA,OAAAA;AAAQ,KAAC,EAAE;AACpC;AACAR,MAAAA,UAAU,GAAGF,OAAO,CAACW,GAAG,KAAK,IAAI,IAAKX,OAAO,CAACW,GAAG,KAAK,KAAK,IAAID,OAAO,KAAK,OAAQ,CAAA;MACnFP,WAAW,GAAGM,UAAU,CAACG,IAAI,CAAA;MAE7B,IAAI,CAACH,UAAU,CAAC5B,OAAO,EAAE4B,UAAU,CAAC5B,OAAO,GAAG,EAAE,CAAA;AAChD4B,MAAAA,UAAU,CAAC5B,OAAO,CAACgC,KAAK,GAAGC,gBAAgB,CAACL,UAAU,CAAC5B,OAAO,IAAI4B,UAAU,CAAC5B,OAAO,CAACgC,KAAK,CAAC,CAAA;AAE3F,MAAA,MAAME,eAAe,GAAG,MAAMC,kBAAkB,CAAC;AAC/CC,QAAAA,cAAc,EAAER,UAAU;AAC1BG,QAAAA,IAAI,EAAET,WAAW,IAAIC,OAAO,CAACC,GAAG,EAAE;QAClCa,OAAO,EAAER,OAAO,KAAK,OAAO;QAC5BS,oBAAoB,CAACC,OAAO,EAAE;UAC5B,OAAO9B,kBAAkB,CAAC8B,OAAO,CAACC,OAAO,IAAI,EAAE,CAAC,CAAA;AAClD,SAAA;AACF,OAAC,CAAC,CAAA;;AAEF;AACA,MAAA,MAAMC,UAAU,GAAGpB,UAAU,GACzB,CAAC,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,CAAC,GAC7E,EAAE,CAAA;AAEN,MAAA,MAAMqB,IAAI,GACRd,UAAU,CAACe,IAAI,KAAK,MAAM,GACtB;AACED,QAAAA,IAAI,EAAE;AACJE,UAAAA,OAAO,EAAE,IAAI;AACb,UAAA,IAAIzB,OAAO,CAAC0B,GAAG,GAAG,EAAE,GAAG;AAAEC,YAAAA,WAAW,EAAE,OAAA;AAAQ,WAAC,CAAC;AAChDC,UAAAA,aAAa,EAAE;YACb,CAAC5B,OAAO,CAAC0B,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,YAAY,CAAA;WAC7C;UACD,IAAI7B,kBAAkB,EAAE,GACpB;YAAEgC,UAAU,EAAE,CAAC,yDAAyD,CAAA;WAAG,GAC3E,EAAE,CAAC;AACPC,UAAAA,IAAI,EAAE;AAAEC,YAAAA,kBAAkB,EAAE,IAAA;WAAM;AAClC,UAAA,GAAItB,UAAU,CAAgDc,IAAAA;AAChE,SAAA;OACD,GACD,EAAE,CAAA;MAER,OAAO;AACL;AACR;AACA;AACA;AACQS,QAAAA,OAAO,EAAE;AAAEC,UAAAA,OAAO,EAAE,OAAA;SAAS;AAC7BpD,QAAAA,OAAO,EAAE;AACPqD,UAAAA,UAAU,EAAE,CACV,OAAO,EACP,IAAIhC,UAAU,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,EACtC,IAAIO,UAAU,CAACe,IAAI,KAAK,MAAM,IAAI,CAACxB,OAAO,CAAC0B,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CACnE;AACDS,UAAAA,MAAM,EAAEb,UAAU;AAClBT,UAAAA,KAAK,EAAE,CAAC;AAAEuB,YAAAA,IAAI,EAAE,iBAAiB;AAAEC,YAAAA,WAAW,EAAE1D,iBAAAA;WAAmB,CAAA;SACpE;AACD2D,QAAAA,YAAY,EAAE;UACZL,OAAO,EAAE,CAAC,GAAGX,UAAU,EAAE,GAAGP,eAAe,CAACuB,YAAY,CAACL,OAAO,CAAC;AACjEM,UAAAA,OAAO,EAAExB,eAAe,CAACuB,YAAY,CAACC,OAAAA;SACvC;QACDb,GAAG,EAAEX,eAAe,CAACW,GAAG;QACxB,GAAGH,IAAAA;OACJ,CAAA;KACF;IAEDiB,cAAc,CAAChC,MAAM,EAAE;AACrBP,MAAAA,OAAO,GAAGO,MAAM,CAACE,OAAO,KAAK,OAAO,IAAIF,MAAM,CAACgB,IAAI,KAAK,YAAY,IAAIxB,OAAO,CAACyC,GAAG,KAAK,KAAK,CAAA;KAC9F;IAEDC,SAAS,CAACC,EAAE,EAAE;AACZ,MAAA,IAAIA,EAAE,KAAKhE,iBAAiB,EAAE,OAAOgE,EAAE,CAAA;KACxC;IAEDC,IAAI,CAACD,EAAE,EAAE;AACP,MAAA,IAAIA,EAAE,KAAKhE,iBAAiB,EAAE,OAAOG,WAAW,CAAA;KACjD;AAED,IAAA,MAAM+D,SAAS,CAACC,MAAM,EAAEH,EAAE,EAAEI,gBAAgB,EAAE;AAC5C,MAAA,MAAMC,KAAK,GAAGD,gBAAgB,IAAIA,gBAAgB,CAACrB,GAAG,CAAA;AACtD,MAAA,MAAMuB,oBAAoB,GAAGjE,YAAY,CAAC2D,EAAE,CAAC,CAAA;AAE7C,MAAA,MAAMO,iBAAiB,GAAG,CAAC,IAAIlD,OAAO,CAACmD,UAAU,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AACzE,MAAA,MAAMC,aAAa,GAAGF,iBAAiB,CAACG,GAAG,CAAEC,SAAS;AACpD;MACA,OAAOA,SAAS,KAAK,QAAQ,GAAGA,SAAS,GAAGA,SAAS,CAAC,CAAC,CAAC,CACzD,CAAA;AAED,MAAA,IAAI,CAACF,aAAa,CAACG,QAAQ,CAACN,oBAAoB,CAAC,EAAE;AACjD,QAAA,OAAO,IAAI,CAAA;AACb,OAAA;AAEA,MAAA,MAAMO,aAAa,GAAG,cAAc,CAACjC,IAAI,CAACoB,EAAE,CAAC,CAAA;AAE7C,MAAA,IAAIc,YAA8D,CAAA;MAElE,IAAIzD,OAAO,CAAC0B,GAAG,EAAE;AACf,QAAA,IAAIsB,KAAK,EAAE;AACTS,UAAAA,YAAY,GAAG;AAAEC,YAAAA,QAAQ,EAAE,KAAK;AAAEC,YAAAA,UAAU,EAAE,IAAA;WAAM,CAAA;AACtD,SAAC,MAAM;AACLF,UAAAA,YAAY,GAAG;AAAEC,YAAAA,QAAQ,EAAE,KAAK;AAAEC,YAAAA,UAAU,EAAE,IAAA;WAAM,CAAA;AACtD,SAAA;AACF,OAAC,MAAM;AACLF,QAAAA,YAAY,GAAG;AAAEC,UAAAA,QAAQ,EAAE,KAAK;AAAEC,UAAAA,UAAU,EAAE,KAAA;SAAO,CAAA;AACvD,OAAA;MAEAhB,EAAE,GAAGA,EAAE,CAACtD,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;AAE5B,MAAA,MAAMuE,IAAsB,GAAG;AAC7BC,QAAAA,OAAO,EAAE,KAAK;AACdC,QAAAA,UAAU,EAAE,KAAK;AACjBlD,QAAAA,IAAI,EAAET,WAAW;AACjBlB,QAAAA,QAAQ,EAAE0D,EAAE;AACZoB,QAAAA,cAAc,EAAEpB,EAAE;AAClBqB,QAAAA,OAAO,EAAE,CAAC,CAACC,KAAK,EAAE;AAAE,UAAA,GAAGR,YAAY;AAAE,UAAA,IAAIzD,OAAO,CAACiE,KAAK,IAAI,EAAE,CAAA;AAAE,SAAC,CAAC,CAAC;AACjEC,QAAAA,OAAO,EAAEjE,OAAO,IAAI,CAAC+C,KAAK,IAAI,CAACQ,aAAa,GAAG,CAAC,CAACW,YAAY,EAAE;AAAEC,UAAAA,OAAO,EAAE,MAAA;SAAQ,CAAC,CAAC,GAAG,EAAE;AACzFC,QAAAA,UAAU,EAAE,IAAI;AAChB;AACAC,QAAAA,cAAc,EAAE,KAAA;OACjB,CAAA;;AAED;AACA,MAAA,MAAMC,+BAA+B,GAAGrB,iBAAiB,CAACsB,IAAI,CAAElB,SAAS,IAAK;AAC5E,QAAA,IAAI,OAAOA,SAAS,KAAK,QAAQ,EAAE;AACjC,UAAA,OAAOA,SAAS,CAACC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAClC,SAAA;AAEA,QAAA,MAAM,CAACkB,aAAa,EAAEC,gBAAgB,CAAC,GAAGpB,SAAS,CAAA;AACnD,QAAA,IAAImB,aAAa,KAAKxB,oBAAoB,EAAE,OAAO,KAAK,CAAA;QAExD,OAAOyB,gBAAgB,CAACC,UAAU,CAAA;AACpC,OAAC,CAAC,CAAA;AAEF,MAAA,IAAIJ,+BAA+B,EAAE;AACnCX,QAAAA,IAAI,CAACI,OAAO,CAACY,IAAI,CAAC,CAACC,EAAE,EAAE7E,OAAO,CAAC2E,UAAU,IAAI,EAAE,CAAC,CAAC,CAAA;AACnD,OAAA;;AAEA;MACA,IAAIG,gBAAkC,GAAG,EAAE,CAAA;MAE3C,IAAI9E,OAAO,CAAC+E,KAAK,EAAE;AACjB,QAAA,IAAI,OAAO/E,OAAO,CAAC+E,KAAK,KAAK,UAAU,EAAE;UACvC,MAAMC,YAAY,GAAGhF,OAAO,CAAC+E,KAAK,CAACjC,MAAM,EAAEH,EAAE,EAAEK,KAAK,CAAC,CAAA;UACrD8B,gBAAgB,GAAGE,YAAY,YAAYC,OAAO,GAAG,MAAMD,YAAY,GAAGA,YAAY,CAAA;AACxF,SAAC,MAAM;UACLF,gBAAgB,GAAG9E,OAAO,CAAC+E,KAAK,CAAA;AAClC,SAAA;AACF,OAAA;AAEA,MAAA,MAAMC,YAAY,GAAGE,cAAc,CAACJ,gBAAgB,EAAElB,IAAI,CAAqB,CAAA;MAE/E,MAAM;QAAEuB,IAAI;AAAE9B,QAAAA,GAAAA;AAAI,OAAC,GAAG,MAAM+B,cAAc,CAACtC,MAAM,EAAEkC,YAAY,CAAC,CAAA;MAEhE,OAAO;QAAEG,IAAI;AAAE9B,QAAAA,GAAAA;OAAK,CAAA;AACtB,KAAA;GACD,CAAA;AACH,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASvC,gBAAgB,CAACD,KAAmB,GAAG,EAAE,EAAW;EAC3D,OAAOwE,KAAK,CAACC,OAAO,CAACzE,KAAK,CAAC,GACvBA,KAAK,GACLpB,MAAM,CAAC8F,OAAO,CAAC1E,KAAK,CAAC,CAACwC,GAAG,CAAC,CAAC,CAACjB,IAAI,EAAEC,WAAW,CAAC,MAAM;IAAED,IAAI;AAAEC,IAAAA,WAAAA;AAAY,GAAC,CAAC,CAAC,CAAA;AACjF;;;;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vite-plugin-solid",
3
- "version": "2.4.0",
4
- "description": "solid-js integration plugin for vite 3",
3
+ "version": "2.6.0",
4
+ "description": "solid-js integration plugin for vite 3/4",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist"
@@ -35,34 +35,34 @@
35
35
  },
36
36
  "homepage": "https://github.com/solidjs/vite-plugin-solid#readme",
37
37
  "dependencies": {
38
- "@babel/core": "^7.18.6",
38
+ "@babel/core": "^7.20.5",
39
39
  "@babel/preset-typescript": "^7.18.6",
40
- "babel-preset-solid": "^1.4.6",
41
- "merge-anything": "^5.0.2",
40
+ "@types/babel__core": "^7.1.20",
41
+ "babel-preset-solid": "^1.6.3",
42
+ "merge-anything": "^5.1.4",
42
43
  "solid-refresh": "^0.4.1",
43
- "vitefu": "^0.1.1"
44
+ "vitefu": "^0.2.3"
44
45
  },
45
46
  "devDependencies": {
46
- "@babel/plugin-transform-typescript": "^7.18.8",
47
- "@babel/preset-env": "^7.18.6",
48
- "@rollup/plugin-babel": "^5.3.1",
49
- "@rollup/plugin-commonjs": "^22.0.1",
50
- "@rollup/plugin-node-resolve": "^13.3.0",
47
+ "@babel/plugin-transform-typescript": "^7.20.2",
48
+ "@babel/preset-env": "^7.20.2",
49
+ "@rollup/plugin-babel": "^6.0.3",
50
+ "@rollup/plugin-commonjs": "^23.0.4",
51
+ "@rollup/plugin-node-resolve": "^15.0.1",
51
52
  "@skypack/package-check": "^0.2.2",
52
- "@types/babel__core": "^7.1.19",
53
- "@types/node": "^18.0.4",
54
- "prettier": "^2.7.1",
55
- "rollup": "^2.76.0",
53
+ "@types/node": "^18.11.12",
54
+ "prettier": "^2.8.1",
55
+ "rollup": "^3.7.0",
56
56
  "rollup-plugin-cleaner": "^1.0.0",
57
- "solid-js": "^1.4.7",
58
- "typescript": "^4.7.4",
59
- "vite": "^3.0.0"
57
+ "solid-js": "^1.6.11",
58
+ "typescript": "^4.9.4",
59
+ "vite": "^4.0.0"
60
60
  },
61
61
  "peerDependencies": {
62
- "solid-js": "^1.3.17",
63
- "vite": "^3.0.0"
62
+ "solid-js": "^1.3.17 || ^1.4.0 || ^1.5.0 || ^1.6.0",
63
+ "vite": "^3.0.0 || ^4.0.0"
64
64
  },
65
- "packageManager": "pnpm@6.24.4",
65
+ "packageManager": "pnpm@7.18.1",
66
66
  "scripts": {
67
67
  "build": "rollup -c && tsc --emitDeclarationOnly",
68
68
  "dev": "rollup -c -w",