Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

✨ improve: stricter typings #2393

Merged
merged 4 commits into from
Jul 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion config/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"composite": true,
"declaration": true,
"declarationMap": false,
"emitDecoratorMetadata": true,
"emitDecoratorMetadata": false,
"esModuleInterop": true,
"experimentalDecorators": true,
"forceConsistentCasingInFileNames": true,
Expand Down
70 changes: 15 additions & 55 deletions config/vitest/alias.ts
Original file line number Diff line number Diff line change
@@ -1,60 +1,20 @@
import {join, relative} from 'node:path'

import {path} from '@repo/constants'
import globby from '@roots/bud-support/globby'

const packages = await globby(path(`sources/@roots/*`), {
absolute: true,
onlyDirectories: true,
})

export default {
'@roots/bud': path(`sources/@roots/bud/src`),
'@roots/bud-api': path(`sources/@roots/bud-api/src`),
'@roots/bud-api/methods': path(`sources/@roots/bud-api/src/methods`),
'@roots/bud-api/service': path(`sources/@roots/bud-api/src/service`),
'@roots/bud-babel': path(`sources/@roots/bud-babel/src`),
'@roots/bud-build': path(`sources/@roots/bud-build/src`),
'@roots/bud-build/handlers': path(
`sources/@roots/bud-build/src/handlers`,
),
'@roots/bud-cache': path(`sources/@roots/bud-cache/src`),
'@roots/bud-compiler': path(`sources/@roots/bud-compiler/src`),
'@roots/bud-compress': path(`sources/@roots/bud-compress/src`),
'@roots/bud-dashboard': path(`sources/@roots/bud-dashboard/src`),
'@roots/bud-extensions': path(`sources/@roots/bud-extensions/src`),
'@roots/bud-framework': path(`sources/@roots/bud-framework/src`),
'@roots/bud-framework/extension': path(
`sources/@roots/bud-framework/src/extension`,
),
'@roots/bud-framework/extension/decorators': path(
`sources/@roots/bud-framework/src/extension/decorators`,
),
'@roots/bud-hooks': path(`sources/@roots/bud-hooks/src`),
'@roots/bud-preset-react': path(`sources/@roots/bud-preset-react/src`),
'@roots/bud-preset-recommend': path(
`sources/@roots/bud-preset-recommend/src`,
),
'@roots/bud-react': path(`sources/@roots/bud-react/src`),
'@roots/bud-sass': path(`sources/@roots/bud-sass/src`),
'@roots/bud-server': path(`sources/@roots/bud-server/src`),
'@roots/bud-server/middleware': path(
`sources/@roots/bud-server/src/middleware`,
),
'@roots/bud-support': path(`sources/@roots/bud-support/src`),
'@roots/bud-swc': path(`sources/@roots/bud-swc/src`),
'@roots/bud-tailwindcss-theme-json': path(
`sources/@roots/bud-tailwindcss-theme-json/src`,
),
'@roots/bud-wordpress-externals': path(
`sources/@roots/bud-wordpress-externals/src`,
),
'@roots/bud/services': path(`sources/@roots/bud/src/services`),
'@roots/container': path(`sources/@roots/container/src`),
'@roots/entrypoints-webpack-plugin': path(
`sources/@roots/entrypoints-webpack-plugin/src`,
),
'@roots/sage': path(`sources/@roots/sage/src`),
'@roots/wordpress-dependencies-webpack-plugin': path(
`sources/@roots/wordpress-dependencies-webpack-plugin/src`,
),
'@roots/wordpress-externals-webpack-plugin': path(
`sources/@roots/wordpress-externals-webpack-plugin/src`,
),
'@roots/wordpress-hmr': path(`sources/@roots/wordpress-hmr/src`),
'@roots/wordpress-hmr/loader': path(
`sources/@roots/wordpress-hmr/src/loader`,
...packages.reduce((aliases, packageRoot) => {
const signifier = relative(path(), packageRoot)
aliases[signifier] = join(packageRoot, `src`)
return aliases
}, {}),
'@roots/filesystem/src/vendor/sdk': path(
`sources/@roots/filesystem/vendor/sdk`,
),
}
41 changes: 22 additions & 19 deletions sources/@repo/markdown-kit/readme/renderer/handlebars.ts
Original file line number Diff line number Diff line change
@@ -1,35 +1,38 @@
import type {TemplateDelegate} from 'handlebars'
import type { TemplateDelegate } from "handlebars";

import {path} from '@repo/constants'
import fs from 'fs-jetpack'
import {globby} from 'globby'
import Handlebars from 'handlebars'
import { path } from "@repo/constants";
import fs from "fs-jetpack";
import { globby } from "globby";
import Handlebars from "handlebars";

let handlebars = Handlebars
let handlebars = Handlebars;

const sources = await globby([
path(`sources/@repo/markdown-kit/readme/partials/*.md`),
])
]);

