@nanostores/logger 0.2.1 → 0.2.3

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,57 @@
1
+ import type { AnyStore, MapStore } from 'nanostores'
2
+
3
+ interface CreatorLoggerOptionsMessages {
4
+ /**
5
+ * Disable build logs.
6
+ */
7
+ build?: boolean
8
+ }
9
+
10
+ export interface CreatorLoggerOptions {
11
+ messages?: CreatorLoggerOptionsMessages
12
+
13
+ /**
14
+ * Custom name getter for stores built with creators.
15
+ *
16
+ * @param creatorName Name of the creator.
17
+ * @param store Store built by the creator.
18
+ * @returns Custom store name.
19
+ */
20
+ nameGetter?: (creatorName: string, store: MapStore) => string
21
+ }
22
+
23
+ interface EventBuildStartPayload {
24
+ creatorName: string
25
+ store: MapStore
26
+ storeName: string
27
+ }
28
+
29
+ interface BuildCreatorLoggerEvents {
30
+ build: (payload: EventBuildPayloadBase) => void
31
+ }
32
+
33
+ /**
34
+ * Builds logger of map creators for Nano Stores.
35
+ *
36
+ * ```js
37
+ * import { buildCreatorLogger } from '@nanostores/logger'
38
+ * import { $profile } from './stores/index.js'
39
+ *
40
+ * let destroy = buildLogger($profile, 'Profile', {
41
+ * build: ({ creatorName, store, storeName }) => {
42
+ * console.log(`${storeName} was built by ${creatorName}`, store)
43
+ * }
44
+ * })
45
+ * ```
46
+ *
47
+ * @param store Creator for logging.
48
+ * @param storeName Store name.
49
+ * @param events Events to log.
50
+ * @param opts Logger options.
51
+ */
52
+ export function buildCreatorLogger(
53
+ store: AnyStore,
54
+ storeName: string,
55
+ events: BuildCreatorLoggerEvents,
56
+ opts?: CreatorLoggerOptions
57
+ ): () => 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,18 +1,8 @@
1
- import type { MapCreator, MapStore } from 'nanostores'
1
+ import type { MapCreator } from 'nanostores'
2
2
 
3
+ import type { CreatorLoggerOptions } from '../build-creator-logger/index.js'
3
4
  import type { LoggerOptions } from '../build-logger/index.js'
4
5
 
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
- }
15
-
16
6
  /**
17
7
  * Displays Nano Stores events in browser console.
18
8
  *
@@ -21,5 +11,5 @@ interface CreatorLoggerOptions extends LoggerOptions {
21
11
  */
22
12
  export function creatorLogger(
23
13
  creators: { [key: string]: MapCreator },
24
- opts?: CreatorLoggerOptions
14
+ opts?: CreatorLoggerOptions & LoggerOptions
25
15
  ): () => void
@@ -1,38 +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
6
  let unbind = []
18
7
 
19
8
  unbind.push(
20
- onBuild(creator, store => {
21
- let storeName = opts.nameGetter(creatorName, store)
22
-
23
- log({
24
- logo: true,
25
- message: [
26
- ['bold', storeName],
27
- ['regular', 'store was built by'],
28
- ['bold', creatorName],
29
- ['regular', 'creator']
30
- ],
31
- type: 'build'
32
- })
33
-
34
- unbind.push(logger({ [storeName]: store }, opts))
35
- })
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
+ )
36
30
  )
37
31
 
38
32
  return () => {
@@ -40,15 +34,7 @@ function createCreatorLogger(creator, creatorName, opts) {
40
34
  }
41
35
  }
42
36
 
43
- const defaultNameGetter = (creatorName, store) => {
44
- return `${creatorName}:${store.value.id}`
45
- }
46
-
47
37
  export function creatorLogger(creators, opts = {}) {
48
- opts = {
49
- nameGetter: defaultNameGetter,
50
- ...opts
51
- }
52
38
  let unbind = Object.entries(creators).map(([creatorName, creator]) =>
53
39
  createCreatorLogger(creator, creatorName, opts)
54
40
  )
package/index.d.ts CHANGED
@@ -1,4 +1,8 @@
1
- export { buildLogger } from './build-logger/index.js'
1
+ export {
2
+ buildCreatorLogger,
3
+ CreatorLoggerOptions
4
+ } from './build-creator-logger/index.js'
5
+ export { buildLogger, LoggerOptions } from './build-logger/index.js'
2
6
  export { creatorLogger } from './creator-logger/index.js'
3
7
  export { logger } from './logger/index.js'
4
8
  export { group, groupEnd, log } from './printer/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.1",
3
+ "version": "0.2.3",
4
4
  "description": "Pretty logger of lifecycles, changes and actions for Nano Stores",
5
5
  "keywords": [
6
6
  "nanostores",