@nanostores/logger 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-creator-logger/index.d.ts +62 -0
- package/build-creator-logger/index.js +38 -0
- package/build-logger/index.d.ts +1 -1
- package/creator-logger/index.d.ts +2 -13
- package/creator-logger/index.js +23 -39
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { AnyStore, MapStore } from 'nanostores'
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
LoggerOptions,
|
|
5
|
+
LoggerOptionsMessages
|
|
6
|
+
} from '../build-logger/index.js'
|
|
7
|
+
|
|
8
|
+
interface CreatorLoggerOptionsMessages extends LoggerOptionsMessages {
|
|
9
|
+
/**
|
|
10
|
+
* Disable build logs.
|
|
11
|
+
*/
|
|
12
|
+
build?: boolean
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface CreatorLoggerOptions extends LoggerOptions {
|
|
16
|
+
messages?: CreatorLoggerOptionsMessages
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Custom name getter for stores built with creators.
|
|
20
|
+
*
|
|
21
|
+
* @param creatorName Name of the creator.
|
|
22
|
+
* @param store Store built by the creator.
|
|
23
|
+
* @returns Custom store name.
|
|
24
|
+
*/
|
|
25
|
+
nameGetter: (creatorName: string, store: MapStore) => string
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface EventBuildStartPayload {
|
|
29
|
+
creatorName: string
|
|
30
|
+
store: MapStore
|
|
31
|
+
storeName: string
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
interface BuildCreatorLoggerEvents {
|
|
35
|
+
build?: (payload: EventBuildPayloadBase) => void
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Builds logger of map creators for Nano Stores.
|
|
40
|
+
*
|
|
41
|
+
* ```js
|
|
42
|
+
* import { buildCreatorLogger } from '@nanostores/logger'
|
|
43
|
+
* import { $profile } from './stores/index.js'
|
|
44
|
+
*
|
|
45
|
+
* let destroy = buildLogger($profile, 'Profile', {
|
|
46
|
+
* build: ({ creatorName, store, storeName }) => {
|
|
47
|
+
* console.log(`${storeName} was built by ${creatorName}`, store)
|
|
48
|
+
* }
|
|
49
|
+
* })
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* @param store Creator for logging.
|
|
53
|
+
* @param storeName Store name.
|
|
54
|
+
* @param events Events to log.
|
|
55
|
+
* @param opts Logger options.
|
|
56
|
+
*/
|
|
57
|
+
export function buildCreatorLogger(
|
|
58
|
+
store: AnyStore,
|
|
59
|
+
storeName: string,
|
|
60
|
+
events: BuildCreatorLoggerEvents,
|
|
61
|
+
opts?: LoggerOptions
|
|
62
|
+
): () => void
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
function onBuild(creator, listener) {
|
|
2
|
+
let originBuild = creator.build
|
|
3
|
+
creator.build = (...args) => {
|
|
4
|
+
let store = originBuild(...args)
|
|
5
|
+
listener(store)
|
|
6
|
+
return store
|
|
7
|
+
}
|
|
8
|
+
return () => {
|
|
9
|
+
creator.build = originBuild
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const defaultNameGetter = (creatorName, store) => {
|
|
14
|
+
return `${creatorName}:${store.value.id}`
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function buildCreatorLogger(creator, creatorName, events, opts = {}) {
|
|
18
|
+
opts = {
|
|
19
|
+
nameGetter: defaultNameGetter,
|
|
20
|
+
...opts
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
let messages = opts.messages || {}
|
|
24
|
+
let unbind = []
|
|
25
|
+
|
|
26
|
+
if (messages.build !== false) {
|
|
27
|
+
unbind.push(
|
|
28
|
+
onBuild(creator, store => {
|
|
29
|
+
let storeName = opts.nameGetter(creatorName, store)
|
|
30
|
+
events.build({ creatorName, store, storeName })
|
|
31
|
+
})
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return () => {
|
|
36
|
+
for (let i of unbind) i()
|
|
37
|
+
}
|
|
38
|
+
}
|
package/build-logger/index.d.ts
CHANGED
|
@@ -1,17 +1,6 @@
|
|
|
1
|
-
import type { MapCreator
|
|
1
|
+
import type { MapCreator } from 'nanostores'
|
|
2
2
|
|
|
3
|
-
import type {
|
|
4
|
-
|
|
5
|
-
interface CreatorLoggerOptions extends LoggerOptions {
|
|
6
|
-
/**
|
|
7
|
-
* Custom name getter for stores built with creators.
|
|
8
|
-
*
|
|
9
|
-
* @param creatorName Name of the creator.
|
|
10
|
-
* @param store Store built by the creator.
|
|
11
|
-
* @returns Custom store name.
|
|
12
|
-
*/
|
|
13
|
-
nameGetter: (creatorName: string, store: MapStore) => string
|
|
14
|
-
}
|
|
3
|
+
import type { CreatorLoggerOptions } from '../build-creator-logger/index.js'
|
|
15
4
|
|
|
16
5
|
/**
|
|
17
6
|
* Displays Nano Stores events in browser console.
|
package/creator-logger/index.js
CHANGED
|
@@ -1,40 +1,32 @@
|
|
|
1
|
+
import { buildCreatorLogger } from '../build-creator-logger/index.js'
|
|
1
2
|
import { logger } from '../logger/index.js'
|
|
2
3
|
import { log } from '../printer/index.js'
|
|
3
4
|
|
|
4
|
-
function onBuild(creator, listener) {
|
|
5
|
-
let originBuild = creator.build
|
|
6
|
-
creator.build = (...args) => {
|
|
7
|
-
let store = originBuild(...args)
|
|
8
|
-
listener(store)
|
|
9
|
-
return store
|
|
10
|
-
}
|
|
11
|
-
return () => {
|
|
12
|
-
creator.build = originBuild
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
5
|
function createCreatorLogger(creator, creatorName, opts) {
|
|
17
|
-
let nameGetter = opts.nameGetter
|
|
18
|
-
delete opts.nameGetter
|
|
19
|
-
|
|
20
6
|
let unbind = []
|
|
21
|
-
unbind.push(
|
|
22
|
-
onBuild(creator, store => {
|
|
23
|
-
let storeName = nameGetter(creatorName, store)
|
|
24
|
-
|
|
25
|
-
log({
|
|
26
|
-
logo: true,
|
|
27
|
-
message: [
|
|
28
|
-
['bold', storeName],
|
|
29
|
-
['regular', 'store was built by'],
|
|
30
|
-
['bold', creatorName],
|
|
31
|
-
['regular', 'creator']
|
|
32
|
-
],
|
|
33
|
-
type: 'build'
|
|
34
|
-
})
|
|
35
7
|
|
|
36
|
-
|
|
37
|
-
|
|
8
|
+
unbind.push(
|
|
9
|
+
buildCreatorLogger(
|
|
10
|
+
creator,
|
|
11
|
+
creatorName,
|
|
12
|
+
{
|
|
13
|
+
build: ({ store, storeName }) => {
|
|
14
|
+
log({
|
|
15
|
+
logo: true,
|
|
16
|
+
message: [
|
|
17
|
+
['bold', storeName],
|
|
18
|
+
['regular', 'store was built by'],
|
|
19
|
+
['bold', creatorName],
|
|
20
|
+
['regular', 'creator']
|
|
21
|
+
],
|
|
22
|
+
type: 'build'
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
unbind.push(logger({ [storeName]: store }, opts))
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
opts
|
|
29
|
+
)
|
|
38
30
|
)
|
|
39
31
|
|
|
40
32
|
return () => {
|
|
@@ -42,15 +34,7 @@ function createCreatorLogger(creator, creatorName, opts) {
|
|
|
42
34
|
}
|
|
43
35
|
}
|
|
44
36
|
|
|
45
|
-
const defaultNameGetter = (creatorName, store) => {
|
|
46
|
-
return `${creatorName}:${store.value.id}`
|
|
47
|
-
}
|
|
48
|
-
|
|
49
37
|
export function creatorLogger(creators, opts = {}) {
|
|
50
|
-
opts = {
|
|
51
|
-
nameGetter: defaultNameGetter,
|
|
52
|
-
...opts
|
|
53
|
-
}
|
|
54
38
|
let unbind = Object.entries(creators).map(([creatorName, creator]) =>
|
|
55
39
|
createCreatorLogger(creator, creatorName, opts)
|
|
56
40
|
)
|
package/index.d.ts
CHANGED
package/index.js
CHANGED