@askrjs/vite 0.0.9 → 0.0.10
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 +2 -0
- package/dist/index.js +14 -2
- package/dist/index.js.map +1 -1
- package/package.json +11 -2
package/README.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
|
-
import { transformWithOxc } from "vite";
|
|
4
3
|
//#region src/template-optimizer.ts
|
|
5
4
|
function optimizeTemplateOutput(code) {
|
|
6
5
|
const hoists = /* @__PURE__ */ new Map();
|
|
@@ -23,6 +22,19 @@ function optimizeTemplateOutput(code) {
|
|
|
23
22
|
//#endregion
|
|
24
23
|
//#region src/jsx-plugin.ts
|
|
25
24
|
const require = createRequire(import.meta.url);
|
|
25
|
+
let transformWithOxcPromise;
|
|
26
|
+
async function loadTransformWithOxc() {
|
|
27
|
+
transformWithOxcPromise ??= (async () => {
|
|
28
|
+
for (const packageName of ["vite-plus", "vite"]) try {
|
|
29
|
+
const buildTool = await import(packageName);
|
|
30
|
+
if (typeof buildTool.transformWithOxc === "function") return buildTool.transformWithOxc;
|
|
31
|
+
} catch (error) {
|
|
32
|
+
if (error.code !== "ERR_MODULE_NOT_FOUND") throw error;
|
|
33
|
+
}
|
|
34
|
+
throw new Error("@askrjs/vite requires either vite or vite-plus to transform JSX.");
|
|
35
|
+
})();
|
|
36
|
+
return transformWithOxcPromise;
|
|
37
|
+
}
|
|
26
38
|
function askrVitePlugin(options = {}) {
|
|
27
39
|
const shouldTransform = options.transformJsx ?? true;
|
|
28
40
|
const shouldOptimizeTemplates = options.optimizeTemplates ?? false;
|
|
@@ -74,7 +86,7 @@ function askrVitePlugin(options = {}) {
|
|
|
74
86
|
async transform(code, id) {
|
|
75
87
|
if (!shouldTransform || !/\.(jsx|tsx)$/.test(id) || id.includes("node_modules")) return null;
|
|
76
88
|
try {
|
|
77
|
-
const result = await
|
|
89
|
+
const result = await (await loadTransformWithOxc())(code, id, {
|
|
78
90
|
lang: id.endsWith(".tsx") ? "tsx" : "jsx",
|
|
79
91
|
jsx: {
|
|
80
92
|
runtime: "automatic",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/template-optimizer.ts","../src/jsx-plugin.ts"],"sourcesContent":["export function optimizeTemplateOutput(code: string): string {\n const hoists = new Map<string, string>();\n let hoistIndex = 0;\n const optimized = code.replace(\n /\\b(class|className|style):\\s*(\"([^\"\\\\]|\\\\.)*\")/g,\n (fullMatch: string, key: string, literal: string) => {\n const cacheKey = `${key}:${literal}`;\n let identifier = hoists.get(cacheKey);\n if (!identifier) {\n if (code.split(fullMatch).length - 1 < 2) return fullMatch;\n identifier = `__askrStaticLiteral${hoistIndex++}`;\n hoists.set(cacheKey, identifier);\n }\n return `${key}: ${identifier}`;\n },\n );\n if (hoists.size === 0) return code;\n const declarations = Array.from(hoists.entries()).map(([cacheKey, name]) => {\n const literal = cacheKey.slice(cacheKey.indexOf(\":\") + 1);\n return `const ${name} = ${literal};`;\n });\n return `${declarations.join(\"\\n\")}\\n${optimized}`;\n}\n","import { createRequire } from \"node:module\";\nimport {
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/template-optimizer.ts","../src/jsx-plugin.ts"],"sourcesContent":["export function optimizeTemplateOutput(code: string): string {\n const hoists = new Map<string, string>();\n let hoistIndex = 0;\n const optimized = code.replace(\n /\\b(class|className|style):\\s*(\"([^\"\\\\]|\\\\.)*\")/g,\n (fullMatch: string, key: string, literal: string) => {\n const cacheKey = `${key}:${literal}`;\n let identifier = hoists.get(cacheKey);\n if (!identifier) {\n if (code.split(fullMatch).length - 1 < 2) return fullMatch;\n identifier = `__askrStaticLiteral${hoistIndex++}`;\n hoists.set(cacheKey, identifier);\n }\n return `${key}: ${identifier}`;\n },\n );\n if (hoists.size === 0) return code;\n const declarations = Array.from(hoists.entries()).map(([cacheKey, name]) => {\n const literal = cacheKey.slice(cacheKey.indexOf(\":\") + 1);\n return `const ${name} = ${literal};`;\n });\n return `${declarations.join(\"\\n\")}\\n${optimized}`;\n}\n","import { createRequire } from \"node:module\";\nimport type { Plugin } from \"vite\";\nimport { optimizeTemplateOutput } from \"./template-optimizer\";\n\nconst require = createRequire(import.meta.url);\ntype TransformWithOxc = (typeof import(\"vite\"))[\"transformWithOxc\"];\nlet transformWithOxcPromise: Promise<TransformWithOxc> | undefined;\n\nasync function loadTransformWithOxc(): Promise<TransformWithOxc> {\n transformWithOxcPromise ??= (async () => {\n for (const packageName of [\"vite-plus\", \"vite\"] as const) {\n try {\n const buildTool = await import(packageName);\n if (typeof buildTool.transformWithOxc === \"function\") {\n return buildTool.transformWithOxc as TransformWithOxc;\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ERR_MODULE_NOT_FOUND\") throw error;\n }\n }\n throw new Error(\"@askrjs/vite requires either vite or vite-plus to transform JSX.\");\n })();\n return transformWithOxcPromise;\n}\n\nexport interface AskrVitePluginOptions {\n transformJsx?: boolean;\n optimizeTemplates?: boolean;\n ssrPrecompile?: boolean;\n}\n\n/**\n * Portable public plugin identity.\n *\n * Vite-compatible runners only require the plugin name. Keeping versioned Vite\n * hook types out of the installed declaration prevents consumers such as\n * vite-plus from comparing two distinct copies of Vite's recursive Plugin type.\n */\nexport interface AskrVitePlugin {\n readonly name: \"askr:vite\";\n}\n\nexport function askrVitePlugin(options: AskrVitePluginOptions = {}): AskrVitePlugin {\n const shouldTransform = options.transformJsx ?? true;\n const shouldOptimizeTemplates = options.optimizeTemplates ?? false;\n const plugin = {\n name: \"askr:vite\" as const,\n enforce: \"pre\",\n config() {\n let askrEntry: string | null = null;\n try {\n askrEntry = require.resolve(\"@askrjs/askr\");\n } catch {\n askrEntry = null;\n }\n return {\n define: {\n __ASKR_OPTIMIZE_TEMPLATES__: JSON.stringify(shouldOptimizeTemplates),\n },\n resolve: {\n alias: askrEntry ? [{ find: \"@askrjs/askr\", replacement: askrEntry }] : [],\n dedupe: [\"@askrjs/askr\"],\n },\n optimizeDeps: {\n include: [\n \"@askrjs/askr\",\n \"@askrjs/askr/router\",\n \"@askrjs/askr/boot\",\n \"@askrjs/askr/control\",\n \"@askrjs/askr/fx\",\n \"@askrjs/askr/resources\",\n \"@askrjs/askr/data\",\n \"@askrjs/askr/foundations\",\n \"@askrjs/askr/foundations/icon\",\n \"@askrjs/askr/foundations/interactions\",\n \"@askrjs/askr/foundations/state\",\n \"@askrjs/askr/foundations/structures\",\n \"@askrjs/askr/foundations/utilities\",\n \"@askrjs/askr/jsx-runtime\",\n \"@askrjs/askr/jsx-dev-runtime\",\n ],\n },\n oxc: {\n jsx: { runtime: \"automatic\", importSource: \"@askrjs/askr\" },\n jsxInject: \"import { jsx, jsxs, Fragment } from '@askrjs/askr/jsx-runtime';\",\n },\n };\n },\n async transform(code, id) {\n if (!shouldTransform || !/\\.(jsx|tsx)$/.test(id) || id.includes(\"node_modules\")) return null;\n try {\n const transformWithOxc = await loadTransformWithOxc();\n const result = await transformWithOxc(code, id, {\n lang: id.endsWith(\".tsx\") ? \"tsx\" : \"jsx\",\n jsx: { runtime: \"automatic\", importSource: \"@askrjs/askr\" },\n sourcemap: true,\n });\n if (!result?.code) return null;\n return {\n code: shouldOptimizeTemplates ? optimizeTemplateOutput(result.code) : result.code,\n map: result.map,\n };\n } catch {\n return null;\n }\n },\n } satisfies Plugin;\n return plugin;\n}\n"],"mappings":";;;AAAA,SAAgB,uBAAuB,MAAsB;CAC3D,MAAM,yBAAS,IAAI,IAAoB;CACvC,IAAI,aAAa;CACjB,MAAM,YAAY,KAAK,QACrB,oDACC,WAAmB,KAAa,YAAoB;EACnD,MAAM,WAAW,GAAG,IAAI,GAAG;EAC3B,IAAI,aAAa,OAAO,IAAI,QAAQ;EACpC,IAAI,CAAC,YAAY;GACf,IAAI,KAAK,MAAM,SAAS,CAAC,CAAC,SAAS,IAAI,GAAG,OAAO;GACjD,aAAa,sBAAsB;GACnC,OAAO,IAAI,UAAU,UAAU;EACjC;EACA,OAAO,GAAG,IAAI,IAAI;CACpB,CACF;CACA,IAAI,OAAO,SAAS,GAAG,OAAO;CAK9B,OAAO,GAJc,MAAM,KAAK,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,UAAU;EAE1E,OAAO,SAAS,KAAK,KADL,SAAS,MAAM,SAAS,QAAQ,GAAG,IAAI,CACvB,EAAE;CACpC,CACqB,CAAC,CAAC,KAAK,IAAI,EAAE,IAAI;AACxC;;;AClBA,MAAM,UAAU,cAAc,OAAO,KAAK,GAAG;AAE7C,IAAI;AAEJ,eAAe,uBAAkD;CAC/D,6BAA6B,YAAY;EACvC,KAAK,MAAM,eAAe,CAAC,aAAa,MAAM,GAC5C,IAAI;GACF,MAAM,YAAY,MAAM,OAAO;GAC/B,IAAI,OAAO,UAAU,qBAAqB,YACxC,OAAO,UAAU;EAErB,SAAS,OAAO;GACd,IAAK,MAAgC,SAAS,wBAAwB,MAAM;EAC9E;EAEF,MAAM,IAAI,MAAM,kEAAkE;CACpF,EAAA,CAAG;CACH,OAAO;AACT;AAmBA,SAAgB,eAAe,UAAiC,CAAC,GAAmB;CAClF,MAAM,kBAAkB,QAAQ,gBAAgB;CAChD,MAAM,0BAA0B,QAAQ,qBAAqB;CA+D7D,OAAO;EA7DL,MAAM;EACN,SAAS;EACT,SAAS;GACP,IAAI,YAA2B;GAC/B,IAAI;IACF,YAAY,QAAQ,QAAQ,cAAc;GAC5C,QAAQ;IACN,YAAY;GACd;GACA,OAAO;IACL,QAAQ,EACN,6BAA6B,KAAK,UAAU,uBAAuB,EACrE;IACA,SAAS;KACP,OAAO,YAAY,CAAC;MAAE,MAAM;MAAgB,aAAa;KAAU,CAAC,IAAI,CAAC;KACzE,QAAQ,CAAC,cAAc;IACzB;IACA,cAAc,EACZ,SAAS;KACP;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IACF,EACF;IACA,KAAK;KACH,KAAK;MAAE,SAAS;MAAa,cAAc;KAAe;KAC1D,WAAW;IACb;GACF;EACF;EACA,MAAM,UAAU,MAAM,IAAI;GACxB,IAAI,CAAC,mBAAmB,CAAC,eAAe,KAAK,EAAE,KAAK,GAAG,SAAS,cAAc,GAAG,OAAO;GACxF,IAAI;IAEF,MAAM,SAAS,OAAM,MADU,qBAAqB,EAAA,CACd,MAAM,IAAI;KAC9C,MAAM,GAAG,SAAS,MAAM,IAAI,QAAQ;KACpC,KAAK;MAAE,SAAS;MAAa,cAAc;KAAe;KAC1D,WAAW;IACb,CAAC;IACD,IAAI,CAAC,QAAQ,MAAM,OAAO;IAC1B,OAAO;KACL,MAAM,0BAA0B,uBAAuB,OAAO,IAAI,IAAI,OAAO;KAC7E,KAAK,OAAO;IACd;GACF,QAAQ;IACN,OAAO;GACT;EACF;CAEU;AACd"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@askrjs/vite",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.10",
|
|
4
4
|
"description": "Vite plugin for Askr JSX and template transforms",
|
|
5
5
|
"homepage": "https://github.com/askrjs/askr-vite#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -66,7 +66,16 @@
|
|
|
66
66
|
},
|
|
67
67
|
"peerDependencies": {
|
|
68
68
|
"@askrjs/askr": ">=0.0.52 <0.1.0",
|
|
69
|
-
"vite": "^8.0.1"
|
|
69
|
+
"vite": "^8.0.1",
|
|
70
|
+
"vite-plus": "^0.2.4"
|
|
71
|
+
},
|
|
72
|
+
"peerDependenciesMeta": {
|
|
73
|
+
"vite": {
|
|
74
|
+
"optional": true
|
|
75
|
+
},
|
|
76
|
+
"vite-plus": {
|
|
77
|
+
"optional": true
|
|
78
|
+
}
|
|
70
79
|
},
|
|
71
80
|
"engines": {
|
|
72
81
|
"node": ">=18"
|