@sprlab/wccompiler 0.13.0 → 0.15.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 +998 -998
- package/adapters/angular-compiled/angular.d.ts +197 -197
- package/adapters/angular-compiled/angular.mjs +488 -488
- package/adapters/angular.js +54 -54
- package/adapters/angular.ts +630 -630
- package/adapters/react.js +114 -114
- package/adapters/vue.js +103 -103
- package/bin/wcc.js +412 -412
- package/bin/wcc.test.js +126 -126
- package/integrations/angular.js +73 -73
- package/integrations/react.js +859 -859
- package/integrations/vue.js +253 -253
- package/lib/codegen.js +2078 -2074
- package/lib/compiler-browser.js +545 -545
- package/lib/compiler.js +483 -479
- package/lib/config.js +71 -71
- package/lib/css-scoper.js +180 -180
- package/lib/dev-server.js +193 -193
- package/lib/import-resolver.js +160 -160
- package/lib/parser-extractors.js +1240 -1169
- package/lib/parser.js +273 -269
- package/lib/reactive-runtime.js +143 -143
- package/lib/sfc-parser.js +333 -333
- package/lib/template-normalizer.js +114 -114
- package/lib/tree-walker.js +1013 -1013
- package/lib/types.js +262 -262
- package/lib/wcc-runtime.js +68 -68
- package/package.json +85 -85
- package/types/wcc.d.ts +28 -28
- package/types/wcc.test.js +46 -46
package/lib/parser.js
CHANGED
|
@@ -1,269 +1,273 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parser for .ts/.js component source files using defineComponent().
|
|
3
|
-
*
|
|
4
|
-
* Extracts:
|
|
5
|
-
* - defineComponent({ tag, template, styles }) metadata
|
|
6
|
-
* - signal() declarations
|
|
7
|
-
* - computed() declarations
|
|
8
|
-
* - effect() declarations
|
|
9
|
-
* - Top-level function declarations
|
|
10
|
-
*
|
|
11
|
-
* Tree walking (bindings, events, processedTemplate) is NOT handled
|
|
12
|
-
* here — that's the responsibility of tree-walker.js.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
/** @import { ParseResult, PropDef } from './types.js' */
|
|
16
|
-
|
|
17
|
-
import { readFileSync, existsSync } from 'node:fs';
|
|
18
|
-
import { resolve, dirname, extname } from 'node:path';
|
|
19
|
-
import { transform } from 'esbuild';
|
|
20
|
-
|
|
21
|
-
// Re-export all pure extraction functions so existing consumers are unaffected
|
|
22
|
-
export * from './parser-extractors.js';
|
|
23
|
-
|
|
24
|
-
import {
|
|
25
|
-
stripMacroImport,
|
|
26
|
-
toClassName,
|
|
27
|
-
camelToKebab,
|
|
28
|
-
extractPropsGeneric,
|
|
29
|
-
extractPropsArray,
|
|
30
|
-
extractPropsDefaults,
|
|
31
|
-
extractPropsObjectName,
|
|
32
|
-
extractEmitsFromCallSignatures,
|
|
33
|
-
extractEmits,
|
|
34
|
-
extractEmitsObjectName,
|
|
35
|
-
extractEmitsObjectNameFromGeneric,
|
|
36
|
-
extractSignals,
|
|
37
|
-
extractComputeds,
|
|
38
|
-
extractEffects,
|
|
39
|
-
extractWatchers,
|
|
40
|
-
extractFunctions,
|
|
41
|
-
extractLifecycleHooks,
|
|
42
|
-
extractRefs,
|
|
43
|
-
extractConstants,
|
|
44
|
-
extractDefineComponent,
|
|
45
|
-
validatePropsAssignment,
|
|
46
|
-
validateDuplicateProps,
|
|
47
|
-
validatePropsConflicts,
|
|
48
|
-
validateEmitsAssignment,
|
|
49
|
-
validateDuplicateEmits,
|
|
50
|
-
validateEmitsConflicts,
|
|
51
|
-
validateUndeclaredEmits,
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* @
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
error
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* @
|
|
85
|
-
* @
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
error
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
const
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
error
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
error
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
//
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
const
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
let
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
if (ch === '
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
if (ch === '
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
const
|
|
192
|
-
const
|
|
193
|
-
const
|
|
194
|
-
const
|
|
195
|
-
const
|
|
196
|
-
const
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
//
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
const
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
const
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Parser for .ts/.js component source files using defineComponent().
|
|
3
|
+
*
|
|
4
|
+
* Extracts:
|
|
5
|
+
* - defineComponent({ tag, template, styles }) metadata
|
|
6
|
+
* - signal() declarations
|
|
7
|
+
* - computed() declarations
|
|
8
|
+
* - effect() declarations
|
|
9
|
+
* - Top-level function declarations
|
|
10
|
+
*
|
|
11
|
+
* Tree walking (bindings, events, processedTemplate) is NOT handled
|
|
12
|
+
* here — that's the responsibility of tree-walker.js.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/** @import { ParseResult, PropDef } from './types.js' */
|
|
16
|
+
|
|
17
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
18
|
+
import { resolve, dirname, extname } from 'node:path';
|
|
19
|
+
import { transform } from 'esbuild';
|
|
20
|
+
|
|
21
|
+
// Re-export all pure extraction functions so existing consumers are unaffected
|
|
22
|
+
export * from './parser-extractors.js';
|
|
23
|
+
|
|
24
|
+
import {
|
|
25
|
+
stripMacroImport,
|
|
26
|
+
toClassName,
|
|
27
|
+
camelToKebab,
|
|
28
|
+
extractPropsGeneric,
|
|
29
|
+
extractPropsArray,
|
|
30
|
+
extractPropsDefaults,
|
|
31
|
+
extractPropsObjectName,
|
|
32
|
+
extractEmitsFromCallSignatures,
|
|
33
|
+
extractEmits,
|
|
34
|
+
extractEmitsObjectName,
|
|
35
|
+
extractEmitsObjectNameFromGeneric,
|
|
36
|
+
extractSignals,
|
|
37
|
+
extractComputeds,
|
|
38
|
+
extractEffects,
|
|
39
|
+
extractWatchers,
|
|
40
|
+
extractFunctions,
|
|
41
|
+
extractLifecycleHooks,
|
|
42
|
+
extractRefs,
|
|
43
|
+
extractConstants,
|
|
44
|
+
extractDefineComponent,
|
|
45
|
+
validatePropsAssignment,
|
|
46
|
+
validateDuplicateProps,
|
|
47
|
+
validatePropsConflicts,
|
|
48
|
+
validateEmitsAssignment,
|
|
49
|
+
validateDuplicateEmits,
|
|
50
|
+
validateEmitsConflicts,
|
|
51
|
+
validateUndeclaredEmits,
|
|
52
|
+
validateNameCollisions,
|
|
53
|
+
} from './parser-extractors.js';
|
|
54
|
+
|
|
55
|
+
// ── Type stripping ──────────────────────────────────────────────────
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Strip TypeScript type annotations using esbuild, producing plain JavaScript.
|
|
59
|
+
*
|
|
60
|
+
* @param {string} tsCode - TypeScript source code
|
|
61
|
+
* @returns {Promise<string>} - JavaScript without type annotations
|
|
62
|
+
*/
|
|
63
|
+
export async function stripTypes(tsCode) {
|
|
64
|
+
try {
|
|
65
|
+
const result = await transform(tsCode, {
|
|
66
|
+
loader: 'ts',
|
|
67
|
+
target: 'esnext',
|
|
68
|
+
sourcemap: false,
|
|
69
|
+
});
|
|
70
|
+
return result.code;
|
|
71
|
+
} catch (err) {
|
|
72
|
+
const error = new Error(`TypeScript syntax error: ${err.message}`);
|
|
73
|
+
/** @ts-expect-error — custom error code for programmatic handling */
|
|
74
|
+
error.code = 'TS_SYNTAX_ERROR';
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// ── Main parse function ─────────────────────────────────────────────
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Parse a .ts/.js component source file into a ParseResult IR.
|
|
83
|
+
*
|
|
84
|
+
* @param {string} filePath — Absolute path to the source file
|
|
85
|
+
* @returns {Promise<ParseResult>}
|
|
86
|
+
* @throws {Error} with code MISSING_DEFINE_COMPONENT, TEMPLATE_NOT_FOUND, STYLES_NOT_FOUND, TS_SYNTAX_ERROR
|
|
87
|
+
*/
|
|
88
|
+
export async function parse(filePath) {
|
|
89
|
+
// 1. Read the source file
|
|
90
|
+
const rawSource = readFileSync(filePath, 'utf-8');
|
|
91
|
+
|
|
92
|
+
// 2. Strip macro imports
|
|
93
|
+
let source = stripMacroImport(rawSource);
|
|
94
|
+
|
|
95
|
+
// 3. Extract props from generic form BEFORE type stripping (esbuild removes generics)
|
|
96
|
+
const propsFromGeneric = extractPropsGeneric(source);
|
|
97
|
+
const propsObjectNameFromGeneric = extractPropsObjectName(source);
|
|
98
|
+
|
|
99
|
+
// 3b. Extract emits from call signatures form BEFORE type stripping
|
|
100
|
+
const emitsFromCallSignatures = extractEmitsFromCallSignatures(source);
|
|
101
|
+
const emitsObjectNameFromGeneric = extractEmitsObjectNameFromGeneric(source);
|
|
102
|
+
|
|
103
|
+
// 4. Validate props assignment (before type strip, on original source)
|
|
104
|
+
validatePropsAssignment(source, filePath);
|
|
105
|
+
|
|
106
|
+
// 4b. Validate emits assignment (before type strip, on original source)
|
|
107
|
+
validateEmitsAssignment(source, filePath);
|
|
108
|
+
|
|
109
|
+
// 5. Strip TypeScript types if .ts file
|
|
110
|
+
const ext = extname(filePath);
|
|
111
|
+
if (ext === '.ts') {
|
|
112
|
+
source = await stripTypes(source);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// 6. Extract defineComponent
|
|
116
|
+
const componentDef = extractDefineComponent(source);
|
|
117
|
+
if (!componentDef) {
|
|
118
|
+
const error = new Error(
|
|
119
|
+
`Error en '${filePath}': defineComponent() es obligatorio`
|
|
120
|
+
);
|
|
121
|
+
/** @ts-expect-error — custom error code for programmatic handling */
|
|
122
|
+
error.code = 'MISSING_DEFINE_COMPONENT';
|
|
123
|
+
throw error;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const { tag: tagName, template: templatePath, styles: stylesPath } = componentDef;
|
|
127
|
+
const className = toClassName(tagName);
|
|
128
|
+
const sourceDir = dirname(filePath);
|
|
129
|
+
|
|
130
|
+
// 7. Resolve external files
|
|
131
|
+
const resolvedTemplatePath = resolve(sourceDir, templatePath);
|
|
132
|
+
if (!existsSync(resolvedTemplatePath)) {
|
|
133
|
+
const error = new Error(
|
|
134
|
+
`Error en '${filePath}': template no encontrado: '${templatePath}'`
|
|
135
|
+
);
|
|
136
|
+
/** @ts-expect-error — custom error code for programmatic handling */
|
|
137
|
+
error.code = 'TEMPLATE_NOT_FOUND';
|
|
138
|
+
throw error;
|
|
139
|
+
}
|
|
140
|
+
const template = readFileSync(resolvedTemplatePath, 'utf-8');
|
|
141
|
+
|
|
142
|
+
let style = '';
|
|
143
|
+
if (stylesPath) {
|
|
144
|
+
const resolvedStylesPath = resolve(sourceDir, stylesPath);
|
|
145
|
+
if (!existsSync(resolvedStylesPath)) {
|
|
146
|
+
const error = new Error(
|
|
147
|
+
`Error en '${filePath}': styles no encontrado: '${stylesPath}'`
|
|
148
|
+
);
|
|
149
|
+
/** @ts-expect-error — custom error code for programmatic handling */
|
|
150
|
+
error.code = 'STYLES_NOT_FOUND';
|
|
151
|
+
throw error;
|
|
152
|
+
}
|
|
153
|
+
style = readFileSync(resolvedStylesPath, 'utf-8');
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// 8. Extract lifecycle hooks (before other extractions to avoid misidentification)
|
|
157
|
+
const { onMountHooks, onDestroyHooks, onAdoptHooks } = extractLifecycleHooks(source);
|
|
158
|
+
|
|
159
|
+
// 8b. Strip lifecycle hook blocks from source to prevent signal/computed/effect/function
|
|
160
|
+
// extractors from misidentifying code inside hook bodies
|
|
161
|
+
let sourceForExtraction = source;
|
|
162
|
+
const hookLinePattern = /\bonMount\s*\(|\bonDestroy\s*\(|\bonAdopt\s*\(|\bwatch\s*\(/;
|
|
163
|
+
const sourceLines = sourceForExtraction.split('\n');
|
|
164
|
+
const filteredLines = [];
|
|
165
|
+
let skipDepth = 0;
|
|
166
|
+
let skipping = false;
|
|
167
|
+
for (const line of sourceLines) {
|
|
168
|
+
if (!skipping && hookLinePattern.test(line)) {
|
|
169
|
+
skipping = true;
|
|
170
|
+
skipDepth = 0;
|
|
171
|
+
for (const ch of line) {
|
|
172
|
+
if (ch === '{') skipDepth++;
|
|
173
|
+
if (ch === '}') skipDepth--;
|
|
174
|
+
}
|
|
175
|
+
if (skipDepth <= 0) skipping = false;
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
if (skipping) {
|
|
179
|
+
for (const ch of line) {
|
|
180
|
+
if (ch === '{') skipDepth++;
|
|
181
|
+
if (ch === '}') skipDepth--;
|
|
182
|
+
}
|
|
183
|
+
if (skipDepth <= 0) skipping = false;
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
filteredLines.push(line);
|
|
187
|
+
}
|
|
188
|
+
sourceForExtraction = filteredLines.join('\n');
|
|
189
|
+
|
|
190
|
+
// 9. Extract reactive declarations and functions (from filtered source)
|
|
191
|
+
const signals = extractSignals(sourceForExtraction);
|
|
192
|
+
const computeds = extractComputeds(sourceForExtraction);
|
|
193
|
+
const effects = extractEffects(sourceForExtraction);
|
|
194
|
+
const watchers = extractWatchers(source); // Extract from unfiltered source (like lifecycle hooks)
|
|
195
|
+
const methods = extractFunctions(sourceForExtraction);
|
|
196
|
+
const refs = extractRefs(sourceForExtraction);
|
|
197
|
+
const constantVars = extractConstants(sourceForExtraction);
|
|
198
|
+
|
|
199
|
+
// 9. Extract props (array form — after type strip, if generic didn't find any)
|
|
200
|
+
const propsFromArray = propsFromGeneric.length > 0 ? [] : extractPropsArray(source);
|
|
201
|
+
let propNames = propsFromGeneric.length > 0 ? propsFromGeneric : propsFromArray;
|
|
202
|
+
|
|
203
|
+
// 10. Extract props defaults (after type strip)
|
|
204
|
+
const propsDefaults = extractPropsDefaults(source);
|
|
205
|
+
|
|
206
|
+
// If neither generic nor array form found props, but defaults were found,
|
|
207
|
+
// use the defaults object keys as prop names (object-only form: defineProps({ key: val }))
|
|
208
|
+
if (propNames.length === 0 && Object.keys(propsDefaults).length > 0) {
|
|
209
|
+
propNames = Object.keys(propsDefaults);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// 11. Extract propsObjectName (use generic result if found, otherwise post-strip)
|
|
213
|
+
const propsObjectName = propsObjectNameFromGeneric ?? extractPropsObjectName(source);
|
|
214
|
+
|
|
215
|
+
// 12. Validate props
|
|
216
|
+
validateDuplicateProps(propNames, filePath);
|
|
217
|
+
|
|
218
|
+
const signalNameSet = new Set(signals.map(s => s.name));
|
|
219
|
+
const computedNameSet = new Set(computeds.map(c => c.name));
|
|
220
|
+
// No constant extraction in v2 core, but use an empty set for validation
|
|
221
|
+
const constantNameSet = new Set(constantVars.map(v => v.name));
|
|
222
|
+
validatePropsConflicts(propsObjectName, signalNameSet, computedNameSet, constantNameSet, filePath);
|
|
223
|
+
|
|
224
|
+
// 13. Build PropDef[]
|
|
225
|
+
/** @type {PropDef[]} */
|
|
226
|
+
const propDefs = propNames.map(name => ({
|
|
227
|
+
name,
|
|
228
|
+
default: propsDefaults[name] ?? 'undefined',
|
|
229
|
+
attrName: camelToKebab(name),
|
|
230
|
+
}));
|
|
231
|
+
|
|
232
|
+
// 14. Extract emits (array form — after type strip, if call signatures didn't find any)
|
|
233
|
+
const emitsFromArray = emitsFromCallSignatures.length > 0 ? [] : extractEmits(source);
|
|
234
|
+
const emitNames = emitsFromCallSignatures.length > 0 ? emitsFromCallSignatures : emitsFromArray;
|
|
235
|
+
|
|
236
|
+
// 15. Extract emitsObjectName (use generic result if found, otherwise post-strip)
|
|
237
|
+
const emitsObjectName = emitsObjectNameFromGeneric ?? extractEmitsObjectName(source);
|
|
238
|
+
|
|
239
|
+
// 16. Validate emits
|
|
240
|
+
validateDuplicateEmits(emitNames, filePath);
|
|
241
|
+
|
|
242
|
+
const propNameSet = new Set(propNames);
|
|
243
|
+
validateEmitsConflicts(emitsObjectName, signalNameSet, computedNameSet, constantNameSet, propNameSet, propsObjectName, filePath);
|
|
244
|
+
validateUndeclaredEmits(source, emitsObjectName, emitNames, filePath);
|
|
245
|
+
|
|
246
|
+
// 16b. Validate name collisions between signals/computeds/props and methods
|
|
247
|
+
validateNameCollisions(signalNameSet, computedNameSet, propNameSet, methods, filePath);
|
|
248
|
+
|
|
249
|
+
// 17. Return ParseResult
|
|
250
|
+
return {
|
|
251
|
+
tagName,
|
|
252
|
+
className,
|
|
253
|
+
template,
|
|
254
|
+
style,
|
|
255
|
+
signals,
|
|
256
|
+
computeds,
|
|
257
|
+
effects,
|
|
258
|
+
constantVars,
|
|
259
|
+
watchers,
|
|
260
|
+
methods,
|
|
261
|
+
propDefs,
|
|
262
|
+
propsObjectName: propsObjectName ?? null,
|
|
263
|
+
emits: emitNames,
|
|
264
|
+
emitsObjectName: emitsObjectName ?? null,
|
|
265
|
+
bindings: [],
|
|
266
|
+
events: [],
|
|
267
|
+
processedTemplate: null,
|
|
268
|
+
onMountHooks,
|
|
269
|
+
onDestroyHooks,
|
|
270
|
+
onAdoptHooks,
|
|
271
|
+
refs,
|
|
272
|
+
};
|
|
273
|
+
}
|