Skip to content

Commit

Permalink
chore: entirely too much
Browse files Browse the repository at this point in the history
  • Loading branch information
boneskull committed Oct 1, 2024
1 parent c7696a7 commit 6689174
Show file tree
Hide file tree
Showing 117 changed files with 1,825 additions and 1,289 deletions.
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,11 @@ packages/docs/src/content/docs/api
# sometimes vscode mocha runner creates this
/__snapshots__

# stuff generated by tshy
packages/*/src/**/*.d.ts
packages/*/src/**/*.js
packages/*/src/**/*.map
packages/*/test/**/*.d.ts
packages/*/test/**/*.js
packages/*/test/**/*.map
/src
90 changes: 28 additions & 62 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

58 changes: 54 additions & 4 deletions packages/midnight-smoker/src/capabilities.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,27 @@
/**
* "Capabilities" are kind of like DI "services", except that there's no service
* locator. Instead, various functions may accept `capabilities` objects. Yeah,
* the usual way.
*
* This is mainly useful for testing, but may find use by third parties.
*
* @packageDocumentation
* @see `ExecFn` should also be used in this manner
*/

import type fs from 'node:fs';
import type os from 'node:os';

import {type ImportFn} from '#util/importer';

/**
* A filesystem capabilities object.
*
* This should contain everything that `midnight-smoker` uses from `node:fs`.
* This includes everything `midnight-smoker`'s _dependencies_ use from `fs` and
* implies that those dependencies should accept `FsCapabilities` objects as
* well (`glob` does!).
*
* @see `FileManager` for most usage (it should be _all_ usage)
*/
export type FsCapabilities = {
promises: Pick<
typeof fs.promises,
Expand All @@ -19,15 +38,46 @@ export type FsCapabilities = {
>;
} & Pick<typeof fs, 'existsSync' | 'readFileSync' | 'writeFileSync'>;

/**
* An operating system capabilities object.
*
* This should contain everything that `midnight-smoker` uses from `node:os`.
*/
export type OsCapabilties = Pick<typeof os, 'homedir' | 'tmpdir'>;

/**
* A function which resolves a module.
*
* Similar to `NodeRequire`
*/
export type ResolveFn = (moduleId: string, from?: string) => string;

/**
* This should contain everything that `midnight-smoker` uses from `node:path`.
*
* @privateRemarks
* Unfortunately, it doesn't. TODO: use this
*/
export type PathCapabilities = {
dirname: DirnameFn;
isAbsolute: IsAbsoluteFn;
};

export type IsAbsoluteFn = (path: string) => boolean;

export type DirnameFn = (path: string) => string;

export type LoaderCapabilities = {
importer?: ImportFn;
/**
* Loader capabilities. Used for dynamically loading modules (plugins, mostly or
* entirely)
*/
export type LoaderCapabilities<T = unknown> = {
importer?: ImportFn<T>;
resolve?: ResolveFn;
};

/**
* A function that imports a module asynchronously (like `import()`)
*/

export type ImportFn<T = unknown> = (moduleId: string | URL) => Promise<T>;
2 changes: 1 addition & 1 deletion packages/midnight-smoker/src/cli/command/run-script-cmd.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
*/
import {handleRejection} from '#cli/cli-util';
import {Smoker} from '#smoker';
import {castArray} from '#util/common';
import {createDebug} from '#util/debug';
import {castArray} from '#util/util';
import {
type ArgumentsCamelCase,
type Argv,
Expand Down
4 changes: 1 addition & 3 deletions packages/midnight-smoker/src/cli/smoker-cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import {ConfigReader} from '#config/config-reader';
import {SCRIPT_NAME} from '#constants';
import {createDebug} from '#util/debug';
import {FileManager} from '#util/filemanager';
import {omit} from 'lodash';
import terminalLink from 'terminal-link';
import {hideBin} from 'yargs/helpers';
import yargs from 'yargs/yargs';
Expand Down Expand Up @@ -48,8 +47,7 @@ async function main(args: string[]): Promise<void> {
.command(new ViewCommand())
.middleware(async (argv) => {
const config = await ConfigReader.read({configFile: argv.config});
// ensure "config" cannot be set using the config file.
mergeOptions(argv, omit(config, ['config', 'c']));
mergeOptions(argv, config ?? {});
})
// this is the USA dammit
.epilog(
Expand Down
12 changes: 10 additions & 2 deletions packages/midnight-smoker/src/config/config-reader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
import {SCRIPT_NAME} from '#constants';
import {constant} from '#constants/create-constant';
import {type RawSmokerOptions} from '#schema/smoker-options';
import {toDualCasedObject} from '#util/common';
import {createDebug} from '#util/debug';
import {FileManager} from '#util/filemanager';
import {toDualCasedObject} from '#util/util';

import {Midconfig, type MidconfigOptions} from './midconfig';

Expand Down Expand Up @@ -60,6 +60,9 @@ export type ConfigReaderReadOptions = {
* config file (if possible).
*
* Instantiate via {@link ConfigReader.create}; constructor is private
*
* @privateRemarks
* Why is this even a class
*/
export class ConfigReader {
readonly #midconfig: Midconfig;
Expand Down Expand Up @@ -118,7 +121,12 @@ export class ConfigReader {
opts = opts.default as RawSmokerOptions;
}

return toDualCasedObject(opts);
// we set "config" here which overwrites whatever the user provided. if a
// config file contains a `config` field (which seems silly), it will be
// overwritten by this.
return toDualCasedObject({...opts, config: result.filepath});
} else {
debug('Found no config file');
}
return opts;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import {TS_CONFIG_EXTENSIONS} from '#constants';
import {createDebug} from '#util/debug';
import {FileManager} from '#util/filemanager';
import {hrRelativePath} from '#util/format';
import {isError} from '#util/guard/common';
import {mimport} from '#util/importer';
import {hrRelativePath} from '#util/util';
import path from 'node:path';
import {type TranspileOptions} from 'typescript';

Expand Down
4 changes: 2 additions & 2 deletions packages/midnight-smoker/src/error/aggregate-smoker-error.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import {BaseSmokerError} from '#error/base-error';
import {fromUnknownError} from '#util/error-util';
import {castArray} from '#util/common';
import {DOUBLE_NL, indent, joinLines} from '#util/format';
import {fromUnknownError} from '#util/from-unknown-error';
import {isSomeSmokerError} from '#util/guard/some-smoker-error';
import {jsonify} from '#util/jsonify';
import {castArray} from '#util/util';

import {type SmokerErrorCode, type SmokerErrorName} from './codes';
import {
Expand Down
4 changes: 2 additions & 2 deletions packages/midnight-smoker/src/error/exec-error.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ export class ExecError
extends BaseSmokerError<ExecOutput>
implements ExecOutput
{
public readonly command: string;
public readonly command?: string;

public readonly cwd: string;
public readonly cwd?: string;

public readonly exitCode?: number;

Expand Down
2 changes: 0 additions & 2 deletions packages/midnight-smoker/src/error/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
export * from '../util/stack-renderer';

export * from './abort-error';

export * from './aggregate-smoker-error';
Expand Down
4 changes: 2 additions & 2 deletions packages/midnight-smoker/src/error/install-error.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import {BaseSmokerError} from '#error/base-error';
import {ExecError} from '#error/exec-error';
import {type ExecOutput} from '#schema/exec-result';
import {type StaticPkgManagerSpec} from '#schema/static-pkg-manager-spec';
import {fromUnknownError} from '#util/error-util';
import {formatPackage, formatPkgManager} from '#util/format';
import {fromUnknownError} from '#util/from-unknown-error';
import {isExecOutput} from '#util/guard/exec-output';
import {isSmokerError} from '#util/index';
import {isSmokerError} from '#util/guard/smoker-error';

/**
* @group Errors
Expand Down
2 changes: 1 addition & 1 deletion packages/midnight-smoker/src/error/lifecycle-error.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {BaseSmokerError} from '#error/base-error';
import {type StaticPluginMetadata} from '#plugin/static-plugin-metadata';
import {fromUnknownError} from '#util/error-util';
import {fromUnknownError} from '#util/from-unknown-error';

export type LifecycleStage = 'setup' | 'teardown';

Expand Down
2 changes: 1 addition & 1 deletion packages/midnight-smoker/src/error/plugin-import-error.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {BaseSmokerError} from '#error/base-error';
import {type StaticPluginMetadata} from '#plugin/static-plugin-metadata';
import {fromUnknownError} from '#util/error-util';
import {fromUnknownError} from '#util/from-unknown-error';
import {isString} from '#util/guard/common';
import {serialize} from '#util/serialize';

Expand Down
Loading

0 comments on commit 6689174

Please sign in to comment.