const partials = await sources.reduce(async (promised, filePath) => {
const dictionary = await promised
const templateSource = await fs.readAsync(filePath).then(String)
const dictionary = await promised;
const templateSource = await fs.readAsync(filePath).then(String);

const lastSegment = filePath.split(`/`).pop();
if (!lastSegment) return dictionary;

return {
...dictionary,
[`${filePath.split(`/`).pop().split(`.`).shift()}`]: templateSource,
}
}, Promise.resolve({}))
[`${lastSegment.split(`.`).shift()}`]: templateSource,
};
}, Promise.resolve({}));

handlebars.registerPartial(partials)
partials && handlebars.registerPartial(partials);

handlebars.registerHelper(`dotPath`, function (context, options) {
return `${options.fn(this).replace(/\./, options.data.root.name)}`
})
return `${options.fn(this).replace(/\./, options.data.root.name)}`;
});

handlebars.registerHelper(`raw`, function (context) {
return context.fn(this)
})
return context.fn(this);
});

export {handlebars, Handlebars}
export type {TemplateDelegate}
export { handlebars, Handlebars };
export type { TemplateDelegate };
37 changes: 20 additions & 17 deletions sources/@repo/markdown-kit/releases/data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,12 @@ type releases = Array<release>
/**
* Request cache
*/
let request: request
let request: request = {}

/**
* Release cache
*/
let releases: Array<release>
const releases: Array<release> = []

