svelte-origin 1.0.0-next.15 → 1.0.0-next.16
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/dist/cli.js +67 -23
- package/dist/index.js +67 -23
- package/dist/plugin.js +67 -23
- package/dist/post-process.js +67 -23
- package/dist/preprocess.js +67 -23
- package/dist/transform/origin-transform.d.ts +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1919,7 +1919,7 @@ function parseObjectMembers(source) {
|
|
|
1919
1919
|
}
|
|
1920
1920
|
|
|
1921
1921
|
// src/transform/origin-transform.ts
|
|
1922
|
-
function transformOriginCalls(s, source, neededImports) {
|
|
1922
|
+
function transformOriginCalls(s, source, neededImports, svelteImports) {
|
|
1923
1923
|
const regex = /\$origin\s*\(/g;
|
|
1924
1924
|
let match;
|
|
1925
1925
|
let changed = false;
|
|
@@ -1935,14 +1935,14 @@ function transformOriginCalls(s, source, neededImports) {
|
|
|
1935
1935
|
continue;
|
|
1936
1936
|
}
|
|
1937
1937
|
const definitionContent = source.slice(openParenIndex + 1, closeParenIndex);
|
|
1938
|
-
const transformed = transformOriginDefinition(definitionContent);
|
|
1938
|
+
const transformed = transformOriginDefinition(definitionContent, svelteImports);
|
|
1939
1939
|
s.overwrite(startIndex, closeParenIndex + 1, `__createOrigin(${transformed})`);
|
|
1940
1940
|
neededImports.add("__createOrigin");
|
|
1941
1941
|
changed = true;
|
|
1942
1942
|
}
|
|
1943
1943
|
return changed;
|
|
1944
1944
|
}
|
|
1945
|
-
function transformOriginDefinition(content) {
|
|
1945
|
+
function transformOriginDefinition(content, svelteImports) {
|
|
1946
1946
|
let parents = [];
|
|
1947
1947
|
let bodyContent = content.trim();
|
|
1948
1948
|
let initCallback = null;
|
|
@@ -2007,7 +2007,7 @@ function transformOriginDefinition(content) {
|
|
|
2007
2007
|
}
|
|
2008
2008
|
}
|
|
2009
2009
|
const attrDetails = parseAttrsSource(attrsContent);
|
|
2010
|
-
const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName);
|
|
2010
|
+
const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName, svelteImports);
|
|
2011
2011
|
const parentsCode = parents.length > 0 ? `[${parents.join(", ")}]` : "undefined";
|
|
2012
2012
|
let configCode = `{
|
|
2013
2013
|
__attrSchema: ${attrSchemaCode},
|
|
@@ -2027,19 +2027,35 @@ ${createFnBody}
|
|
|
2027
2027
|
}`;
|
|
2028
2028
|
return configCode;
|
|
2029
2029
|
}
|
|
2030
|
-
function transformOriginBody(content, parents = [], attrDetails = [], propName = "props") {
|
|
2030
|
+
function transformOriginBody(content, parents = [], attrDetails = [], propName = "props", svelteImports) {
|
|
2031
2031
|
let body = content.trim();
|
|
2032
2032
|
const hasParents = parents.length > 0;
|
|
2033
|
+
const attrStateDeclarations = [];
|
|
2034
|
+
const attrSyncEffects = [];
|
|
2033
2035
|
const attrGettersSetters = [];
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
attrGettersSetters.push(`get ${attr.key}() { return __inputAttrs.${attr.key} ?? ${attr.defaultValue} }`);
|
|
2037
|
-
} else {
|
|
2038
|
-
attrGettersSetters.push(`get ${attr.key}() { return __inputAttrs.${attr.key} }`);
|
|
2039
|
-
}
|
|
2040
|
-
attrGettersSetters.push(`set ${attr.key}(v) { __inputAttrs.${attr.key} = v }`);
|
|
2036
|
+
if (attrDetails.length > 0 && svelteImports) {
|
|
2037
|
+
svelteImports.add("untrack");
|
|
2041
2038
|
}
|
|
2042
|
-
const
|
|
2039
|
+
for (const attr of attrDetails) {
|
|
2040
|
+
const defaultExpr = attr.hasDefault ? ` ?? ${attr.defaultValue}` : "";
|
|
2041
|
+
attrStateDeclarations.push(`let __attr_${attr.key} = $state(__inputAttrs.${attr.key}${defaultExpr})`);
|
|
2042
|
+
attrSyncEffects.push(`$effect(() => {
|
|
2043
|
+
const __parentVal = __inputAttrs.${attr.key}
|
|
2044
|
+
const __currentVal = untrack(() => __attr_${attr.key})
|
|
2045
|
+
if (__parentVal !== __currentVal) {
|
|
2046
|
+
__attr_${attr.key} = __parentVal${defaultExpr}
|
|
2047
|
+
}
|
|
2048
|
+
})`);
|
|
2049
|
+
attrGettersSetters.push(`get ${attr.key}() { return __attr_${attr.key} }`);
|
|
2050
|
+
attrGettersSetters.push(`set ${attr.key}(v) { __attr_${attr.key} = v; __inputAttrs.${attr.key} = v }`);
|
|
2051
|
+
}
|
|
2052
|
+
const attrStateSection = attrStateDeclarations.length > 0 ? attrStateDeclarations.join(`
|
|
2053
|
+
`) + `
|
|
2054
|
+
` : "";
|
|
2055
|
+
const attrEffectSection = attrSyncEffects.length > 0 ? attrSyncEffects.join(`
|
|
2056
|
+
`) + `
|
|
2057
|
+
` : "";
|
|
2058
|
+
const propsObjectCode = attrGettersSetters.length > 0 ? `${attrStateSection}${attrEffectSection}const __props = {
|
|
2043
2059
|
${attrGettersSetters.join(`,
|
|
2044
2060
|
`)}
|
|
2045
2061
|
}` : ` const __props = __inputAttrs`;
|
|
@@ -2728,9 +2744,10 @@ function transformScript(source, options = {}) {
|
|
|
2728
2744
|
const { isComponent = false } = options;
|
|
2729
2745
|
let changed = false;
|
|
2730
2746
|
const neededImports = new Set;
|
|
2747
|
+
const svelteImports = new Set;
|
|
2731
2748
|
let propsTypeDeclaration = null;
|
|
2732
2749
|
if (!isComponent) {
|
|
2733
|
-
changed = transformOriginCalls(s, source, neededImports) || changed;
|
|
2750
|
+
changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
|
|
2734
2751
|
changed = transformStandaloneAttrsCalls(s, source, neededImports) || changed;
|
|
2735
2752
|
}
|
|
2736
2753
|
if (isComponent) {
|
|
@@ -2769,10 +2786,17 @@ function transformScript(source, options = {}) {
|
|
|
2769
2786
|
`);
|
|
2770
2787
|
}
|
|
2771
2788
|
}
|
|
2772
|
-
} else if (neededImports.size > 0) {
|
|
2773
|
-
|
|
2774
|
-
|
|
2789
|
+
} else if (neededImports.size > 0 || svelteImports.size > 0) {
|
|
2790
|
+
if (neededImports.size > 0) {
|
|
2791
|
+
const importStatement = generateRuntimeImport([...neededImports]);
|
|
2792
|
+
s.prepend(importStatement + `
|
|
2793
|
+
`);
|
|
2794
|
+
}
|
|
2795
|
+
if (svelteImports.size > 0) {
|
|
2796
|
+
const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
|
|
2797
|
+
s.prepend(svelteImportStatement + `
|
|
2775
2798
|
`);
|
|
2799
|
+
}
|
|
2776
2800
|
}
|
|
2777
2801
|
if (!changed) {
|
|
2778
2802
|
return { code: source, changed: false };
|
|
@@ -2791,9 +2815,10 @@ async function transformScriptAsync(source, options) {
|
|
|
2791
2815
|
const { isComponent = false, schemaResolver } = options;
|
|
2792
2816
|
let changed = false;
|
|
2793
2817
|
const neededImports = new Set;
|
|
2818
|
+
const svelteImports = new Set;
|
|
2794
2819
|
let propsTypeDeclaration = null;
|
|
2795
2820
|
if (!isComponent) {
|
|
2796
|
-
changed = transformOriginCalls(s, source, neededImports) || changed;
|
|
2821
|
+
changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
|
|
2797
2822
|
changed = transformStandaloneAttrsCalls(s, source, neededImports) || changed;
|
|
2798
2823
|
}
|
|
2799
2824
|
if (isComponent) {
|
|
@@ -2832,10 +2857,17 @@ async function transformScriptAsync(source, options) {
|
|
|
2832
2857
|
`);
|
|
2833
2858
|
}
|
|
2834
2859
|
}
|
|
2835
|
-
} else if (neededImports.size > 0) {
|
|
2836
|
-
|
|
2837
|
-
|
|
2860
|
+
} else if (neededImports.size > 0 || svelteImports.size > 0) {
|
|
2861
|
+
if (neededImports.size > 0) {
|
|
2862
|
+
const importStatement = generateRuntimeImport([...neededImports]);
|
|
2863
|
+
s.prepend(importStatement + `
|
|
2838
2864
|
`);
|
|
2865
|
+
}
|
|
2866
|
+
if (svelteImports.size > 0) {
|
|
2867
|
+
const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
|
|
2868
|
+
s.prepend(svelteImportStatement + `
|
|
2869
|
+
`);
|
|
2870
|
+
}
|
|
2839
2871
|
}
|
|
2840
2872
|
if (!changed) {
|
|
2841
2873
|
return { code: source, changed: false };
|
|
@@ -2854,9 +2886,10 @@ async function transformScriptContent(source, options) {
|
|
|
2854
2886
|
const { isComponent = false, schemaResolver } = options;
|
|
2855
2887
|
let changed = false;
|
|
2856
2888
|
const neededImports = new Set;
|
|
2889
|
+
const svelteImports = new Set;
|
|
2857
2890
|
let propsTypeDeclaration = null;
|
|
2858
2891
|
if (!isComponent) {
|
|
2859
|
-
changed = transformOriginCalls(s, source, neededImports) || changed;
|
|
2892
|
+
changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
|
|
2860
2893
|
}
|
|
2861
2894
|
if (isComponent) {
|
|
2862
2895
|
const result = await transformAttrsOriginCalls(s, source, neededImports, schemaResolver);
|
|
@@ -2869,11 +2902,22 @@ async function transformScriptContent(source, options) {
|
|
|
2869
2902
|
if (neededImports.size > 0) {
|
|
2870
2903
|
const importStatement = generateRuntimeImport([...neededImports]);
|
|
2871
2904
|
s.prepend(importStatement + `
|
|
2905
|
+
`);
|
|
2906
|
+
}
|
|
2907
|
+
if (svelteImports.size > 0) {
|
|
2908
|
+
const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
|
|
2909
|
+
s.prepend(svelteImportStatement + `
|
|
2872
2910
|
`);
|
|
2873
2911
|
}
|
|
2874
2912
|
if (propsTypeDeclaration) {
|
|
2875
2913
|
const afterImports = findPropsInjectionPosition(source);
|
|
2876
|
-
|
|
2914
|
+
let offset = 0;
|
|
2915
|
+
if (neededImports.size > 0) {
|
|
2916
|
+
offset += generateRuntimeImport([...neededImports]).length + 1;
|
|
2917
|
+
}
|
|
2918
|
+
if (svelteImports.size > 0) {
|
|
2919
|
+
offset += `import { ${[...svelteImports].join(", ")} } from 'svelte'`.length + 1;
|
|
2920
|
+
}
|
|
2877
2921
|
s.appendLeft(afterImports + offset, propsTypeDeclaration + `
|
|
2878
2922
|
`);
|
|
2879
2923
|
}
|
package/dist/index.js
CHANGED
|
@@ -5969,7 +5969,7 @@ function parseObjectMembers(source2) {
|
|
|
5969
5969
|
}
|
|
5970
5970
|
|
|
5971
5971
|
// src/transform/origin-transform.ts
|
|
5972
|
-
function transformOriginCalls(s, source2, neededImports) {
|
|
5972
|
+
function transformOriginCalls(s, source2, neededImports, svelteImports) {
|
|
5973
5973
|
const regex = /\$origin\s*\(/g;
|
|
5974
5974
|
let match;
|
|
5975
5975
|
let changed = false;
|
|
@@ -5985,14 +5985,14 @@ function transformOriginCalls(s, source2, neededImports) {
|
|
|
5985
5985
|
continue;
|
|
5986
5986
|
}
|
|
5987
5987
|
const definitionContent = source2.slice(openParenIndex + 1, closeParenIndex);
|
|
5988
|
-
const transformed = transformOriginDefinition(definitionContent);
|
|
5988
|
+
const transformed = transformOriginDefinition(definitionContent, svelteImports);
|
|
5989
5989
|
s.overwrite(startIndex, closeParenIndex + 1, `__createOrigin(${transformed})`);
|
|
5990
5990
|
neededImports.add("__createOrigin");
|
|
5991
5991
|
changed = true;
|
|
5992
5992
|
}
|
|
5993
5993
|
return changed;
|
|
5994
5994
|
}
|
|
5995
|
-
function transformOriginDefinition(content) {
|
|
5995
|
+
function transformOriginDefinition(content, svelteImports) {
|
|
5996
5996
|
let parents = [];
|
|
5997
5997
|
let bodyContent = content.trim();
|
|
5998
5998
|
let initCallback = null;
|
|
@@ -6057,7 +6057,7 @@ function transformOriginDefinition(content) {
|
|
|
6057
6057
|
}
|
|
6058
6058
|
}
|
|
6059
6059
|
const attrDetails = parseAttrsSource(attrsContent);
|
|
6060
|
-
const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName);
|
|
6060
|
+
const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName, svelteImports);
|
|
6061
6061
|
const parentsCode = parents.length > 0 ? `[${parents.join(", ")}]` : "undefined";
|
|
6062
6062
|
let configCode = `{
|
|
6063
6063
|
__attrSchema: ${attrSchemaCode},
|
|
@@ -6077,19 +6077,35 @@ ${createFnBody}
|
|
|
6077
6077
|
}`;
|
|
6078
6078
|
return configCode;
|
|
6079
6079
|
}
|
|
6080
|
-
function transformOriginBody(content, parents = [], attrDetails = [], propName = "props") {
|
|
6080
|
+
function transformOriginBody(content, parents = [], attrDetails = [], propName = "props", svelteImports) {
|
|
6081
6081
|
let body = content.trim();
|
|
6082
6082
|
const hasParents = parents.length > 0;
|
|
6083
|
+
const attrStateDeclarations = [];
|
|
6084
|
+
const attrSyncEffects = [];
|
|
6083
6085
|
const attrGettersSetters = [];
|
|
6084
|
-
|
|
6085
|
-
|
|
6086
|
-
attrGettersSetters.push(`get ${attr2.key}() { return __inputAttrs.${attr2.key} ?? ${attr2.defaultValue} }`);
|
|
6087
|
-
} else {
|
|
6088
|
-
attrGettersSetters.push(`get ${attr2.key}() { return __inputAttrs.${attr2.key} }`);
|
|
6089
|
-
}
|
|
6090
|
-
attrGettersSetters.push(`set ${attr2.key}(v) { __inputAttrs.${attr2.key} = v }`);
|
|
6086
|
+
if (attrDetails.length > 0 && svelteImports) {
|
|
6087
|
+
svelteImports.add("untrack");
|
|
6091
6088
|
}
|
|
6092
|
-
const
|
|
6089
|
+
for (const attr2 of attrDetails) {
|
|
6090
|
+
const defaultExpr = attr2.hasDefault ? ` ?? ${attr2.defaultValue}` : "";
|
|
6091
|
+
attrStateDeclarations.push(`let __attr_${attr2.key} = $state(__inputAttrs.${attr2.key}${defaultExpr})`);
|
|
6092
|
+
attrSyncEffects.push(`$effect(() => {
|
|
6093
|
+
const __parentVal = __inputAttrs.${attr2.key}
|
|
6094
|
+
const __currentVal = untrack(() => __attr_${attr2.key})
|
|
6095
|
+
if (__parentVal !== __currentVal) {
|
|
6096
|
+
__attr_${attr2.key} = __parentVal${defaultExpr}
|
|
6097
|
+
}
|
|
6098
|
+
})`);
|
|
6099
|
+
attrGettersSetters.push(`get ${attr2.key}() { return __attr_${attr2.key} }`);
|
|
6100
|
+
attrGettersSetters.push(`set ${attr2.key}(v) { __attr_${attr2.key} = v; __inputAttrs.${attr2.key} = v }`);
|
|
6101
|
+
}
|
|
6102
|
+
const attrStateSection = attrStateDeclarations.length > 0 ? attrStateDeclarations.join(`
|
|
6103
|
+
`) + `
|
|
6104
|
+
` : "";
|
|
6105
|
+
const attrEffectSection = attrSyncEffects.length > 0 ? attrSyncEffects.join(`
|
|
6106
|
+
`) + `
|
|
6107
|
+
` : "";
|
|
6108
|
+
const propsObjectCode = attrGettersSetters.length > 0 ? `${attrStateSection}${attrEffectSection}const __props = {
|
|
6093
6109
|
${attrGettersSetters.join(`,
|
|
6094
6110
|
`)}
|
|
6095
6111
|
}` : ` const __props = __inputAttrs`;
|
|
@@ -6509,9 +6525,10 @@ function transformScript(source2, options = {}) {
|
|
|
6509
6525
|
const { isComponent = false } = options;
|
|
6510
6526
|
let changed = false;
|
|
6511
6527
|
const neededImports = new Set;
|
|
6528
|
+
const svelteImports = new Set;
|
|
6512
6529
|
let propsTypeDeclaration = null;
|
|
6513
6530
|
if (!isComponent) {
|
|
6514
|
-
changed = transformOriginCalls(s, source2, neededImports) || changed;
|
|
6531
|
+
changed = transformOriginCalls(s, source2, neededImports, svelteImports) || changed;
|
|
6515
6532
|
changed = transformStandaloneAttrsCalls(s, source2, neededImports) || changed;
|
|
6516
6533
|
}
|
|
6517
6534
|
if (isComponent) {
|
|
@@ -6550,10 +6567,17 @@ function transformScript(source2, options = {}) {
|
|
|
6550
6567
|
`);
|
|
6551
6568
|
}
|
|
6552
6569
|
}
|
|
6553
|
-
} else if (neededImports.size > 0) {
|
|
6554
|
-
|
|
6555
|
-
|
|
6570
|
+
} else if (neededImports.size > 0 || svelteImports.size > 0) {
|
|
6571
|
+
if (neededImports.size > 0) {
|
|
6572
|
+
const importStatement = generateRuntimeImport([...neededImports]);
|
|
6573
|
+
s.prepend(importStatement + `
|
|
6574
|
+
`);
|
|
6575
|
+
}
|
|
6576
|
+
if (svelteImports.size > 0) {
|
|
6577
|
+
const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
|
|
6578
|
+
s.prepend(svelteImportStatement + `
|
|
6556
6579
|
`);
|
|
6580
|
+
}
|
|
6557
6581
|
}
|
|
6558
6582
|
if (!changed) {
|
|
6559
6583
|
return { code: source2, changed: false };
|
|
@@ -6572,9 +6596,10 @@ async function transformScriptAsync(source2, options) {
|
|
|
6572
6596
|
const { isComponent = false, schemaResolver } = options;
|
|
6573
6597
|
let changed = false;
|
|
6574
6598
|
const neededImports = new Set;
|
|
6599
|
+
const svelteImports = new Set;
|
|
6575
6600
|
let propsTypeDeclaration = null;
|
|
6576
6601
|
if (!isComponent) {
|
|
6577
|
-
changed = transformOriginCalls(s, source2, neededImports) || changed;
|
|
6602
|
+
changed = transformOriginCalls(s, source2, neededImports, svelteImports) || changed;
|
|
6578
6603
|
changed = transformStandaloneAttrsCalls(s, source2, neededImports) || changed;
|
|
6579
6604
|
}
|
|
6580
6605
|
if (isComponent) {
|
|
@@ -6613,10 +6638,17 @@ async function transformScriptAsync(source2, options) {
|
|
|
6613
6638
|
`);
|
|
6614
6639
|
}
|
|
6615
6640
|
}
|
|
6616
|
-
} else if (neededImports.size > 0) {
|
|
6617
|
-
|
|
6618
|
-
|
|
6641
|
+
} else if (neededImports.size > 0 || svelteImports.size > 0) {
|
|
6642
|
+
if (neededImports.size > 0) {
|
|
6643
|
+
const importStatement = generateRuntimeImport([...neededImports]);
|
|
6644
|
+
s.prepend(importStatement + `
|
|
6619
6645
|
`);
|
|
6646
|
+
}
|
|
6647
|
+
if (svelteImports.size > 0) {
|
|
6648
|
+
const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
|
|
6649
|
+
s.prepend(svelteImportStatement + `
|
|
6650
|
+
`);
|
|
6651
|
+
}
|
|
6620
6652
|
}
|
|
6621
6653
|
if (!changed) {
|
|
6622
6654
|
return { code: source2, changed: false };
|
|
@@ -6635,9 +6667,10 @@ async function transformScriptContent(source2, options) {
|
|
|
6635
6667
|
const { isComponent = false, schemaResolver } = options;
|
|
6636
6668
|
let changed = false;
|
|
6637
6669
|
const neededImports = new Set;
|
|
6670
|
+
const svelteImports = new Set;
|
|
6638
6671
|
let propsTypeDeclaration = null;
|
|
6639
6672
|
if (!isComponent) {
|
|
6640
|
-
changed = transformOriginCalls(s, source2, neededImports) || changed;
|
|
6673
|
+
changed = transformOriginCalls(s, source2, neededImports, svelteImports) || changed;
|
|
6641
6674
|
}
|
|
6642
6675
|
if (isComponent) {
|
|
6643
6676
|
const result = await transformAttrsOriginCalls(s, source2, neededImports, schemaResolver);
|
|
@@ -6650,11 +6683,22 @@ async function transformScriptContent(source2, options) {
|
|
|
6650
6683
|
if (neededImports.size > 0) {
|
|
6651
6684
|
const importStatement = generateRuntimeImport([...neededImports]);
|
|
6652
6685
|
s.prepend(importStatement + `
|
|
6686
|
+
`);
|
|
6687
|
+
}
|
|
6688
|
+
if (svelteImports.size > 0) {
|
|
6689
|
+
const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
|
|
6690
|
+
s.prepend(svelteImportStatement + `
|
|
6653
6691
|
`);
|
|
6654
6692
|
}
|
|
6655
6693
|
if (propsTypeDeclaration) {
|
|
6656
6694
|
const afterImports = findPropsInjectionPosition(source2);
|
|
6657
|
-
|
|
6695
|
+
let offset = 0;
|
|
6696
|
+
if (neededImports.size > 0) {
|
|
6697
|
+
offset += generateRuntimeImport([...neededImports]).length + 1;
|
|
6698
|
+
}
|
|
6699
|
+
if (svelteImports.size > 0) {
|
|
6700
|
+
offset += `import { ${[...svelteImports].join(", ")} } from 'svelte'`.length + 1;
|
|
6701
|
+
}
|
|
6658
6702
|
s.appendLeft(afterImports + offset, propsTypeDeclaration + `
|
|
6659
6703
|
`);
|
|
6660
6704
|
}
|
package/dist/plugin.js
CHANGED
|
@@ -1913,7 +1913,7 @@ function parseObjectMembers(source) {
|
|
|
1913
1913
|
}
|
|
1914
1914
|
|
|
1915
1915
|
// src/transform/origin-transform.ts
|
|
1916
|
-
function transformOriginCalls(s, source, neededImports) {
|
|
1916
|
+
function transformOriginCalls(s, source, neededImports, svelteImports) {
|
|
1917
1917
|
const regex = /\$origin\s*\(/g;
|
|
1918
1918
|
let match;
|
|
1919
1919
|
let changed = false;
|
|
@@ -1929,14 +1929,14 @@ function transformOriginCalls(s, source, neededImports) {
|
|
|
1929
1929
|
continue;
|
|
1930
1930
|
}
|
|
1931
1931
|
const definitionContent = source.slice(openParenIndex + 1, closeParenIndex);
|
|
1932
|
-
const transformed = transformOriginDefinition(definitionContent);
|
|
1932
|
+
const transformed = transformOriginDefinition(definitionContent, svelteImports);
|
|
1933
1933
|
s.overwrite(startIndex, closeParenIndex + 1, `__createOrigin(${transformed})`);
|
|
1934
1934
|
neededImports.add("__createOrigin");
|
|
1935
1935
|
changed = true;
|
|
1936
1936
|
}
|
|
1937
1937
|
return changed;
|
|
1938
1938
|
}
|
|
1939
|
-
function transformOriginDefinition(content) {
|
|
1939
|
+
function transformOriginDefinition(content, svelteImports) {
|
|
1940
1940
|
let parents = [];
|
|
1941
1941
|
let bodyContent = content.trim();
|
|
1942
1942
|
let initCallback = null;
|
|
@@ -2001,7 +2001,7 @@ function transformOriginDefinition(content) {
|
|
|
2001
2001
|
}
|
|
2002
2002
|
}
|
|
2003
2003
|
const attrDetails = parseAttrsSource(attrsContent);
|
|
2004
|
-
const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName);
|
|
2004
|
+
const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName, svelteImports);
|
|
2005
2005
|
const parentsCode = parents.length > 0 ? `[${parents.join(", ")}]` : "undefined";
|
|
2006
2006
|
let configCode = `{
|
|
2007
2007
|
__attrSchema: ${attrSchemaCode},
|
|
@@ -2021,19 +2021,35 @@ ${createFnBody}
|
|
|
2021
2021
|
}`;
|
|
2022
2022
|
return configCode;
|
|
2023
2023
|
}
|
|
2024
|
-
function transformOriginBody(content, parents = [], attrDetails = [], propName = "props") {
|
|
2024
|
+
function transformOriginBody(content, parents = [], attrDetails = [], propName = "props", svelteImports) {
|
|
2025
2025
|
let body = content.trim();
|
|
2026
2026
|
const hasParents = parents.length > 0;
|
|
2027
|
+
const attrStateDeclarations = [];
|
|
2028
|
+
const attrSyncEffects = [];
|
|
2027
2029
|
const attrGettersSetters = [];
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
attrGettersSetters.push(`get ${attr.key}() { return __inputAttrs.${attr.key} ?? ${attr.defaultValue} }`);
|
|
2031
|
-
} else {
|
|
2032
|
-
attrGettersSetters.push(`get ${attr.key}() { return __inputAttrs.${attr.key} }`);
|
|
2033
|
-
}
|
|
2034
|
-
attrGettersSetters.push(`set ${attr.key}(v) { __inputAttrs.${attr.key} = v }`);
|
|
2030
|
+
if (attrDetails.length > 0 && svelteImports) {
|
|
2031
|
+
svelteImports.add("untrack");
|
|
2035
2032
|
}
|
|
2036
|
-
const
|
|
2033
|
+
for (const attr of attrDetails) {
|
|
2034
|
+
const defaultExpr = attr.hasDefault ? ` ?? ${attr.defaultValue}` : "";
|
|
2035
|
+
attrStateDeclarations.push(`let __attr_${attr.key} = $state(__inputAttrs.${attr.key}${defaultExpr})`);
|
|
2036
|
+
attrSyncEffects.push(`$effect(() => {
|
|
2037
|
+
const __parentVal = __inputAttrs.${attr.key}
|
|
2038
|
+
const __currentVal = untrack(() => __attr_${attr.key})
|
|
2039
|
+
if (__parentVal !== __currentVal) {
|
|
2040
|
+
__attr_${attr.key} = __parentVal${defaultExpr}
|
|
2041
|
+
}
|
|
2042
|
+
})`);
|
|
2043
|
+
attrGettersSetters.push(`get ${attr.key}() { return __attr_${attr.key} }`);
|
|
2044
|
+
attrGettersSetters.push(`set ${attr.key}(v) { __attr_${attr.key} = v; __inputAttrs.${attr.key} = v }`);
|
|
2045
|
+
}
|
|
2046
|
+
const attrStateSection = attrStateDeclarations.length > 0 ? attrStateDeclarations.join(`
|
|
2047
|
+
`) + `
|
|
2048
|
+
` : "";
|
|
2049
|
+
const attrEffectSection = attrSyncEffects.length > 0 ? attrSyncEffects.join(`
|
|
2050
|
+
`) + `
|
|
2051
|
+
` : "";
|
|
2052
|
+
const propsObjectCode = attrGettersSetters.length > 0 ? `${attrStateSection}${attrEffectSection}const __props = {
|
|
2037
2053
|
${attrGettersSetters.join(`,
|
|
2038
2054
|
`)}
|
|
2039
2055
|
}` : ` const __props = __inputAttrs`;
|
|
@@ -2722,9 +2738,10 @@ function transformScript(source, options = {}) {
|
|
|
2722
2738
|
const { isComponent = false } = options;
|
|
2723
2739
|
let changed = false;
|
|
2724
2740
|
const neededImports = new Set;
|
|
2741
|
+
const svelteImports = new Set;
|
|
2725
2742
|
let propsTypeDeclaration = null;
|
|
2726
2743
|
if (!isComponent) {
|
|
2727
|
-
changed = transformOriginCalls(s, source, neededImports) || changed;
|
|
2744
|
+
changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
|
|
2728
2745
|
changed = transformStandaloneAttrsCalls(s, source, neededImports) || changed;
|
|
2729
2746
|
}
|
|
2730
2747
|
if (isComponent) {
|
|
@@ -2763,10 +2780,17 @@ function transformScript(source, options = {}) {
|
|
|
2763
2780
|
`);
|
|
2764
2781
|
}
|
|
2765
2782
|
}
|
|
2766
|
-
} else if (neededImports.size > 0) {
|
|
2767
|
-
|
|
2768
|
-
|
|
2783
|
+
} else if (neededImports.size > 0 || svelteImports.size > 0) {
|
|
2784
|
+
if (neededImports.size > 0) {
|
|
2785
|
+
const importStatement = generateRuntimeImport([...neededImports]);
|
|
2786
|
+
s.prepend(importStatement + `
|
|
2787
|
+
`);
|
|
2788
|
+
}
|
|
2789
|
+
if (svelteImports.size > 0) {
|
|
2790
|
+
const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
|
|
2791
|
+
s.prepend(svelteImportStatement + `
|
|
2769
2792
|
`);
|
|
2793
|
+
}
|
|
2770
2794
|
}
|
|
2771
2795
|
if (!changed) {
|
|
2772
2796
|
return { code: source, changed: false };
|
|
@@ -2785,9 +2809,10 @@ async function transformScriptAsync(source, options) {
|
|
|
2785
2809
|
const { isComponent = false, schemaResolver } = options;
|
|
2786
2810
|
let changed = false;
|
|
2787
2811
|
const neededImports = new Set;
|
|
2812
|
+
const svelteImports = new Set;
|
|
2788
2813
|
let propsTypeDeclaration = null;
|
|
2789
2814
|
if (!isComponent) {
|
|
2790
|
-
changed = transformOriginCalls(s, source, neededImports) || changed;
|
|
2815
|
+
changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
|
|
2791
2816
|
changed = transformStandaloneAttrsCalls(s, source, neededImports) || changed;
|
|
2792
2817
|
}
|
|
2793
2818
|
if (isComponent) {
|
|
@@ -2826,10 +2851,17 @@ async function transformScriptAsync(source, options) {
|
|
|
2826
2851
|
`);
|
|
2827
2852
|
}
|
|
2828
2853
|
}
|
|
2829
|
-
} else if (neededImports.size > 0) {
|
|
2830
|
-
|
|
2831
|
-
|
|
2854
|
+
} else if (neededImports.size > 0 || svelteImports.size > 0) {
|
|
2855
|
+
if (neededImports.size > 0) {
|
|
2856
|
+
const importStatement = generateRuntimeImport([...neededImports]);
|
|
2857
|
+
s.prepend(importStatement + `
|
|
2832
2858
|
`);
|
|
2859
|
+
}
|
|
2860
|
+
if (svelteImports.size > 0) {
|
|
2861
|
+
const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
|
|
2862
|
+
s.prepend(svelteImportStatement + `
|
|
2863
|
+
`);
|
|
2864
|
+
}
|
|
2833
2865
|
}
|
|
2834
2866
|
if (!changed) {
|
|
2835
2867
|
return { code: source, changed: false };
|
|
@@ -2848,9 +2880,10 @@ async function transformScriptContent(source, options) {
|
|
|
2848
2880
|
const { isComponent = false, schemaResolver } = options;
|
|
2849
2881
|
let changed = false;
|
|
2850
2882
|
const neededImports = new Set;
|
|
2883
|
+
const svelteImports = new Set;
|
|
2851
2884
|
let propsTypeDeclaration = null;
|
|
2852
2885
|
if (!isComponent) {
|
|
2853
|
-
changed = transformOriginCalls(s, source, neededImports) || changed;
|
|
2886
|
+
changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
|
|
2854
2887
|
}
|
|
2855
2888
|
if (isComponent) {
|
|
2856
2889
|
const result = await transformAttrsOriginCalls(s, source, neededImports, schemaResolver);
|
|
@@ -2863,11 +2896,22 @@ async function transformScriptContent(source, options) {
|
|
|
2863
2896
|
if (neededImports.size > 0) {
|
|
2864
2897
|
const importStatement = generateRuntimeImport([...neededImports]);
|
|
2865
2898
|
s.prepend(importStatement + `
|
|
2899
|
+
`);
|
|
2900
|
+
}
|
|
2901
|
+
if (svelteImports.size > 0) {
|
|
2902
|
+
const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
|
|
2903
|
+
s.prepend(svelteImportStatement + `
|
|
2866
2904
|
`);
|
|
2867
2905
|
}
|
|
2868
2906
|
if (propsTypeDeclaration) {
|
|
2869
2907
|
const afterImports = findPropsInjectionPosition(source);
|
|
2870
|
-
|
|
2908
|
+
let offset = 0;
|
|
2909
|
+
if (neededImports.size > 0) {
|
|
2910
|
+
offset += generateRuntimeImport([...neededImports]).length + 1;
|
|
2911
|
+
}
|
|
2912
|
+
if (svelteImports.size > 0) {
|
|
2913
|
+
offset += `import { ${[...svelteImports].join(", ")} } from 'svelte'`.length + 1;
|
|
2914
|
+
}
|
|
2871
2915
|
s.appendLeft(afterImports + offset, propsTypeDeclaration + `
|
|
2872
2916
|
`);
|
|
2873
2917
|
}
|
package/dist/post-process.js
CHANGED
|
@@ -1917,7 +1917,7 @@ function parseObjectMembers(source) {
|
|
|
1917
1917
|
}
|
|
1918
1918
|
|
|
1919
1919
|
// src/transform/origin-transform.ts
|
|
1920
|
-
function transformOriginCalls(s, source, neededImports) {
|
|
1920
|
+
function transformOriginCalls(s, source, neededImports, svelteImports) {
|
|
1921
1921
|
const regex = /\$origin\s*\(/g;
|
|
1922
1922
|
let match;
|
|
1923
1923
|
let changed = false;
|
|
@@ -1933,14 +1933,14 @@ function transformOriginCalls(s, source, neededImports) {
|
|
|
1933
1933
|
continue;
|
|
1934
1934
|
}
|
|
1935
1935
|
const definitionContent = source.slice(openParenIndex + 1, closeParenIndex);
|
|
1936
|
-
const transformed = transformOriginDefinition(definitionContent);
|
|
1936
|
+
const transformed = transformOriginDefinition(definitionContent, svelteImports);
|
|
1937
1937
|
s.overwrite(startIndex, closeParenIndex + 1, `__createOrigin(${transformed})`);
|
|
1938
1938
|
neededImports.add("__createOrigin");
|
|
1939
1939
|
changed = true;
|
|
1940
1940
|
}
|
|
1941
1941
|
return changed;
|
|
1942
1942
|
}
|
|
1943
|
-
function transformOriginDefinition(content) {
|
|
1943
|
+
function transformOriginDefinition(content, svelteImports) {
|
|
1944
1944
|
let parents = [];
|
|
1945
1945
|
let bodyContent = content.trim();
|
|
1946
1946
|
let initCallback = null;
|
|
@@ -2005,7 +2005,7 @@ function transformOriginDefinition(content) {
|
|
|
2005
2005
|
}
|
|
2006
2006
|
}
|
|
2007
2007
|
const attrDetails = parseAttrsSource(attrsContent);
|
|
2008
|
-
const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName);
|
|
2008
|
+
const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName, svelteImports);
|
|
2009
2009
|
const parentsCode = parents.length > 0 ? `[${parents.join(", ")}]` : "undefined";
|
|
2010
2010
|
let configCode = `{
|
|
2011
2011
|
__attrSchema: ${attrSchemaCode},
|
|
@@ -2025,19 +2025,35 @@ ${createFnBody}
|
|
|
2025
2025
|
}`;
|
|
2026
2026
|
return configCode;
|
|
2027
2027
|
}
|
|
2028
|
-
function transformOriginBody(content, parents = [], attrDetails = [], propName = "props") {
|
|
2028
|
+
function transformOriginBody(content, parents = [], attrDetails = [], propName = "props", svelteImports) {
|
|
2029
2029
|
let body = content.trim();
|
|
2030
2030
|
const hasParents = parents.length > 0;
|
|
2031
|
+
const attrStateDeclarations = [];
|
|
2032
|
+
const attrSyncEffects = [];
|
|
2031
2033
|
const attrGettersSetters = [];
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
attrGettersSetters.push(`get ${attr.key}() { return __inputAttrs.${attr.key} ?? ${attr.defaultValue} }`);
|
|
2035
|
-
} else {
|
|
2036
|
-
attrGettersSetters.push(`get ${attr.key}() { return __inputAttrs.${attr.key} }`);
|
|
2037
|
-
}
|
|
2038
|
-
attrGettersSetters.push(`set ${attr.key}(v) { __inputAttrs.${attr.key} = v }`);
|
|
2034
|
+
if (attrDetails.length > 0 && svelteImports) {
|
|
2035
|
+
svelteImports.add("untrack");
|
|
2039
2036
|
}
|
|
2040
|
-
const
|
|
2037
|
+
for (const attr of attrDetails) {
|
|
2038
|
+
const defaultExpr = attr.hasDefault ? ` ?? ${attr.defaultValue}` : "";
|
|
2039
|
+
attrStateDeclarations.push(`let __attr_${attr.key} = $state(__inputAttrs.${attr.key}${defaultExpr})`);
|
|
2040
|
+
attrSyncEffects.push(`$effect(() => {
|
|
2041
|
+
const __parentVal = __inputAttrs.${attr.key}
|
|
2042
|
+
const __currentVal = untrack(() => __attr_${attr.key})
|
|
2043
|
+
if (__parentVal !== __currentVal) {
|
|
2044
|
+
__attr_${attr.key} = __parentVal${defaultExpr}
|
|
2045
|
+
}
|
|
2046
|
+
})`);
|
|
2047
|
+
attrGettersSetters.push(`get ${attr.key}() { return __attr_${attr.key} }`);
|
|
2048
|
+
attrGettersSetters.push(`set ${attr.key}(v) { __attr_${attr.key} = v; __inputAttrs.${attr.key} = v }`);
|
|
2049
|
+
}
|
|
2050
|
+
const attrStateSection = attrStateDeclarations.length > 0 ? attrStateDeclarations.join(`
|
|
2051
|
+
`) + `
|
|
2052
|
+
` : "";
|
|
2053
|
+
const attrEffectSection = attrSyncEffects.length > 0 ? attrSyncEffects.join(`
|
|
2054
|
+
`) + `
|
|
2055
|
+
` : "";
|
|
2056
|
+
const propsObjectCode = attrGettersSetters.length > 0 ? `${attrStateSection}${attrEffectSection}const __props = {
|
|
2041
2057
|
${attrGettersSetters.join(`,
|
|
2042
2058
|
`)}
|
|
2043
2059
|
}` : ` const __props = __inputAttrs`;
|
|
@@ -2726,9 +2742,10 @@ function transformScript(source, options = {}) {
|
|
|
2726
2742
|
const { isComponent = false } = options;
|
|
2727
2743
|
let changed = false;
|
|
2728
2744
|
const neededImports = new Set;
|
|
2745
|
+
const svelteImports = new Set;
|
|
2729
2746
|
let propsTypeDeclaration = null;
|
|
2730
2747
|
if (!isComponent) {
|
|
2731
|
-
changed = transformOriginCalls(s, source, neededImports) || changed;
|
|
2748
|
+
changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
|
|
2732
2749
|
changed = transformStandaloneAttrsCalls(s, source, neededImports) || changed;
|
|
2733
2750
|
}
|
|
2734
2751
|
if (isComponent) {
|
|
@@ -2767,10 +2784,17 @@ function transformScript(source, options = {}) {
|
|
|
2767
2784
|
`);
|
|
2768
2785
|
}
|
|
2769
2786
|
}
|
|
2770
|
-
} else if (neededImports.size > 0) {
|
|
2771
|
-
|
|
2772
|
-
|
|
2787
|
+
} else if (neededImports.size > 0 || svelteImports.size > 0) {
|
|
2788
|
+
if (neededImports.size > 0) {
|
|
2789
|
+
const importStatement = generateRuntimeImport([...neededImports]);
|
|
2790
|
+
s.prepend(importStatement + `
|
|
2791
|
+
`);
|
|
2792
|
+
}
|
|
2793
|
+
if (svelteImports.size > 0) {
|
|
2794
|
+
const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
|
|
2795
|
+
s.prepend(svelteImportStatement + `
|
|
2773
2796
|
`);
|
|
2797
|
+
}
|
|
2774
2798
|
}
|
|
2775
2799
|
if (!changed) {
|
|
2776
2800
|
return { code: source, changed: false };
|
|
@@ -2789,9 +2813,10 @@ async function transformScriptAsync(source, options) {
|
|
|
2789
2813
|
const { isComponent = false, schemaResolver } = options;
|
|
2790
2814
|
let changed = false;
|
|
2791
2815
|
const neededImports = new Set;
|
|
2816
|
+
const svelteImports = new Set;
|
|
2792
2817
|
let propsTypeDeclaration = null;
|
|
2793
2818
|
if (!isComponent) {
|
|
2794
|
-
changed = transformOriginCalls(s, source, neededImports) || changed;
|
|
2819
|
+
changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
|
|
2795
2820
|
changed = transformStandaloneAttrsCalls(s, source, neededImports) || changed;
|
|
2796
2821
|
}
|
|
2797
2822
|
if (isComponent) {
|
|
@@ -2830,10 +2855,17 @@ async function transformScriptAsync(source, options) {
|
|
|
2830
2855
|
`);
|
|
2831
2856
|
}
|
|
2832
2857
|
}
|
|
2833
|
-
} else if (neededImports.size > 0) {
|
|
2834
|
-
|
|
2835
|
-
|
|
2858
|
+
} else if (neededImports.size > 0 || svelteImports.size > 0) {
|
|
2859
|
+
if (neededImports.size > 0) {
|
|
2860
|
+
const importStatement = generateRuntimeImport([...neededImports]);
|
|
2861
|
+
s.prepend(importStatement + `
|
|
2836
2862
|
`);
|
|
2863
|
+
}
|
|
2864
|
+
if (svelteImports.size > 0) {
|
|
2865
|
+
const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
|
|
2866
|
+
s.prepend(svelteImportStatement + `
|
|
2867
|
+
`);
|
|
2868
|
+
}
|
|
2837
2869
|
}
|
|
2838
2870
|
if (!changed) {
|
|
2839
2871
|
return { code: source, changed: false };
|
|
@@ -2852,9 +2884,10 @@ async function transformScriptContent(source, options) {
|
|
|
2852
2884
|
const { isComponent = false, schemaResolver } = options;
|
|
2853
2885
|
let changed = false;
|
|
2854
2886
|
const neededImports = new Set;
|
|
2887
|
+
const svelteImports = new Set;
|
|
2855
2888
|
let propsTypeDeclaration = null;
|
|
2856
2889
|
if (!isComponent) {
|
|
2857
|
-
changed = transformOriginCalls(s, source, neededImports) || changed;
|
|
2890
|
+
changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
|
|
2858
2891
|
}
|
|
2859
2892
|
if (isComponent) {
|
|
2860
2893
|
const result = await transformAttrsOriginCalls(s, source, neededImports, schemaResolver);
|
|
@@ -2867,11 +2900,22 @@ async function transformScriptContent(source, options) {
|
|
|
2867
2900
|
if (neededImports.size > 0) {
|
|
2868
2901
|
const importStatement = generateRuntimeImport([...neededImports]);
|
|
2869
2902
|
s.prepend(importStatement + `
|
|
2903
|
+
`);
|
|
2904
|
+
}
|
|
2905
|
+
if (svelteImports.size > 0) {
|
|
2906
|
+
const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
|
|
2907
|
+
s.prepend(svelteImportStatement + `
|
|
2870
2908
|
`);
|
|
2871
2909
|
}
|
|
2872
2910
|
if (propsTypeDeclaration) {
|
|
2873
2911
|
const afterImports = findPropsInjectionPosition(source);
|
|
2874
|
-
|
|
2912
|
+
let offset = 0;
|
|
2913
|
+
if (neededImports.size > 0) {
|
|
2914
|
+
offset += generateRuntimeImport([...neededImports]).length + 1;
|
|
2915
|
+
}
|
|
2916
|
+
if (svelteImports.size > 0) {
|
|
2917
|
+
offset += `import { ${[...svelteImports].join(", ")} } from 'svelte'`.length + 1;
|
|
2918
|
+
}
|
|
2875
2919
|
s.appendLeft(afterImports + offset, propsTypeDeclaration + `
|
|
2876
2920
|
`);
|
|
2877
2921
|
}
|
package/dist/preprocess.js
CHANGED
|
@@ -1913,7 +1913,7 @@ function parseObjectMembers(source) {
|
|
|
1913
1913
|
}
|
|
1914
1914
|
|
|
1915
1915
|
// src/transform/origin-transform.ts
|
|
1916
|
-
function transformOriginCalls(s, source, neededImports) {
|
|
1916
|
+
function transformOriginCalls(s, source, neededImports, svelteImports) {
|
|
1917
1917
|
const regex = /\$origin\s*\(/g;
|
|
1918
1918
|
let match;
|
|
1919
1919
|
let changed = false;
|
|
@@ -1929,14 +1929,14 @@ function transformOriginCalls(s, source, neededImports) {
|
|
|
1929
1929
|
continue;
|
|
1930
1930
|
}
|
|
1931
1931
|
const definitionContent = source.slice(openParenIndex + 1, closeParenIndex);
|
|
1932
|
-
const transformed = transformOriginDefinition(definitionContent);
|
|
1932
|
+
const transformed = transformOriginDefinition(definitionContent, svelteImports);
|
|
1933
1933
|
s.overwrite(startIndex, closeParenIndex + 1, `__createOrigin(${transformed})`);
|
|
1934
1934
|
neededImports.add("__createOrigin");
|
|
1935
1935
|
changed = true;
|
|
1936
1936
|
}
|
|
1937
1937
|
return changed;
|
|
1938
1938
|
}
|
|
1939
|
-
function transformOriginDefinition(content) {
|
|
1939
|
+
function transformOriginDefinition(content, svelteImports) {
|
|
1940
1940
|
let parents = [];
|
|
1941
1941
|
let bodyContent = content.trim();
|
|
1942
1942
|
let initCallback = null;
|
|
@@ -2001,7 +2001,7 @@ function transformOriginDefinition(content) {
|
|
|
2001
2001
|
}
|
|
2002
2002
|
}
|
|
2003
2003
|
const attrDetails = parseAttrsSource(attrsContent);
|
|
2004
|
-
const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName);
|
|
2004
|
+
const { body: createFnBody, attachments } = transformOriginBody(contentWithoutAttrs.trim(), parents, attrDetails, attrPropertyName, svelteImports);
|
|
2005
2005
|
const parentsCode = parents.length > 0 ? `[${parents.join(", ")}]` : "undefined";
|
|
2006
2006
|
let configCode = `{
|
|
2007
2007
|
__attrSchema: ${attrSchemaCode},
|
|
@@ -2021,19 +2021,35 @@ ${createFnBody}
|
|
|
2021
2021
|
}`;
|
|
2022
2022
|
return configCode;
|
|
2023
2023
|
}
|
|
2024
|
-
function transformOriginBody(content, parents = [], attrDetails = [], propName = "props") {
|
|
2024
|
+
function transformOriginBody(content, parents = [], attrDetails = [], propName = "props", svelteImports) {
|
|
2025
2025
|
let body = content.trim();
|
|
2026
2026
|
const hasParents = parents.length > 0;
|
|
2027
|
+
const attrStateDeclarations = [];
|
|
2028
|
+
const attrSyncEffects = [];
|
|
2027
2029
|
const attrGettersSetters = [];
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
attrGettersSetters.push(`get ${attr.key}() { return __inputAttrs.${attr.key} ?? ${attr.defaultValue} }`);
|
|
2031
|
-
} else {
|
|
2032
|
-
attrGettersSetters.push(`get ${attr.key}() { return __inputAttrs.${attr.key} }`);
|
|
2033
|
-
}
|
|
2034
|
-
attrGettersSetters.push(`set ${attr.key}(v) { __inputAttrs.${attr.key} = v }`);
|
|
2030
|
+
if (attrDetails.length > 0 && svelteImports) {
|
|
2031
|
+
svelteImports.add("untrack");
|
|
2035
2032
|
}
|
|
2036
|
-
const
|
|
2033
|
+
for (const attr of attrDetails) {
|
|
2034
|
+
const defaultExpr = attr.hasDefault ? ` ?? ${attr.defaultValue}` : "";
|
|
2035
|
+
attrStateDeclarations.push(`let __attr_${attr.key} = $state(__inputAttrs.${attr.key}${defaultExpr})`);
|
|
2036
|
+
attrSyncEffects.push(`$effect(() => {
|
|
2037
|
+
const __parentVal = __inputAttrs.${attr.key}
|
|
2038
|
+
const __currentVal = untrack(() => __attr_${attr.key})
|
|
2039
|
+
if (__parentVal !== __currentVal) {
|
|
2040
|
+
__attr_${attr.key} = __parentVal${defaultExpr}
|
|
2041
|
+
}
|
|
2042
|
+
})`);
|
|
2043
|
+
attrGettersSetters.push(`get ${attr.key}() { return __attr_${attr.key} }`);
|
|
2044
|
+
attrGettersSetters.push(`set ${attr.key}(v) { __attr_${attr.key} = v; __inputAttrs.${attr.key} = v }`);
|
|
2045
|
+
}
|
|
2046
|
+
const attrStateSection = attrStateDeclarations.length > 0 ? attrStateDeclarations.join(`
|
|
2047
|
+
`) + `
|
|
2048
|
+
` : "";
|
|
2049
|
+
const attrEffectSection = attrSyncEffects.length > 0 ? attrSyncEffects.join(`
|
|
2050
|
+
`) + `
|
|
2051
|
+
` : "";
|
|
2052
|
+
const propsObjectCode = attrGettersSetters.length > 0 ? `${attrStateSection}${attrEffectSection}const __props = {
|
|
2037
2053
|
${attrGettersSetters.join(`,
|
|
2038
2054
|
`)}
|
|
2039
2055
|
}` : ` const __props = __inputAttrs`;
|
|
@@ -2722,9 +2738,10 @@ function transformScript(source, options = {}) {
|
|
|
2722
2738
|
const { isComponent = false } = options;
|
|
2723
2739
|
let changed = false;
|
|
2724
2740
|
const neededImports = new Set;
|
|
2741
|
+
const svelteImports = new Set;
|
|
2725
2742
|
let propsTypeDeclaration = null;
|
|
2726
2743
|
if (!isComponent) {
|
|
2727
|
-
changed = transformOriginCalls(s, source, neededImports) || changed;
|
|
2744
|
+
changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
|
|
2728
2745
|
changed = transformStandaloneAttrsCalls(s, source, neededImports) || changed;
|
|
2729
2746
|
}
|
|
2730
2747
|
if (isComponent) {
|
|
@@ -2763,10 +2780,17 @@ function transformScript(source, options = {}) {
|
|
|
2763
2780
|
`);
|
|
2764
2781
|
}
|
|
2765
2782
|
}
|
|
2766
|
-
} else if (neededImports.size > 0) {
|
|
2767
|
-
|
|
2768
|
-
|
|
2783
|
+
} else if (neededImports.size > 0 || svelteImports.size > 0) {
|
|
2784
|
+
if (neededImports.size > 0) {
|
|
2785
|
+
const importStatement = generateRuntimeImport([...neededImports]);
|
|
2786
|
+
s.prepend(importStatement + `
|
|
2787
|
+
`);
|
|
2788
|
+
}
|
|
2789
|
+
if (svelteImports.size > 0) {
|
|
2790
|
+
const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
|
|
2791
|
+
s.prepend(svelteImportStatement + `
|
|
2769
2792
|
`);
|
|
2793
|
+
}
|
|
2770
2794
|
}
|
|
2771
2795
|
if (!changed) {
|
|
2772
2796
|
return { code: source, changed: false };
|
|
@@ -2785,9 +2809,10 @@ async function transformScriptAsync(source, options) {
|
|
|
2785
2809
|
const { isComponent = false, schemaResolver } = options;
|
|
2786
2810
|
let changed = false;
|
|
2787
2811
|
const neededImports = new Set;
|
|
2812
|
+
const svelteImports = new Set;
|
|
2788
2813
|
let propsTypeDeclaration = null;
|
|
2789
2814
|
if (!isComponent) {
|
|
2790
|
-
changed = transformOriginCalls(s, source, neededImports) || changed;
|
|
2815
|
+
changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
|
|
2791
2816
|
changed = transformStandaloneAttrsCalls(s, source, neededImports) || changed;
|
|
2792
2817
|
}
|
|
2793
2818
|
if (isComponent) {
|
|
@@ -2826,10 +2851,17 @@ async function transformScriptAsync(source, options) {
|
|
|
2826
2851
|
`);
|
|
2827
2852
|
}
|
|
2828
2853
|
}
|
|
2829
|
-
} else if (neededImports.size > 0) {
|
|
2830
|
-
|
|
2831
|
-
|
|
2854
|
+
} else if (neededImports.size > 0 || svelteImports.size > 0) {
|
|
2855
|
+
if (neededImports.size > 0) {
|
|
2856
|
+
const importStatement = generateRuntimeImport([...neededImports]);
|
|
2857
|
+
s.prepend(importStatement + `
|
|
2832
2858
|
`);
|
|
2859
|
+
}
|
|
2860
|
+
if (svelteImports.size > 0) {
|
|
2861
|
+
const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
|
|
2862
|
+
s.prepend(svelteImportStatement + `
|
|
2863
|
+
`);
|
|
2864
|
+
}
|
|
2833
2865
|
}
|
|
2834
2866
|
if (!changed) {
|
|
2835
2867
|
return { code: source, changed: false };
|
|
@@ -2848,9 +2880,10 @@ async function transformScriptContent(source, options) {
|
|
|
2848
2880
|
const { isComponent = false, schemaResolver } = options;
|
|
2849
2881
|
let changed = false;
|
|
2850
2882
|
const neededImports = new Set;
|
|
2883
|
+
const svelteImports = new Set;
|
|
2851
2884
|
let propsTypeDeclaration = null;
|
|
2852
2885
|
if (!isComponent) {
|
|
2853
|
-
changed = transformOriginCalls(s, source, neededImports) || changed;
|
|
2886
|
+
changed = transformOriginCalls(s, source, neededImports, svelteImports) || changed;
|
|
2854
2887
|
}
|
|
2855
2888
|
if (isComponent) {
|
|
2856
2889
|
const result = await transformAttrsOriginCalls(s, source, neededImports, schemaResolver);
|
|
@@ -2863,11 +2896,22 @@ async function transformScriptContent(source, options) {
|
|
|
2863
2896
|
if (neededImports.size > 0) {
|
|
2864
2897
|
const importStatement = generateRuntimeImport([...neededImports]);
|
|
2865
2898
|
s.prepend(importStatement + `
|
|
2899
|
+
`);
|
|
2900
|
+
}
|
|
2901
|
+
if (svelteImports.size > 0) {
|
|
2902
|
+
const svelteImportStatement = `import { ${[...svelteImports].join(", ")} } from 'svelte'`;
|
|
2903
|
+
s.prepend(svelteImportStatement + `
|
|
2866
2904
|
`);
|
|
2867
2905
|
}
|
|
2868
2906
|
if (propsTypeDeclaration) {
|
|
2869
2907
|
const afterImports = findPropsInjectionPosition(source);
|
|
2870
|
-
|
|
2908
|
+
let offset = 0;
|
|
2909
|
+
if (neededImports.size > 0) {
|
|
2910
|
+
offset += generateRuntimeImport([...neededImports]).length + 1;
|
|
2911
|
+
}
|
|
2912
|
+
if (svelteImports.size > 0) {
|
|
2913
|
+
offset += `import { ${[...svelteImports].join(", ")} } from 'svelte'`.length + 1;
|
|
2914
|
+
}
|
|
2871
2915
|
s.appendLeft(afterImports + offset, propsTypeDeclaration + `
|
|
2872
2916
|
`);
|
|
2873
2917
|
}
|
|
@@ -48,4 +48,4 @@ export interface TransformOriginBodyResult {
|
|
|
48
48
|
* })
|
|
49
49
|
* ```
|
|
50
50
|
*/
|
|
51
|
-
export declare function transformOriginCalls(s: MagicString, source: string, neededImports: Set<string>): boolean;
|
|
51
|
+
export declare function transformOriginCalls(s: MagicString, source: string, neededImports: Set<string>, svelteImports?: Set<string>): boolean;
|