@kernlang/vue 2.0.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.
@@ -0,0 +1,347 @@
1
+ /**
2
+ * Vue-specific codegen — generates Vue 3 Composition API code for
3
+ * provider (provide/inject), effect (onMounted/watch), and hook (composable) nodes.
4
+ *
5
+ * Mirrors @kernlang/react/codegen-react.ts but outputs Vue instead of React/JSX.
6
+ */
7
+ import { parseParamList } from '@kernlang/core';
8
+ // ── Helpers ──────────────────────────────────────────────────────────────
9
+ function p(node) {
10
+ return node.props || {};
11
+ }
12
+ function kids(node, type) {
13
+ const c = node.children || [];
14
+ return type ? c.filter(n => n.type === type) : c;
15
+ }
16
+ function firstChild(node, type) {
17
+ return kids(node, type)[0];
18
+ }
19
+ function dedent(code) {
20
+ const lines = code.split('\n');
21
+ const nonEmpty = lines.filter(l => l.trim().length > 0);
22
+ if (nonEmpty.length === 0)
23
+ return code;
24
+ const min = Math.min(...nonEmpty.map(l => l.match(/^(\s*)/)?.[1].length ?? 0));
25
+ return lines.map(l => l.slice(min)).join('\n');
26
+ }
27
+ function handlerCode(node) {
28
+ const handler = firstChild(node, 'handler');
29
+ if (!handler)
30
+ return '';
31
+ const raw = p(handler).code || '';
32
+ return dedent(raw);
33
+ }
34
+ // ── Provider → provide/inject ────────────────────────────────────────────
35
+ // provider name=Search type=UseSearchResult
36
+ // prop name=initialQuery type=string
37
+ // handler <<<
38
+ // const value = useSearch({ query: initialQuery, category });
39
+ // >>>
40
+ //
41
+ // Generates:
42
+ // 1. InjectionKey<UseSearchResult>
43
+ // 2. provide() composable wrapper (provideSearch)
44
+ // 3. inject() consumer composable (useSearchContext)
45
+ export function generateVueProvider(node) {
46
+ const props = p(node);
47
+ const name = props.name;
48
+ const valueType = props.type;
49
+ const lines = [];
50
+ lines.push("import type { InjectionKey } from 'vue';");
51
+ lines.push("import { provide, inject } from 'vue';");
52
+ lines.push('');
53
+ // 1. Injection key
54
+ lines.push(`export const ${name}Key: InjectionKey<${valueType}> = Symbol('${name}');`);
55
+ lines.push('');
56
+ // 2. Provider composable
57
+ const propNodes = kids(node, 'prop');
58
+ const paramParts = [];
59
+ for (const prop of propNodes) {
60
+ const pp = p(prop);
61
+ const opt = pp.optional === 'true' || pp.optional === true ? '?' : '';
62
+ paramParts.push(`${pp.name}${opt}: ${pp.type}`);
63
+ }
64
+ const paramStr = paramParts.length > 0 ? paramParts.join(', ') : '';
65
+ lines.push(`export function provide${name}(${paramStr}): ${valueType} {`);
66
+ const code = handlerCode(node);
67
+ if (code) {
68
+ for (const line of code.split('\n')) {
69
+ lines.push(` ${line}`);
70
+ }
71
+ }
72
+ lines.push(` provide(${name}Key, value);`);
73
+ lines.push(` return value;`);
74
+ lines.push('}');
75
+ lines.push('');
76
+ // 3. Consumer composable
77
+ lines.push(`export function use${name}Context(): ${valueType} {`);
78
+ lines.push(` const ctx = inject(${name}Key);`);
79
+ lines.push(` if (ctx === undefined) {`);
80
+ lines.push(` throw new Error('use${name}Context must be used within a component that calls provide${name}');`);
81
+ lines.push(` }`);
82
+ lines.push(` return ctx;`);
83
+ lines.push('}');
84
+ return lines;
85
+ }
86
+ // ── Effect → onMounted / watchEffect / watch ─────────────────────────────
87
+ // effect name=TrackingContainer once=true deps="entities,generator"
88
+ // prop name=entities type="T[]"
89
+ // handler <<<
90
+ // generator(entities).then(event => trackPageLoadEvent(event));
91
+ // >>>
92
+ // cleanup <<<
93
+ // abortCtrl.abort();
94
+ // >>>
95
+ //
96
+ // Generates a composable function that uses onMounted or watch
97
+ export function generateVueEffect(node) {
98
+ const props = p(node);
99
+ const name = props.name;
100
+ const generic = props.generic;
101
+ const once = props.once === 'true' || props.once === true;
102
+ const deps = props.deps || '';
103
+ const lines = [];
104
+ const cleanupNode = firstChild(node, 'cleanup');
105
+ // Collect all imports upfront (no post-hoc mutation)
106
+ const vueImports = new Set();
107
+ if (deps && !once) {
108
+ vueImports.add('watch');
109
+ }
110
+ else {
111
+ vueImports.add('onMounted');
112
+ if (cleanupNode)
113
+ vueImports.add('onUnmounted');
114
+ }
115
+ lines.push(`import { ${[...vueImports].sort().join(', ')} } from 'vue';`);
116
+ lines.push('');
117
+ // Generic type parameter
118
+ const genericParam = generic ? `<${generic}>` : '';
119
+ // Props interface
120
+ const propNodes = kids(node, 'prop');
121
+ lines.push(`export interface ${name}Props${genericParam} {`);
122
+ for (const prop of propNodes) {
123
+ const pp = p(prop);
124
+ const opt = pp.optional === 'true' || pp.optional === true ? '?' : '';
125
+ lines.push(` ${pp.name}${opt}: ${pp.type};`);
126
+ }
127
+ lines.push('}');
128
+ lines.push('');
129
+ // Composable function
130
+ const propNames = propNodes.map(pn => p(pn).name);
131
+ const destructured = propNames.join(', ');
132
+ lines.push(`export function use${name}${genericParam}({ ${destructured} }: ${name}Props${genericParam}) {`);
133
+ const code = handlerCode(node);
134
+ if (deps && !once) {
135
+ // watch mode — immediate: true to match React useEffect behavior (run on mount)
136
+ const depsArr = deps.split(',').map(d => d.trim());
137
+ const watchSource = depsArr.length === 1 ? depsArr[0] : `[${depsArr.join(', ')}]`;
138
+ // Vue watch cleanup uses onCleanup param, not return value
139
+ const hasCleanup = !!cleanupNode;
140
+ const cbParams = hasCleanup ? '_value, _oldValue, onCleanup' : '';
141
+ lines.push(` watch(${watchSource}, (${cbParams}) => {`);
142
+ if (code) {
143
+ for (const line of code.split('\n')) {
144
+ lines.push(` ${line}`);
145
+ }
146
+ }
147
+ if (hasCleanup) {
148
+ const cleanupCode = p(cleanupNode).code || '';
149
+ const cleanupDedented = dedent(cleanupCode);
150
+ lines.push(` onCleanup(() => {`);
151
+ for (const line of cleanupDedented.split('\n')) {
152
+ lines.push(` ${line}`);
153
+ }
154
+ lines.push(` });`);
155
+ }
156
+ lines.push(` }, { immediate: true });`);
157
+ }
158
+ else {
159
+ // onMounted mode
160
+ lines.push(` onMounted(() => {`);
161
+ if (code) {
162
+ for (const line of code.split('\n')) {
163
+ lines.push(` ${line}`);
164
+ }
165
+ }
166
+ lines.push(` });`);
167
+ if (cleanupNode) {
168
+ const cleanupCode = p(cleanupNode).code || '';
169
+ const cleanupDedented = dedent(cleanupCode);
170
+ lines.push(` onUnmounted(() => {`);
171
+ for (const line of cleanupDedented.split('\n')) {
172
+ lines.push(` ${line}`);
173
+ }
174
+ lines.push(` });`);
175
+ }
176
+ }
177
+ lines.push('}');
178
+ return lines;
179
+ }
180
+ // ── Hook → Composable ────────────────────────────────────────────────────
181
+ // hook name=useSearch params="initialState:SearchState" returns=UseSearchResult
182
+ // state name=query type=string init="initialState.query"
183
+ // ref name=abortCtrl type=AbortController init="new AbortController()"
184
+ // context name=env type=EnvConfig source=EnvContext
185
+ // handler <<<
186
+ // const { data } = useSWR(cacheKey, fetcher);
187
+ // >>>
188
+ // memo name=cacheKey deps="query,filters"
189
+ // callback name=handleFilter params="field:string,value:string" deps="query"
190
+ // effect deps="query"
191
+ // returns names="products:data?.products,isLoading,handleFilter,cacheKey"
192
+ //
193
+ // → Vue 3 composable with ref, computed, watch instead of useState, useMemo, useCallback, useEffect
194
+ export function generateVueHook(node) {
195
+ const props = p(node);
196
+ const name = props.name;
197
+ const params = props.params || '';
198
+ const returnsType = props.returns;
199
+ const lines = [];
200
+ const vueImports = new Set();
201
+ const paramList = parseParamList(params);
202
+ const retClause = returnsType ? `: ${returnsType}` : '';
203
+ lines.push(`export function ${name}(${paramList})${retClause} {`);
204
+ const children = kids(node);
205
+ const returnsNode = children.find(c => c.type === 'returns');
206
+ const ordered = children.filter(c => c.type !== 'returns');
207
+ for (const child of ordered) {
208
+ const cp = p(child);
209
+ switch (child.type) {
210
+ case 'state': {
211
+ vueImports.add('ref');
212
+ const sname = cp.name;
213
+ const stype = cp.type || 'unknown';
214
+ const sinit = cp.init || 'undefined';
215
+ lines.push(` const ${sname} = ref<${stype}>(${sinit});`);
216
+ break;
217
+ }
218
+ case 'ref': {
219
+ vueImports.add('ref');
220
+ const rname = cp.name;
221
+ const rtype = cp.type || 'unknown';
222
+ const rinit = cp.init || 'null';
223
+ lines.push(` const ${rname} = ref<${rtype}>(${rinit});`);
224
+ break;
225
+ }
226
+ case 'context': {
227
+ vueImports.add('inject');
228
+ const cname = cp.name;
229
+ const csource = cp.source;
230
+ lines.push(` const ${cname} = inject(${csource});`);
231
+ break;
232
+ }
233
+ case 'handler': {
234
+ const hcode = cp.code || '';
235
+ const hDedented = dedent(hcode);
236
+ for (const line of hDedented.split('\n')) {
237
+ lines.push(` ${line}`);
238
+ }
239
+ break;
240
+ }
241
+ case 'memo': {
242
+ vueImports.add('computed');
243
+ const mname = cp.name;
244
+ const mcode = handlerCode(child);
245
+ lines.push(` const ${mname} = computed(() => {`);
246
+ if (mcode) {
247
+ for (const line of mcode.split('\n')) {
248
+ lines.push(` ${line}`);
249
+ }
250
+ }
251
+ lines.push(` });`);
252
+ break;
253
+ }
254
+ case 'callback': {
255
+ // Vue doesn't need useCallback — just a plain function
256
+ const cbname = cp.name;
257
+ const cbparams = cp.params || '';
258
+ const cbcode = handlerCode(child);
259
+ const cbParamList = parseParamList(cbparams);
260
+ lines.push(` function ${cbname}(${cbParamList}) {`);
261
+ if (cbcode) {
262
+ for (const line of cbcode.split('\n')) {
263
+ lines.push(` ${line}`);
264
+ }
265
+ }
266
+ lines.push(` }`);
267
+ break;
268
+ }
269
+ case 'effect': {
270
+ const edeps = cp.deps || '';
271
+ const ecode = handlerCode(child);
272
+ const effectCleanup = firstChild(child, 'cleanup');
273
+ if (edeps) {
274
+ vueImports.add('watch');
275
+ const depsArr = edeps.split(',').map(d => d.trim());
276
+ const watchSource = depsArr.length === 1 ? depsArr[0] : `[${depsArr.join(', ')}]`;
277
+ const watchCbParams = effectCleanup ? '_value, _oldValue, onCleanup' : '';
278
+ lines.push(` watch(${watchSource}, (${watchCbParams}) => {`);
279
+ }
280
+ else {
281
+ vueImports.add('onMounted');
282
+ lines.push(` onMounted(() => {`);
283
+ }
284
+ if (ecode) {
285
+ for (const line of ecode.split('\n')) {
286
+ lines.push(` ${line}`);
287
+ }
288
+ }
289
+ // Cleanup — Vue watch uses onCleanup param, onMounted uses return
290
+ if (effectCleanup) {
291
+ const cleanupCode = p(effectCleanup).code || '';
292
+ const cleanupDedented = dedent(cleanupCode);
293
+ if (edeps) {
294
+ // watch: use onCleanup()
295
+ lines.push(` onCleanup(() => {`);
296
+ }
297
+ else {
298
+ // onMounted: use return
299
+ lines.push(` return () => {`);
300
+ }
301
+ for (const line of cleanupDedented.split('\n')) {
302
+ lines.push(` ${line}`);
303
+ }
304
+ lines.push(` ${edeps ? '});' : '};'}`);
305
+ }
306
+ if (edeps) {
307
+ lines.push(` }, { immediate: true });`);
308
+ }
309
+ else {
310
+ lines.push(` });`);
311
+ }
312
+ break;
313
+ }
314
+ }
315
+ }
316
+ // Returns
317
+ if (returnsNode) {
318
+ const rnames = p(returnsNode).names || '';
319
+ const entries = rnames.split(',').map(e => {
320
+ const [key, ...valueParts] = e.split(':');
321
+ const value = valueParts.join(':').trim();
322
+ return value ? `${key.trim()}: ${value}` : key.trim();
323
+ });
324
+ lines.push(` return { ${entries.join(', ')} };`);
325
+ }
326
+ lines.push('}');
327
+ // Prepend Vue imports
328
+ if (vueImports.size > 0) {
329
+ const importLine = `import { ${[...vueImports].sort().join(', ')} } from 'vue';`;
330
+ lines.unshift('');
331
+ lines.unshift(importLine);
332
+ }
333
+ return lines;
334
+ }
335
+ // ── Dispatcher ───────────────────────────────────────────────────────────
336
+ export function isVueNode(type) {
337
+ return type === 'provider' || type === 'effect' || type === 'hook';
338
+ }
339
+ export function generateVueNode(node) {
340
+ switch (node.type) {
341
+ case 'provider': return generateVueProvider(node);
342
+ case 'effect': return generateVueEffect(node);
343
+ case 'hook': return generateVueHook(node);
344
+ default: return [];
345
+ }
346
+ }
347
+ //# sourceMappingURL=codegen-vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen-vue.js","sourceRoot":"","sources":["../src/codegen-vue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @kernlang/vue — Vue 3 SFC + Nuxt 3 transpilers + Vue codegen
3
+ */
4
+ export { transpileVue } from './transpiler-vue.js';
5
+ export { transpileNuxt } from './transpiler-nuxt.js';
6
+ export { generateVueProvider, generateVueEffect, generateVueHook, generateVueNode, isVueNode, } from './codegen-vue.js';
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @kernlang/vue — Vue 3 SFC + Nuxt 3 transpilers + Vue codegen
3
+ */
4
+ export { transpileVue } from './transpiler-vue.js';
5
+ export { transpileNuxt } from './transpiler-nuxt.js';
6
+ export { generateVueProvider, generateVueEffect, generateVueHook, generateVueNode, isVueNode, } from './codegen-vue.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,SAAS,GACV,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Nuxt 3 Transpiler — extends Vue 3 SFC output with Nuxt conventions.
3
+ *
4
+ * Differences from plain Vue:
5
+ * - Pages go in pages/ with file-based routing
6
+ * - Layouts go in layouts/
7
+ * - Middleware go in middleware/
8
+ * - Server routes go in server/api/
9
+ * - Auto-imports assumed (no explicit 'import { ref } from "vue"')
10
+ * - Uses Nuxt composables: useHead, useRoute, navigateTo
11
+ */
12
+ import type { IRNode, TranspileResult, ResolvedKernConfig } from '@kernlang/core';
13
+ export declare function transpileNuxt(root: IRNode, config?: ResolvedKernConfig): TranspileResult;