ctix - Next generation Create TypeScript Index file
Installation
npm i ctix --save-dev
Usage
ctix create -p ./tsconfig.json
Introduction
You have to create a list of files when bundling with webpack and rollup.js, or creating documents with typedoc. It's boring to re-list files every time they change files change. ctix is a simple tool that automates the creation of file lists.
Why ctix?
An application project has a clear entry point, but if it is a library project, the entry point is not clear, so you have to create it yourself. typedoc have to explicitly specify what to document, even for an application project.
- use TypeScript compiler API
- create index.ts file by separating default export and export
- support isolatedModules option
- various ignore options such as gitignore, npmignore, citignore
Installation
npm install ctix --save-dev
Usage
ctix single -p [tsconfig.json file path]
How to works?
Manage index.ts(export file), not so convenience. If you add file or class, function you rewrite export file over and over again. ctix
help this work. ctix
read .npmignore, .ctiignore file after ignore there also you can use exclude configuration in tsconfig.json. See below example,
src/
app.ts
component/
Nav.ts
Button.ts
ctix create sub-command create index.ts file below.
src/
app.ts
> index.ts
// created from 'ctix'
export * from './component';
export * from './app';
component/
Nav.ts
Button.ts
> index.ts
// created from 'ctix'
export * from './Nav';
export * from './Button';
ctix single mode generate single file. This file suitable for webpack entrypoint.
src/
app.ts
component/
Nav.ts
Button.ts
> entrypoint.ts
// created from 'ctix'
export * from './src/app.ts'
export * from './src/component/Nav.ts'
export * from './src/component/Button.ts'
Pros & Cons
Pros
- pass tsconfig.json file, another process don't care about
- Support default exportation
- my_default_index.test.ts file create
export { default as myDefaultIndexTest } from './my_default_index.test.ts'
- Partial ignore
- specific export statement exclude on index.ts file.
- ex> { "my_lib_package.ts": ["exists", "temp"] }
- Skip empty directory
Cons
- It may be slow for some project
- since ctix uses TypeScript compiler API, big projects may take time to generate index files
What is difference module resolution?
Most inconvenience from import statement that solve module resolution. But module resolution don't helpful for entrypoint create for bundling. ctix helpful this work.
Example
Example of each command.
ctix create -p ./tsconfig.json
ctix c -p ./tsconfig.json
ctix single -p ./tsconfig.json
ctix s -p ./tsconfig.json
ctix remove -p ./tsconfig.json
ctix r -p ./tsconfig.json
ctix init
ctix i
Option
Name | Short | Default | Command | Description |
---|
--config | -c | | All | configuration file(.ctirc) path |
--project | -p | required | All | tsconfig.json path: you must pass path with filename, like this "./tsconfig.json" |
--exportFilename | -f | index.ts | create, single, clean | Export filename, if you not pass this field that use "index.ts" or "index.d.ts" |
--useSemicolon | -s | true | create, single | add semicolon on line ending at every export statement |
--useTimestamp | -t | false | create, single | timestamp write on ctix comment right-side, only works in useComment option set true |
--useComment | -m | true | create, single | ctix comment add on first line of creted export file(default index.ts) file, that remark created from ctix |
--quote | -q | ' | create, single | change quote character at export syntax |
--keepFileExt | -k | ' | create, single | keep file extension on export statement path literal |
--overwrite | -w | ' | create, single | overwrite each index.ts file |
--skipEmptyDir | -e | ' | create | empty directory skip create index.ts file |
--output | -o | N/A | single | output directory |
--useRootDir | -r | false | single | output file under rootDir in tsconfig.json. |
--includeBackup | N/A | false | clean | If this option set true on clean mode what will be delete backup file. |
Ignore
Ignore file 3 way that is .gitignore
, .npmignore
, .ctiignore
.
.ctiignore
.ctiignore file is json with comments. See below.
{
"juvenile/**": "*",
"wellmade/FlakyCls.ts": "*",
"wellmade/WhisperingCls.ts": "*",
"wellmade/ChildlikeCls.ts": ["transfer", "stomach"]
}
json key indicate file path. You can use glob pattern. If set '*'
character at value that is totally ignore file or glob pattern. If set string array that is ignore type name array.
ignore testcase
testcase directory ignore using glob pattern.
{
// ignore testcase file
"**/__tests__/*": "*"
}
The testcase file is ignored if you add to the ignore file or if there is no export syntax.
rootDir, rootDirs
useRootDir option activate using rootDir option in tsconfig.json. This option run below flowchart.
CLI with .ctirc
ctix cli support .ctirc
configuration file. Available name is only .ctirc
. Also cti cli arguments forced applied. And .ctirc
file can write json with comments.
.ctirc creation
You can use cli for .ctirc
file creation.
> cti init
> cti init -p ./server/tsconfig.json
Breaking Change
0.6.x and 1.x version big different. See migration guide. cli command, option, ignore file changed. Support TypeScript 4.7.2
and new file extensions(.mts, .cts, etc)
.
Programming interface
Each command can use that function. Each function can pass isMessageDisplay flag second parameter. isMessageDisplay pass false or undefined after not display console message and progress.
Function | Argument | command |
---|
createWritor | TCreateOptionWithDirInfo, isMessageDisplay | create |
singleWritor | TSingleOptionWithDirInfo, isMessageDisplay | single |
removeIndexFile | TRemoveOptionWithDirInfo, isMessageDisplay | remove |
createInitFile | TTInitOptionWithDirInfo, isMessageDisplay | init |
Language