33 * Orchestrates template, style, and script compilation for Omi single-file components.
44 */
55
6- 'use strict' ;
7-
8- const compileStyle = require ( '../styles/index' ) ;
9- const compileTemplate = require ( '../templates/index' ) ;
10- const compileScript = require ( '../scripts/index' ) ;
11- const modulesStart = require ( '../scripts/modules/import' ) ;
12- const modulesEnd = require ( '../scripts/modules/export' ) ;
13- const defineComponent = require ( '../scripts/modules/define' ) ;
14- const renderComponent = require ( '../scripts/modules/render' ) ;
15- const handleStyledComponents = require ( '../templates/styledcomponents' ) ;
16- const ast = require ( '../scripts/ast' ) ;
17- const { compileSass } = require ( '../styles/extension/index' ) ;
18- const classProperty = require ( '../scripts/extension/classProperty' ) ;
6+ import compileStyle from '../styles/index' ;
7+ import compileTemplate from '../templates/index' ;
8+ import compileScript from '../scripts/index' ;
9+ import generateImports from '../scripts/modules/import' ;
10+ import generateExport from '../scripts/modules/export' ;
11+ import generateDefine from '../scripts/modules/define' ;
12+ import generateRender from '../scripts/modules/render' ;
13+ import handleStyledComponents from '../templates/styledcomponents/index' ;
14+ import astTransform from '../scripts/ast/index' ;
15+ import { compileSass } from '../styles/extension/index' ;
16+ import classProperty from '../scripts/extension/classProperty' ;
17+ import type { SourceObject , CompilationResult , CompileContext , AstOption , LoaderCallback } from '../types' ;
1918
2019/** Regex to match export/module.exports class patterns. */
2120const EXPORT_REGEX = 'export\\s+default\\s*\\{|module.exports\\s*=\\s*\\{|export\\s+default\\s*class\\s*\\{|module.exports\\s*=\\s*class\\s*\\{|export\\s+default[\\n\\s\\S]+?class[\\s\\w]*\\{|module.exports\\s*=[\\n\\s\\S]*?class\\s*\\{' ;
@@ -28,12 +27,12 @@ const EXPORT_REGEX = 'export\\s+default\\s*\\{|module.exports\\s*=\\s*\\{|export
2827 * 4. Generate import/export/define/render module code
2928 * 5. Run AST transformations
3029 * 6. Optionally transpile ES6 → ES5 for webpack loader mode
31- *
32- * @param {object } sourceObj - The source object containing the raw component.
33- * @param {object } options - Compilation options (e.g., Babel config).
34- * @param {Function } callback - Callback with (error, code, map) or status object.
3530 */
36- const compileAll = async ( sourceObj , options , callback ) => {
31+ async function compileAll (
32+ sourceObj : SourceObject ,
33+ options : Record < string , unknown > | null ,
34+ callback : ( ( result : CompilationResult ) => void ) | LoaderCallback ,
35+ ) : Promise < void > {
3736 // 1. Extract template
3837 let { template, templateLang, templateComponentName, templateFrameworkName } =
3938 compileTemplate ( sourceObj ) ;
@@ -59,7 +58,7 @@ const compileAll = async (sourceObj, options, callback) => {
5958 styleLang,
6059 isExistStyle,
6160 templateComponentName,
62- } ) ;
61+ } as any ) ;
6362
6463 let script = rawScript ;
6564
@@ -69,12 +68,12 @@ const compileAll = async (sourceObj, options, callback) => {
6968 // 5. Transform template (JSX/TSX via Babel)
7069 try {
7170 if ( templateLang !== 'html' && templateLang !== 'htm' ) {
72- const transformTemplate = require ( '../scripts/extension/transform' ) ;
71+ const transformTemplate = ( await import ( '../scripts/extension/transform' ) ) . default ;
7372 const result = await transformTemplate ( template , { sourceType : 'script' } ) ;
7473 template = result . code ;
7574 }
7675 } catch ( e ) {
77- callback ( { status : 'fail' , allScript : '' , e } ) ;
76+ ( callback as ( result : CompilationResult ) => void ) ( { status : 'fail' , allScript : '' , e : e as Error } ) ;
7877 throw new Error ( 'Babel compile failed, see issues https://github.com/Wscats/eno-loader/issues' ) ;
7978 }
8079
@@ -83,45 +82,46 @@ const compileAll = async (sourceObj, options, callback) => {
8382 const exportReplaceReg = new RegExp ( EXPORT_REGEX , 'g' ) ;
8483 const exportCompileReg = new RegExp ( '((' + EXPORT_REGEX + ')[\\s\\S]+)' , 'g' ) ;
8584
86- const compileContext = {
85+ const compileContext : CompileContext = {
8786 script, isExistScript, scriptLang, template,
8887 templateLang, templateComponentName, templateFrameworkName,
8988 style, styleLang, isExistStyle, sourceObj,
9089 } ;
9190
9291 // Generate import header
93- const importCode = modulesStart ( compileContext ) ;
92+ const importCode = generateImports ( compileContext ) ;
9493
9594 // Generate export/class body and handle class properties
96- const exportCode = script . match ( exportCompileReg ) [ 0 ] ;
97- script = script . replace ( exportReplaceReg , modulesEnd ( compileContext ) ) ;
95+ const exportCode = script . match ( exportCompileReg ) ! [ 0 ] ;
96+ script = script . replace ( exportReplaceReg , generateExport ( compileContext ) ) ;
9897 script = script . replace ( exportCompileReg , classProperty ( exportCode ) . code ) ;
9998
10099 // Combine: imports + script body + define() + render()
101100 let allScript = importCode + script +
102- defineComponent ( { script, templateComponentName } ) +
103- renderComponent ( { templateComponentName, sourceObj } ) ;
101+ generateDefine ( { script, templateComponentName } ) +
102+ generateRender ( { templateComponentName, sourceObj } ) ;
104103
105104 // 7. AST transformation (JSX → h() calls, cleanup)
106- allScript = ( await ast ( {
105+ const astOption : AstOption = {
107106 script, allScript, isExistScript, scriptType,
108107 scriptLang, template, templateLang, templateComponentName,
109- style, styleLang, isExistStyle,
110- } , null ) ) . code ;
108+ templateFrameworkName, style, styleLang, isExistStyle, sourceObj,
109+ } ;
110+ allScript = ( await astTransform ( astOption , null ) ) . code ;
111111
112112 // 8. Output
113113 if ( sourceObj . type === 'extension' ) {
114- callback ( { status : 'success' , allScript, e : null } ) ;
114+ ( callback as ( result : CompilationResult ) => void ) ( { status : 'success' , allScript, e : null } ) ;
115115 } else {
116- const transformLoader = require ( '../scripts/loader/transform' ) ;
117- const result = await transformLoader ( allScript , options ) ;
118- callback ( null , result . code , result . map ) ;
116+ const transformLoader = ( await import ( '../scripts/loader/transform' ) ) . default ;
117+ const result = await transformLoader ( allScript , options as any ) ;
118+ ( callback as LoaderCallback ) ( null , result . code , result . map ) ;
119119 }
120120 } catch ( e ) {
121- callback ( { status : 'fail' , allScript : '' , e } ) ;
121+ ( callback as ( result : CompilationResult ) => void ) ( { status : 'fail' , allScript : '' , e : e as Error } ) ;
122122 console . error ( e ) ;
123123 throw new Error ( 'Babel compile failed, see issues https://github.com/Wscats/eno-loader/issues' ) ;
124124 }
125- } ;
125+ }
126126
127- module . exports = compileAll ;
127+ export default compileAll ;
0 commit comments