mirror of
https://github.com/yume-chan/ya-webadb.git
synced 2025-10-03 09:49:24 +02:00
doc: add README for ts-package-builder
This commit is contained in:
parent
d80288ec9b
commit
b8de6b70d8
6 changed files with 140 additions and 8 deletions
|
@ -1,4 +1,4 @@
|
||||||
import { Adb } from '../../adb';
|
import type { Adb } from '../../adb';
|
||||||
import { AdbLegacyShell } from './legacy';
|
import { AdbLegacyShell } from './legacy';
|
||||||
import { AdbShellProtocol } from './protocol';
|
import { AdbShellProtocol } from './protocol';
|
||||||
import type { AdbShell, AdbShellConstructor } from './types';
|
import type { AdbShell, AdbShellConstructor } from './types';
|
||||||
|
@ -10,8 +10,10 @@ export * from './utils';
|
||||||
|
|
||||||
export interface AdbChildProcessOptions {
|
export interface AdbChildProcessOptions {
|
||||||
/**
|
/**
|
||||||
* A list of `AdbShellConstructor`s that can be used.
|
* A list of `AdbShellConstructor`s to be used.
|
||||||
* Different `AdbShell`s have different capabilities. Please check the documentation for each `AdbShell`
|
*
|
||||||
|
* Different `AdbShell` has different capabilities, thus requires specific adaptations.
|
||||||
|
* Check each `AdbShell`'s documentation for details.
|
||||||
*
|
*
|
||||||
* The first one whose `isSupported` returns `true` will be used.
|
* The first one whose `isSupported` returns `true` will be used.
|
||||||
* If no `AdbShell` is supported, an error will be thrown.
|
* If no `AdbShell` is supported, an error will be thrown.
|
||||||
|
|
|
@ -12,7 +12,7 @@ export interface AdbShell {
|
||||||
/**
|
/**
|
||||||
* Notifies that new data has been written into the `stderr` stream.
|
* Notifies that new data has been written into the `stderr` stream.
|
||||||
*
|
*
|
||||||
* The current shell may not support splitting output streams
|
* Some `AdbShell`s may not support separate output streams
|
||||||
* and will always fire the `onStdout` event instead.
|
* and will always fire the `onStdout` event instead.
|
||||||
*/
|
*/
|
||||||
readonly onStderr: Event<ArrayBuffer>;
|
readonly onStderr: Event<ArrayBuffer>;
|
||||||
|
@ -21,7 +21,7 @@ export interface AdbShell {
|
||||||
* Notifies that the current process has exited.
|
* Notifies that the current process has exited.
|
||||||
*
|
*
|
||||||
* The event arg is the exit code.
|
* The event arg is the exit code.
|
||||||
* The current shell may not support returning exit code and will always return `0` instead.
|
* Some `AdbShell`s may not support returning exit code and will always return `0` instead.
|
||||||
*/
|
*/
|
||||||
readonly onExit: Event<number>;
|
readonly onExit: Event<number>;
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ export interface AdbShell {
|
||||||
/**
|
/**
|
||||||
* Resizes the current shell.
|
* Resizes the current shell.
|
||||||
*
|
*
|
||||||
* The current shell may not support resizing and will always ignore calls to this method.
|
* Some `AdbShell`s may not support resizing and will always ignore calls to this method.
|
||||||
*/
|
*/
|
||||||
resize(rows: number, cols: number): ValueOrPromise<void>;
|
resize(rows: number, cols: number): ValueOrPromise<void>;
|
||||||
|
|
||||||
|
|
128
toolchain/ts-package-builder/README.md
Normal file
128
toolchain/ts-package-builder/README.md
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
# TypeScript NPM Package Builder (for myself)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
(This package is not yet published to NPM registry, so presumably)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ npm install --dev @yume-chan/ts-package-builder typescript
|
||||||
|
```
|
||||||
|
|
||||||
|
TypeScript is a peer dependency that must be installed separately (so you can use any version you want).
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ npm install tslib
|
||||||
|
```
|
||||||
|
|
||||||
|
The default configuration has `"importHelpers": true`, so `tslib` is required (and it is a production dependency, not dev dependency).
|
||||||
|
|
||||||
|
## Config
|
||||||
|
|
||||||
|
A `tsconfig.json` file at package root is required for both this builder and editors.
|
||||||
|
|
||||||
|
```jsonc
|
||||||
|
{
|
||||||
|
// Extends default configurations.
|
||||||
|
"extends": "./node_modules/@yume-chan/ts-package-builder/tsconfig.base.json",
|
||||||
|
|
||||||
|
// (Optional) Add override configurations.
|
||||||
|
"compilerOptions": {
|
||||||
|
// All TypeScript configurations are allowed.
|
||||||
|
"target": "ES2016",
|
||||||
|
|
||||||
|
// Add extra ambient types.
|
||||||
|
// Don't forget to include "jest" unless you don't write unit tests.
|
||||||
|
// The default is `[ "jest" ]`
|
||||||
|
"types": [
|
||||||
|
"w3c-web-usb",
|
||||||
|
"jest",
|
||||||
|
"node"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// (Optional) Specify types that's only used in tests.
|
||||||
|
// They will be excluded in ESModule build,
|
||||||
|
// to make sure library code doesn't accidentally use them.
|
||||||
|
// (for example, a browser targeted libraries should not use types from `@types/node`)
|
||||||
|
"testTypes": [
|
||||||
|
"jest",
|
||||||
|
"node"
|
||||||
|
],
|
||||||
|
// (Optional) Add project references to improve editing experience.
|
||||||
|
// However, because the builder is intended to be used with some monorepo manager
|
||||||
|
// (lerna, yarn workspace, rush, etc.), and they all have good built-in support
|
||||||
|
// for building all packages following dependency graph, it **does not** use
|
||||||
|
// project references when building.
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "../dependency-a/tsconfig.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "../dependency-b/tsconfig.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ npx build-ts-package
|
||||||
|
```
|
||||||
|
|
||||||
|
Or add a script to `package.json`
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"scripts": {
|
||||||
|
"build": "build-ts-package",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The builder compiles for both CommonJS and ESModule, also generates source maps, TypeScript declarations, and declaration maps.
|
||||||
|
|
||||||
|
| Module | Output Directory | Excluded Files | Excluded Types |
|
||||||
|
| ------------------ | ---------------- | -------------- | -------------- |
|
||||||
|
| CommonJS | `cjs` | - | - |
|
||||||
|
| ESModule | `esm` | `*.spec.ts` | `@types/jest` |
|
||||||
|
| Declaration (d.ts) | `dts` | `*.spec.ts` | `@types/jest` |
|
||||||
|
|
||||||
|
Example `package.json`:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"main": "cjs/index.js",
|
||||||
|
"module": "esm/index.js",
|
||||||
|
"types": "dts/index.d.ts",
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Unit test with Jest
|
||||||
|
|
||||||
|
Test file convention: put `.spec.ts` files inside `src`, alongside the source file that will be tested.
|
||||||
|
|
||||||
|
Like this:
|
||||||
|
|
||||||
|
- src
|
||||||
|
- index.ts
|
||||||
|
- index.spec.ts
|
||||||
|
|
||||||
|
The `.spec.ts` files will be compiled to CommonJS for Jest (so no `ts-jest` required).
|
||||||
|
|
||||||
|
Use the following `jest.config.js` file to find them:
|
||||||
|
|
||||||
|
```js
|
||||||
|
module.exports = {
|
||||||
|
testMatch: ['<rootDir>/cjs/**/*.spec.js'],
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## Publishing
|
||||||
|
|
||||||
|
Because `.spec.ts` files have been compiled to CommonJS, you can exclude them using `.npmignore`:
|
||||||
|
|
||||||
|
```gitignore
|
||||||
|
**/*.spec.ts
|
||||||
|
**/*.spec.js
|
||||||
|
**/*.spec.js.map
|
||||||
|
```
|
|
@ -18,5 +18,8 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"json5": "2.2.0",
|
"json5": "2.2.0",
|
||||||
"@types/jest": "26.0.23"
|
"@types/jest": "26.0.23"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"typescript": "^4.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,6 @@ fs.mkdirSync(temp, { recursive: true });
|
||||||
fs.rmSync(path.resolve(cwd, 'cjs'), { force: true, recursive: true });
|
fs.rmSync(path.resolve(cwd, 'cjs'), { force: true, recursive: true });
|
||||||
fs.rmSync(path.resolve(cwd, 'esm'), { force: true, recursive: true });
|
fs.rmSync(path.resolve(cwd, 'esm'), { force: true, recursive: true });
|
||||||
fs.rmSync(path.resolve(cwd, 'dts'), { force: true, recursive: true });
|
fs.rmSync(path.resolve(cwd, 'dts'), { force: true, recursive: true });
|
||||||
fs.rmSync(path.resolve(cwd, 'tsconfig.tsbuildinfo'), { force: true, recursive: true });
|
|
||||||
|
|
||||||
const tsconfigPath = path.resolve(cwd, 'tsconfig.json');
|
const tsconfigPath = path.resolve(cwd, 'tsconfig.json');
|
||||||
const tsconfigValue = JSON5.parse(fs.readFileSync(tsconfigPath), 'utf8');
|
const tsconfigValue = JSON5.parse(fs.readFileSync(tsconfigPath), 'utf8');
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue