vite-plugin-solid 2.11.10 → 3.0.0-next.1

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.
@@ -1,11 +1,14 @@
1
1
  'use strict';
2
2
 
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
3
5
  var babel = require('@babel/core');
4
6
  var solid = require('babel-preset-solid');
5
7
  var fs = require('fs');
6
8
  var mergeAnything = require('merge-anything');
7
9
  var module$1 = require('module');
8
10
  var solidRefresh = require('solid-refresh/babel');
11
+ var path = require('path');
9
12
  var vite = require('vite');
10
13
  var vitefu = require('vitefu');
11
14
 
@@ -29,11 +32,75 @@ function _interopNamespaceDefault(e) {
29
32
 
30
33
  var babel__namespace = /*#__PURE__*/_interopNamespaceDefault(babel);
31
34
 
35
+ const LAZY_PLACEHOLDER_PREFIX = '__SOLID_LAZY_MODULE__:';
36
+
37
+ /**
38
+ * Detects whether a CallExpression argument is `() => import("specifier")`
39
+ * and returns the specifier string if so.
40
+ */
41
+ function extractDynamicImportSpecifier(node) {
42
+ if (node.type !== 'ArrowFunctionExpression' && node.type !== 'FunctionExpression') return null;
43
+ let callExpr = null;
44
+ if (node.body.type === 'CallExpression') {
45
+ callExpr = node.body;
46
+ } else if (node.body.type === 'BlockStatement' && node.body.body.length === 1 && node.body.body[0].type === 'ReturnStatement' && node.body.body[0].argument?.type === 'CallExpression') {
47
+ callExpr = node.body.body[0].argument;
48
+ }
49
+ if (!callExpr) return null;
50
+ if (callExpr.callee.type !== 'Import') return null;
51
+ if (callExpr.arguments.length !== 1) return null;
52
+ const arg = callExpr.arguments[0];
53
+ if (arg.type !== 'StringLiteral') return null;
54
+ return arg.value;
55
+ }
56
+
57
+ /**
58
+ * Babel plugin that detects `lazy(() => import("specifier"))` calls
59
+ * and injects a placeholder as the second argument. The placeholder
60
+ * is resolved to a real path by the Vite transform hook using this.resolve().
61
+ */
62
+ function lazyModuleUrlPlugin() {
63
+ return {
64
+ name: 'solid-lazy-module-url',
65
+ visitor: {
66
+ CallExpression(nodePath, state) {
67
+ if (!state.filename) return;
68
+ const {
69
+ node
70
+ } = nodePath;
71
+ if (node.callee.type !== 'Identifier' || node.callee.name !== 'lazy') return;
72
+ const binding = nodePath.scope.getBinding('lazy');
73
+ if (!binding || binding.kind !== 'module') return;
74
+ const bindingPath = binding.path;
75
+ if (bindingPath.type !== 'ImportSpecifier' || bindingPath.parent.type !== 'ImportDeclaration') return;
76
+ const source = bindingPath.parent.source.value;
77
+ if (source !== 'solid-js') return;
78
+ if (node.arguments.length >= 2) return;
79
+ if (node.arguments.length !== 1) return;
80
+ const specifier = extractDynamicImportSpecifier(node.arguments[0]);
81
+ if (!specifier) return;
82
+ node.arguments.push({
83
+ type: 'StringLiteral',
84
+ value: LAZY_PLACEHOLDER_PREFIX + specifier
85
+ });
86
+ }
87
+ }
88
+ };
89
+ }
90
+
32
91
  const require$1 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));
33
92
  const runtimePublicPath = '/@solid-refresh';
34
93
  const runtimeFilePath = require$1.resolve('solid-refresh/dist/solid-refresh.mjs');
35
94
  const runtimeCode = fs.readFileSync(runtimeFilePath, 'utf-8');
36
95
  const isVite6 = +vite.version.split('.')[0] >= 6;
96
+ const VIRTUAL_MANIFEST_ID = 'virtual:solid-manifest';
97
+ const RESOLVED_VIRTUAL_MANIFEST_ID = '\0' + VIRTUAL_MANIFEST_ID;
98
+ const DEV_MANIFEST_CODE = `export default new Proxy({}, {
99
+ get(_, key) {
100
+ if (typeof key !== "string") return undefined;
101
+ return { file: "/" + key };
102
+ }
103
+ });`;
37
104
 
38
105
  /** Possible options for the extensions property */
39
106
 
@@ -68,6 +135,7 @@ function solidPlugin(options = {}) {
68
135
  let replaceDev = false;
69
136
  let projectRoot = process.cwd();
70
137
  let isTestMode = false;
138
+ let isBuild = false;
71
139
  let solidPkgsConfig;
72
140
  return {
73
141
  name: 'solid',
@@ -77,7 +145,7 @@ function solidPlugin(options = {}) {
77
145
  }) {
78
146
  // We inject the dev mode only if the user explicitly wants it or if we are in dev (serve) mode
79
147
  replaceDev = options.dev === true || options.dev !== false && command === 'serve';
80
- projectRoot = userConfig.root;
148
+ projectRoot = userConfig.root || projectRoot;
81
149
  isTestMode = userConfig.mode === 'test';
82
150
  if (!userConfig.resolve) userConfig.resolve = {};
83
151
  userConfig.resolve.alias = normalizeAliases(userConfig.resolve && userConfig.resolve.alias);
@@ -91,7 +159,7 @@ function solidPlugin(options = {}) {
91
159
  });
92
160
 
93
161
  // fix for bundling dev in production
94
- const nestedDeps = replaceDev ? ['solid-js', 'solid-js/web', 'solid-js/store', 'solid-js/html', 'solid-js/h'] : [];
162
+ const nestedDeps = replaceDev ? ['solid-js', '@solidjs/web'] : [];
95
163
  const userTest = userConfig.test ?? {};
96
164
  const test = {};
97
165
  if (userConfig.mode === 'test') {
@@ -170,13 +238,24 @@ function solidPlugin(options = {}) {
170
238
  }
171
239
  },
172
240
  configResolved(config) {
173
- needHmr = config.command === 'serve' && config.mode !== 'production' && options.hot !== false;
241
+ isBuild = config.command === 'build';
242
+ needHmr = config.command === 'serve' && config.mode !== 'production' && options.hot !== false && !options.refresh?.disabled;
174
243
  },
175
244
  resolveId(id) {
176
245
  if (id === runtimePublicPath) return id;
246
+ if (id === VIRTUAL_MANIFEST_ID) return RESOLVED_VIRTUAL_MANIFEST_ID;
177
247
  },
178
248
  load(id) {
179
249
  if (id === runtimePublicPath) return runtimeCode;
250
+ if (id === RESOLVED_VIRTUAL_MANIFEST_ID) {
251
+ if (!isBuild) return DEV_MANIFEST_CODE;
252
+ const manifestPath = path.resolve(projectRoot, 'dist/client/.vite/manifest.json');
253
+ if (fs.existsSync(manifestPath)) {
254
+ const json = fs.readFileSync(manifestPath, 'utf-8');
255
+ return `export default ${json};`;
256
+ }
257
+ return DEV_MANIFEST_CODE;
258
+ }
180
259
  },
181
260
  async transform(source, id, transformOptions) {
182
261
  const isSsr = transformOptions && transformOptions.ssr;
@@ -222,7 +301,7 @@ function solidPlugin(options = {}) {
222
301
  if (extensionName !== currentFileExtension) return false;
223
302
  return extensionOptions.typescript;
224
303
  });
225
- const plugins = ['jsx'];
304
+ const plugins = ['jsx', 'decorators'];
226
305
  if (shouldBeProcessedWithTypescript) {
227
306
  plugins.push('typescript');
228
307
  }
@@ -232,11 +311,18 @@ function solidPlugin(options = {}) {
232
311
  sourceFileName: id,
233
312
  presets: [[solid, {
234
313
  ...solidOptions,
314
+ dev: replaceDev,
235
315
  ...(options.solid || {})
236
316
  }]],
237
- plugins: needHmr && !isSsr && !inNodeModules ? [[solidRefresh, {
238
- bundler: 'vite'
239
- }]] : [],
317
+ plugins: [[lazyModuleUrlPlugin], ...(needHmr && !isSsr && !inNodeModules ? [[solidRefresh, {
318
+ ...(options.refresh || {}),
319
+ bundler: 'vite',
320
+ fixRender: true,
321
+ // TODO unfortunately, even with SSR enabled for refresh
322
+ // it still doesn't work, so now we have to disable
323
+ // this config
324
+ jsx: false
325
+ }]] : [])],
240
326
  ast: false,
241
327
  sourceMaps: true,
242
328
  configFile: false,
@@ -250,20 +336,43 @@ function solidPlugin(options = {}) {
250
336
  let babelUserOptions = {};
251
337
  if (options.babel) {
252
338
  if (typeof options.babel === 'function') {
253
- const babelOptions = options.babel(source, id, isSsr);
339
+ const babelOptions = options.babel(source, id, !!isSsr);
254
340
  babelUserOptions = babelOptions instanceof Promise ? await babelOptions : babelOptions;
255
341
  } else {
256
342
  babelUserOptions = options.babel;
257
343
  }
258
344
  }
259
345
  const babelOptions = mergeAnything.mergeAndConcat(babelUserOptions, opts);
260
- const {
261
- code,
262
- map
263
- } = await babel__namespace.transformAsync(source, babelOptions);
346
+ const result = await babel__namespace.transformAsync(source, babelOptions);
347
+ if (!result) {
348
+ return undefined;
349
+ }
350
+ let code = result.code || '';
351
+
352
+ // Resolve lazy() moduleUrl placeholders using Vite's resolver
353
+ const placeholderRe = new RegExp('"' + LAZY_PLACEHOLDER_PREFIX + '([^"]+)"', 'g');
354
+ let match;
355
+ const resolutions = [];
356
+ while ((match = placeholderRe.exec(code)) !== null) {
357
+ const specifier = match[1];
358
+ const resolved = await this.resolve(specifier, id);
359
+ if (resolved) {
360
+ const cleanId = resolved.id.split('?')[0];
361
+ resolutions.push({
362
+ placeholder: match[0],
363
+ resolved: '"' + path.relative(projectRoot, cleanId) + '"'
364
+ });
365
+ }
366
+ }
367
+ for (const {
368
+ placeholder,
369
+ resolved
370
+ } of resolutions) {
371
+ code = code.replace(placeholder, resolved);
372
+ }
264
373
  return {
265
374
  code,
266
- map
375
+ map: result.map
267
376
  };
268
377
  }
269
378
  };
@@ -282,5 +391,5 @@ function normalizeAliases(alias = []) {
282
391
  }));
