Skip to content

Commit 5049b68

Browse files
committed
Update DefaultSetter TS type signature; minor enhancements
1 parent d63cd7e commit 5049b68

File tree

4 files changed

+37
-25
lines changed

4 files changed

+37
-25
lines changed

lib/index.d.ts

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
1-
import { Plugin, File } from 'metalsmith';
1+
import Metalsmith, { Plugin, File, Files } from 'metalsmith';
22

33
export default defaultValues;
44

5-
export type DefaultSetter<FileMeta, GlobalMeta> = (data:FileMeta, metadata: GlobalMeta) => any
6-
export interface DefaultsSet<FileMeta = File, GlobalMeta = {[key:string]:any}> {
5+
export type DefaultSetter<FileMeta extends File = File> = (
6+
currentFile: Readonly<FileMeta>,
7+
currentPath: Readonly<string>,
8+
files:Readonly<Files>,
9+
metalsmith:Readonly<Metalsmith>
10+
) => any
11+
12+
export interface DefaultsSet<FileMeta extends File = File> {
713
/** an object whose keys will be set as file metadata keys */
8-
defaults: {
9-
[key:string]: DefaultSetter<FileMeta, GlobalMeta>|string|boolean|number|Object;
10-
}
14+
defaults: Record<string, DefaultSetter<FileMeta>|string|boolean|number|object>
1115
/**
1216
* 1 or more glob patterns to match files.
1317
* @default '**'
@@ -19,20 +23,21 @@ export interface DefaultsSet<FileMeta = File, GlobalMeta = {[key:string]:any}> {
1923
*/
2024
strategy?: 'keep'|'overwrite'
2125
}
22-
export type Options<FileMeta, GlobalMeta> = DefaultsSet<FileMeta, GlobalMeta>|DefaultsSet<FileMeta, GlobalMeta>[]
26+
export type Options<FileMeta extends File = File> = DefaultsSet<FileMeta>|DefaultsSet<FileMeta>[]
2327
/**
24-
* Set `defaults` to file metadata matching `pattern`'s.
28+
* Set `defaults` or _computed values_ to file metadata matching `pattern`'s.
2529
*
2630
* @example
27-
* metalsmith.use(defaultValues({
28-
pattern: 'posts/*.md',
29-
defaults: {
30-
layout: 'post.hbs',
31-
draft: false,
32-
date(post) {
33-
return post.stats.ctime
34-
}
35-
}
36-
}))
31+
* metalsmith.use(defaultValues([{
32+
* pattern: 'posts/*.md',
33+
* defaults: {
34+
* layout: 'post.hbs',
35+
* draft: false,
36+
* 'some.nested.property': true,
37+
* isodate(post, postPath, allFiles, metalsmith) {
38+
* return new Date(post.stats.ctime).toISOString()
39+
* }
40+
* }
41+
*}))
3742
**/
38-
declare function defaultValues<FileMeta = File, GlobalMeta = {[key:string]:any}>(options: Options<FileMeta, GlobalMeta>): Plugin;
43+
declare function defaultValues<FileMeta extends File = File>(options: Options<FileMeta>): Plugin;

src/index.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ import getDefaultsSetter from './set_defaults.js'
22

33
/**
44
* @callback DefaultSetter
5-
* @param {import('metalsmith').File} file
6-
* @param {Object<string, *>} metadata
5+
* @param {import('metalsmith').File} currentFile
6+
* @param {string} currentPath
7+
* @param {import('metalsmith').Files} files
8+
* @param {import('metalsmith')} metadata
79
*/
810

911
/**
@@ -51,7 +53,7 @@ function defaultValues(options) {
5153
options = [options]
5254
}
5355
debug('Running with options: %O ', options)
54-
const defaultSets = (options || []).map((defaultsSet) => ({ ...defaultDefaultsSet, ...defaultsSet }))
56+
const defaultSets = options.map((defaultsSet) => ({ ...defaultDefaultsSet, ...defaultsSet }))
5557

5658
// Loop through configurations
5759
defaultSets.forEach(function ({ pattern, defaults, strategy }) {

test/index.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
/* eslint-env node, mocha */
21
import { fileURLToPath } from 'node:url'
32
import { readFileSync } from 'node:fs'
43
import assert from 'node:assert'

test/index.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,20 @@ type File = Metalsmith.File<{
66
draft?: boolean
77
}>
88

9-
defaultValues<File, { buildVersion: 'v1.0.0' }>({
9+
type Meta = {
10+
buildVersion: string
11+
}
12+
13+
defaultValues<File>({
1014
strategy: 'overwrite',
1115
pattern: '**/*.html',
1216
defaults: {
1317
excerpt(file) {
1418
return file.contents.toString().slice(0, 250) + '...'
1519
},
16-
buildVersion(_, meta) {
20+
buildVersion(_, path, files, metalsmith) {
21+
files[path].contents
22+
const meta = metalsmith.metadata() as Meta
1723
return meta.buildVersion
1824
},
1925
draft(file) {

0 commit comments

Comments
 (0)