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