UNPKG

@oazmi/build-tools

Version:

general deno build tool scripts which I practically use in all of my typescript repos

100 lines 7.52 kB
import { type BuildOptions as EsBuildOptions, type TransformOptions as EsTransformOptions } from "esbuild"; import { type MaybePromise } from "./deps.js"; import type { BaseBuildConfig, TemporaryFiles } from "./typedefs.js"; export { denoPlugins } from "./deps/jsr.io/@oazmi/esbuild-plugin-deno/0.4.5/src/mod.js"; export { build as esBuild, stop as esStop, transform as esTransform, type BuildOptions as EsBuildOptions, type OutputFile as EsOutputFile, type Plugin as EsPlugin, type PluginBuild as EsPluginBuild, type TransformOptions as EsTransformOptions } from "esbuild"; /** the configuration for in-memory bundling of your typescript code to javascript text, using the transformation function {@link bundle}. <br> * the {@link dir} you provide here shall point to a *virtual* path where you wish for your distribution files to exist. */ export interface BundleConfig extends BuildDistConfig { copy?: never; text?: never; dryrun?: never; esbuild?: Omit<Partial<EsBuildOptions>, "outdir" | "outfile" | "plugins" | "entryPoints" | "write">; } /** the configuration for the distribution-building function {@link buildDist}. */ export interface BuildDistConfig extends BaseBuildConfig { /** the path to the folder where you wish to create your distribution release. * if a relative path is provided, then it will be resolved as a path relative to Deno's current working directory. (which is generally where `deno.json` resides.) * the directory provided here will serve as esbuild configuration's {@link esbuild["outdir"] | `outdir` option}. * * @defaultValue `"./dist/"` */ dir: string; /** the collection of files to compile. this option translates into esbuild's {@link EsBuildOptions.entryPoints | entryPoints} configuration field. <br> * if this is not provided, then the {@link DenoJson.exports | `exports` field} is used from your {@link deno | `deno.json`} as the entry points for esbuild. * * @defaultValue `undefined`, so that your `deno.json`'s `exports` are used as entry points. */ input?: null | undefined | string | string[] | { [output_name: string]: string; }; /** [`esbuild`](https://www.npmjs.com/package/esbuild) related additional build options for you to configure. <br> * note that `outdir` and `outfile` options are made unavailable, since they are controlled by your {@link dir} value. <br> * in addition, esbuild `plugins` must be configured via {@link plugins}. */ esbuild?: Omit<Partial<EsBuildOptions>, "outdir" | "outfile" | "plugins" | "entryPoints">; /** apply a collection of optional [`esbuild`](https://www.npmjs.com/package/esbuild) plugins. * * @defaultValue {@link denoPlugins} (via [@oazmi/esbuild-plugin-deno](https://jsr.io/@oazmi/esbuild-plugin-deno)) */ plugins?: EsBuildOptions["plugins"]; /** stop running esbuild's wasm-service after compilation? * booting up wasm takes a little while, so you'll want to turn this option to `false` if you are calling the {@link buildDist} function multiple times for multiple compilations. * on the other hand, it is good to stop the service on your very last compilation-run, as keeping the service alive results in prolonging the time it takes for deno to exit it process. * (at least this is how it was in the earlier releases of esbuild, but I do recall seeing a PR that supposedly addressed this issue) * * @defaultValue `false` */ stop?: boolean; } /** a single configuration for the re-transformation function {@link transform}. */ export interface TransformationConfig { /** specify the output file-path capturing pattern for applying this transformation onto. * you have the ability to use a glob-string, or a regular expression (`RegExp`), or a function that returns `true` when the input file name is accepted. * if no pattern is provided, then all of your input im-memory files will be processed through this transformation. * * @defaultValue `undefined` */ pattern?: null | undefined | string | RegExp | PathPatternMatchingFn; /** the `esbuild` loader to use for transforming the captured file's contents. * if nothing is provided, then it defaults to javascript (`"js"`). * * @defaultValue `"js"` */ loader?: EsTransformOptions["loader"]; /** specify additional `esbuild` transformer api options to configure. */ options?: Omit<EsTransformOptions, "loader">; } /** a function, used by {@link TransformationConfig}, for testing if a certain file by the given `file_path` name should be transformed or not. * - if the function returns a `false`, then the file shall not be transformed. * - if the function returns a `true`, then the file will be transformed, and its name will remain the same as before (unchanged). * - if the function returns a `string`, then the file will be transformed, and it will be renamed to the output `string` of the function. */ export type PathPatternMatchingFn = (file_path: string) => boolean | string; /** a virtual file is described as a tuple of its location/destination path name and its file contents as a `Uint8Array` binary. */ export type VirtualFileOutput = [destination: string, content: Uint8Array]; /** the {@link bundle} function's returned value is an array of virtual in-memory files. */ export type BundleOutput = Array<VirtualFileOutput>; /** this function bundles your deno-project's {@link DenoJson.exports | exports} in-memory, using the blazing fast [`esbuild`](https://github.com/evanw/esbuild) bundler, * along with the useful [`@oazmi/esbuild-plugin-deno`](https://jsr.io/@oazmi/esbuild-plugin-deno) default plugin. <br> * the output of this function is an array of {@link WritableFileConfig}, consisting of the destination path and the content of the bundled javascript/css code (as a binary `Uint8Array`). * * by default, this function reads your "deno.json" file's {@link DenoJson.exports | exports field}, * but you can manually modify the `entryPoints` by specifying them in the {@link bundle_config | configuration's} `esbuild.entryPoints` field. <br> * take a look at {@link BundleConfig} to see what configuration options are available. <br> */ export declare const bundle: (bundle_config?: Partial<BundleConfig>) => Promise<BundleOutput>; /** this function bundles your deno-project's {@link DenoJson.exports | exports} and outputs to your configuration's {@link build_config["dir"] | `dir`} directory on your filesystem. * under the hood, it uses the blazing fast [`esbuild`](https://github.com/evanw/esbuild) tool for bundling and for its native filesystem writing capabilities. * * by default, this function reads your "deno.json" file's {@link DenoJson.exports | exports field}, * but you can manually modify the `entryPoints` by specifying them in the {@link bundle_config | configuration's} `esbuild.entryPoints` field. <br> * take a look at {@link BuildDistConfig} to see what configuration options are available. <br> */ export declare const buildDist: (build_config: Partial<BuildDistConfig>) => Promise<TemporaryFiles>; /** apply additional transformations onto your {@link BundleOutput | virtual files}. * this is especially useful when you wish to further minify a bundled javascript output (double minification). */ export declare const transform: (input_files: MaybePromise<BundleOutput>, transformation_configs: Array<TransformationConfig>) => Promise<BundleOutput>; //# sourceMappingURL=dist.d.ts.map