export function generateDeclaration()

in packages/ice/src/service/runtimeGenerator.ts [39:79]


export function generateDeclaration(exportList: DeclarationData[]) {
  const importDeclarations: Array<string> = [];
  const exportDeclarations: Array<string> = [];
  const exportNames: Array<string> = [];

  exportList.forEach(data => {
    const { specifier, source, alias, type } = data;
    const isDefaultImport = !Array.isArray(specifier);
    const specifiers = isDefaultImport ? [specifier] : specifier;
    const symbol = type ? ';' : ',';

    if (specifier) {
      importDeclarations.push(`import ${type ? 'type ' : ''}${isDefaultImport ? specifier : `{ ${specifiers.map(specifierStr => ((alias && alias[specifierStr]) ? `${specifierStr} as ${alias[specifierStr]}` : specifierStr)).join(', ')} }`} from '${source}';`);

      specifiers.forEach((specifierStr) => {
        if (alias && alias[specifierStr]) {
          exportDeclarations.push(`${alias[specifierStr]}${symbol}`);
          exportNames.push(alias[specifierStr]);
        } else {
          exportDeclarations.push(`${specifierStr}${symbol}`);
          exportNames.push(specifierStr);
        }
      });
    } else {
      importDeclarations.push(`import '${source}';`);
    }
  });

  return {
    importStr: importDeclarations.join('\n'),
    /**
     * Add two whitespace character in order to get the formatted code. For example:
     *  export {
          withAuth,
          useAuth,
        };
     */
    exportStr: exportDeclarations.join('\n  '),
    exportNames,
  };
}