Skip to content

Commit a3ac32f

Browse files
author
Rodrigo Gomez Palacio
committed
Update function templates to support non-void return types
Motivation: with the introduction of `getTags` we have some methods that actually return a value
1 parent 6ae24c1 commit a3ac32f

File tree

4 files changed

+102
-32
lines changed

4 files changed

+102
-32
lines changed
Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,59 @@
11
import { IFunctionSignature } from "../../models/FunctionSignature";
2-
import { getChainedNamespaceString, spreadArgs, spreadArgsWithTypes } from "../utils";
2+
import { getChainedNamespaceString, hasNonVoidReturnType, spreadArgs, spreadArgsWithTypes } from "../utils";
33

4-
export const ngOneSignalAsyncFunctionTemplate = (sig: IFunctionSignature, uniqueFunctionName: string, namespaceChain: string[]) => {
4+
export const ngOneSignalAsyncFunctionTemplate = (
5+
sig: IFunctionSignature,
6+
uniqueFunctionName: string,
7+
namespaceChain: string[]
8+
): string => {
59
const args = sig.args?.map(arg => arg.name);
610
const chainedNamespaceString = getChainedNamespaceString(namespaceChain);
11+
712
return `
8-
function ${uniqueFunctionName}${sig.genericTypeParameter ?? ''}(${spreadArgsWithTypes(sig)}): ${sig.returnType || 'void'} {
13+
function ${uniqueFunctionName}${sig.genericTypeParameter ?? ''}(${spreadArgsWithTypes(sig)}): ${sig.returnType} {
914
return new Promise((resolve, reject) => {
1015
if (isOneSignalScriptFailed) {
11-
reject();
16+
reject(new Error('OneSignal script failed to load.'));
17+
return;
1218
}
1319
1420
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
15-
oneSignal.${chainedNamespaceString}${chainedNamespaceString !== '' ? '.' : ''}${sig.name}(${spreadArgs(args)})
16-
.then((value: any) => resolve(value))
17-
.catch((error: Error) => reject(error));
21+
${hasNonVoidReturnType(sig) ? 'resolve(' : ''}oneSignal.${chainedNamespaceString}${
22+
chainedNamespaceString !== '' ? '.' : ''
23+
}${sig.name}(${spreadArgs(args)})${hasNonVoidReturnType(sig) ? ')' : '.then(() => resolve())'};
1824
});
1925
});
20-
}`
26+
}
27+
`.trim();
2128
};
2229

23-
export const ngOneSignalFunctionTemplate = (sig: IFunctionSignature, uniqueFunctionName: string, namespaceChain: string[]) => {
30+
export const ngOneSignalFunctionTemplate = (
31+
sig: IFunctionSignature,
32+
uniqueFunctionName: string,
33+
namespaceChain: string[]
34+
): string => {
2435
const args = sig.args?.map(arg => arg.name);
2536
const chainedNamespaceString = getChainedNamespaceString(namespaceChain);
37+
38+
const retValDeclaration = hasNonVoidReturnType(sig)
39+
? `let retVal: ${sig.returnType};`
40+
: '';
41+
const retValAssignment = hasNonVoidReturnType(sig) ? 'retVal = ' : '';
42+
const retValReturn = hasNonVoidReturnType(sig)
43+
? `// @ts-ignore\n return retVal;`
44+
: '';
45+
2646
return `
27-
function ${uniqueFunctionName}${sig.genericTypeParameter ?? ''}(${spreadArgsWithTypes(sig)}): ${sig.returnType || 'void'} {
47+
function ${uniqueFunctionName}${sig.genericTypeParameter ?? ''}(${spreadArgsWithTypes(sig)}): ${
48+
sig.returnType || 'void'
49+
} {
50+
${retValDeclaration}
2851
window.OneSignalDeferred?.push((oneSignal: IOneSignalOneSignal) => {
29-
oneSignal.${chainedNamespaceString}${chainedNamespaceString !== '' ? '.' : ''}${sig.name}(${spreadArgs(args)});
52+
${retValAssignment}oneSignal.${chainedNamespaceString}${
53+
chainedNamespaceString !== '' ? '.' : ''
54+
}${sig.name}(${spreadArgs(args)});
3055
});
31-
}`
56+
${retValReturn}
57+
}
58+
`.replace(/^\s*[\r\n]/gm, ''); // Remove extra newlines
3259
};
Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,54 @@
11
import { IFunctionSignature } from "../../models/FunctionSignature";
2-
import { getChainedNamespaceString, spreadArgs, spreadArgsWithTypes } from "../utils";
2+
import { getChainedNamespaceString, hasNonVoidReturnType, spreadArgs, spreadArgsWithTypes } from "../utils";
33

4-
export const reactOneSignalAsyncFunctionTemplate = (sig: IFunctionSignature, uniqueFunctionName: string, namespaceChain: string[]) => {
4+
export const reactOneSignalAsyncFunctionTemplate = (
5+
sig: IFunctionSignature,
6+
uniqueFunctionName: string,
7+
namespaceChain: string[]
8+
): string => {
59
const args = sig.args?.map(arg => arg.name);
610
const chainedNamespaceString = getChainedNamespaceString(namespaceChain);
11+
712
return `
8-
function ${uniqueFunctionName}${sig.genericTypeParameter ?? ''}(${spreadArgsWithTypes(sig)}): ${sig.returnType || 'void'} {
13+
function ${uniqueFunctionName}${sig.genericTypeParameter ?? ''}(${spreadArgsWithTypes(sig)}): ${sig.returnType} {
914
return new Promise((resolve, reject) => {
1015
if (isOneSignalScriptFailed) {
11-
reject();
16+
reject(new Error('OneSignal script failed to load.'));
17+
return;
1218
}
1319
1420
try {
1521
window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
16-
OneSignal.${chainedNamespaceString}${chainedNamespaceString !== '' ? '.' : ''}${sig.name}(${spreadArgs(args)})
17-
.then((value: any) => resolve(value))
22+
${hasNonVoidReturnType(sig) ? 'resolve(' : ''}OneSignal.${chainedNamespaceString}${
23+
chainedNamespaceString !== '' ? '.' : ''
24+
}${sig.name}(${spreadArgs(args)})${hasNonVoidReturnType(sig) ? ')' : '.then(() => resolve())'}
1825
.catch((error: any) => reject(error));
1926
});
2027
} catch (error) {
2128
reject(error);
2229
}
2330
});
24-
}`
31+
}
32+
`.trim();
2533
};
2634

