@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.
@@ -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
+ }
@@ -1,6 +1,6 @@
1
1
  import type { AnyStore, Store, StoreValue } from 'nanostores'
2
2
 
3
- interface LoggerOptionsMessages {
3
+ export interface LoggerOptionsMessages {
4
4
  /**
5
5
  * Disable action logs.
6
6
  */
@@ -1,17 +1,6 @@
1
- import type { MapCreator, MapStore } from 'nanostores'
1
+ import type { MapCreator } from 'nanostores'
2
2
 
3
- import type { LoggerOptions } from '../build-logger/index.js'
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.
@@ -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
- unbind.push(logger({ [storeName]: store }, opts))
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
@@ -1,3 +1,4 @@
1
+ export { buildCreatorLogger } from './build-creator-logger/index.js'
1
2
  export { buildLogger } from './build-logger/index.js'
2
3
  export { creatorLogger } from './creator-logger/index.js'
3
4
  export { logger } from './logger/index.js'
package/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ export { buildCreatorLogger } from './build-creator-logger/index.js'
1
2
  export { buildLogger } from './build-logger/index.js'
2
3
  export { creatorLogger } from './creator-logger/index.js'
3
4
  export { logger } from './logger/index.js'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanostores/logger",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Pretty logger of lifecycles, changes and actions for Nano Stores",
5
5
  "keywords": [
6
6
  "nanostores",