@junobuild/did-tools 0.3.4 → 0.3.6
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/node/index.mjs +7 -6
- package/dist/node/index.mjs.map +2 -2
- package/package.json +1 -1
package/dist/node/index.mjs
CHANGED
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
import { createRequire as topLevelCreateRequire } from 'module';
|
|
2
2
|
const require = topLevelCreateRequire(import.meta.url);
|
|
3
|
-
var
|
|
3
|
+
var S=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,i)=>(typeof require<"u"?require:t)[i]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});import{writeFile as B}from"node:fs/promises";import*as M from"@babel/parser";import{isTSAnyKeyword as g,isTSArrayType as E,isTSBigIntKeyword as A,isTSBooleanKeyword as O,isTSNeverKeyword as _,isTSNullKeyword as h,isTSNumberKeyword as D,isTSObjectKeyword as w,isTSStringKeyword as N,isTSSymbolKeyword as P,isTSTupleType as l,isTSTypeReference as T,isTSUndefinedKeyword as b,isTSUnknownKeyword as I,isTSVoidKeyword as R}from"@babel/types";import{isNullish as c,nonNullish as L}from"@dfinity/utils";import{readFile as H}from"node:fs/promises";var{parse:K}=M,j={sourceType:"module",plugins:["typescript"]},f=async({inputFile:e})=>{let t=await H(e,"utf-8"),i=K(t,j),p=[],a=[],s=[],{default:m}=S("@babel/traverse");return m(i,{TSInterfaceDeclaration(n){if(n.node.id.name==="_SERVICE"){let r=n.node.body.body;for(let o of r)if(o.type==="TSMethodSignature"||o.type==="TSPropertySignature"){let d=C(o);L(d)&&p.push(d)}}else a.push(n.node.id.name)},TSTypeAliasDeclaration(n){s.push(n.node.id.name)}}),{methods:p,imports:[...a,...s]}},u=e=>c(e)?"unknown":T(e)?e.typeName?.name??"unknown":N(e)?"string":D(e)?"number":O(e)?"boolean":A(e)?"bigint":P(e)?"symbol":h(e)?"null":b(e)?"undefined":R(e)?"void":_(e)?"never":I(e)?"unknown":g(e)?"any":w(e)?"object":l(e)?`[${e.elementTypes.map(u).join(", ")}]`:E(e)?`${u(e.elementType)}[]`:"unknown",C=e=>{let{type:t,key:i}=e,a=(()=>{if(i.type==="Identifier")return i.name;if(i.type==="StringLiteral")return i.value})();if(c(a)||t!=="TSPropertySignature")return;let s=e.typeAnnotation?.typeAnnotation;if(!T(s)||s.typeName?.name!=="ActorMethod"||c(s.typeParameters))return;let[n,r]=s.typeParameters.params,o=l(n)?n.elementTypes.map(u):[u(n)];return{name:a,paramsType:o,returnType:u(r)}};var x=`// This file was automatically generated by the Juno CLI.
|
|
4
4
|
// Any modifications may be overwritten.
|
|
5
5
|
%IMPORT%
|
|
6
6
|
import {idlFactory} from './satellite.factory.did.js';
|
|
7
7
|
import {getSatelliteExtendedActor} from '@junobuild/%CORE_LIB%';
|
|
8
8
|
|
|
9
9
|
%METHODS%
|
|
10
|
-
`,
|
|
10
|
+
`,k=`export const %METHOD_NAME% = async (%PARAMS%): Promise<%METHOD_RESULT%> => {
|
|
11
11
|
const {%DID_METHOD_NAME%} = await getSatelliteExtendedActor<SatelliteActor>({
|
|
12
12
|
idlFactory
|
|
13
13
|
});
|
|
14
14
|
|
|
15
15
|
return await %DID_METHOD_NAME%(%CALL_PARAMS%);
|
|
16
|
-
}`,
|
|
16
|
+
}`,v=`export const %METHOD_NAME% = async (%CALL_PARAMS%) => {
|
|
17
17
|
const {%DID_METHOD_NAME%} = await getSatelliteExtendedActor({
|
|
18
18
|
idlFactory
|
|
19
19
|
});
|
|
20
20
|
|
|
21
21
|
return await %DID_METHOD_NAME%(%CALL_PARAMS%);
|
|
22
|
-
}
|
|
23
|
-
import type {_SERVICE as SatelliteActor%IMPORTS%} from './satellite.did'
|
|
22
|
+
}`,F=`
|
|
23
|
+
import type {_SERVICE as SatelliteActor%IMPORTS%} from './satellite.did';
|
|
24
|
+
import type { Principal } from '@icp-sdk/core/principal';`,y=({methods:e,imports:t,transformerOptions:{coreLib:i,outputLanguage:p}})=>{let a=p==="js"?v:k,s=e.map(m=>{let n=$(m),r=a;return Object.entries(n).map(([o,d])=>{r=r.replaceAll(`%${o}%`,d)}),r}).join(`
|
|
24
25
|
|
|
25
|
-
`);return x.replace("%CORE_LIB%",
|
|
26
|
+
`);return x.replace("%CORE_LIB%",i??"core").replace("%METHODS%",s).replace("%IMPORT%",p==="js"?"":F.replace("%IMPORTS%",t.length===0?"":`, ${t.join(", ")}`)).trim()},$=({name:e,returnType:t,paramsType:i})=>{let a=(r=>r.replace(/_./g,o=>o[1].toUpperCase()))(e),s=i.map((r,o)=>({param:`value${o}`,type:r})),m=`${s.map(({param:r})=>r).join(", ")}`,n=s.map(({param:r,type:o})=>`${r}: ${o}`).join(", ");return{METHOD_NAME:a,DID_METHOD_NAME:e,METHOD_RESULT:t,PARAMS:n,CALL_PARAMS:m}};var Y=async({inputFile:e,outputFile:t,transformerOptions:i})=>{let p=await f({inputFile:e}),a=y({...p,transformerOptions:i});await B(t,a,"utf-8")};export{Y as generateApi};
|
|
26
27
|
//# sourceMappingURL=index.mjs.map
|
package/dist/node/index.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.ts", "../../src/services/inspector.services.ts", "../../src/services/parser.services.ts"],
|
|
4
|
-
"sourcesContent": ["import {writeFile} from 'node:fs/promises';\nimport {collectApi} from './services/inspector.services';\nimport {parseApi} from './services/parser.services';\nimport type {TransformerOptions} from './types/transformer-options';\n\nexport type * from './types/transformer-options';\n\nexport const generateApi = async ({\n inputFile,\n outputFile,\n transformerOptions\n}: {\n inputFile: string;\n outputFile: string;\n transformerOptions: TransformerOptions;\n}) => {\n const definition = await collectApi({\n inputFile\n });\n\n const api = parseApi({\n ...definition,\n transformerOptions\n });\n\n await writeFile(outputFile, api, 'utf-8');\n};\n", "import type {ParserOptions} from '@babel/parser';\nimport * as babelParser from '@babel/parser';\nimport {\n isTSAnyKeyword,\n isTSArrayType,\n isTSBigIntKeyword,\n isTSBooleanKeyword,\n isTSNeverKeyword,\n isTSNullKeyword,\n isTSNumberKeyword,\n isTSObjectKeyword,\n isTSStringKeyword,\n isTSSymbolKeyword,\n isTSTupleType,\n isTSTypeReference,\n isTSUndefinedKeyword,\n isTSUnknownKeyword,\n isTSVoidKeyword,\n type Identifier,\n type TSMethodSignature,\n type TSNamedTupleMember,\n type TSPropertySignature,\n type TSType\n} from '@babel/types';\nimport {isNullish, nonNullish} from '@dfinity/utils';\nimport {readFile} from 'node:fs/promises';\nimport type {MethodSignature} from '../types/method-signature';\n\nconst {parse} = babelParser;\n\nconst BABEL_PARSER_OPTIONS: ParserOptions = {\n sourceType: 'module',\n plugins: ['typescript']\n};\n\nexport const collectApi = async ({\n inputFile\n}: {\n inputFile: string;\n}): Promise<{methods: MethodSignature[]; imports: string[]}> => {\n const fileContent = await readFile(inputFile, 'utf-8');\n\n const ast = parse(fileContent, BABEL_PARSER_OPTIONS);\n\n const result: MethodSignature[] = [];\n const interfaces: string[] = [];\n const types: string[] = [];\n\n // I tried hard to use an import but, no success. When build and pack and imported in the CLI ultimately it does not work when used.\n // Example of error: TypeError: (0 , aSe.default) is not a function\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const {default: traverse} = require('@babel/traverse');\n\n traverse(ast, {\n TSInterfaceDeclaration(path) {\n if (path.node.id.name === '_SERVICE') {\n const members = path.node.body.body;\n\n for (const member of members) {\n if (member.type === 'TSMethodSignature' || member.type === 'TSPropertySignature') {\n const methodSignature = membersToMethodSignatures(member);\n\n if (nonNullish(methodSignature)) {\n result.push(methodSignature);\n }\n }\n }\n } else {\n interfaces.push(path.node.id.name);\n }\n },\n\n TSTypeAliasDeclaration(path) {\n types.push(path.node.id.name);\n }\n });\n\n return {\n methods: result,\n imports: [...interfaces, ...types]\n };\n};\n\nconst getTypeName = (\n typeAnnotation: TSType | TSNamedTupleMember | undefined\n): string | 'unknown' => {\n if (isNullish(typeAnnotation)) {\n return 'unknown';\n }\n\n if (isTSTypeReference(typeAnnotation)) {\n const typeName = (typeAnnotation.typeName as Identifier)?.name;\n return typeName ?? 'unknown';\n }\n\n if (isTSStringKeyword(typeAnnotation)) {\n return 'string';\n }\n\n if (isTSNumberKeyword(typeAnnotation)) {\n return 'number';\n }\n\n if (isTSBooleanKeyword(typeAnnotation)) {\n return 'boolean';\n }\n\n if (isTSBigIntKeyword(typeAnnotation)) {\n return 'bigint';\n }\n\n if (isTSSymbolKeyword(typeAnnotation)) {\n return 'symbol';\n }\n\n if (isTSNullKeyword(typeAnnotation)) {\n return 'null';\n }\n\n if (isTSUndefinedKeyword(typeAnnotation)) {\n return 'undefined';\n }\n\n if (isTSVoidKeyword(typeAnnotation)) {\n return 'void';\n }\n\n if (isTSNeverKeyword(typeAnnotation)) {\n return 'never';\n }\n\n if (isTSUnknownKeyword(typeAnnotation)) {\n return 'unknown';\n }\n\n if (isTSAnyKeyword(typeAnnotation)) {\n return 'any';\n }\n\n if (isTSObjectKeyword(typeAnnotation)) {\n return 'object';\n }\n\n if (isTSTupleType(typeAnnotation)) {\n const tupleTypes = typeAnnotation.elementTypes.map(getTypeName);\n return `[${tupleTypes.join(', ')}]`;\n }\n\n if (isTSArrayType(typeAnnotation)) {\n return `${getTypeName(typeAnnotation.elementType)}[]`;\n }\n\n return 'unknown';\n};\n\nconst membersToMethodSignatures = (\n member: TSMethodSignature | TSPropertySignature\n): MethodSignature | undefined => {\n const {type, key} = member;\n\n const findName = (): string | undefined => {\n if (key.type === 'Identifier') {\n return key.name;\n }\n\n // didc generate function name with quotes, congrats.\n if (key.type === 'StringLiteral') {\n return key.value;\n }\n\n return undefined;\n };\n\n const name = findName();\n\n if (isNullish(name)) {\n return undefined;\n }\n\n if (type !== 'TSPropertySignature') {\n return undefined;\n }\n\n const typeAnnotation = member.typeAnnotation?.typeAnnotation;\n\n if (!isTSTypeReference(typeAnnotation)) {\n return undefined;\n }\n\n const typeName = (typeAnnotation.typeName as Identifier)?.name;\n\n if (typeName !== 'ActorMethod' || isNullish(typeAnnotation.typeParameters)) {\n return undefined;\n }\n\n const [paramType, returnType] = typeAnnotation.typeParameters.params;\n\n const paramsType = isTSTupleType(paramType)\n ? paramType.elementTypes.map(getTypeName)\n : [getTypeName(paramType)];\n\n return {\n name,\n paramsType,\n returnType: getTypeName(returnType)\n };\n};\n", "import type {MethodSignature} from '../types/method-signature';\nimport type {TransformerOptions} from '../types/transformer-options';\n\nconst template = `// This file was automatically generated by the Juno CLI.\n// Any modifications may be overwritten.\n%IMPORT%\nimport {idlFactory} from './satellite.factory.did.js';\nimport {getSatelliteExtendedActor} from '@junobuild/%CORE_LIB%';\n\n%METHODS%\n`;\n\nconst methodTemplateTypeScript = `export const %METHOD_NAME% = async (%PARAMS%): Promise<%METHOD_RESULT%> => {\n\\tconst {%DID_METHOD_NAME%} = await getSatelliteExtendedActor<SatelliteActor>({\n\\t\\tidlFactory\n\\t});\n\n\\treturn await %DID_METHOD_NAME%(%CALL_PARAMS%);\n}`;\n\nconst methodTemplateJavaScript = `export const %METHOD_NAME% = async (%CALL_PARAMS%) => {\n\\tconst {%DID_METHOD_NAME%} = await getSatelliteExtendedActor({\n\\t\\tidlFactory\n\\t});\n\n\\treturn await %DID_METHOD_NAME%(%CALL_PARAMS%);\n}`;\n\nconst importTemplateTypeScript = `\nimport type {_SERVICE as SatelliteActor%IMPORTS%} from './satellite.did';`;\n\nexport const parseApi = ({\n methods: signatures,\n imports,\n transformerOptions: {coreLib, outputLanguage}\n}: {\n methods: MethodSignature[];\n imports: string[];\n transformerOptions: TransformerOptions;\n}): string => {\n const langTemplate =\n outputLanguage === 'js' ? methodTemplateJavaScript : methodTemplateTypeScript;\n\n const methods = signatures\n .map((signature) => {\n const replacers = mapSignature(signature);\n\n let result = langTemplate;\n Object.entries(replacers).map(([key, value]) => {\n result = result.replaceAll(`%${key}%`, value);\n });\n\n return result;\n })\n .join('\\n\\n');\n\n return template\n .replace('%CORE_LIB%', coreLib ?? 'core')\n .replace('%METHODS%', methods)\n .replace(\n '%IMPORT%',\n outputLanguage === 'js'\n ? ''\n : importTemplateTypeScript.replace(\n '%IMPORTS%',\n imports.length === 0 ? '' : `, ${imports.join(', ')}`\n )\n )\n .trim();\n};\n\nconst mapSignature = ({\n name,\n returnType,\n paramsType\n}: MethodSignature): {\n METHOD_NAME: string;\n DID_METHOD_NAME: string;\n METHOD_RESULT: string;\n PARAMS: string;\n CALL_PARAMS: string;\n} => {\n const camelize = (s: string): string => s.replace(/_./g, (x) => x[1].toUpperCase());\n\n const methodName = camelize(name);\n\n const params = paramsType.map((paramType, i) => ({\n param: `value${i}`,\n type: paramType\n }));\n\n const paramKeysText = `${params.map(({param}) => param).join(', ')}`;\n\n const paramsText = params.map(({param, type}) => `${param}: ${type}`).join(', ');\n\n return {\n METHOD_NAME: methodName,\n DID_METHOD_NAME: name,\n METHOD_RESULT: returnType,\n PARAMS: paramsText,\n CALL_PARAMS: paramKeysText\n };\n};\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import {writeFile} from 'node:fs/promises';\nimport {collectApi} from './services/inspector.services';\nimport {parseApi} from './services/parser.services';\nimport type {TransformerOptions} from './types/transformer-options';\n\nexport type * from './types/transformer-options';\n\nexport const generateApi = async ({\n inputFile,\n outputFile,\n transformerOptions\n}: {\n inputFile: string;\n outputFile: string;\n transformerOptions: TransformerOptions;\n}) => {\n const definition = await collectApi({\n inputFile\n });\n\n const api = parseApi({\n ...definition,\n transformerOptions\n });\n\n await writeFile(outputFile, api, 'utf-8');\n};\n", "import type {ParserOptions} from '@babel/parser';\nimport * as babelParser from '@babel/parser';\nimport {\n isTSAnyKeyword,\n isTSArrayType,\n isTSBigIntKeyword,\n isTSBooleanKeyword,\n isTSNeverKeyword,\n isTSNullKeyword,\n isTSNumberKeyword,\n isTSObjectKeyword,\n isTSStringKeyword,\n isTSSymbolKeyword,\n isTSTupleType,\n isTSTypeReference,\n isTSUndefinedKeyword,\n isTSUnknownKeyword,\n isTSVoidKeyword,\n type Identifier,\n type TSMethodSignature,\n type TSNamedTupleMember,\n type TSPropertySignature,\n type TSType\n} from '@babel/types';\nimport {isNullish, nonNullish} from '@dfinity/utils';\nimport {readFile} from 'node:fs/promises';\nimport type {MethodSignature} from '../types/method-signature';\n\nconst {parse} = babelParser;\n\nconst BABEL_PARSER_OPTIONS: ParserOptions = {\n sourceType: 'module',\n plugins: ['typescript']\n};\n\nexport const collectApi = async ({\n inputFile\n}: {\n inputFile: string;\n}): Promise<{methods: MethodSignature[]; imports: string[]}> => {\n const fileContent = await readFile(inputFile, 'utf-8');\n\n const ast = parse(fileContent, BABEL_PARSER_OPTIONS);\n\n const result: MethodSignature[] = [];\n const interfaces: string[] = [];\n const types: string[] = [];\n\n // I tried hard to use an import but, no success. When build and pack and imported in the CLI ultimately it does not work when used.\n // Example of error: TypeError: (0 , aSe.default) is not a function\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const {default: traverse} = require('@babel/traverse');\n\n traverse(ast, {\n TSInterfaceDeclaration(path) {\n if (path.node.id.name === '_SERVICE') {\n const members = path.node.body.body;\n\n for (const member of members) {\n if (member.type === 'TSMethodSignature' || member.type === 'TSPropertySignature') {\n const methodSignature = membersToMethodSignatures(member);\n\n if (nonNullish(methodSignature)) {\n result.push(methodSignature);\n }\n }\n }\n } else {\n interfaces.push(path.node.id.name);\n }\n },\n\n TSTypeAliasDeclaration(path) {\n types.push(path.node.id.name);\n }\n });\n\n return {\n methods: result,\n imports: [...interfaces, ...types]\n };\n};\n\nconst getTypeName = (\n typeAnnotation: TSType | TSNamedTupleMember | undefined\n): string | 'unknown' => {\n if (isNullish(typeAnnotation)) {\n return 'unknown';\n }\n\n if (isTSTypeReference(typeAnnotation)) {\n const typeName = (typeAnnotation.typeName as Identifier)?.name;\n return typeName ?? 'unknown';\n }\n\n if (isTSStringKeyword(typeAnnotation)) {\n return 'string';\n }\n\n if (isTSNumberKeyword(typeAnnotation)) {\n return 'number';\n }\n\n if (isTSBooleanKeyword(typeAnnotation)) {\n return 'boolean';\n }\n\n if (isTSBigIntKeyword(typeAnnotation)) {\n return 'bigint';\n }\n\n if (isTSSymbolKeyword(typeAnnotation)) {\n return 'symbol';\n }\n\n if (isTSNullKeyword(typeAnnotation)) {\n return 'null';\n }\n\n if (isTSUndefinedKeyword(typeAnnotation)) {\n return 'undefined';\n }\n\n if (isTSVoidKeyword(typeAnnotation)) {\n return 'void';\n }\n\n if (isTSNeverKeyword(typeAnnotation)) {\n return 'never';\n }\n\n if (isTSUnknownKeyword(typeAnnotation)) {\n return 'unknown';\n }\n\n if (isTSAnyKeyword(typeAnnotation)) {\n return 'any';\n }\n\n if (isTSObjectKeyword(typeAnnotation)) {\n return 'object';\n }\n\n if (isTSTupleType(typeAnnotation)) {\n const tupleTypes = typeAnnotation.elementTypes.map(getTypeName);\n return `[${tupleTypes.join(', ')}]`;\n }\n\n if (isTSArrayType(typeAnnotation)) {\n return `${getTypeName(typeAnnotation.elementType)}[]`;\n }\n\n return 'unknown';\n};\n\nconst membersToMethodSignatures = (\n member: TSMethodSignature | TSPropertySignature\n): MethodSignature | undefined => {\n const {type, key} = member;\n\n const findName = (): string | undefined => {\n if (key.type === 'Identifier') {\n return key.name;\n }\n\n // didc generate function name with quotes, congrats.\n if (key.type === 'StringLiteral') {\n return key.value;\n }\n\n return undefined;\n };\n\n const name = findName();\n\n if (isNullish(name)) {\n return undefined;\n }\n\n if (type !== 'TSPropertySignature') {\n return undefined;\n }\n\n const typeAnnotation = member.typeAnnotation?.typeAnnotation;\n\n if (!isTSTypeReference(typeAnnotation)) {\n return undefined;\n }\n\n const typeName = (typeAnnotation.typeName as Identifier)?.name;\n\n if (typeName !== 'ActorMethod' || isNullish(typeAnnotation.typeParameters)) {\n return undefined;\n }\n\n const [paramType, returnType] = typeAnnotation.typeParameters.params;\n\n const paramsType = isTSTupleType(paramType)\n ? paramType.elementTypes.map(getTypeName)\n : [getTypeName(paramType)];\n\n return {\n name,\n paramsType,\n returnType: getTypeName(returnType)\n };\n};\n", "import type {MethodSignature} from '../types/method-signature';\nimport type {TransformerOptions} from '../types/transformer-options';\n\nconst template = `// This file was automatically generated by the Juno CLI.\n// Any modifications may be overwritten.\n%IMPORT%\nimport {idlFactory} from './satellite.factory.did.js';\nimport {getSatelliteExtendedActor} from '@junobuild/%CORE_LIB%';\n\n%METHODS%\n`;\n\nconst methodTemplateTypeScript = `export const %METHOD_NAME% = async (%PARAMS%): Promise<%METHOD_RESULT%> => {\n\\tconst {%DID_METHOD_NAME%} = await getSatelliteExtendedActor<SatelliteActor>({\n\\t\\tidlFactory\n\\t});\n\n\\treturn await %DID_METHOD_NAME%(%CALL_PARAMS%);\n}`;\n\nconst methodTemplateJavaScript = `export const %METHOD_NAME% = async (%CALL_PARAMS%) => {\n\\tconst {%DID_METHOD_NAME%} = await getSatelliteExtendedActor({\n\\t\\tidlFactory\n\\t});\n\n\\treturn await %DID_METHOD_NAME%(%CALL_PARAMS%);\n}`;\n\nconst importTemplateTypeScript = `\nimport type {_SERVICE as SatelliteActor%IMPORTS%} from './satellite.did';\nimport type { Principal } from '@icp-sdk/core/principal';`;\n\nexport const parseApi = ({\n methods: signatures,\n imports,\n transformerOptions: {coreLib, outputLanguage}\n}: {\n methods: MethodSignature[];\n imports: string[];\n transformerOptions: TransformerOptions;\n}): string => {\n const langTemplate =\n outputLanguage === 'js' ? methodTemplateJavaScript : methodTemplateTypeScript;\n\n const methods = signatures\n .map((signature) => {\n const replacers = mapSignature(signature);\n\n let result = langTemplate;\n Object.entries(replacers).map(([key, value]) => {\n result = result.replaceAll(`%${key}%`, value);\n });\n\n return result;\n })\n .join('\\n\\n');\n\n return template\n .replace('%CORE_LIB%', coreLib ?? 'core')\n .replace('%METHODS%', methods)\n .replace(\n '%IMPORT%',\n outputLanguage === 'js'\n ? ''\n : importTemplateTypeScript.replace(\n '%IMPORTS%',\n imports.length === 0 ? '' : `, ${imports.join(', ')}`\n )\n )\n .trim();\n};\n\nconst mapSignature = ({\n name,\n returnType,\n paramsType\n}: MethodSignature): {\n METHOD_NAME: string;\n DID_METHOD_NAME: string;\n METHOD_RESULT: string;\n PARAMS: string;\n CALL_PARAMS: string;\n} => {\n const camelize = (s: string): string => s.replace(/_./g, (x) => x[1].toUpperCase());\n\n const methodName = camelize(name);\n\n const params = paramsType.map((paramType, i) => ({\n param: `value${i}`,\n type: paramType\n }));\n\n const paramKeysText = `${params.map(({param}) => param).join(', ')}`;\n\n const paramsText = params.map(({param, type}) => `${param}: ${type}`).join(', ');\n\n return {\n METHOD_NAME: methodName,\n DID_METHOD_NAME: name,\n METHOD_RESULT: returnType,\n PARAMS: paramsText,\n CALL_PARAMS: paramKeysText\n };\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["writeFile", "babelParser", "isTSAnyKeyword", "isTSArrayType", "isTSBigIntKeyword", "isTSBooleanKeyword", "isTSNeverKeyword", "isTSNullKeyword", "isTSNumberKeyword", "isTSObjectKeyword", "isTSStringKeyword", "isTSSymbolKeyword", "isTSTupleType", "isTSTypeReference", "isTSUndefinedKeyword", "isTSUnknownKeyword", "isTSVoidKeyword", "isNullish", "nonNullish", "readFile", "parse", "BABEL_PARSER_OPTIONS", "collectApi", "inputFile", "fileContent", "ast", "result", "interfaces", "types", "traverse", "path", "members", "member", "methodSignature", "membersToMethodSignatures", "getTypeName", "typeAnnotation", "type", "key", "name", "paramType", "returnType", "paramsType", "template", "methodTemplateTypeScript", "methodTemplateJavaScript", "importTemplateTypeScript", "parseApi", "signatures", "imports", "coreLib", "outputLanguage", "langTemplate", "methods", "signature", "replacers", "mapSignature", "result", "key", "value", "name", "returnType", "paramsType", "methodName", "s", "x", "params", "paramType", "i", "paramKeysText", "param", "paramsText", "type", "generateApi", "inputFile", "outputFile", "transformerOptions", "definition", "collectApi", "api", "parseApi", "writeFile"]
|
|
7
7
|
}
|