function output()

in tools/buildTools/dts.js [267:346]


function output(targetDir, library, isAmd, queue) {
    var version = JSON.stringify(mainPackageJson.version).replace(/"/g, '');
    var content = '';
    content += `// Type definitions for roosterjs (Version ${version})\r\n`;
    content += '// Generated by dts tool from roosterjs\r\n';
    content += '// Project: https://github.com/Microsoft/roosterjs\r\n';
    content += '\r\n';

    if (!isAmd) {
        content += 'declare namespace ' + library + ' {\r\n';
    }

    for (var i = 0; i < queue.length; i++) {
        var { exports, elements, filename } = queue[i];
        if (exports) {
            for (var name in exports) {
                var alias = exports[name];
                var texts = null;
                if (elements[name]) {
                    texts = publicElement(elements[name]);
                } else {
                    for (var n in elements) {
                        if (n.indexOf(alias + '<') == 0) {
                            texts = publicElement(elements[n]);
                            break;
                        }
                    }
                    if (!texts) {
                        err(`Name not found: ${name}; alias: ${alias}; file: ${filename}`);
                    }
                }

                for (var text of texts) {
                    text = text.replace(namePlaceholder, alias);

                    if (!isAmd) {
                        content += '    ' + text.replace(/\r\n/g, '\r\n    ').trim() + '\r\n\r\n';
                    } else {
                        content +=
                            (multiLineComment.test(text)
                                ? text.replace(multiLineComment, '$1export ')
                                : 'export ' + text) + '\r\n\r\n';
                    }
                }
            }
        }
    }

    if (!isAmd) {
        content += '}';
    }

    // Check comments
    for (var i = 0; i < queue.length; i++) {
        var { filename, elements } = queue[i];

        for (var name in elements) {
            elements[name].forEach(({ published, text, comment }) => {
                var code = text.replace(namePlaceholder, name);
                if (!comment) {
                    err(`Exported element must have comment. File: ${filename} Code: ${code}`);
                } else if (published) {
                    if (comment.indexOf('@internal') >= 0) {
                        err(
                            `Public exported element must not mark as "@internal". File: ${filename} Code: ${code}`
                        );
                    }
                } else if (comment.indexOf('@internal') < 0) {
                    err(
                        `Local exported member must be marked as "@internal". File: ${filename} Code: ${code}`
                    );
                }
            });
        }
    }

    var filename = `${path.resolve(targetDir, 'rooster')}${isAmd ? '-amd' : ''}.d.ts`;
    fs.writeFileSync(filename, content);
    return filename;
}