27-
export const reactOneSignalFunctionTemplate = (sig: IFunctionSignature, uniqueFunctionName: string, namespaceChain: string[]) => {
35+
export const reactOneSignalFunctionTemplate = (
36+
sig: IFunctionSignature,
37+
uniqueFunctionName: string,
38+
namespaceChain: string[]
39+
): string => {
2840
const args = sig.args?.map(arg => arg.name);
2941
const chainedNamespaceString = getChainedNamespaceString(namespaceChain);
42+
3043
return `
3144
function ${uniqueFunctionName}${sig.genericTypeParameter ?? ''}(${spreadArgsWithTypes(sig)}): ${sig.returnType || 'void'} {
45+
${hasNonVoidReturnType(sig) ? `let retVal: ${sig.returnType};` : ''}
3246
window.OneSignalDeferred?.push((OneSignal: IOneSignalOneSignal) => {
33-
OneSignal.${chainedNamespaceString}${chainedNamespaceString !== '' ? '.' : ''}${sig.name}(${spreadArgs(args)})
47+
${hasNonVoidReturnType(sig) ? 'retVal = ' : ''}OneSignal.${chainedNamespaceString}${
48+
chainedNamespaceString !== '' ? '.' : ''
49+
}${sig.name}(${spreadArgs(args)});
3450
});
35-
}`
51+
${hasNonVoidReturnType(sig) ? 'return retVal;' : ''}
52+
}
53+
`.trim();
3654
};

src/support/utils.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,3 +121,10 @@ function capitalizeFirstLetter(str: string): string {
121121
export function generateUniqueFunctionName(namespaceName: string, functionName: string): string {
122122
return `${toCamelCase(namespaceName)}${capitalizeFirstLetter(functionName)}`;
123123
}
124+
125+
export function hasNonVoidReturnType(sig: IFunctionSignature): boolean {
126+
if (sig.isAsync) {
127+
return sig.returnType !== 'Promise<void>';
128+
}
129+
return sig.returnType !== 'void';
130+
}
Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,54 @@
11
import { IFunctionSignature } from "../../models/FunctionSignature";
2-
import { getChainedNamespaceString, spreadArgs, spreadArgsWithTypes } from "../../support/utils";
2+
import { getChainedNamespaceString, hasNonVoidReturnType, spreadArgs, spreadArgsWithTypes } from "../../support/utils";
33

4-
export const vueOneSignalAsyncFunctionTemplate = (sig: IFunctionSignature, uniqueFunctionName: string, namespaceChain: string[]) => {
4+
export const vueOneSignalAsyncFunctionTemplate = (
5+
sig: IFunctionSignature,
6+
uniqueFunctionName: string,
7+
namespaceChain: string[]
8+
): string => {
59
const args = sig.args?.map(arg => arg.name);
610
const chainedNamespaceString = getChainedNamespaceString(namespaceChain);
11+
712
return `
8-
function ${uniqueFunctionName}${sig.genericTypeParameter ?? ''}(${spreadArgsWithTypes(sig)}): ${sig.returnType || 'void'} {
13+
function ${uniqueFunctionName}${sig.genericTypeParameter ?? ''}(${spreadArgsWithTypes(sig)}): ${sig.returnType} {
914
return new Promise(function (resolve, reject) {
1015
if (isOneSignalScriptFailed) {
11-
reject();
16+
reject(new Error('OneSignal script failed to load.'));
17+
return;
1218
}
1319
1420
try {
1521
window.OneSignalDeferred?.push((OneSignal) => {
16-
OneSignal.${chainedNamespaceString}${chainedNamespaceString !== '' ? '.' : ''}${sig.name}(${spreadArgs(args)})
17-
.then(value => resolve(value))
22+
${hasNonVoidReturnType(sig) ? 'resolve(' : ''}OneSignal.${chainedNamespaceString}${
23+
chainedNamespaceString !== '' ? '.' : ''
24+
}${sig.name}(${spreadArgs(args)})${hasNonVoidReturnType(sig) ? ')' : '.then(() => resolve())'}
1825
.catch(error => reject(error));
1926
});
2027
} catch (error) {
2128
reject(error);
2229
}
2330
});
24-
}`
31+
}
32+
`.trim();
2533
};
2634

27-
export const vueOneSignalFunctionTemplate = (sig: IFunctionSignature, uniqueFunctionName: string, namespaceChain: string[]) => {
35+
export const vueOneSignalFunctionTemplate = (
36+
sig: IFunctionSignature,
37+
uniqueFunctionName: string,
38+
namespaceChain: string[]
39+
): string => {
2840
const args = sig.args?.map(arg => arg.name);
2941
const chainedNamespaceString = getChainedNamespaceString(namespaceChain);
42+
3043
return `
3144
function ${uniqueFunctionName}${sig.genericTypeParameter ?? ''}(${spreadArgsWithTypes(sig)}): ${sig.returnType || 'void'} {
45+
${hasNonVoidReturnType(sig) ? `let retVal: ${sig.returnType};` : ''}
3246
window.OneSignalDeferred?.push((OneSignal) => {
33-
OneSignal.${chainedNamespaceString}${chainedNamespaceString !== '' ? '.' : ''}${sig.name}(${spreadArgs(args)})
47+
${hasNonVoidReturnType(sig) ? 'retVal = ' : ''}OneSignal.${chainedNamespaceString}${
48+
chainedNamespaceString !== '' ? '.' : ''
49+
}${sig.name}(${spreadArgs(args)});
3450
});
35-
}`
51+
${hasNonVoidReturnType(sig) ? 'return retVal;' : ''}
52+
}
53+
`.trim();
3654
};

0 commit comments

Comments
 (0)