rollup-plugin-dts
Advanced tools
Comparing version 0.5.0 to 0.6.0
'use strict'; | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } | ||
@@ -180,2 +182,3 @@ | ||
for (const param of node.parameters) { | ||
// istanbul ignore else | ||
if (param.type) { | ||
@@ -211,5 +214,6 @@ this.convertTypeNode(param.type); | ||
} | ||
continue; | ||
} | ||
// istanbul ignore else | ||
else if (ts.isMethodDeclaration(node) || | ||
if (ts.isMethodDeclaration(node) || | ||
ts.isMethodSignature(node) || | ||
@@ -253,2 +257,3 @@ ts.isConstructorDeclaration(node) || | ||
const { typeParameter, type } = node; | ||
// istanbul ignore else | ||
if (typeParameter.constraint) { | ||
@@ -259,2 +264,3 @@ this.convertTypeNode(typeParameter.constraint); | ||
// node.typeParameter.name | ||
// istanbul ignore else | ||
if (type) { | ||
@@ -283,2 +289,3 @@ this.convertTypeNode(type); | ||
else { | ||
console.log(node.getSourceFile().getFullText()); | ||
console.log({ kind: node.kind, code: node.getFullText() }); | ||
@@ -338,2 +345,5 @@ throw new Error(`Unknown TypeNode`); | ||
convertStatement(node) { | ||
if (ts.isEnumDeclaration(node)) { | ||
return this.convertEnumDeclaration(node); | ||
} | ||
if (ts.isFunctionDeclaration(node)) { | ||
@@ -363,2 +373,8 @@ return this.convertFunctionDeclaration(node); | ||
} | ||
convertEnumDeclaration(node) { | ||
this.maybeMarkAsExported(node, node.name); | ||
const scope = this.createDeclaration(node.name, node); | ||
scope.removeModifier(node); | ||
scope.pushIdentifierReference(node.name); | ||
} | ||
convertFunctionDeclaration(node) { | ||
@@ -496,2 +512,19 @@ // istanbul ignore if | ||
const SOURCEMAPPING_URL_RE = new RegExp(`^//#\\s+${SOURCEMAPPING_URL}=.+\\n?`, "m"); | ||
(function (CompileMode) { | ||
CompileMode["Types"] = "dts"; | ||
CompileMode["Js"] = "js"; | ||
})(exports.CompileMode || (exports.CompileMode = {})); | ||
const OPTIONS_OVERRIDES = { | ||
module: ts.ModuleKind.ES2015, | ||
noEmitOnError: false, | ||
noEmit: false, | ||
skipLibCheck: true, | ||
declaration: true, | ||
allowJs: true, | ||
checkJs: true, | ||
resolveJsonModule: true, | ||
sourceMap: true, | ||
inlineSourceMap: false, | ||
declarationMap: true, | ||
}; | ||
const COMPILERCACHE = new Map(); | ||
@@ -505,6 +538,3 @@ function createCompiler(options) { | ||
} | ||
const compilerOptions = Object.assign({}, options.compilerOptions, { noEmitOnError: false, noEmit: false, skipLibCheck: true, declaration: true, allowJs: true, checkJs: true, resolveJsonModule: true, | ||
// hm, there are still issues with this, I couldn’t get it to work locally | ||
// See https://github.com/Microsoft/TypeScript/issues/25662 | ||
declarationMap: false }); | ||
const compilerOptions = Object.assign({}, options.compilerOptions, OPTIONS_OVERRIDES); | ||
let diagnostic; | ||
@@ -526,2 +556,34 @@ const configParseResult = ts.getParsedCommandLineOfConfigFile(configFileName, compilerOptions, Object.assign({}, ts.sys, { onUnRecoverableConfigFileDiagnostic(d) { | ||
} | ||
function getEmitFiles(compiler, fileName) { | ||
const result = { | ||
dts: "", | ||
dtsMap: `{"mappings": ""}`, | ||
js: "", | ||
jsMap: `{"mappings": ""}`, | ||
}; | ||
if (fileName.endsWith(".d.ts")) { | ||
result.dts = ts.sys.readFile(fileName, "utf-8"); | ||
return result; | ||
} | ||
const sourceFile = compiler.getSourceFile(fileName); | ||
// XXX(swatinem): maybe we should look at the diagnostics? :-D | ||
compiler.emit(sourceFile, (fileName, data) => { | ||
data = data.replace(SOURCEMAPPING_URL_RE, "").trim(); | ||
if (fileName.endsWith(".d.ts")) { | ||
result.dts = data; | ||
} | ||
else if (fileName.endsWith(".js")) { | ||
result.js = data; | ||
// NOTE(swatinem): hm, there are still issues with this, | ||
// I couldn’t get it to work locally | ||
// See https://github.com/Microsoft/TypeScript/issues/25662 | ||
// } else if (fileName.endsWith(".d.ts.map")) { | ||
// result.dtsMap = data; | ||
} | ||
else if (fileName.endsWith(".js.map")) { | ||
result.jsMap = data; | ||
} | ||
}); | ||
return result; | ||
} | ||
function getCachedCompiler(options) { | ||
@@ -549,22 +611,17 @@ const cacheKey = JSON.stringify(options); | ||
}, | ||
transform(code, fileName) { | ||
transform(_code, fileName) { | ||
const { compiler } = lazyCreate(); | ||
const sourceFile = compiler.getSourceFile(fileName); | ||
let dtsSource = sourceFile; | ||
let dtsFilename = fileName; | ||
let map = `{"mappings": ""}`; | ||
const emitFiles = getEmitFiles(compiler, fileName); | ||
if (options.mode === exports.CompileMode.Js) { | ||
return { | ||
code: emitFiles.js, | ||
map: emitFiles.jsMap, | ||
}; | ||
} | ||
let code = emitFiles.dts; | ||
let dtsFileName = fileName; | ||
if (!fileName.endsWith(".d.ts")) { | ||
code = ""; | ||
const baseFileName = fileName.slice(0, -path.extname(fileName).length); | ||
compiler.emit(sourceFile, (fileName, data) => { | ||
if (fileName === `${baseFileName}.d.ts`) { | ||
dtsFilename = fileName; | ||
code = data.replace(SOURCEMAPPING_URL_RE, "").trim(); | ||
} | ||
// if (fileName === `${baseFileName}.d.ts.map`) { | ||
// map = data; | ||
// } | ||
}); | ||
dtsSource = ts.createSourceFile(dtsFilename, code, ts.ScriptTarget.Latest, true); | ||
dtsFileName = fileName.slice(0, -path.extname(fileName).length) + ".d.ts"; | ||
} | ||
const dtsSource = ts.createSourceFile(dtsFileName, code, ts.ScriptTarget.Latest, true); | ||
const converter = new Transformer(dtsSource); | ||
@@ -578,3 +635,7 @@ const ast = converter.transform(); | ||
code = code.replace(/(export\s+)default(\s+(function|class))/m, "$1declare$2"); | ||
return { code, ast, map }; | ||
return { | ||
code, | ||
ast, | ||
map: emitFiles.dtsMap, | ||
}; | ||
}, | ||
@@ -584,12 +645,27 @@ }; | ||
// @ts-ignore | ||
function dts(options = {}) { | ||
const filter = rollupPluginutils.createFilter(options.include || ["*.ts+(|x)", "**/*.ts+(|x)", "*.json", "**/*.json"], options.exclude || []); | ||
const version = "0.6.0"; | ||
const TSLIB_ID = "\0tslib"; | ||
const BANNER = ` | ||
// FILE GENERATED BY \`rollup-plugin-dts@${version}\` | ||
// https://github.com/Swatinem/rollup-plugin-dts | ||
`.trim() + "\n\n"; | ||
function plugin(options = {}) { | ||
const filter = rollupPluginutils.createFilter(options.include || ["*.ts+(|x)", "**/*.ts+(|x)"], options.exclude || []); | ||
const tslibFileName = require.resolve("tslib").replace("tslib.js", "tslib.es6.js"); | ||
const tslib = ts.sys.readFile(tslibFileName, "utf-8"); | ||
const mode = options.compileMode || exports.CompileMode.Types; | ||
const compiler = getCachedCompiler({ | ||
tsconfig: options.tsconfig || process.cwd(), | ||
compilerOptions: options.compilerOptions || {}, | ||
mode, | ||
}); | ||
return { | ||
name: "dts", | ||
banner: mode === exports.CompileMode.Types ? BANNER : undefined, | ||
resolveId(importee, importer) { | ||
// istanbul ignore if | ||
if (importee === "tslib") { | ||
return TSLIB_ID; | ||
} | ||
if (!importer) { | ||
@@ -601,2 +677,6 @@ return null; | ||
}, | ||
load(id) { | ||
// istanbul ignore next | ||
return id === TSLIB_ID ? tslib : undefined; | ||
}, | ||
async transform(code, id) { | ||
@@ -611,3 +691,15 @@ // istanbul ignore if | ||
} | ||
function dts(options = {}) { | ||
options.compileMode = options.compileMode || exports.CompileMode.Types; | ||
return plugin(options); | ||
} | ||
function js(options = {}) { | ||
options.compileMode = options.compileMode || exports.CompileMode.Js; | ||
return plugin(options); | ||
} | ||
module.exports = dts; | ||
exports.plugin = plugin; | ||
exports.dts = dts; | ||
exports.js = js; | ||
exports.ts = js; | ||
exports.default = plugin; |
@@ -0,4 +1,14 @@ | ||
// FILE GENERATED BY `rollup-plugin-dts@0.6.0` | ||
// https://github.com/Swatinem/rollup-plugin-dts | ||
import { Plugin } from 'rollup'; | ||
import { CompilerOptions } from 'typescript'; | ||
import { Plugin } from 'rollup'; | ||
declare enum CompileMode { | ||
Types = "dts", | ||
Js = "js" | ||
} | ||
interface Options { | ||
@@ -9,5 +19,9 @@ include?: Array<string>; | ||
compilerOptions?: CompilerOptions; | ||
compileMode?: CompileMode; | ||
} | ||
declare function plugin(options?: Options): Plugin; | ||
declare function dts(options?: Options): Plugin; | ||
declare function js(options?: Options): Plugin; | ||
export default dts; | ||
export default plugin; | ||
export { CompileMode, plugin, dts, js, js as ts }; |
import { createFilter } from 'rollup-pluginutils'; | ||
import { findConfigFile, sys, getParsedCommandLineOfConfigFile, createProgram, nodeModuleNameResolver, createSourceFile, ScriptTarget, ModifierFlags, isFunctionDeclaration, isInterfaceDeclaration, isClassDeclaration, isTypeAliasDeclaration, isVariableStatement, isExportDeclaration, isExportAssignment, isImportDeclaration, SyntaxKind, isIdentifier, isNamedImports, idText, isLiteralExpression, getCombinedModifierFlags, getJSDocTags, isPropertyDeclaration, isPropertySignature, isIndexSignatureDeclaration, isMethodDeclaration, isMethodSignature, isConstructorDeclaration, isConstructSignatureDeclaration, isParenthesizedTypeNode, isTypeOperatorNode, isArrayTypeNode, isTupleTypeNode, isUnionTypeNode, isIntersectionTypeNode, isTypeLiteralNode, isMappedTypeNode, isConditionalTypeNode, isIndexedAccessTypeNode, isTypeReferenceNode } from 'typescript'; | ||
import { sys, ModuleKind, findConfigFile, getParsedCommandLineOfConfigFile, createProgram, nodeModuleNameResolver, createSourceFile, ScriptTarget, ModifierFlags, isEnumDeclaration, isFunctionDeclaration, isInterfaceDeclaration, isClassDeclaration, isTypeAliasDeclaration, isVariableStatement, isExportDeclaration, isExportAssignment, isImportDeclaration, SyntaxKind, isIdentifier, isNamedImports, idText, isLiteralExpression, getCombinedModifierFlags, getJSDocTags, isPropertyDeclaration, isPropertySignature, isIndexSignatureDeclaration, isMethodDeclaration, isMethodSignature, isConstructorDeclaration, isConstructSignatureDeclaration, isParenthesizedTypeNode, isTypeOperatorNode, isArrayTypeNode, isTupleTypeNode, isUnionTypeNode, isIntersectionTypeNode, isTypeLiteralNode, isMappedTypeNode, isConditionalTypeNode, isIndexedAccessTypeNode, isTypeReferenceNode } from 'typescript'; | ||
import path from 'path'; | ||
@@ -176,2 +176,3 @@ | ||
for (const param of node.parameters) { | ||
// istanbul ignore else | ||
if (param.type) { | ||
@@ -207,5 +208,6 @@ this.convertTypeNode(param.type); | ||
} | ||
continue; | ||
} | ||
// istanbul ignore else | ||
else if (isMethodDeclaration(node) || | ||
if (isMethodDeclaration(node) || | ||
isMethodSignature(node) || | ||
@@ -249,2 +251,3 @@ isConstructorDeclaration(node) || | ||
const { typeParameter, type } = node; | ||
// istanbul ignore else | ||
if (typeParameter.constraint) { | ||
@@ -255,2 +258,3 @@ this.convertTypeNode(typeParameter.constraint); | ||
// node.typeParameter.name | ||
// istanbul ignore else | ||
if (type) { | ||
@@ -279,2 +283,3 @@ this.convertTypeNode(type); | ||
else { | ||
console.log(node.getSourceFile().getFullText()); | ||
console.log({ kind: node.kind, code: node.getFullText() }); | ||
@@ -334,2 +339,5 @@ throw new Error(`Unknown TypeNode`); | ||
convertStatement(node) { | ||
if (isEnumDeclaration(node)) { | ||
return this.convertEnumDeclaration(node); | ||
} | ||
if (isFunctionDeclaration(node)) { | ||
@@ -359,2 +367,8 @@ return this.convertFunctionDeclaration(node); | ||
} | ||
convertEnumDeclaration(node) { | ||
this.maybeMarkAsExported(node, node.name); | ||
const scope = this.createDeclaration(node.name, node); | ||
scope.removeModifier(node); | ||
scope.pushIdentifierReference(node.name); | ||
} | ||
convertFunctionDeclaration(node) { | ||
@@ -492,2 +506,20 @@ // istanbul ignore if | ||
const SOURCEMAPPING_URL_RE = new RegExp(`^//#\\s+${SOURCEMAPPING_URL}=.+\\n?`, "m"); | ||
var CompileMode; | ||
(function (CompileMode) { | ||
CompileMode["Types"] = "dts"; | ||
CompileMode["Js"] = "js"; | ||
})(CompileMode || (CompileMode = {})); | ||
const OPTIONS_OVERRIDES = { | ||
module: ModuleKind.ES2015, | ||
noEmitOnError: false, | ||
noEmit: false, | ||
skipLibCheck: true, | ||
declaration: true, | ||
allowJs: true, | ||
checkJs: true, | ||
resolveJsonModule: true, | ||
sourceMap: true, | ||
inlineSourceMap: false, | ||
declarationMap: true, | ||
}; | ||
const COMPILERCACHE = new Map(); | ||
@@ -501,6 +533,3 @@ function createCompiler(options) { | ||
} | ||
const compilerOptions = Object.assign({}, options.compilerOptions, { noEmitOnError: false, noEmit: false, skipLibCheck: true, declaration: true, allowJs: true, checkJs: true, resolveJsonModule: true, | ||
// hm, there are still issues with this, I couldn’t get it to work locally | ||
// See https://github.com/Microsoft/TypeScript/issues/25662 | ||
declarationMap: false }); | ||
const compilerOptions = Object.assign({}, options.compilerOptions, OPTIONS_OVERRIDES); | ||
let diagnostic; | ||
@@ -522,2 +551,34 @@ const configParseResult = getParsedCommandLineOfConfigFile(configFileName, compilerOptions, Object.assign({}, sys, { onUnRecoverableConfigFileDiagnostic(d) { | ||
} | ||
function getEmitFiles(compiler, fileName) { | ||
const result = { | ||
dts: "", | ||
dtsMap: `{"mappings": ""}`, | ||
js: "", | ||
jsMap: `{"mappings": ""}`, | ||
}; | ||
if (fileName.endsWith(".d.ts")) { | ||
result.dts = sys.readFile(fileName, "utf-8"); | ||
return result; | ||
} | ||
const sourceFile = compiler.getSourceFile(fileName); | ||
// XXX(swatinem): maybe we should look at the diagnostics? :-D | ||
compiler.emit(sourceFile, (fileName, data) => { | ||
data = data.replace(SOURCEMAPPING_URL_RE, "").trim(); | ||
if (fileName.endsWith(".d.ts")) { | ||
result.dts = data; | ||
} | ||
else if (fileName.endsWith(".js")) { | ||
result.js = data; | ||
// NOTE(swatinem): hm, there are still issues with this, | ||
// I couldn’t get it to work locally | ||
// See https://github.com/Microsoft/TypeScript/issues/25662 | ||
// } else if (fileName.endsWith(".d.ts.map")) { | ||
// result.dtsMap = data; | ||
} | ||
else if (fileName.endsWith(".js.map")) { | ||
result.jsMap = data; | ||
} | ||
}); | ||
return result; | ||
} | ||
function getCachedCompiler(options) { | ||
@@ -545,22 +606,17 @@ const cacheKey = JSON.stringify(options); | ||
}, | ||
transform(code, fileName) { | ||
transform(_code, fileName) { | ||
const { compiler } = lazyCreate(); | ||
const sourceFile = compiler.getSourceFile(fileName); | ||
let dtsSource = sourceFile; | ||
let dtsFilename = fileName; | ||
let map = `{"mappings": ""}`; | ||
const emitFiles = getEmitFiles(compiler, fileName); | ||
if (options.mode === CompileMode.Js) { | ||
return { | ||
code: emitFiles.js, | ||
map: emitFiles.jsMap, | ||
}; | ||
} | ||
let code = emitFiles.dts; | ||
let dtsFileName = fileName; | ||
if (!fileName.endsWith(".d.ts")) { | ||
code = ""; | ||
const baseFileName = fileName.slice(0, -path.extname(fileName).length); | ||
compiler.emit(sourceFile, (fileName, data) => { | ||
if (fileName === `${baseFileName}.d.ts`) { | ||
dtsFilename = fileName; | ||
code = data.replace(SOURCEMAPPING_URL_RE, "").trim(); | ||
} | ||
// if (fileName === `${baseFileName}.d.ts.map`) { | ||
// map = data; | ||
// } | ||
}); | ||
dtsSource = createSourceFile(dtsFilename, code, ScriptTarget.Latest, true); | ||
dtsFileName = fileName.slice(0, -path.extname(fileName).length) + ".d.ts"; | ||
} | ||
const dtsSource = createSourceFile(dtsFileName, code, ScriptTarget.Latest, true); | ||
const converter = new Transformer(dtsSource); | ||
@@ -574,3 +630,7 @@ const ast = converter.transform(); | ||
code = code.replace(/(export\s+)default(\s+(function|class))/m, "$1declare$2"); | ||
return { code, ast, map }; | ||
return { | ||
code, | ||
ast, | ||
map: emitFiles.dtsMap, | ||
}; | ||
}, | ||
@@ -580,12 +640,27 @@ }; | ||
// @ts-ignore | ||
function dts(options = {}) { | ||
const filter = createFilter(options.include || ["*.ts+(|x)", "**/*.ts+(|x)", "*.json", "**/*.json"], options.exclude || []); | ||
const version = "0.6.0"; | ||
const TSLIB_ID = "\0tslib"; | ||
const BANNER = ` | ||
// FILE GENERATED BY \`rollup-plugin-dts@${version}\` | ||
// https://github.com/Swatinem/rollup-plugin-dts | ||
`.trim() + "\n\n"; | ||
function plugin(options = {}) { | ||
const filter = createFilter(options.include || ["*.ts+(|x)", "**/*.ts+(|x)"], options.exclude || []); | ||
const tslibFileName = require.resolve("tslib").replace("tslib.js", "tslib.es6.js"); | ||
const tslib = sys.readFile(tslibFileName, "utf-8"); | ||
const mode = options.compileMode || CompileMode.Types; | ||
const compiler = getCachedCompiler({ | ||
tsconfig: options.tsconfig || process.cwd(), | ||
compilerOptions: options.compilerOptions || {}, | ||
mode, | ||
}); | ||
return { | ||
name: "dts", | ||
banner: mode === CompileMode.Types ? BANNER : undefined, | ||
resolveId(importee, importer) { | ||
// istanbul ignore if | ||
if (importee === "tslib") { | ||
return TSLIB_ID; | ||
} | ||
if (!importer) { | ||
@@ -597,2 +672,6 @@ return null; | ||
}, | ||
load(id) { | ||
// istanbul ignore next | ||
return id === TSLIB_ID ? tslib : undefined; | ||
}, | ||
async transform(code, id) { | ||
@@ -607,3 +686,12 @@ // istanbul ignore if | ||
} | ||
function dts(options = {}) { | ||
options.compileMode = options.compileMode || CompileMode.Types; | ||
return plugin(options); | ||
} | ||
function js(options = {}) { | ||
options.compileMode = options.compileMode || CompileMode.Js; | ||
return plugin(options); | ||
} | ||
export default dts; | ||
export default plugin; | ||
export { CompileMode, plugin, dts, js, js as ts }; |
{ | ||
"name": "rollup-plugin-dts", | ||
"version": "0.5.0", | ||
"version": "0.6.0", | ||
"description": "An experiment to generate .d.ts rollup files", | ||
@@ -60,10 +60,9 @@ "keywords": [ | ||
"@types/jest": "^23.3.9", | ||
"@types/node": "^10.12.7", | ||
"@types/node": "^10.12.10", | ||
"fs-extra": "^7.0.1", | ||
"jest": "^23.6.0", | ||
"prettier": "^1.15.2", | ||
"rollup": "^0.67.1", | ||
"rollup": "^0.67.3", | ||
"rollup-plugin-json": "^3.1.0", | ||
"rollup-plugin-node-resolve": "^3.4.0", | ||
"rollup-plugin-typescript": "^1.0.0", | ||
"ts-jest": "^23.10.4", | ||
@@ -75,2 +74,3 @@ "ts-node": "^7.0.1", | ||
"peerDependencies": { | ||
"tslib": "*", | ||
"typescript": ">= 3.1.6" | ||
@@ -77,0 +77,0 @@ }, |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
56902
13
1378
3