@d-najd/universal-media-tracker-sdk 0.3.3 → 0.3.6

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.
Files changed (31) hide show
  1. package/dist/Plugin.d.ts +16 -8
  2. package/dist/Plugin.js +10 -1
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.js +1 -0
  5. package/dist/navigator/Navigator.d.ts +1 -1
  6. package/dist/types/PluginSpec.d.ts +2 -2
  7. package/dist/types/handler/base/CreateHandler.d.ts +1 -1
  8. package/dist/types/handler/base/Handler.d.ts +2 -2
  9. package/dist/types/handler/media/BaseResourceHandler.d.ts +5 -5
  10. package/dist/types/handler/media/CreateResourceHandler.d.ts +5 -5
  11. package/dist/types/handler/media/ResourceHandler.d.ts +6 -6
  12. package/dist/types/handler/media/ResourceHandlerArgs.d.ts +1 -1
  13. package/dist/types/handler/media/browse-option/ResourceBrowseOption.d.ts +1 -1
  14. package/dist/types/handler/media/browse-option/ResourceBrowseOptionArgs.d.ts +2 -2
  15. package/dist/types/handler/media/browse-option/ResourceBrowseOptionDefaults.d.ts +1 -3
  16. package/dist/types/handler/media/catalog/CatalogHandlerArgs.d.ts +1 -1
  17. package/dist/types/handler/media/catalog/CatalogHandlerResponse.d.ts +3 -3
  18. package/dist/types/handler/media/catalog/CreateCatalogHandler.d.ts +6 -5
  19. package/dist/types/handler/media/catalog/MetaPreview.d.ts +1 -1
  20. package/dist/types/handler/plugin/factory/CreatePluginFactoryHandler.d.ts +3 -3
  21. package/dist/types/handler/plugin/source/CreatePluginSourceHandler.d.ts +3 -3
  22. package/dist/types/handler/ui/screen/CreateCustomScreenHandler.d.ts +15 -0
  23. package/dist/types/handler/ui/screen/CreateCustomScreenHandler.js +1 -0
  24. package/dist/types/handler/ui/screen/CreateScreenHandler.d.ts +6 -14
  25. package/dist/types/handler/ui/screen/ScreenHandlerArgs.d.ts +1 -2
  26. package/dist/types/handler/ui/screen/ScreenHandlerResponse.d.ts +1 -2
  27. package/dist/types/handler/ui/screen/ScreenStore.d.ts +4 -0
  28. package/dist/types/handler/ui/screen/ScreenStore.js +1 -0
  29. package/dist/types/handler/ui/screen/ZustandScreenStore.d.ts +3 -0
  30. package/dist/types/handler/ui/screen/ZustandScreenStore.js +14 -0
  31. package/package.json +31 -28
package/dist/Plugin.d.ts CHANGED
@@ -1,10 +1,11 @@
1
- import PluginConfig from "./types/PluginConfig";
2
- import CreateCatalogHandler from "./types/handler/media/catalog/CreateCatalogHandler";
3
- import CreateResourceHandler from "./types/handler/media/CreateResourceHandler";
4
- import CreatePluginSourceHandler from "./types/handler/plugin/source/CreatePluginSourceHandler";
5
- import CreateHandler from "./types/handler/base/CreateHandler";
6
- import CreatePluginFactoryHandler from "./types/handler/plugin/factory/CreatePluginFactoryHandler";
7
- import CreateScreenHandler from "./types/handler/ui/screen/CreateScreenHandler";
1
+ import PluginConfig from './types/PluginConfig';
2
+ import CreateCatalogHandler from './types/handler/media/catalog/CreateCatalogHandler';
3
+ import CreateResourceHandler from './types/handler/media/CreateResourceHandler';
4
+ import CreatePluginSourceHandler from './types/handler/plugin/source/CreatePluginSourceHandler';
5
+ import CreateHandler from './types/handler/base/CreateHandler';
6
+ import CreatePluginFactoryHandler from './types/handler/plugin/factory/CreatePluginFactoryHandler';
7
+ import CreateScreenHandler from './types/handler/ui/screen/CreateScreenHandler';
8
+ import CreateCustomScreenHandler from './types/handler/ui/screen/CreateCustomScreenHandler';
8
9
  export default class Plugin {
9
10
  readonly config: PluginConfig;
10
11
  /**
@@ -33,7 +34,14 @@ export default class Plugin {
33
34
  defineCatalogHandler(handler: CreateCatalogHandler): string;
34
35
  definePluginSourceHandler(handler: CreatePluginSourceHandler): string;
35
36
  definePluginFactoryHandler(handler: CreatePluginFactoryHandler): string;
36
- defineScreenHandler(handler: CreateScreenHandler): string;
37
+ /**
38
+ * Recommended version of defining screens since it has some tested defaults
39
+ */
40
+ defineScreenHandler<S>(handler: CreateScreenHandler<S>): string;
41
+ /**
42
+ * Advanced version of defining screens, may lead to memory leaks if used misused
43
+ */
44
+ defineCustomScreenHandler(handler: CreateCustomScreenHandler): string;
37
45
  private getSpec;
38
46
  private onLoadCallback;
39
47
  private onUnloadCallback;
package/dist/Plugin.js CHANGED
@@ -75,11 +75,20 @@ export default class Plugin {
75
75
  };
76
76
  return this.defineHandler(newHandler);
77
77
  }