283
392
  }
284
393
 
285
- module.exports = solidPlugin;
394
+ exports.default = solidPlugin;
286
395
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["import * as babel from '@babel/core';\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, FilterPattern, Plugin } from 'vite';\nimport { createFilter, version } 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\nconst isVite6 = +version.split('.')[0] >= 6;\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 * A [picomatch](https://github.com/micromatch/picomatch) pattern, or array of patterns, which specifies the files\n * the plugin should operate on.\n */\n include?: FilterPattern;\n /**\n * A [picomatch](https://github.com/micromatch/picomatch) pattern, or array of patterns, which specifies the files\n * to be ignored by the plugin.\n */\n exclude?: FilterPattern;\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.\n *\n * @default false\n */\n ssr?: boolean;\n\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 | babel.TransformOptions\n | ((source: string, id: string, ssr: boolean) => babel.TransformOptions)\n | ((source: string, id: string, ssr: boolean) => Promise<babel.TransformOptions>);\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 * Remove unnecessary closing tags from template strings. More info here:\n * https://github.com/solidjs/solid/blob/main/CHANGELOG.md#smaller-templates\n *\n * @default false\n */\n omitNestedClosingTags?: boolean;\n\n /**\n * Remove the last closing tag from template strings. Enabled by default even when `omitNestedClosingTags` is disabled.\n * Can be disabled for compatibility for some browser-like environments.\n *\n * @default true\n */\n omitLastClosingTag?: boolean;\n\n /**\n * Remove unnecessary quotes from template strings.\n * Can be disabled for compatibility for some browser-like environments.\n *\n * @default true\n */\n omitQuotes?: boolean;\n\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: Record<string, any>) {\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\nfunction getJestDomExport(setupFiles: string[]) {\n return setupFiles?.some((path) => /jest-dom/.test(path))\n ? undefined\n : ['@testing-library/jest-dom/vitest', '@testing-library/jest-dom/extend-expect'].find(\n (path) => {\n try {\n require.resolve(path);\n return true;\n } catch (e) {\n return false;\n }\n },\n );\n}\n\nexport default function solidPlugin(options: Partial<Options> = {}): Plugin {\n const filter = createFilter(options.include, options.exclude);\n\n let needHmr = false;\n let replaceDev = false;\n let projectRoot = process.cwd();\n let isTestMode = false;\n let solidPkgsConfig: Awaited<ReturnType<typeof crawlFrameworkPkgs>>;\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 explicitly 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 isTestMode = userConfig.mode === 'test';\n\n if (!userConfig.resolve) userConfig.resolve = {};\n userConfig.resolve.alias = normalizeAliases(userConfig.resolve && userConfig.resolve.alias);\n\n 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 userTest = (userConfig as any).test ?? {};\n const test = {} as any;\n if (userConfig.mode === 'test') {\n // to simplify the processing of the config, we normalize the setupFiles to an array\n const userSetupFiles: string[] =\n typeof userTest.setupFiles === 'string'\n ? [userTest.setupFiles]\n : userTest.setupFiles || [];\n\n if (!userTest.environment && !options.ssr) {\n test.environment = 'jsdom';\n }\n\n if (\n !userTest.server?.deps?.external?.find((item: string | RegExp) =>\n /solid-js/.test(item.toString()),\n )\n ) {\n test.server = { deps: { external: [/solid-js/] } };\n }\n if (!userTest.browser?.enabled) {\n // vitest browser mode already has bundled jest-dom assertions\n // https://main.vitest.dev/guide/browser/assertion-api.html#assertion-api\n const jestDomImport = getJestDomExport(userSetupFiles);\n if (jestDomImport) {\n test.setupFiles = [jestDomImport];\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: isVite6\n ? undefined\n : [\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 ...(!isVite6 ? { ssr: solidPkgsConfig.ssr } : {}),\n ...(test.server ? { test } : {}),\n };\n },\n\n // @ts-ignore This hook only works in Vite 6\n async configEnvironment(name, config, opts) {\n config.resolve ??= {};\n // Emulate Vite default fallback for `resolve.conditions` if not set\n if (config.resolve.conditions == null) {\n // @ts-ignore These exports only exist in Vite 6\n const { defaultClientConditions, defaultServerConditions } = await import('vite');\n if (config.consumer === 'client' || name === 'client' || opts.isSsrTargetWebworker) {\n config.resolve.conditions = [...defaultClientConditions];\n } else {\n config.resolve.conditions = [...defaultServerConditions];\n }\n }\n config.resolve.conditions = [\n 'solid',\n ...(replaceDev ? ['development'] : []),\n ...(isTestMode && !opts.isSsrTargetWebworker && !options.ssr ? ['browser'] : []),\n ...config.resolve.conditions,\n ];\n\n // Set resolve.noExternal and resolve.external for SSR environment (Vite 6+)\n // Only set resolve.external if noExternal is not true (to avoid conflicts with plugins like Cloudflare)\n if (isVite6 && name === 'ssr' && solidPkgsConfig) {\n if (config.resolve.noExternal !== true) {\n config.resolve.noExternal = [\n ...(Array.isArray(config.resolve.noExternal) ? config.resolve.noExternal : []),\n ...solidPkgsConfig.ssr.noExternal,\n ];\n config.resolve.external = [\n ...(Array.isArray(config.resolve.external) ? config.resolve.external : []),\n ...solidPkgsConfig.ssr.external,\n ];\n }\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 || [];\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 (!filter(id)) {\n return null;\n }\n\n id = id.replace(/\\?.*$/, '');\n\n if (!(/\\.[mc]?[tj]sx$/i.test(id) || 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 // We need to know if the current file extension has a typescript options tied to it\n const shouldBeProcessedWithTypescript =\n /\\.[mc]?tsx$/i.test(id) ||\n 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 const plugins: NonNullable<NonNullable<babel.TransformOptions['parserOpts']>['plugins']> = [\n 'jsx',\n ];\n\n if (shouldBeProcessedWithTypescript) {\n plugins.push('typescript');\n }\n\n const opts: babel.TransformOptions = {\n root: projectRoot,\n filename: id,\n sourceFileName: id,\n presets: [[solid, { ...solidOptions, ...(options.solid || {}) }]],\n plugins: needHmr && !isSsr && !inNodeModules ? [[solidRefresh, { bundler: 'vite' }]] : [],\n ast: false,\n sourceMaps: true,\n configFile: false,\n babelrc: false,\n parserOpts: {\n plugins,\n },\n };\n\n // Default value for babel user options\n let babelUserOptions: babel.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 babel.TransformOptions;\n\n const { code, map } = await babel.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","isVite6","version","split","getExtension","filename","index","lastIndexOf","substring","replace","containsSolidField","fields","keys","Object","i","length","key","getJestDomExport","setupFiles","some","path","test","undefined","find","e","solidPlugin","options","filter","createFilter","include","exclude","needHmr","replaceDev","projectRoot","process","cwd","isTestMode","solidPkgsConfig","name","enforce","config","userConfig","command","dev","root","mode","alias","normalizeAliases","crawlFrameworkPkgs","viteUserConfig","isBuild","isFrameworkPkgByJson","pkgJson","exports","nestedDeps","userTest","userSetupFiles","environment","ssr","server","deps","external","item","toString","browser","enabled","jestDomImport","conditions","dedupe","replacement","optimizeDeps","configEnvironment","opts","defaultClientConditions","defaultServerConditions","consumer","isSsrTargetWebworker","noExternal","Array","isArray","configResolved","hot","resolveId","id","load","transform","source","transformOptions","isSsr","currentFileExtension","extensionsToWatch","extensions","allExtensions","map","extension","includes","inNodeModules","solidOptions","generate","hydratable","shouldBeProcessedWithTypescript","extensionName","extensionOptions","typescript","plugins","push","sourceFileName","presets","solid","solidRefresh","bundler","ast","sourceMaps","configFile","babelrc","parserOpts","babelUserOptions","babel","babelOptions","Promise","mergeAndConcat","code","transformAsync","entries"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/lazy-module-url.ts","../../src/index.ts"],"sourcesContent":["import type { PluginObj, types as t } from '@babel/core';\n\nexport const LAZY_PLACEHOLDER_PREFIX = '__SOLID_LAZY_MODULE__:';\n\n/**\n * Detects whether a CallExpression argument is `() => import(\"specifier\")`\n * and returns the specifier string if so.\n */\nfunction extractDynamicImportSpecifier(node: t.Node): string | null {\n if (node.type !== 'ArrowFunctionExpression' && node.type !== 'FunctionExpression') return null;\n\n let callExpr: t.CallExpression | null = null;\n if (node.body.type === 'CallExpression') {\n callExpr = node.body;\n } else if (\n node.body.type === 'BlockStatement' &&\n node.body.body.length === 1 &&\n node.body.body[0].type === 'ReturnStatement' &&\n node.body.body[0].argument?.type === 'CallExpression'\n ) {\n callExpr = node.body.body[0].argument;\n }\n if (!callExpr) return null;\n\n if (callExpr.callee.type !== 'Import') return null;\n if (callExpr.arguments.length !== 1) return null;\n\n const arg = callExpr.arguments[0];\n if (arg.type !== 'StringLiteral') return null;\n\n return arg.value;\n}\n\n/**\n * Babel plugin that detects `lazy(() => import(\"specifier\"))` calls\n * and injects a placeholder as the second argument. The placeholder\n * is resolved to a real path by the Vite transform hook using this.resolve().\n */\nexport default function lazyModuleUrlPlugin(): PluginObj {\n return {\n name: 'solid-lazy-module-url',\n visitor: {\n CallExpression(nodePath, state) {\n if (!state.filename) return;\n const { node } = nodePath;\n\n if (node.callee.type !== 'Identifier' || node.callee.name !== 'lazy') return;\n\n const binding = nodePath.scope.getBinding('lazy');\n if (!binding || binding.kind !== 'module') return;\n const bindingPath = binding.path;\n if (\n bindingPath.type !== 'ImportSpecifier' ||\n bindingPath.parent.type !== 'ImportDeclaration'\n )\n return;\n const source = (bindingPath.parent as t.ImportDeclaration).source.value;\n if (source !== 'solid-js') return;\n\n if (node.arguments.length >= 2) return;\n if (node.arguments.length !== 1) return;\n\n const specifier = extractDynamicImportSpecifier(node.arguments[0] as t.Node);\n if (!specifier) return;\n\n node.arguments.push({\n type: 'StringLiteral',\n value: LAZY_PLACEHOLDER_PREFIX + specifier,\n } as t.StringLiteral);\n },\n },\n };\n}\n","import * as babel from '@babel/core';\nimport solid from 'babel-preset-solid';\nimport { existsSync, readFileSync } from 'fs';\nimport { mergeAndConcat } from 'merge-anything';\nimport { createRequire } from 'module';\nimport solidRefresh from 'solid-refresh/babel';\n// TODO use proper path\nimport type { Options as RefreshOptions } from 'solid-refresh/babel';\nimport lazyModuleUrl, { LAZY_PLACEHOLDER_PREFIX } from './lazy-module-url.js';\nimport path from 'path';\nimport type { Alias, AliasOptions, FilterPattern, Plugin } from 'vite';\nimport { createFilter, version } 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\nconst isVite6 = +version.split('.')[0] >= 6;\n\nconst VIRTUAL_MANIFEST_ID = 'virtual:solid-manifest';\nconst RESOLVED_VIRTUAL_MANIFEST_ID = '\\0' + VIRTUAL_MANIFEST_ID;\n\nconst DEV_MANIFEST_CODE = `export default new Proxy({}, {\n get(_, key) {\n if (typeof key !== \"string\") return undefined;\n return { file: \"/\" + key };\n }\n});`;\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 * A [picomatch](https://github.com/micromatch/picomatch) pattern, or array of patterns, which specifies the files\n * the plugin should operate on.\n */\n include?: FilterPattern;\n /**\n * A [picomatch](https://github.com/micromatch/picomatch) pattern, or array of patterns, which specifies the files\n * to be ignored by the plugin.\n */\n exclude?: FilterPattern;\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.\n *\n * @default false\n */\n ssr?: boolean;\n\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 * @deprecated use `refresh` instead\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 | babel.TransformOptions\n | ((source: string, id: string, ssr: boolean) => babel.TransformOptions)\n | ((source: string, id: string, ssr: boolean) => Promise<babel.TransformOptions>);\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 * Remove unnecessary closing tags from template strings. More info here:\n * https://github.com/solidjs/solid/blob/main/CHANGELOG.md#smaller-templates\n *\n * @default false\n */\n omitNestedClosingTags?: boolean;\n\n /**\n * Remove the last closing tag from template strings. Enabled by default even when `omitNestedClosingTags` is disabled.\n * Can be disabled for compatibility for some browser-like environments.\n *\n * @default true\n */\n omitLastClosingTag?: boolean;\n\n /**\n * Remove unnecessary quotes from template strings.\n * Can be disabled for compatibility for some browser-like environments.\n *\n * @default true\n */\n omitQuotes?: boolean;\n\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 * Enable dev-mode compilation output. When true, the compiler emits\n * additional runtime checks (e.g. hydration mismatch assertions).\n * Automatically set to true during `vite dev` — override here to\n * force on or off.\n *\n * @default auto (true in dev, false in build)\n */\n dev?: boolean;\n };\n\n\n refresh: Omit<RefreshOptions & { disabled: boolean }, 'bundler' | 'fixRender' | 'jsx'>;\n}\n\nfunction getExtension(filename: string): string {\n const index = filename.lastIndexOf('.');\n return index < 0 ? '' : filename.substring(index).replace(/\\?.+$/, '');\n}\nfunction containsSolidField(fields: Record<string, any>) {\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\nfunction getJestDomExport(setupFiles: string[]) {\n return setupFiles?.some((path) => /jest-dom/.test(path))\n ? undefined\n : ['@testing-library/jest-dom/vitest', '@testing-library/jest-dom/extend-expect'].find(\n (path) => {\n try {\n require.resolve(path);\n return true;\n } catch (e) {\n return false;\n }\n },\n );\n}\n\nexport default function solidPlugin(options: Partial<Options> = {}): Plugin {\n const filter = createFilter(options.include, options.exclude);\n\n let needHmr = false;\n let replaceDev = false;\n let projectRoot = process.cwd();\n let isTestMode = false;\n let isBuild = false;\n let solidPkgsConfig: Awaited<ReturnType<typeof crawlFrameworkPkgs>>;\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 explicitly wants it or if we are in dev (serve) mode\n replaceDev = options.dev === true || (options.dev !== false && command === 'serve');\n projectRoot = userConfig.root || projectRoot;\n isTestMode = userConfig.mode === 'test';\n\n if (!userConfig.resolve) userConfig.resolve = {};\n userConfig.resolve.alias = normalizeAliases(userConfig.resolve && userConfig.resolve.alias);\n\n 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', '@solidjs/web']\n : [];\n\n const userTest = (userConfig as any).test ?? {};\n const test = {} as any;\n if (userConfig.mode === 'test') {\n // to simplify the processing of the config, we normalize the setupFiles to an array\n const userSetupFiles: string[] =\n typeof userTest.setupFiles === 'string'\n ? [userTest.setupFiles]\n : userTest.setupFiles || [];\n\n if (!userTest.environment && !options.ssr) {\n test.environment = 'jsdom';\n }\n\n if (\n !userTest.server?.deps?.external?.find((item: string | RegExp) =>\n /solid-js/.test(item.toString()),\n )\n ) {\n test.server = { deps: { external: [/solid-js/] } };\n }\n if (!userTest.browser?.enabled) {\n // vitest browser mode already has bundled jest-dom assertions\n // https://main.vitest.dev/guide/browser/assertion-api.html#assertion-api\n const jestDomImport = getJestDomExport(userSetupFiles);\n if (jestDomImport) {\n test.setupFiles = [jestDomImport];\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: isVite6\n ? undefined\n : [\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 ...(!isVite6 ? { ssr: solidPkgsConfig.ssr } : {}),\n ...(test.server ? { test } : {}),\n };\n },\n\n // @ts-ignore This hook only works in Vite 6\n async configEnvironment(name, config, opts) {\n config.resolve ??= {};\n // Emulate Vite default fallback for `resolve.conditions` if not set\n if (config.resolve.conditions == null) {\n // @ts-ignore These exports only exist in Vite 6\n const { defaultClientConditions, defaultServerConditions } = await import('vite');\n if (config.consumer === 'client' || name === 'client' || opts.isSsrTargetWebworker) {\n config.resolve.conditions = [...defaultClientConditions];\n } else {\n config.resolve.conditions = [...defaultServerConditions];\n }\n }\n config.resolve.conditions = [\n 'solid',\n ...(replaceDev ? ['development'] : []),\n ...(isTestMode && !opts.isSsrTargetWebworker && !options.ssr ? ['browser'] : []),\n ...config.resolve.conditions,\n ];\n\n // Set resolve.noExternal and resolve.external for SSR environment (Vite 6+)\n // Only set resolve.external if noExternal is not true (to avoid conflicts with plugins like Cloudflare)\n if (isVite6 && name === 'ssr' && solidPkgsConfig) {\n if (config.resolve.noExternal !== true) {\n config.resolve.noExternal = [\n ...(Array.isArray(config.resolve.noExternal) ? config.resolve.noExternal : []),\n ...solidPkgsConfig.ssr.noExternal,\n ];\n config.resolve.external = [\n ...(Array.isArray(config.resolve.external) ? config.resolve.external : []),\n ...solidPkgsConfig.ssr.external,\n ];\n }\n }\n },\n\n configResolved(config) {\n isBuild = config.command === 'build';\n needHmr = config.command === 'serve' && config.mode !== 'production' && (options.hot !== false && !options.refresh?.disabled);\n },\n\n resolveId(id) {\n if (id === runtimePublicPath) return id;\n if (id === VIRTUAL_MANIFEST_ID) return RESOLVED_VIRTUAL_MANIFEST_ID;\n },\n\n load(id) {\n if (id === runtimePublicPath) return runtimeCode;\n if (id === RESOLVED_VIRTUAL_MANIFEST_ID) {\n if (!isBuild) return DEV_MANIFEST_CODE;\n const manifestPath = path.resolve(projectRoot, 'dist/client/.vite/manifest.json');\n if (existsSync(manifestPath)) {\n const json = readFileSync(manifestPath, 'utf-8');\n return `export default ${json};`;\n }\n return DEV_MANIFEST_CODE;\n }\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 || [];\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 (!filter(id)) {\n return null;\n }\n\n id = id.replace(/\\?.*$/, '');\n\n if (!(/\\.[mc]?[tj]sx$/i.test(id) || 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 // We need to know if the current file extension has a typescript options tied to it\n const shouldBeProcessedWithTypescript =\n /\\.[mc]?tsx$/i.test(id) ||\n 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 const plugins: NonNullable<NonNullable<babel.TransformOptions['parserOpts']>['plugins']> = [\n 'jsx',\n 'decorators',\n ];\n\n if (shouldBeProcessedWithTypescript) {\n plugins.push('typescript');\n }\n\n const opts: babel.TransformOptions = {\n root: projectRoot,\n filename: id,\n sourceFileName: id,\n presets: [[solid, { ...solidOptions, dev: replaceDev, ...(options.solid || {}) }]],\n plugins: [\n [lazyModuleUrl],\n ...(needHmr && !isSsr && !inNodeModules ? [[solidRefresh, {\n ...(options.refresh || {}),\n bundler: 'vite',\n fixRender: true,\n // TODO unfortunately, even with SSR enabled for refresh\n // it still doesn't work, so now we have to disable\n // this config\n jsx: false,\n }]] : []),\n ],\n ast: false,\n sourceMaps: true,\n configFile: false,\n babelrc: false,\n parserOpts: {\n plugins,\n },\n };\n\n // Default value for babel user options\n let babelUserOptions: babel.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 babel.TransformOptions;\n\n const result = await babel.transformAsync(source, babelOptions);\n if (!result) {\n return undefined;\n }\n\n let code = result.code || '';\n\n // Resolve lazy() moduleUrl placeholders using Vite's resolver\n const placeholderRe = new RegExp(\n '\"' + LAZY_PLACEHOLDER_PREFIX + '([^\"]+)\"',\n 'g',\n );\n let match;\n const resolutions: Array<{ placeholder: string; resolved: string }> = [];\n while ((match = placeholderRe.exec(code)) !== null) {\n const specifier = match[1];\n const resolved = await this.resolve(specifier, id);\n if (resolved) {\n const cleanId = resolved.id.split('?')[0];\n resolutions.push({\n placeholder: match[0],\n resolved: '\"' + path.relative(projectRoot, cleanId) + '\"',\n });\n }\n }\n for (const { placeholder, resolved } of resolutions) {\n code = code.replace(placeholder, resolved);\n }\n\n return { code, map: result.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\nexport type ViteManifest = Record<\n string,\n {\n file: string;\n css?: string[];\n isEntry?: boolean;\n isDynamicEntry?: boolean;\n imports?: string[];\n }\n>;\n"],"names":["LAZY_PLACEHOLDER_PREFIX","extractDynamicImportSpecifier","node","type","callExpr","body","length","argument","callee","arguments","arg","value","lazyModuleUrlPlugin","name","visitor","CallExpression","nodePath","state","filename","binding","scope","getBinding","kind","bindingPath","path","parent","source","specifier","push","require","createRequire","import","runtimePublicPath","runtimeFilePath","resolve","runtimeCode","readFileSync","isVite6","version","split","VIRTUAL_MANIFEST_ID","RESOLVED_VIRTUAL_MANIFEST_ID","DEV_MANIFEST_CODE","getExtension","index","lastIndexOf","substring","replace","containsSolidField","fields","keys","Object","i","key","getJestDomExport","setupFiles","some","test","undefined","find","e","solidPlugin","options","filter","createFilter","include","exclude","needHmr","replaceDev","projectRoot","process","cwd","isTestMode","isBuild","solidPkgsConfig","enforce","config","userConfig","command","dev","root","mode","alias","normalizeAliases","crawlFrameworkPkgs","viteUserConfig","isFrameworkPkgByJson","pkgJson","exports","nestedDeps","userTest","userSetupFiles","environment","ssr","server","deps","external","item","toString","browser","enabled","jestDomImport","conditions","dedupe","replacement","optimizeDeps","configEnvironment","opts","defaultClientConditions","defaultServerConditions","consumer","isSsrTargetWebworker","noExternal","Array","isArray","configResolved","hot","refresh","disabled","resolveId","id","load","manifestPath","existsSync","json","transform","transformOptions","isSsr","currentFileExtension","extensionsToWatch","extensions","allExtensions","map","extension","includes","inNodeModules","solidOptions","generate","hydratable","shouldBeProcessedWithTypescript","extensionName","extensionOptions","typescript","plugins","sourceFileName","presets","solid","lazyModuleUrl","solidRefresh","bundler","fixRender","jsx","ast","sourceMaps","configFile","babelrc","parserOpts","babelUserOptions","babel","babelOptions","Promise","mergeAndConcat","result","transformAsync","code","placeholderRe","RegExp","match","resolutions","exec","resolved","cleanId","placeholder","relative","entries"],"mappings":"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"}
@@ -1,17 +1,82 @@
1
1
  import * as babel from '@babel/core';
2
2
  import solid from 'babel-preset-solid';
3
- import { readFileSync } from 'fs';
3
+ import { readFileSync, existsSync } from 'fs';
4
4
  import { mergeAndConcat } from 'merge-anything';
5
5
  import { createRequire } from 'module';
6
6
  import solidRefresh from 'solid-refresh/babel';
7
+ import path from 'path';
7
8
  import { version, createFilter } from 'vite';
8
9
  import { crawlFrameworkPkgs } from 'vitefu';
9
10
 
11
+ const LAZY_PLACEHOLDER_PREFIX = '__SOLID_LAZY_MODULE__:';
12
+
13
+ /**
14
+ * Detects whether a CallExpression argument is `() => import("specifier")`
15
+ * and returns the specifier string if so.
16
+ */
17
+ function extractDynamicImportSpecifier(node) {
18
+ if (node.type !== 'ArrowFunctionExpression' && node.type !== 'FunctionExpression') return null;
19
+ let callExpr = null;
20
+ if (node.body.type === 'CallExpression') {
21
+ callExpr = node.body;
22
+ } else if (node.body.type === 'BlockStatement' && node.body.body.length === 1 && node.body.body[0].type === 'ReturnStatement' && node.body.body[0].argument?.type === 'CallExpression') {
23
+ callExpr = node.body.body[0].argument;
24
+ }
25
+ if (!callExpr) return null;
26
+ if (callExpr.callee.type !== 'Import') return null;
27
+ if (callExpr.arguments.length !== 1) return null;
28
+ const arg = callExpr.arguments[0];
29
+ if (arg.type !== 'StringLiteral') return null;
30
+ return arg.value;
31
+ }
32
+
33
+ /**
34
+ * Babel plugin that detects `lazy(() => import("specifier"))` calls
35
+ * and injects a placeholder as the second argument. The placeholder
36
+ * is resolved to a real path by the Vite transform hook using this.resolve().
37
+ */
38
+ function lazyModuleUrlPlugin() {
39
+ return {
40
+ name: 'solid-lazy-module-url',
41
+ visitor: {
42
+ CallExpression(nodePath, state) {
43
+ if (!state.filename) return;
44
+ const {
45
+ node
46
+ } = nodePath;
47
+ if (node.callee.type !== 'Identifier' || node.callee.name !== 'lazy') return;
48
+ const binding = nodePath.scope.getBinding('lazy');
49
+ if (!binding || binding.kind !== 'module') return;
50
+ const bindingPath = binding.path;
51
+ if (bindingPath.type !== 'ImportSpecifier' || bindingPath.parent.type !== 'ImportDeclaration') return;
52
+ const source = bindingPath.parent.source.value;
53
+ if (source !== 'solid-js') return;
54
+ if (node.arguments.length >= 2) return;
55
+ if (node.arguments.length !== 1) return;
56
+ const specifier = extractDynamicImportSpecifier(node.arguments[0]);
57
+ if (!specifier) return;
58
+ node.arguments.push({
59
+ type: 'StringLiteral',
60
+ value: LAZY_PLACEHOLDER_PREFIX + specifier
61
+ });
62
+ }
63
+ }
64
+ };
65
+ }
66
+
10
67
  const require = createRequire(import.meta.url);
11
68
  const runtimePublicPath = '/@solid-refresh';
12
69
  const runtimeFilePath = require.resolve('solid-refresh/dist/solid-refresh.mjs');
13
70
  const runtimeCode = readFileSync(runtimeFilePath, 'utf-8');
14
71
  const isVite6 = +version.split('.')[0] >= 6;
72
+ const VIRTUAL_MANIFEST_ID = 'virtual:solid-manifest';
73
+ const RESOLVED_VIRTUAL_MANIFEST_ID = '\0' + VIRTUAL_MANIFEST_ID;
74
+ const DEV_MANIFEST_CODE = `export default new Proxy({}, {
75
+ get(_, key) {
76
+ if (typeof key !== "string") return undefined;
77
+ return { file: "/" + key };
78
+ }
79
+ });`;
15
80
 
16
81
  /** Possible options for the extensions property */
17
82
 
@@ -46,6 +111,7 @@ function solidPlugin(options = {}) {
46
111
  let replaceDev = false;
47
112
  let projectRoot = process.cwd();
48
113
  let isTestMode = false;
114
+ let isBuild = false;
49
115
  let solidPkgsConfig;
50
116
  return {
51
117
  name: 'solid',
@@ -55,7 +121,7 @@ function solidPlugin(options = {}) {
55
121
  }) {
56
122
  // We inject the dev mode only if the user explicitly wants it or if we are in dev (serve) mode
57
123
  replaceDev = options.dev === true || options.dev !== false && command === 'serve';
58
- projectRoot = userConfig.root;
124
+ projectRoot = userConfig.root || projectRoot;
59
125
  isTestMode = userConfig.mode === 'test';
60
126
  if (!userConfig.resolve) userConfig.resolve = {};
61
127
  userConfig.resolve.alias = normalizeAliases(userConfig.resolve && userConfig.resolve.alias);
@@ -69,7 +135,7 @@ function solidPlugin(options = {}) {
69
135
  });
70
136
 
71
137
  // fix for bundling dev in production
72
- const nestedDeps = replaceDev ? ['solid-js', 'solid-js/web', 'solid-js/store', 'solid-js/html', 'solid-js/h'] : [];
138
+ const nestedDeps = replaceDev ? ['solid-js', '@solidjs/web'] : [];
73
139
  const userTest = userConfig.test ?? {};
74
140
  const test = {};
75
141
  if (userConfig.mode === 'test') {
@@ -148,13 +214,24 @@ function solidPlugin(options = {}) {
148
214
  }
149
215
  },
150
216
  configResolved(config) {
151
- needHmr = config.command === 'serve' && config.mode !== 'production' && options.hot !== false;
217
+ isBuild = config.command === 'build';
218
+ needHmr = config.command === 'serve' && config.mode !== 'production' && options.hot !== false && !options.refresh?.disabled;
152
219
  },
153
220
  resolveId(id) {
154
221
  if (id === runtimePublicPath) return id;
222
+ if (id === VIRTUAL_MANIFEST_ID) return RESOLVED_VIRTUAL_MANIFEST_ID;
155
223
  },
156
224
  load(id) {
157
225
  if (id === runtimePublicPath) return runtimeCode;
226
+ if (id === RESOLVED_VIRTUAL_MANIFEST_ID) {
227
+ if (!isBuild) return DEV_MANIFEST_CODE;
228
+ const manifestPath = path.resolve(projectRoot, 'dist/client/.vite/manifest.json');
229
+ if (existsSync(manifestPath)) {
230
+ const json = readFileSync(manifestPath, 'utf-8');
231
+ return `export default ${json};`;
232
+ }
233
+ return DEV_MANIFEST_CODE;
234
+ }
158
235
  },
159
236
  async transform(source, id, transformOptions) {
160
237
  const isSsr = transformOptions && transformOptions.ssr;
@@ -200,7 +277,7 @@ function solidPlugin(options = {}) {
200
277
  if (extensionName !== currentFileExtension) return false;
201
278
  return extensionOptions.typescript;
202
279
  });
203
- const plugins = ['jsx'];
280
+ const plugins = ['jsx', 'decorators'];
204
281
  if (shouldBeProcessedWithTypescript) {
205
282
  plugins.push('typescript');
206
283
  }
@@ -210,11 +287,18 @@ function solidPlugin(options = {}) {
210
287
  sourceFileName: id,
211
288
  presets: [[solid, {
212
289
  ...solidOptions,
290
+ dev: replaceDev,
213
291
  ...(options.solid || {})
214
292
  }]],
215
- plugins: needHmr && !isSsr && !inNodeModules ? [[solidRefresh, {
216
- bundler: 'vite'
217
- }]] : [],
293
+ plugins: [[lazyModuleUrlPlugin], ...(needHmr && !isSsr && !inNodeModules ? [[solidRefresh, {
294
+ ...(options.refresh || {}),
295
+ bundler: 'vite',
296
+ fixRender: true,
297
+ // TODO unfortunately, even with SSR enabled for refresh
298
+ // it still doesn't work, so now we have to disable
299
+ // this config
300
+ jsx: false
301
+ }]] : [])],
218
302
  ast: false,
219
303
  sourceMaps: true,
220
304
  configFile: false,
@@ -228,20 +312,43 @@ function solidPlugin(options = {}) {
228
312
  let babelUserOptions = {};
229
313
  if (options.babel) {
230
314
  if (typeof options.babel === 'function') {
231
- const babelOptions = options.babel(source, id, isSsr);
315
+ const babelOptions = options.babel(source, id, !!isSsr);
232
316
  babelUserOptions = babelOptions instanceof Promise ? await babelOptions : babelOptions;
233
317
  } else {
234
318
  babelUserOptions = options.babel;
235
319
  }
236
320
  }
237
321
  const babelOptions = mergeAndConcat(babelUserOptions, opts);
238
- const {
239
- code,
240
- map
241
- } = await babel.transformAsync(source, babelOptions);
322
+ const result = await babel.transformAsync(source, babelOptions);
323
+ if (!result) {
324
+ return undefined;
325
+ }
326
+ let code = result.code || '';
327
+
328
+ // Resolve lazy() moduleUrl placeholders using Vite's resolver
329
+ const placeholderRe = new RegExp('"' + LAZY_PLACEHOLDER_PREFIX + '([^"]+)"', 'g');
330
+ let match;
331
+ const resolutions = [];
332
+ while ((match = placeholderRe.exec(code)) !== null) {
333
+ const specifier = match[1];
334
+ const resolved = await this.resolve(specifier, id);
335
+ if (resolved) {
336
+ const cleanId = resolved.id.split('?')[0];
337
+ resolutions.push({
338
+ placeholder: match[0],
339
+ resolved: '"' + path.relative(projectRoot, cleanId) + '"'
340
+ });
341
+ }
342
+ }
343
+ for (const {
344
+ placeholder,
345
+ resolved
346
+ } of resolutions) {
347
+ code = code.replace(placeholder, resolved);
348
+ }
242
349
  return {
243
350
  code,
244
- map
351
+ map: result.map
245
352
  };
246
353
  }
247
354
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["import * as babel from '@babel/core';\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, FilterPattern, Plugin } from 'vite';\nimport { createFilter, version } 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\nconst isVite6 = +version.split('.')[0] >= 6;\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 * A [picomatch](https://github.com/micromatch/picomatch) pattern, or array of patterns, which specifies the files\n * the plugin should operate on.\n */\n include?: FilterPattern;\n /**\n * A [picomatch](https://github.com/micromatch/picomatch) pattern, or array of patterns, which specifies the files\n * to be ignored by the plugin.\n */\n exclude?: FilterPattern;\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.\n *\n * @default false\n */\n ssr?: boolean;\n\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 | babel.TransformOptions\n | ((source: string, id: string, ssr: boolean) => babel.TransformOptions)\n | ((source: string, id: string, ssr: boolean) => Promise<babel.TransformOptions>);\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 * Remove unnecessary closing tags from template strings. More info here:\n * https://github.com/solidjs/solid/blob/main/CHANGELOG.md#smaller-templates\n *\n * @default false\n */\n omitNestedClosingTags?: boolean;\n\n /**\n * Remove the last closing tag from template strings. Enabled by default even when `omitNestedClosingTags` is disabled.\n * Can be disabled for compatibility for some browser-like environments.\n *\n * @default true\n */\n omitLastClosingTag?: boolean;\n\n /**\n * Remove unnecessary quotes from template strings.\n * Can be disabled for compatibility for some browser-like environments.\n *\n * @default true\n */\n omitQuotes?: boolean;\n\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: Record<string, any>) {\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\nfunction getJestDomExport(setupFiles: string[]) {\n return setupFiles?.some((path) => /jest-dom/.test(path))\n ? undefined\n : ['@testing-library/jest-dom/vitest', '@testing-library/jest-dom/extend-expect'].find(\n (path) => {\n try {\n require.resolve(path);\n return true;\n } catch (e) {\n return false;\n }\n },\n );\n}\n\nexport default function solidPlugin(options: Partial<Options> = {}): Plugin {\n const filter = createFilter(options.include, options.exclude);\n\n let needHmr = false;\n let replaceDev = false;\n let projectRoot = process.cwd();\n let isTestMode = false;\n let solidPkgsConfig: Awaited<ReturnType<typeof crawlFrameworkPkgs>>;\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 explicitly 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 isTestMode = userConfig.mode === 'test';\n\n if (!userConfig.resolve) userConfig.resolve = {};\n userConfig.resolve.alias = normalizeAliases(userConfig.resolve && userConfig.resolve.alias);\n\n 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 userTest = (userConfig as any).test ?? {};\n const test = {} as any;\n if (userConfig.mode === 'test') {\n // to simplify the processing of the config, we normalize the setupFiles to an array\n const userSetupFiles: string[] =\n typeof userTest.setupFiles === 'string'\n ? [userTest.setupFiles]\n : userTest.setupFiles || [];\n\n if (!userTest.environment && !options.ssr) {\n test.environment = 'jsdom';\n }\n\n if (\n !userTest.server?.deps?.external?.find((item: string | RegExp) =>\n /solid-js/.test(item.toString()),\n )\n ) {\n test.server = { deps: { external: [/solid-js/] } };\n }\n if (!userTest.browser?.enabled) {\n // vitest browser mode already has bundled jest-dom assertions\n // https://main.vitest.dev/guide/browser/assertion-api.html#assertion-api\n const jestDomImport = getJestDomExport(userSetupFiles);\n if (jestDomImport) {\n test.setupFiles = [jestDomImport];\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: isVite6\n ? undefined\n : [\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 ...(!isVite6 ? { ssr: solidPkgsConfig.ssr } : {}),\n ...(test.server ? { test } : {}),\n };\n },\n\n // @ts-ignore This hook only works in Vite 6\n async configEnvironment(name, config, opts) {\n config.resolve ??= {};\n // Emulate Vite default fallback for `resolve.conditions` if not set\n if (config.resolve.conditions == null) {\n // @ts-ignore These exports only exist in Vite 6\n const { defaultClientConditions, defaultServerConditions } = await import('vite');\n if (config.consumer === 'client' || name === 'client' || opts.isSsrTargetWebworker) {\n config.resolve.conditions = [...defaultClientConditions];\n } else {\n config.resolve.conditions = [...defaultServerConditions];\n }\n }\n config.resolve.conditions = [\n 'solid',\n ...(replaceDev ? ['development'] : []),\n ...(isTestMode && !opts.isSsrTargetWebworker && !options.ssr ? ['browser'] : []),\n ...config.resolve.conditions,\n ];\n\n // Set resolve.noExternal and resolve.external for SSR environment (Vite 6+)\n // Only set resolve.external if noExternal is not true (to avoid conflicts with plugins like Cloudflare)\n if (isVite6 && name === 'ssr' && solidPkgsConfig) {\n if (config.resolve.noExternal !== true) {\n config.resolve.noExternal = [\n ...(Array.isArray(config.resolve.noExternal) ? config.resolve.noExternal : []),\n ...solidPkgsConfig.ssr.noExternal,\n ];\n config.resolve.external = [\n ...(Array.isArray(config.resolve.external) ? config.resolve.external : []),\n ...solidPkgsConfig.ssr.external,\n ];\n }\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 || [];\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 (!filter(id)) {\n return null;\n }\n\n id = id.replace(/\\?.*$/, '');\n\n if (!(/\\.[mc]?[tj]sx$/i.test(id) || 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 // We need to know if the current file extension has a typescript options tied to it\n const shouldBeProcessedWithTypescript =\n /\\.[mc]?tsx$/i.test(id) ||\n 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 const plugins: NonNullable<NonNullable<babel.TransformOptions['parserOpts']>['plugins']> = [\n 'jsx',\n ];\n\n if (shouldBeProcessedWithTypescript) {\n plugins.push('typescript');\n }\n\n const opts: babel.TransformOptions = {\n root: projectRoot,\n filename: id,\n sourceFileName: id,\n presets: [[solid, { ...solidOptions, ...(options.solid || {}) }]],\n plugins: needHmr && !isSsr && !inNodeModules ? [[solidRefresh, { bundler: 'vite' }]] : [],\n ast: false,\n sourceMaps: true,\n configFile: false,\n babelrc: false,\n parserOpts: {\n plugins,\n },\n };\n\n // Default value for babel user options\n let babelUserOptions: babel.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 babel.TransformOptions;\n\n const { code, map } = await babel.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","isVite6","version","split","getExtension","filename","index","lastIndexOf","substring","replace","containsSolidField","fields","keys","Object","i","length","key","getJestDomExport","setupFiles","some","path","test","undefined","find","e","solidPlugin","options","filter","createFilter","include","exclude","needHmr","replaceDev","projectRoot","process","cwd","isTestMode","solidPkgsConfig","name","enforce","config","userConfig","command","dev","root","mode","alias","normalizeAliases","crawlFrameworkPkgs","viteUserConfig","isBuild","isFrameworkPkgByJson","pkgJson","exports","nestedDeps","userTest","userSetupFiles","environment","ssr","server","deps","external","item","toString","browser","enabled","jestDomImport","conditions","dedupe","replacement","optimizeDeps","configEnvironment","opts","defaultClientConditions","defaultServerConditions","consumer","isSsrTargetWebworker","noExternal","Array","isArray","configResolved","hot","resolveId","id","load","transform","source","transformOptions","isSsr","currentFileExtension","extensionsToWatch","extensions","allExtensions","map","extension","includes","inNodeModules","solidOptions","generate","hydratable","shouldBeProcessedWithTypescript","extensionName","extensionOptions","typescript","plugins","push","sourceFileName","presets","solid","solidRefresh","bundler","ast","sourceMaps","configFile","babelrc","parserOpts","babelUserOptions","babel","babelOptions","Promise","mergeAndConcat","code","transformAsync","entries"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/lazy-module-url.ts","../../src/index.ts"],"sourcesContent":["import type { PluginObj, types as t } from '@babel/core';\n\nexport const LAZY_PLACEHOLDER_PREFIX = '__SOLID_LAZY_MODULE__:';\n\n/**\n * Detects whether a CallExpression argument is `() => import(\"specifier\")`\n * and returns the specifier string if so.\n */\nfunction extractDynamicImportSpecifier(node: t.Node): string | null {\n if (node.type !== 'ArrowFunctionExpression' && node.type !== 'FunctionExpression') return null;\n\n let callExpr: t.CallExpression | null = null;\n if (node.body.type === 'CallExpression') {\n callExpr = node.body;\n } else if (\n node.body.type === 'BlockStatement' &&\n node.body.body.length === 1 &&\n node.body.body[0].type === 'ReturnStatement' &&\n node.body.body[0].argument?.type === 'CallExpression'\n ) {\n callExpr = node.body.body[0].argument;\n }\n if (!callExpr) return null;\n\n if (callExpr.callee.type !== 'Import') return null;\n if (callExpr.arguments.length !== 1) return null;\n\n const arg = callExpr.arguments[0];\n if (arg.type !== 'StringLiteral') return null;\n\n return arg.value;\n}\n\n/**\n * Babel plugin that detects `lazy(() => import(\"specifier\"))` calls\n * and injects a placeholder as the second argument. The placeholder\n * is resolved to a real path by the Vite transform hook using this.resolve().\n */\nexport default function lazyModuleUrlPlugin(): PluginObj {\n return {\n name: 'solid-lazy-module-url',\n visitor: {\n CallExpression(nodePath, state) {\n if (!state.filename) return;\n const { node } = nodePath;\n\n if (node.callee.type !== 'Identifier' || node.callee.name !== 'lazy') return;\n\n const binding = nodePath.scope.getBinding('lazy');\n if (!binding || binding.kind !== 'module') return;\n const bindingPath = binding.path;\n if (\n bindingPath.type !== 'ImportSpecifier' ||\n bindingPath.parent.type !== 'ImportDeclaration'\n )\n return;\n const source = (bindingPath.parent as t.ImportDeclaration).source.value;\n if (source !== 'solid-js') return;\n\n if (node.arguments.length >= 2) return;\n if (node.arguments.length !== 1) return;\n\n const specifier = extractDynamicImportSpecifier(node.arguments[0] as t.Node);\n if (!specifier) return;\n\n node.arguments.push({\n type: 'StringLiteral',\n value: LAZY_PLACEHOLDER_PREFIX + specifier,\n } as t.StringLiteral);\n },\n },\n };\n}\n","import * as babel from '@babel/core';\nimport solid from 'babel-preset-solid';\nimport { existsSync, readFileSync } from 'fs';\nimport { mergeAndConcat } from 'merge-anything';\nimport { createRequire } from 'module';\nimport solidRefresh from 'solid-refresh/babel';\n// TODO use proper path\nimport type { Options as RefreshOptions } from 'solid-refresh/babel';\nimport lazyModuleUrl, { LAZY_PLACEHOLDER_PREFIX } from './lazy-module-url.js';\nimport path from 'path';\nimport type { Alias, AliasOptions, FilterPattern, Plugin } from 'vite';\nimport { createFilter, version } 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\nconst isVite6 = +version.split('.')[0] >= 6;\n\nconst VIRTUAL_MANIFEST_ID = 'virtual:solid-manifest';\nconst RESOLVED_VIRTUAL_MANIFEST_ID = '\\0' + VIRTUAL_MANIFEST_ID;\n\nconst DEV_MANIFEST_CODE = `export default new Proxy({}, {\n get(_, key) {\n if (typeof key !== \"string\") return undefined;\n return { file: \"/\" + key };\n }\n});`;\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 * A [picomatch](https://github.com/micromatch/picomatch) pattern, or array of patterns, which specifies the files\n * the plugin should operate on.\n */\n include?: FilterPattern;\n /**\n * A [picomatch](https://github.com/micromatch/picomatch) pattern, or array of patterns, which specifies the files\n * to be ignored by the plugin.\n */\n exclude?: FilterPattern;\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.\n *\n * @default false\n */\n ssr?: boolean;\n\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 * @deprecated use `refresh` instead\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 | babel.TransformOptions\n | ((source: string, id: string, ssr: boolean) => babel.TransformOptions)\n | ((source: string, id: string, ssr: boolean) => Promise<babel.TransformOptions>);\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 * Remove unnecessary closing tags from template strings. More info here:\n * https://github.com/solidjs/solid/blob/main/CHANGELOG.md#smaller-templates\n *\n * @default false\n */\n omitNestedClosingTags?: boolean;\n\n /**\n * Remove the last closing tag from template strings. Enabled by default even when `omitNestedClosingTags` is disabled.\n * Can be disabled for compatibility for some browser-like environments.\n *\n * @default true\n */\n omitLastClosingTag?: boolean;\n\n /**\n * Remove unnecessary quotes from template strings.\n * Can be disabled for compatibility for some browser-like environments.\n *\n * @default true\n */\n omitQuotes?: boolean;\n\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 * Enable dev-mode compilation output. When true, the compiler emits\n * additional runtime checks (e.g. hydration mismatch assertions).\n * Automatically set to true during `vite dev` — override here to\n * force on or off.\n *\n * @default auto (true in dev, false in build)\n */\n dev?: boolean;\n };\n\n\n refresh: Omit<RefreshOptions & { disabled: boolean }, 'bundler' | 'fixRender' | 'jsx'>;\n}\n\nfunction getExtension(filename: string): string {\n const index = filename.lastIndexOf('.');\n return index < 0 ? '' : filename.substring(index).replace(/\\?.+$/, '');\n}\nfunction containsSolidField(fields: Record<string, any>) {\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\nfunction getJestDomExport(setupFiles: string[]) {\n return setupFiles?.some((path) => /jest-dom/.test(path))\n ? undefined\n : ['@testing-library/jest-dom/vitest', '@testing-library/jest-dom/extend-expect'].find(\n (path) => {\n try {\n require.resolve(path);\n return true;\n } catch (e) {\n return false;\n }\n },\n );\n}\n\nexport default function solidPlugin(options: Partial<Options> = {}): Plugin {\n const filter = createFilter(options.include, options.exclude);\n\n let needHmr = false;\n let replaceDev = false;\n let projectRoot = process.cwd();\n let isTestMode = false;\n let isBuild = false;\n let solidPkgsConfig: Awaited<ReturnType<typeof crawlFrameworkPkgs>>;\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 explicitly wants it or if we are in dev (serve) mode\n replaceDev = options.dev === true || (options.dev !== false && command === 'serve');\n projectRoot = userConfig.root || projectRoot;\n isTestMode = userConfig.mode === 'test';\n\n if (!userConfig.resolve) userConfig.resolve = {};\n userConfig.resolve.alias = normalizeAliases(userConfig.resolve && userConfig.resolve.alias);\n\n 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', '@solidjs/web']\n : [];\n\n const userTest = (userConfig as any).test ?? {};\n const test = {} as any;\n if (userConfig.mode === 'test') {\n // to simplify the processing of the config, we normalize the setupFiles to an array\n const userSetupFiles: string[] =\n typeof userTest.setupFiles === 'string'\n ? [userTest.setupFiles]\n : userTest.setupFiles || [];\n\n if (!userTest.environment && !options.ssr) {\n test.environment = 'jsdom';\n }\n\n if (\n !userTest.server?.deps?.external?.find((item: string | RegExp) =>\n /solid-js/.test(item.toString()),\n )\n ) {\n test.server = { deps: { external: [/solid-js/] } };\n }\n if (!userTest.browser?.enabled) {\n // vitest browser mode already has bundled jest-dom assertions\n // https://main.vitest.dev/guide/browser/assertion-api.html#assertion-api\n const jestDomImport = getJestDomExport(userSetupFiles);\n if (jestDomImport) {\n test.setupFiles = [jestDomImport];\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: isVite6\n ? undefined\n : [\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 ...(!isVite6 ? { ssr: solidPkgsConfig.ssr } : {}),\n ...(test.server ? { test } : {}),\n };\n },\n\n // @ts-ignore This hook only works in Vite 6\n async configEnvironment(name, config, opts) {\n config.resolve ??= {};\n // Emulate Vite default fallback for `resolve.conditions` if not set\n if (config.resolve.conditions == null) {\n // @ts-ignore These exports only exist in Vite 6\n const { defaultClientConditions, defaultServerConditions } = await import('vite');\n if (config.consumer === 'client' || name === 'client' || opts.isSsrTargetWebworker) {\n config.resolve.conditions = [...defaultClientConditions];\n } else {\n config.resolve.conditions = [...defaultServerConditions];\n }\n }\n config.resolve.conditions = [\n 'solid',\n ...(replaceDev ? ['development'] : []),\n ...(isTestMode && !opts.isSsrTargetWebworker && !options.ssr ? ['browser'] : []),\n ...config.resolve.conditions,\n ];\n\n // Set resolve.noExternal and resolve.external for SSR environment (Vite 6+)\n // Only set resolve.external if noExternal is not true (to avoid conflicts with plugins like Cloudflare)\n if (isVite6 && name === 'ssr' && solidPkgsConfig) {\n if (config.resolve.noExternal !== true) {\n config.resolve.noExternal = [\n ...(Array.isArray(config.resolve.noExternal) ? config.resolve.noExternal : []),\n ...solidPkgsConfig.ssr.noExternal,\n ];\n config.resolve.external = [\n ...(Array.isArray(config.resolve.external) ? config.resolve.external : []),\n ...solidPkgsConfig.ssr.external,\n ];\n }\n }\n },\n\n configResolved(config) {\n isBuild = config.command === 'build';\n needHmr = config.command === 'serve' && config.mode !== 'production' && (options.hot !== false && !options.refresh?.disabled);\n },\n\n resolveId(id) {\n if (id === runtimePublicPath) return id;\n if (id === VIRTUAL_MANIFEST_ID) return RESOLVED_VIRTUAL_MANIFEST_ID;\n },\n\n load(id) {\n if (id === runtimePublicPath) return runtimeCode;\n if (id === RESOLVED_VIRTUAL_MANIFEST_ID) {\n if (!isBuild) return DEV_MANIFEST_CODE;\n const manifestPath = path.resolve(projectRoot, 'dist/client/.vite/manifest.json');\n if (existsSync(manifestPath)) {\n const json = readFileSync(manifestPath, 'utf-8');\n return `export default ${json};`;\n }\n return DEV_MANIFEST_CODE;\n }\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 || [];\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 (!filter(id)) {\n return null;\n }\n\n id = id.replace(/\\?.*$/, '');\n\n if (!(/\\.[mc]?[tj]sx$/i.test(id) || 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 // We need to know if the current file extension has a typescript options tied to it\n const shouldBeProcessedWithTypescript =\n /\\.[mc]?tsx$/i.test(id) ||\n 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 const plugins: NonNullable<NonNullable<babel.TransformOptions['parserOpts']>['plugins']> = [\n 'jsx',\n 'decorators',\n ];\n\n if (shouldBeProcessedWithTypescript) {\n plugins.push('typescript');\n }\n\n const opts: babel.TransformOptions = {\n root: projectRoot,\n filename: id,\n sourceFileName: id,\n presets: [[solid, { ...solidOptions, dev: replaceDev, ...(options.solid || {}) }]],\n plugins: [\n [lazyModuleUrl],\n ...(needHmr && !isSsr && !inNodeModules ? [[solidRefresh, {\n ...(options.refresh || {}),\n bundler: 'vite',\n fixRender: true,\n // TODO unfortunately, even with SSR enabled for refresh\n // it still doesn't work, so now we have to disable\n // this config\n jsx: false,\n }]] : []),\n ],\n ast: false,\n sourceMaps: true,\n configFile: false,\n babelrc: false,\n parserOpts: {\n plugins,\n },\n };\n\n // Default value for babel user options\n let babelUserOptions: babel.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 babel.TransformOptions;\n\n const result = await babel.transformAsync(source, babelOptions);\n if (!result) {\n return undefined;\n }\n\n let code = result.code || '';\n\n // Resolve lazy() moduleUrl placeholders using Vite's resolver\n const placeholderRe = new RegExp(\n '\"' + LAZY_PLACEHOLDER_PREFIX + '([^\"]+)\"',\n 'g',\n );\n let match;\n const resolutions: Array<{ placeholder: string; resolved: string }> = [];\n while ((match = placeholderRe.exec(code)) !== null) {\n const specifier = match[1];\n const resolved = await this.resolve(specifier, id);\n if (resolved) {\n const cleanId = resolved.id.split('?')[0];\n resolutions.push({\n placeholder: match[0],\n resolved: '\"' + path.relative(projectRoot, cleanId) + '\"',\n });\n }\n }\n for (const { placeholder, resolved } of resolutions) {\n code = code.replace(placeholder, resolved);\n }\n\n return { code, map: result.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\nexport type ViteManifest = Record<\n string,\n {\n file: string;\n css?: string[];\n isEntry?: boolean;\n isDynamicEntry?: boolean;\n imports?: string[];\n }\n>;\n"],"names":["LAZY_PLACEHOLDER_PREFIX","extractDynamicImportSpecifier","node","type","callExpr","body","length","argument","callee","arguments","arg","value","lazyModuleUrlPlugin","name","visitor","CallExpression","nodePath","state","filename","binding","scope","getBinding","kind","bindingPath","path","parent","source","specifier","push","require","createRequire","import","meta","url","runtimePublicPath","runtimeFilePath","resolve","runtimeCode","readFileSync","isVite6","version","split","VIRTUAL_MANIFEST_ID","RESOLVED_VIRTUAL_MANIFEST_ID","DEV_MANIFEST_CODE","getExtension","index","lastIndexOf","substring","replace","containsSolidField","fields","keys","Object","i","key","getJestDomExport","setupFiles","some","test","undefined","find","e","solidPlugin","options","filter","createFilter","include","exclude","needHmr","replaceDev","projectRoot","process","cwd","isTestMode","isBuild","solidPkgsConfig","enforce","config","userConfig","command","dev","root","mode","alias","normalizeAliases","crawlFrameworkPkgs","viteUserConfig","isFrameworkPkgByJson","pkgJson","exports","nestedDeps","userTest","userSetupFiles","environment","ssr","server","deps","external","item","toString","browser","enabled","jestDomImport","conditions","dedupe","replacement","optimizeDeps","configEnvironment","opts","defaultClientConditions","defaultServerConditions","consumer","isSsrTargetWebworker","noExternal","Array","isArray","configResolved","hot","refresh","disabled","resolveId","id","load","manifestPath","existsSync","json","transform","transformOptions","isSsr","currentFileExtension","extensionsToWatch","extensions","allExtensions","map","extension","includes","inNodeModules","solidOptions","generate","hydratable","shouldBeProcessedWithTypescript","extensionName","extensionOptions","typescript","plugins","sourceFileName","presets","solid","lazyModuleUrl","solidRefresh","bundler","fixRender","jsx","ast","sourceMaps","configFile","babelrc","parserOpts","babelUserOptions","babel","babelOptions","Promise","mergeAndConcat","result","transformAsync","code","placeholderRe","RegExp","match","resolutions","exec","resolved","cleanId","placeholder","relative","entries"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import * as babel from '@babel/core';
2
+ import type { Options as RefreshOptions } from 'solid-refresh/babel';
2
3
  import type { FilterPattern, Plugin } from 'vite';
3
4
  /** Possible options for the extensions property */
4
5
  export interface ExtensionOptions {
@@ -35,6 +36,7 @@ export interface Options {
35
36
  * set to `false`, it won't inject the runtime in dev.
36
37
  *
37
38
  * @default true
39
+ * @deprecated use `refresh` instead
38
40
  */
39
41
  hot?: boolean;
40
42
  /**
@@ -128,6 +130,25 @@ export interface Options {
128
130
  * @default ["For","Show","Switch","Match","Suspense","SuspenseList","Portal","Index","Dynamic","ErrorBoundary"]
129
131
  */
130
132
  builtIns?: string[];
133
+ /**
134
+ * Enable dev-mode compilation output. When true, the compiler emits
135
+ * additional runtime checks (e.g. hydration mismatch assertions).
136
+ * Automatically set to true during `vite dev` — override here to
137
+ * force on or off.
138
+ *
139
+ * @default auto (true in dev, false in build)
140
+ */
141
+ dev?: boolean;
131
142
  };
143
+ refresh: Omit<RefreshOptions & {
144
+ disabled: boolean;
145
+ }, 'bundler' | 'fixRender' | 'jsx'>;
132
146
  }
133
147
  export default function solidPlugin(options?: Partial<Options>): Plugin;
148
+ export type ViteManifest = Record<string, {
149
+ file: string;
150
+ css?: string[];
151
+ isEntry?: boolean;
152
+ isDynamicEntry?: boolean;
153
+ imports?: string[];
154
+ }>;
@@ -0,0 +1,8 @@
1
+ import type { PluginObj } from '@babel/core';
2
+ export declare const LAZY_PLACEHOLDER_PREFIX = "__SOLID_LAZY_MODULE__:";
3
+ /**
4
+ * Babel plugin that detects `lazy(() => import("specifier"))` calls
5
+ * and injects a placeholder as the second argument. The placeholder
6
+ * is resolved to a real path by the Vite transform hook using this.resolve().
7
+ */
8
+ export default function lazyModuleUrlPlugin(): PluginObj;
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "vite-plugin-solid",
3
- "version": "2.11.10",
4
- "description": "solid-js integration plugin for vite 3/4/5/6",
3
+ "version": "3.0.0-next.1",
4
+ "description": "solid-js integration plugin for vite 3/4/5/6/7",
5
5
  "type": "module",
6
6
  "files": [
7
- "dist"
7
+ "dist",
8
+ "virtual-solid-manifest.d.ts"
8
9
  ],
9
10
  "main": "dist/cjs/index.cjs",
10
11
  "module": "dist/esm/index.mjs",
@@ -37,9 +38,9 @@
37
38
  "dependencies": {
38
39
  "@babel/core": "^7.23.3",
39
40
  "@types/babel__core": "^7.20.4",
40
- "babel-preset-solid": "^1.8.4",
41
+ "babel-preset-solid": ">=2.0.0-beta.0 <2.0.0",
41
42
  "merge-anything": "^5.1.7",
42
- "solid-refresh": "^0.6.3",
43
+ "solid-refresh": ">=0.8.0-next.2 < 0.8.0",
43
44
  "vitefu": "^1.0.4"
44
45
  },
45
46
  "devDependencies": {
@@ -58,13 +59,13 @@
58
59
  "prettier": "^3.1.0",
59
60
  "rollup": "^4.5.0",
60
61
  "rollup-plugin-cleaner": "^1.0.0",
61
- "solid-js": "^1.9.3",
62
+ "solid-js": "2.0.0-beta.0",
62
63
  "typescript": "^5.2.2",
63
- "vite": "^6.0.0"
64
+ "vite": "^7.0.0"
64
65
  },
65
66
  "peerDependencies": {
66
67
  "@testing-library/jest-dom": "^5.16.6 || ^5.17.0 || ^6.*",
67
- "solid-js": "^1.7.2",
68
+ "solid-js": ">=2.0.0-beta.0 <2.0.0",
68
69
  "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
69
70
  },
70
71
  "peerDependenciesMeta": {
@@ -0,0 +1,5 @@
1
+ declare module "virtual:solid-manifest" {
2
+ import type { ViteManifest } from "vite-plugin-solid";
3
+ const manifest: ViteManifest;
4
+ export default manifest;
5
+ }