// eslint-disable-next-line
const octokit = new Octokit({auth: process.env.GITHUB_TOKEN})
Expand All @@ -62,7 +63,7 @@ const parse = (release: ghRelease): release => {
return {
...release,
body: release.body.split(`\n`).slice(1).join(`\n`).trim(),
intro: release.body.split(`\n`).shift().trim().trim(),
intro: release.body.split(`\n`).shift()?.trim() ?? ``,
major: parseVersion(major),
minor: parseVersion(minor),
patch: parseVersion(patch),
Expand All @@ -85,20 +86,22 @@ if (!request?.data) {
}
}

if (!releases) {
releases = request?.data
?.filter(filter)
.map(parse)
.sort((a, b) => {
if (a.major > b.major) return -1
if (a.major < b.major) return 1
return 0
})
.sort((a, b) => {
if (a.minor > b.minor) return -1
if (a.minor < b.minor) return 1
return 0
})
if (request.data) {
releases.push(
...request.data
?.filter(filter)
.map(parse)
.sort((a, b) => {
if (a.major > b.major) return -1
if (a.major < b.major) return 1
return 0
})
.sort((a, b) => {
if (a.minor > b.minor) return -1
if (a.minor < b.minor) return 1
return 0
}),
)

await fs.writeAsync(
path(`sources/@repo/docs/generated/releases/data.json`),
Expand Down
12 changes: 7 additions & 5 deletions sources/@roots/bud-api/src/methods/experiments/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import type {Bud} from '@roots/bud-framework'
import type {Configuration} from '@roots/bud-framework/config'

export type Parameters<
T extends
`${keyof Configuration[`experiments`]}` = `${keyof Configuration[`experiments`]}`,
T extends `${keyof Configuration[`experiments`] &
string}` = `${keyof Configuration[`experiments`] & string}`,
> = [
Partial<Configuration[`experiments`]> | T,
Configuration[`experiments`][T]?,
Expand All @@ -17,12 +17,14 @@ export const experiments: experiments = function (
this: Bud,
...params
): Bud {
if (params.length === 1) {
if (typeof params[0] === `object`) {
const experimentsObject = params[0] as Configuration[`experiments`]

this.hooks.on(`build.experiments`, (experiments = {}) => ({
...experiments,
...params[0],
...experimentsObject,
}))
} else if (typeof params[0] === `string`) {
} else {
this.hooks.on(`build.experiments`, (experiments = {}) => ({
...experiments,
[`${params[0]}`]: params[1],
Expand Down
4 changes: 2 additions & 2 deletions sources/@roots/bud-api/src/methods/proxy/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ export const assignUrl = (bud: Bud, maybeURL: string | URL) => {
*/
export const assignOptionsCallback = (
bud: Bud,
callback: (options?: Options) => Options,
value: ((options: Options | undefined) => Options) | Options,
) => {
bud.hooks.on(`dev.middleware.proxy.options`, callback)
bud.hooks.on(`dev.middleware.proxy.options`, value)
}

/**
Expand Down
30 changes: 19 additions & 11 deletions sources/@roots/bud-api/src/methods/proxy/proxy.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,37 +13,45 @@ export interface Options extends HttpProxy.Options {
autoRewrite?: boolean
buffer?: Stream
changeOrigin?: boolean
cookieDomainRewrite?: Record<string, string>
cookiePathRewrite?: Record<string, string>
ejectPlugins?: boolean
cookieDomainRewrite?:
| {[oldDomain: string]: string}
| false
| string
| undefined
cookiePathRewrite?:
| {[oldDomain: string]: string}
| false
| string
| undefined
ejectPlugins: boolean
followRedirects?: boolean
forward?: ProxyOptions[`forward`]
headers?: Record<string, string>
hostRewrite?: string
ignorePath?: boolean
localAddress?: string
logger?: Pick<Console, `error` | `info` | `warn`>
on?: ProxyOptions[`on`]
logger: Pick<Console, `error` | `info` | `warn`>
on: ProxyOptions[`on`]
onProxyReq?: any
onProxyRes?: any
pathFilter?: Array<string>
pathRewrite?: Record<string, string>
plugins?: ProxyOptions[`plugins`]
pathFilter: Array<string>
pathRewrite?: HttpProxy.Options[`pathRewrite`]
plugins: ProxyOptions[`plugins`]
prependPath?: boolean
preserveHeaderKeyCase?: boolean
protocolRewrite?: `http` | `https`
protocolRewrite?: HttpProxy.Options[`protocolRewrite`]
proxyTimeout?: number
/**
* Not a proxy-party option
*
* Used by default `onProxyRes` handler to rewrite the page body
*/
replacements?: ReplacementCallback | ReplacementTuples
router?: Record<string, string | URL>
router?: HttpProxy.Options[`router`]
secure?: boolean
selfHandleResponse?: boolean
ssl?: HttpsServerOptions
target?: URL
target?: HttpProxy.Options[`target`]
timeout?: number
toProxy?: boolean
ws?: boolean
Expand Down
12 changes: 5 additions & 7 deletions sources/@roots/bud-babel/src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,15 @@ export default class BabelExtension extends Extension {
* Cache directory
*/
public get cacheDirectory(): LoaderOptions[`cacheDirectory`] {
return this.app.cache.enabled
return this.app.cache.enabled && this.app.cache.cacheDirectory
? this.app.path(this.app.cache.cacheDirectory, `babel`)
: false
}

/**
* Config file accessor
*/
public get configFile(): Record<string, any> {
public get configFile(): Record<string, any> | undefined {
return Object.values(this.app.context.files).find(
file =>
file.name === `.babelrc` ||
Expand Down Expand Up @@ -116,7 +116,7 @@ export default class BabelExtension extends Extension {
this.configFileOptions =
this.configFile.module?.default ?? this.configFile.module

hooks.on(`build.cache.buildDependencies`, paths => {
hooks.on(`build.cache.buildDependencies`, (paths = {}) => {
if (isString(this.configFile)) {
paths.babel = [this.configFile]
this.logger.success(
Expand Down Expand Up @@ -294,8 +294,7 @@ export default class BabelExtension extends Extension {
*/
@bind
public unsetPlugin(plugin: string) {
if (!isUndefined(this.plugins[plugin]))
this.plugins[plugin] = undefined
if (!isUndefined(this.plugins[plugin])) delete this.plugins[plugin]

return this
}
Expand All @@ -305,8 +304,7 @@ export default class BabelExtension extends Extension {
*/
@bind
public unsetPreset(preset: string) {
if (!isUndefined(this.presets[preset]))
this.presets[preset] = undefined
if (!isUndefined(this.presets[preset])) delete this.presets[preset]

return this
}
Expand Down
2 changes: 1 addition & 1 deletion sources/@roots/bud-build/src/config/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ export interface Factory<
Key extends keyof Config,
Config = Configuration,
> {
(app: Bud): Promise<Config[Key]>
(app: Bud): Promise<Config[Key] | undefined>
}

export type Records<Config = Configuration> = {
Expand Down
8 changes: 3 additions & 5 deletions sources/@roots/bud-build/src/config/output/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import type {Factory} from '../index.js'

import {isMjs} from '../../helpers/isMjs.js'
import {assetModuleFilename} from './assetModuleFilename.js'
import {filename} from './filename.js'

Expand All @@ -27,12 +26,11 @@ export const output: Factory<`output`> = async ({
/**
* Path info is not necessary unless the user
* really knows what's going on.
*
* @see {@link https://medium.com/@kenneth_chau/speeding-up-webpack-typescript-incremental-builds-by-7x-3912ba4c1d15}
*/
pathinfo: filter(`build.output.pathinfo`, false),
publicPath: filter(`build.output.publicPath`, `auto`),
scriptType: filter(
`build.output.scriptType`,
isMjs(filter) ? `module` : `text/javascript`,
),
scriptType: filter(`build.output.scriptType`, undefined),
uniqueName: filter(`build.output.uniqueName`, `@roots/bud`),
})
6 changes: 4 additions & 2 deletions sources/@roots/bud-build/src/config/plugins.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import type {Factory} from './index.js'

export const plugins: Factory<`plugins`> = async app =>
await app.hooks.filterAsync(`build.plugins`, await app.extensions.make())
export const plugins: Factory<`plugins`> = async app => {
const plugins = await app.extensions.make()
return await app.hooks.filterAsync(`build.plugins`, plugins)
}
Loading
Loading