78
+ /**
79
+ * Recommended version of defining screens since it has some tested defaults
80
+ */
78
81
  defineScreenHandler(handler) {
82
+ return this.defineCustomScreenHandler(handler);
83
+ }
84
+ /**
85
+ * Advanced version of defining screens, may lead to memory leaks if used misused
86
+ */
87
+ defineCustomScreenHandler(handler) {
79
88
  const newHandler = {
80
89
  id: `${this.config.id}-ui-screen-${this.counter++}`,
81
90
  ...handler,
82
- type: "ui-screen"
91
+ type: 'ui-screen'
83
92
  };
84
93
  return this.defineHandler(newHandler);
85
94
  }
package/dist/index.d.ts CHANGED
@@ -14,9 +14,11 @@ export { default as HandlerTypes } from './types/handler/base/HandlerTypes';
14
14
  export { default as Handler } from './types/handler/base/Handler';
15
15
  export { default as CreateHandler } from './types/handler/base/CreateHandler';
16
16
  export { default as BaseHandler } from './types/handler/base/BaseHandler';
17
+ export * from './types/handler/ui/screen/ZustandScreenStore';
17
18
  export { default as ScreenHandlerResponse } from './types/handler/ui/screen/ScreenHandlerResponse';
18
19
  export { default as ScreenHandlerArgs } from './types/handler/ui/screen/ScreenHandlerArgs';
19
20
  export { default as CreateScreenHandler } from './types/handler/ui/screen/CreateScreenHandler';
21
+ export { default as CreateCustomScreenHandler } from './types/handler/ui/screen/CreateCustomScreenHandler';
20
22
  export { default as MetaPreview } from './types/handler/media/catalog/MetaPreview';
21
23
  export { default as CreateCatalogHandler } from './types/handler/media/catalog/CreateCatalogHandler';
22
24
  export { default as CatalogHandlerResponse } from './types/handler/media/catalog/CatalogHandlerResponse';
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  // Auto‑generated barrel file – do not edit manually
2
2
  export { default as Plugin } from './Plugin';
3
+ export * from './types/handler/ui/screen/ZustandScreenStore';
@@ -1,4 +1,4 @@
1
- import NavigatorEntry from "./NavigatorEntry";
1
+ import NavigatorEntry from './NavigatorEntry';
2
2
  export default interface Navigator {
3
3
  screens: NavigatorEntry[];
4
4
  push(path: string): void;
@@ -1,5 +1,5 @@
1
- import PluginConfig from "./PluginConfig";
2
- import Handler from "./handler/base/Handler";
1
+ import PluginConfig from './PluginConfig';
2
+ import Handler from './handler/base/Handler';
3
3
  export default interface PluginSpec {
4
4
  readonly config: PluginConfig;
5
5
  readonly onLoad: () => Promise<void>;
@@ -1,4 +1,4 @@
1
- import BaseHandler from "./BaseHandler";
1
+ import BaseHandler from './BaseHandler';
2
2
  type CreateHandler<T = any, R = any> = BaseHandler<T, R> & {
3
3
  readonly type: string;
4
4
  };
@@ -1,5 +1,5 @@
1
- import BaseHandler from "./BaseHandler";
2
- import HandlerTypes from "./HandlerTypes";
1
+ import BaseHandler from './BaseHandler';
2
+ import HandlerTypes from './HandlerTypes';
3
3
  type Handler<T = any, R = any> = BaseHandler<T, R> & {
4
4
  readonly id: string;
5
5
  readonly type: HandlerTypes | string;
@@ -1,8 +1,8 @@
1
- import ResourceType from "./ResourceType";
2
- import BaseHandler from "../base/BaseHandler";
3
- import ResourceBrowseOption from "./browse-option/ResourceBrowseOption";
4
- import ResourceHandlerArgs from "./ResourceHandlerArgs";
5
- import ResourceHandlerResponse from "./ResourceHandlerResponse";
1
+ import ResourceType from './ResourceType';
2
+ import BaseHandler from '../base/BaseHandler';
3
+ import ResourceBrowseOption from './browse-option/ResourceBrowseOption';
4
+ import ResourceHandlerArgs from './ResourceHandlerArgs';
5
+ import ResourceHandlerResponse from './ResourceHandlerResponse';
6
6
  type BaseResourceHandler<T extends ResourceHandlerArgs = ResourceHandlerArgs, R extends ResourceHandlerResponse = ResourceHandlerResponse> = BaseHandler<T, R> & {
7
7
  readonly name?: string;
8
8
  readonly resourceType?: ResourceType | string;
@@ -1,8 +1,8 @@
1
- import BaseResourceHandler from "./BaseResourceHandler";
2
- import ResourceType from "./ResourceType";
3
- import HandlerTypes from "../base/HandlerTypes";
4
- import ResourceHandlerArgs from "./ResourceHandlerArgs";
5
- import ResourceHandlerResponse from "./ResourceHandlerResponse";
1
+ import BaseResourceHandler from './BaseResourceHandler';
2
+ import ResourceType from './ResourceType';
3
+ import HandlerTypes from '../base/HandlerTypes';
4
+ import ResourceHandlerArgs from './ResourceHandlerArgs';
5
+ import ResourceHandlerResponse from './ResourceHandlerResponse';
6
6
  type CreateResourceHandler<T extends ResourceHandlerArgs = ResourceHandlerArgs, R extends ResourceHandlerResponse = ResourceHandlerResponse> = BaseResourceHandler<T, R> & {
7
7
  readonly type: HandlerTypes | string;
8
8
  readonly resourceType: ResourceType | string;
@@ -1,9 +1,9 @@
1
- import ResourceType from "./ResourceType";
2
- import BaseResourceHandler from "./BaseResourceHandler";
3
- import Handler from "../base/Handler";
4
- import HandlerTypes from "../base/HandlerTypes";
5
- import ResourceHandlerArgs from "./ResourceHandlerArgs";
6
- import ResourceHandlerResponse from "./ResourceHandlerResponse";
1
+ import ResourceType from './ResourceType';
2
+ import BaseResourceHandler from './BaseResourceHandler';
3
+ import Handler from '../base/Handler';
4
+ import HandlerTypes from '../base/HandlerTypes';
5
+ import ResourceHandlerArgs from './ResourceHandlerArgs';
6
+ import ResourceHandlerResponse from './ResourceHandlerResponse';
7
7
  type ResourceHandler<T extends ResourceHandlerArgs = ResourceHandlerArgs, R extends ResourceHandlerResponse = ResourceHandlerResponse> = BaseResourceHandler<T, R> & Handler<T, R> & {
8
8
  /**
9
9
  * Displayed in the app
@@ -1,4 +1,4 @@
1
- import { ResourceBrowseOptionArgs } from "../../../index";
1
+ import { ResourceBrowseOptionArgs } from '../../../index';
2
2
  type ResourceHandlerArgs = {
3
3
  readonly options?: ResourceBrowseOptionArgs[];
4
4
  };
@@ -1,4 +1,4 @@
1
- import ResourceBrowseOptionDefaults from "./ResourceBrowseOptionDefaults";
1
+ import ResourceBrowseOptionDefaults from './ResourceBrowseOptionDefaults';
2
2
  /**
3
3
  * @see ResourceBrowseOptionDefaults
4
4
  * @see ResourceBrowseOptionArgs
@@ -1,5 +1,5 @@
1
- import TriState from "../../../TriState";
2
- import ResourceBrowseOptionDefaults from "./ResourceBrowseOptionDefaults";
1
+ import TriState from '../../../TriState';
2
+ import ResourceBrowseOptionDefaults from './ResourceBrowseOptionDefaults';
3
3
  type ResourceBrowseOptionArgs = {
4
4
  readonly name: ResourceBrowseOptionDefaults | string;
5
5
  /**
@@ -1,4 +1,2 @@
1
- type ResourceBrowseOptionDefaults = 'search' | // type string
2
- 'skip' | // type number (int), `isRequired` always false
3
- 'genre';
1
+ type ResourceBrowseOptionDefaults = 'search' | 'skip' | 'genre';
4
2
  export default ResourceBrowseOptionDefaults;
@@ -1,3 +1,3 @@
1
- import ResourceHandlerArgs from "../ResourceHandlerArgs";
1
+ import ResourceHandlerArgs from '../ResourceHandlerArgs';
2
2
  type CatalogHandlerArgs = ResourceHandlerArgs & {};
3
3
  export default CatalogHandlerArgs;
@@ -1,4 +1,4 @@
1
- import MetaPreview from "./MetaPreview";
2
- import ResourceHandlerResponse from "../ResourceHandlerResponse";
3
- type CatalogHandlerResponse = ResourceHandlerResponse<MetaPreview> & {};
1
+ import MetaPreview from './MetaPreview';
2
+ import ResourceHandlerResponse from '../ResourceHandlerResponse';
3
+ type CatalogHandlerResponse<R extends MetaPreview = MetaPreview> = ResourceHandlerResponse<R> & {};
4
4
  export default CatalogHandlerResponse;
@@ -1,8 +1,9 @@
1
- import BaseResourceHandler from "../BaseResourceHandler";
2
- import CatalogHandlerArgs from "./CatalogHandlerArgs";
3
- import CatalogHandlerResponse from "./CatalogHandlerResponse";
4
- import ResourceType from "../ResourceType";
5
- type CreateCatalogHandler = BaseResourceHandler<CatalogHandlerArgs, CatalogHandlerResponse> & {
1
+ import BaseResourceHandler from '../BaseResourceHandler';
2
+ import CatalogHandlerArgs from './CatalogHandlerArgs';
3
+ import CatalogHandlerResponse from './CatalogHandlerResponse';
4
+ import ResourceType from '../ResourceType';
5
+ import { MetaPreview } from "../../../../index";
6
+ type CreateCatalogHandler<R extends MetaPreview = MetaPreview> = BaseResourceHandler<CatalogHandlerArgs, CatalogHandlerResponse<R>> & {
6
7
  readonly resourceType: ResourceType | string;
7
8
  };
8
9
  export default CreateCatalogHandler;
@@ -1,4 +1,4 @@
1
- import ResourceType from "../ResourceType";
1
+ import ResourceType from '../ResourceType';
2
2
  type MetaPreview = {
3
3
  readonly id: string;
4
4
  readonly type: ResourceType | string;
@@ -1,5 +1,5 @@
1
- import BaseHandler from "../../base/BaseHandler";
2
- import PluginFactoryHandlerArgs from "./PluginFactoryHandlerArgs";
3
- import PluginFactoryHandlerResponse from "./PluginFactoryHandlerResponse";
1
+ import BaseHandler from '../../base/BaseHandler';
2
+ import PluginFactoryHandlerArgs from './PluginFactoryHandlerArgs';
3
+ import PluginFactoryHandlerResponse from './PluginFactoryHandlerResponse';
4
4
  type CreatePluginFactoryHandler = BaseHandler<PluginFactoryHandlerArgs, PluginFactoryHandlerResponse> & {};
5
5
  export default CreatePluginFactoryHandler;
@@ -1,5 +1,5 @@
1
- import PluginSourceHandlerResponse from "./PluginSourceHandlerResponse";
2
- import BaseHandler from "../../base/BaseHandler";
3
- import PluginSourceHandlerArgs from "./PluginSourceHandlerArgs";
1
+ import PluginSourceHandlerResponse from './PluginSourceHandlerResponse';
2
+ import BaseHandler from '../../base/BaseHandler';
3
+ import PluginSourceHandlerArgs from './PluginSourceHandlerArgs';
4
4
  type CreatePluginSourceHandler = BaseHandler<PluginSourceHandlerArgs, PluginSourceHandlerResponse> & {};
5
5
  export default CreatePluginSourceHandler;
@@ -0,0 +1,15 @@
1
+ import BaseHandler from '../../base/BaseHandler';
2
+ import ScreenHandlerArgs from './ScreenHandlerArgs';
3
+ import ScreenHandlerResponse from './ScreenHandlerResponse';
4
+ type CreateCustomScreenHandler<S = any> = BaseHandler<ScreenHandlerArgs<S>, ScreenHandlerResponse> & {
5
+ /**
6
+ * /library/:id
7
+ */
8
+ readonly pattern: string;
9
+ /**
10
+ * If undefined screen state won't be stored
11
+ */
12
+ readonly initialState?: S;
13
+ readonly test?: S;
14
+ };
15
+ export default CreateCustomScreenHandler;
@@ -1,15 +1,7 @@
1
- import BaseHandler from "../../base/BaseHandler";
2
- import ScreenHandlerArgs from "./ScreenHandlerArgs";
3
- import ScreenHandlerResponse from "./ScreenHandlerResponse";
4
- import { StoreApi, UseBoundStore } from "zustand";
5
- type CreateScreenHandler<S = any> = BaseHandler<ScreenHandlerArgs<S>, ScreenHandlerResponse> & {
6
- /**
7
- * /library/:id
8
- */
9
- readonly pattern: string;
10
- /**
11
- * If undefined screen state won't be stored
12
- */
13
- readonly initialState?: UseBoundStore<StoreApi<S>>;
14
- };
1
+ import CreateCustomScreenHandler from './CreateCustomScreenHandler';
2
+ import { ZustandScreenStore } from "./ZustandScreenStore";
3
+ /**
4
+ * Uses zustand, react is also recommended
5
+ */
6
+ type CreateScreenHandler<S = any> = CreateCustomScreenHandler<ZustandScreenStore<S>> & {};
15
7
  export default CreateScreenHandler;
@@ -1,10 +1,9 @@
1
1
  import Navigator from '../../../../navigator/Navigator';
2
- import { UseBoundStore, StoreApi } from "zustand";
3
2
  type ScreenHandlerArgs<S = any> = {
4
3
  /**
5
4
  * If undefined in handler won't be passed here
6
5
  */
7
- readonly state?: UseBoundStore<StoreApi<S>>;
6
+ readonly state?: S;
8
7
  readonly navigator: Navigator;
9
8
  /**
10
9
  * /library/1
@@ -1,6 +1,5 @@
1
- import { ReactNode } from "react";
1
+ import { ReactNode } from 'react';
2
2
  type ScreenHandlerResponse = {
3
- readonly framework: 'react';
4
3
  readonly content: ReactNode;
5
4
  };
6
5
  export default ScreenHandlerResponse;
@@ -0,0 +1,4 @@
1
+ type ScreenStore<T> = {
2
+ getState(): T;
3
+ setState(state: T): void;
4
+ };
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,3 @@
1
+ import { StoreApi, UseBoundStore } from "zustand";
2
+ export type ZustandScreenStore<S> = UseBoundStore<StoreApi<S>> & ScreenStore<S>;
3
+ export declare function createZustandScreenStore<S>(initial: S): ZustandScreenStore<S>;
@@ -0,0 +1,14 @@
1
+ import { create } from "zustand";
2
+ export function createZustandScreenStore(initial) {
3
+ const store = create(() => initial);
4
+ // Black magic
5
+ const hook = ((selector) => {
6
+ if (!selector)
7
+ return store.getState();
8
+ return selector(store.getState());
9
+ });
10
+ hook.getState = store.getState;
11
+ hook.setState = store.setState;
12
+ hook.subscribe = store.subscribe;
13
+ return hook;
14
+ }
package/package.json CHANGED
@@ -1,30 +1,33 @@
1
1
  {
2
- "name": "@d-najd/universal-media-tracker-sdk",
3
- "version": "0.3.3",
4
- "main": "dist/index.js",
5
- "types": "dist/index.d.ts",
6
- "files": [
7
- "dist"
8
- ],
9
- "exports": {
10
- ".": {
11
- "import": "./dist/index.js",
12
- "require": "./dist/index.js",
13
- "types": "./dist/index.d.ts"
14
- }
15
- },
16
- "scripts": {
17
- "build": "rimraf dist & node scripts/generate.js && tsc"
18
- },
19
- "license": "MIT",
20
- "type": "module",
21
- "devDependencies": {
22
- "@types/node": "^25.5.2",
23
- "@types/react": "^19.2.14",
24
- "glob": "^13.0.6",
25
- "typescript": "^5.9.3"
26
- },
27
- "dependencies": {
28
- "zustand": "^5.0.12"
29
- }
2
+ "name": "@d-najd/universal-media-tracker-sdk",
3
+ "version": "0.3.6",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.js",
13
+ "types": "./dist/index.d.ts"
14
+ }
15
+ },
16
+ "scripts": {
17
+ "build": "rimraf dist & node scripts/generate.js && tsc",
18
+ "format": "prettier --write ."
19
+ },
20
+ "license": "MIT",
21
+ "type": "module",
22
+ "devDependencies": {
23
+ "@types/node": "^25.5.2",
24
+ "@types/react": "^19.2.14",
25
+ "glob": "^13.0.6",
26
+ "prettier": "^3.8.1",
27
+ "typescript": "^5.9.3"
28
+ },
29
+ "dependencies": {
30
+ "react": "^19.2.4",
31
+ "zustand": "^5.0.12"
32
+ }
30
33
  }