@pulsesync/addon-sdk 0.1.3 → 0.2.0

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/README.md CHANGED
@@ -42,17 +42,17 @@ export default defineAddon({
42
42
 
43
43
  ```ts
44
44
  // src/settings.ts
45
- import { defineSettings } from '@pulsesync/addon-sdk'
45
+ import { defineAddonSettings, SettingType } from '@pulsesync/addon-sdk'
46
46
 
47
- export const settings = defineSettings(
47
+ export const settings = defineAddonSettings(
48
48
  {
49
49
  enabled: {
50
- type: 'boolean',
50
+ type: SettingType.BOOLEAN,
51
51
  name: 'Включить аддон',
52
52
  default: true,
53
53
  },
54
54
  accentColor: {
55
- type: 'color',
55
+ type: SettingType.COLOR,
56
56
  name: 'Цвет кнопки',
57
57
  default: '#ffdb4d',
58
58
  },
@@ -64,15 +64,25 @@ export const settings = defineSettings(
64
64
  ```tsx
65
65
  import { settings } from './settings'
66
66
 
67
- function PlayerButton({ api }: PulseSyncAddonComponentProps) {
68
- const { accentColor, enabled } = settings.use(api)
67
+ function PlayerButton() {
68
+ const { accentColor, enabled } = settings.use()
69
69
 
70
70
  if (!enabled) return null
71
71
  return <button style={{ color: accentColor }}>Play / Pause</button>
72
72
  }
73
+
74
+ export default defineAddon({
75
+ id: 'player-button',
76
+ settings,
77
+ slots: {
78
+ playerBarButton: PlayerButton,
79
+ },
80
+ })
73
81
  ```
74
82
 
75
- Передайте `settings` сборщику. Схема попадёт в `metadata.json`, а пользовательские значения PulseSync сохранит отдельно. `handleEvents.json` WebHost-аддону не нужен.
83
+ `defineAddon()` привязывает настройки к идентификатору аддона. В React используйте `settings.use()` или `settings.use(['enabled'])`, а в обработчиках и lifecycle-функциях readonly-снимок `settings.store.enabled`.
84
+
85
+ Передайте тот же `settings` сборщику. Схема попадёт в `metadata.json`, а пользовательские значения PulseSync сохранит отдельно. `handleEvents.json` WebHost-аддону не нужен.
76
86
 
77
87
  Поддерживаемые типы: `boolean`, `number`, `select`, `text`, `color`, `file`.
78
88
 
@@ -110,10 +120,10 @@ React и JSX runtime остаются внешними зависимостям
110
120
 
111
121
  ## Экспорты
112
122
 
113
- | Импорт | Назначение |
114
- | --- | --- |
115
- | `@pulsesync/addon-sdk` | `defineAddon`, `defineSettings`, runtime-типы |
116
- | `@pulsesync/addon-sdk/vite` | `pulseSyncAddon`, `defineAddonManifest` |
123
+ | Импорт | Назначение |
124
+ | --------------------------- | ----------------------------------------------------------------- |
125
+ | `@pulsesync/addon-sdk` | `defineAddon`, `defineAddonSettings`, `SettingType`, runtime-типы |
126
+ | `@pulsesync/addon-sdk/vite` | `pulseSyncAddon`, `defineAddonManifest` |
117
127
 
118
128
  ## Требования
119
129
 
@@ -1 +1 @@
1
- {"version":3,"file":"defineAddon.d.ts","sourceRoot":"","sources":["../../src/addon/defineAddon.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGR,wBAAwB,EAExB,qBAAqB,EAExB,MAAM,YAAY,CAAA;AAkCnB,wBAAgB,WAAW,CAAC,OAAO,EAAE,qBAAqB,GAAG,wBAAwB,CAcpF;eAEc,WAAW"}
1
+ {"version":3,"file":"defineAddon.d.ts","sourceRoot":"","sources":["../../src/addon/defineAddon.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGR,wBAAwB,EAExB,qBAAqB,EAExB,MAAM,YAAY,CAAA;AA+CnB,wBAAgB,WAAW,CAAC,OAAO,EAAE,qBAAqB,GAAG,wBAAwB,CAcpF;eAEc,WAAW"}
@@ -1,4 +1,5 @@
1
1
  import { PULSESYNC_WEB_HOST_API_VERSION } from './version.js';
2
+ import { bindAddonSettings } from '../settings/defineSettings.js';
2
3
  function normalizeId(id) {
3
4
  const normalizedId = String(id ?? '').trim();
4
5
  if (!normalizedId)
@@ -6,21 +7,34 @@ function normalizeId(id) {
6
7
  return normalizedId;
7
8
  }
8
9
  function createActivation(options) {
9
- if (!options.start && !options.stop)
10
+ if (!options.settings && !options.start && !options.stop)
10
11
  return undefined;
11
12
  return (api) => {
12
- const cleanup = options.start?.(api);
13
+ const unbindSettings = options.settings ? bindAddonSettings(options.settings, api) : undefined;
14
+ let cleanup;
15
+ try {
16
+ cleanup = options.start?.(api);
17
+ }
18
+ catch (error) {
19
+ unbindSettings?.();
20
+ throw error;
21
+ }
13
22
  let active = true;
14
23
  return () => {
15
24
  if (!active)
16
25
  return;
17
26
  active = false;
18
27
  try {
19
- if (typeof cleanup === 'function')
20
- cleanup();
28
+ try {
29
+ if (typeof cleanup === 'function')
30
+ cleanup();
31
+ }
32
+ finally {
33
+ options.stop?.(api);
34
+ }
21
35
  }
22
36
  finally {
23
- options.stop?.(api);
37
+ unbindSettings?.();
24
38
  }
25
39
  };
26
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"defineAddon.js","sourceRoot":"","sources":["../../src/addon/defineAddon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAA;AAU7D,SAAS,WAAW,CAAC,EAAU;IAC3B,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAC5C,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAA;IACxE,OAAO,YAAY,CAAA;AACvB,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA8B;IACpD,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI;QAAE,OAAO,SAAS,CAAA;IAErD,OAAO,CAAC,GAAsB,EAAyB,EAAE;QACrD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,MAAM,GAAG,IAAI,CAAA;QAEjB,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,MAAM;gBAAE,OAAM;YACnB,MAAM,GAAG,KAAK,CAAA;YAEd,IAAI,CAAC;gBACD,IAAI,OAAO,OAAO,KAAK,UAAU;oBAAE,OAAO,EAAE,CAAA;YAChD,CAAC;oBAAS,CAAC;gBACP,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAA;YACvB,CAAC;QACL,CAAC,CAAA;IACL,CAAC,CAAA;AACL,CAAC;AAED,SAAS,OAAO,CAAC,OAA8B;IAC3C,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAM;IACzC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAA;IACvD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAA8B;IACtD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAC1C,MAAM,UAAU,GAA6B,MAAM,CAAC,MAAM,CAAC;QACvD,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,UAAU,EAAE,8BAA8B;QAC1C,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpC,CAAC,CAAA;IAEF,OAAO,CAAC,CAAC,KAA0B,EAAE,EAAE,CAAC,UAAU,CAAC,CAAA;IACnD,OAAO,UAAU,CAAA;AACrB,CAAC;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"defineAddon.js","sourceRoot":"","sources":["../../src/addon/defineAddon.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { ComponentType } from 'react';
2
2
  import type { PulseSyncApi } from '@pulsesync/yamusic-types';
3
+ import type { PulseSyncAddonSettingsDefinition } from '../settings/types.js';
3
4
  export type PulseSyncAddonCleanup = () => void;
4
5
  export type PulseSyncAddonLogger = {
5
6
  info: (...args: unknown[]) => void;
@@ -31,10 +32,11 @@ export type PulseSyncAddonOptions = {
31
32
  readonly component?: PulseSyncAddonComponent;
32
33
  readonly slots?: Readonly<Record<string, PulseSyncAddonComponent>>;
33
34
  readonly mounts?: readonly PulseSyncAddonMount[];
35
+ readonly settings?: PulseSyncAddonSettingsDefinition;
34
36
  readonly start?: (api: PulseSyncAddonApi) => void | PulseSyncAddonCleanup;
35
37
  readonly stop?: (api: PulseSyncAddonApi) => void;
36
38
  };
37
- export type PulseSyncAddonDefinition = Omit<PulseSyncAddonOptions, 'start' | 'stop'> & {
39
+ export type PulseSyncAddonDefinition = Omit<PulseSyncAddonOptions, 'settings' | 'start' | 'stop'> & {
38
40
  readonly apiVersion: number;
39
41
  readonly activate?: (api: PulseSyncAddonApi) => void | PulseSyncAddonCleanup;
40
42
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/addon/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAE5D,MAAM,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAA;AAE9C,MAAM,MAAM,oBAAoB,GAAG;IAC/B,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;IAClC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;IAClC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,EAAE,YAAY,GAAG,SAAS,CAAA;IAC/C,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,aAAa,CAAC,4BAA4B,CAAC,CAAA;AAEjF,MAAM,MAAM,yBAAyB,GAC/B,OAAO,GACP,MAAM,GACN,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,GACtB;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAE/B,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAA;IAC1C,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAA;CAC9C,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,uBAAuB,CAAA;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAA;IAClE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAA;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,GAAG,qBAAqB,CAAA;IACzE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,CAAA;CACnD,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,qBAAqB,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG;IACnF,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,GAAG,qBAAqB,CAAA;CAC/E,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,CAChC,IAAI,EAAE,mBAAmB,KACxB,IAAI,GAAG,wBAAwB,GAAG,OAAO,CAAC,IAAI,GAAG,wBAAwB,CAAC,CAAA;AAE/E,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,KAAK,EAAE,cAAc,OAAO,CAAC,CAAA;IACtC,QAAQ,CAAC,UAAU,EAAE,cAAc,mBAAmB,CAAC,CAAA;IACvD,QAAQ,CAAC,aAAa,CAAC,EAAE,cAAc,uBAAuB,CAAC,CAAA;IAC/D,YAAY,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAA;IAC5F,aAAa,EAAE,CAAC,UAAU,EAAE,wBAAwB,KAAK,qBAAqB,CAAA;IAC9E,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAA;IAC7C,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,qBAAqB,CAAA;IAC3E,eAAe,EAAE,MAAM,YAAY,GAAG,SAAS,CAAA;CAClD,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/addon/types.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,18 @@
1
- import type { DefineSettingsOptions, PulseSyncSettingsDefinition, PulseSyncSettingsSchema } from './types.js';
2
- export declare function defineSettings<const TSchema extends PulseSyncSettingsSchema>(schema: TSchema, options?: DefineSettingsOptions): PulseSyncSettingsDefinition<TSchema>;
1
+ import type { PulseSyncAddonApi } from '../addon/types.js';
2
+ import type { DefineAddonSettingsOptions, PulseSyncAddonSettingsDefinition, PulseSyncSetting, PulseSyncSettingsSchema } from './types.js';
3
+ type SelectOptionValue<TSetting> = TSetting extends {
4
+ readonly options: readonly {
5
+ readonly value: infer TValue;
6
+ }[];
7
+ } ? TValue : never;
8
+ type ValidateSetting<TSetting extends PulseSyncSetting> = TSetting extends {
9
+ readonly type: 'select';
10
+ readonly default: infer TDefault;
11
+ } ? TDefault extends SelectOptionValue<TSetting> ? TSetting : never : TSetting;
12
+ type ValidateSettingsSchema<TSchema extends PulseSyncSettingsSchema> = {
13
+ readonly [TKey in keyof TSchema]: ValidateSetting<TSchema[TKey]>;
14
+ };
15
+ export declare function bindAddonSettings(settings: PulseSyncAddonSettingsDefinition, api: PulseSyncAddonApi): () => void;
16
+ export declare function defineAddonSettings<const TSchema extends PulseSyncSettingsSchema>(schema: TSchema & ValidateSettingsSchema<TSchema>, options?: DefineAddonSettingsOptions): PulseSyncAddonSettingsDefinition<TSchema>;
17
+ export {};
3
18
  //# sourceMappingURL=defineSettings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"defineSettings.d.ts","sourceRoot":"","sources":["../../src/settings/defineSettings.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACR,qBAAqB,EACrB,2BAA2B,EAC3B,uBAAuB,EAC1B,MAAM,YAAY,CAAA;AAEnB,wBAAgB,cAAc,CAAC,KAAK,CAAC,OAAO,SAAS,uBAAuB,EACxE,MAAM,EAAE,OAAO,EACf,OAAO,GAAE,qBAA0B,GACpC,2BAA2B,CAAC,OAAO,CAAC,CAsBtC"}
1
+ {"version":3,"file":"defineSettings.d.ts","sourceRoot":"","sources":["../../src/settings/defineSettings.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,KAAK,EACR,0BAA0B,EAE1B,gCAAgC,EAChC,gBAAgB,EAChB,uBAAuB,EAC1B,MAAM,YAAY,CAAA;AAEnB,KAAK,iBAAiB,CAAC,QAAQ,IAAI,QAAQ,SAAS;IAChD,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAA;KAAE,EAAE,CAAA;CAChE,GACK,MAAM,GACN,KAAK,CAAA;AAEX,KAAK,eAAe,CAAC,QAAQ,SAAS,gBAAgB,IAAI,QAAQ,SAAS;IACvE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,QAAQ,CAAA;CACnC,GACK,QAAQ,SAAS,iBAAiB,CAAC,QAAQ,CAAC,GACxC,QAAQ,GACR,KAAK,GACT,QAAQ,CAAA;AAEd,KAAK,sBAAsB,CAAC,OAAO,SAAS,uBAAuB,IAAI;IACnE,QAAQ,EAAE,IAAI,IAAI,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;CACnE,CAAA;AAYD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,gCAAgC,EAAE,GAAG,EAAE,iBAAiB,GAAG,MAAM,IAAI,CAIhH;AAED,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,OAAO,SAAS,uBAAuB,EAC7E,MAAM,EAAE,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,EACjD,OAAO,GAAE,0BAA+B,GACzC,gCAAgC,CAAC,OAAO,CAAC,CAkE3C"}
@@ -1,23 +1,72 @@
1
- import { useEffect, useState } from 'react';
1
+ import { useSyncExternalStore } from 'react';
2
2
  import { createSettingsConfig, createSettingsDefaults, resolveSettingsValues } from './schema.js';
3
- export function defineSettings(schema, options = {}) {
4
- const defaults = Object.freeze(createSettingsDefaults(schema));
3
+ const settingsBinders = new WeakMap();
4
+ function freezeValues(values) {
5
+ return Object.freeze(values);
6
+ }
7
+ export function bindAddonSettings(settings, api) {
8
+ const bind = settingsBinders.get(settings);
9
+ if (!bind)
10
+ throw new TypeError('PulseSync addon settings must be created with defineAddonSettings()');
11
+ return bind(api);
12
+ }
13
+ export function defineAddonSettings(schema, options = {}) {
5
14
  const frozenSchema = Object.freeze({ ...schema });
6
- return Object.freeze({
15
+ const defaults = freezeValues(createSettingsDefaults(frozenSchema));
16
+ let currentValues = defaults;
17
+ let boundAddonId;
18
+ let removeStoreListener;
19
+ const listeners = new Set();
20
+ const notify = () => listeners.forEach((listener) => listener());
21
+ const updateValues = (current) => {
22
+ currentValues = freezeValues(resolveSettingsValues(frozenSchema, current));
23
+ notify();
24
+ };
25
+ const subscribe = (listener) => {
26
+ listeners.add(listener);
27
+ return () => listeners.delete(listener);
28
+ };
29
+ const getSnapshot = () => {
30
+ if (!boundAddonId) {
31
+ throw new Error('PulseSync addon settings are not initialized. Pass settings to defineAddon().');
32
+ }
33
+ return currentValues;
34
+ };
35
+ function use(keys) {
36
+ const values = useSyncExternalStore(subscribe, getSnapshot, () => defaults);
37
+ if (!keys)
38
+ return values;
39
+ return Object.fromEntries(keys.map((key) => [key, values[key]]));
40
+ }
41
+ const definition = {
7
42
  schema: frozenSchema,
8
43
  defaults,
9
- use(api) {
10
- const [values, setValues] = useState(defaults);
11
- useEffect(() => {
12
- const store = api.pulsesyncApi?.getSettings(api.addonId);
13
- if (!store)
14
- return;
15
- setValues(resolveSettingsValues(frozenSchema, store.getCurrent()));
16
- return store.onChange(current => setValues(resolveSettingsValues(frozenSchema, current)));
17
- }, [api]);
18
- return values;
44
+ get store() {
45
+ return getSnapshot();
19
46
  },
47
+ use,
20
48
  toConfig: () => createSettingsConfig(frozenSchema, options.title ?? 'Settings'),
49
+ };
50
+ settingsBinders.set(definition, (api) => {
51
+ if (boundAddonId) {
52
+ throw new Error(`PulseSync settings are already bound to addon ${boundAddonId}`);
53
+ }
54
+ boundAddonId = api.addonId;
55
+ const store = api.pulsesyncApi?.getSettings(api.addonId);
56
+ currentValues = store ? freezeValues(resolveSettingsValues(frozenSchema, store.getCurrent())) : defaults;
57
+ removeStoreListener = store?.onChange(updateValues);
58
+ let active = true;
59
+ return () => {
60
+ if (!active)
61
+ return;
62
+ active = false;
63
+ removeStoreListener?.();
64
+ removeStoreListener = undefined;
65
+ boundAddonId = undefined;
66
+ currentValues = defaults;
67
+ notify();
68
+ };
21
69
  });
70
+ return Object.freeze(definition);
22
71
  }
23
72
  //# sourceMappingURL=defineSettings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defineSettings.js","sourceRoot":"","sources":["../../src/settings/defineSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAG3C,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAOjG,MAAM,UAAU,cAAc,CAC1B,MAAe,EACf,OAAO,GAA0B,EAAE;IAEnC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAA;IAC9D,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,CAAY,CAAA;IAE5D,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,MAAM,EAAE,YAAY;QACpB,QAAQ;QACR,GAAG,CAAC,GAAsB;YACtB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAE9C,SAAS,CAAC,GAAG,EAAE;gBACX,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBACxD,IAAI,CAAC,KAAK;oBAAE,OAAM;gBAElB,SAAS,CAAC,qBAAqB,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;gBAClE,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;YAC7F,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;YAET,OAAO,MAAM,CAAA;QACjB,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC;KAClF,CAAC,CAAA;AACN,CAAC"}
1
+ {"version":3,"file":"defineSettings.js","sourceRoot":"","sources":["../../src/settings/defineSettings.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
- export { defineSettings } from './defineSettings.js';
2
- export type { DefineSettingsOptions, InferPulseSyncSettings, PulseSyncSetting, PulseSyncSettingsConfig, PulseSyncSettingsDefinition, PulseSyncSettingsSchema, } from './types.js';
1
+ export { defineAddonSettings } from './defineSettings.js';
2
+ export { SettingType } from './types.js';
3
+ export type { DefineAddonSettingsOptions, InferPulseSyncSettings, PulseSyncAddonSettingsDefinition, PulseSyncSetting, PulseSyncSettingValue, PulseSyncSettingsConfig, PulseSyncSettingsSchema, } from './types.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,YAAY,EACR,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,GAC1B,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,YAAY,EACR,0BAA0B,EAC1B,sBAAsB,EACtB,gCAAgC,EAChC,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,GAC1B,MAAM,YAAY,CAAA"}
@@ -1,2 +1,3 @@
1
- export { defineSettings } from './defineSettings.js';
1
+ export { defineAddonSettings } from './defineSettings.js';
2
+ export { SettingType } from './types.js';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA"}
@@ -1,4 +1,11 @@
1
- import type { PulseSyncAddonApi } from '../addon/types.js';
1
+ export declare const SettingType: Readonly<{
2
+ readonly BOOLEAN: 'boolean';
3
+ readonly COLOR: 'color';
4
+ readonly STRING: 'text';
5
+ readonly FILE: 'file';
6
+ readonly NUMBER: 'number';
7
+ readonly SELECT: 'select';
8
+ }>;
2
9
  type SettingBase<TType extends string, TValue> = {
3
10
  readonly type: TType;
4
11
  readonly name: string;
@@ -16,8 +23,20 @@ export type PulseSyncSetting = SettingBase<'boolean', boolean> | SettingBase<'co
16
23
  }[];
17
24
  });
18
25
  export type PulseSyncSettingsSchema = Readonly<Record<string, PulseSyncSetting>>;
26
+ export type PulseSyncSettingValue<TSetting extends PulseSyncSetting> = TSetting extends {
27
+ readonly type: 'boolean';
28
+ } ? boolean : TSetting extends {
29
+ readonly type: 'number';
30
+ } ? number : TSetting extends {
31
+ readonly type: 'select';
32
+ readonly options: readonly {
33
+ readonly value: infer TValue;
34
+ }[];
35
+ } ? TValue : TSetting extends {
36
+ readonly type: 'color' | 'text' | 'file';
37
+ } ? string : never;
19
38
  export type InferPulseSyncSettings<TSchema extends PulseSyncSettingsSchema> = {
20
- readonly [TKey in keyof TSchema]: TSchema[TKey]['default'];
39
+ readonly [TKey in keyof TSchema]: PulseSyncSettingValue<TSchema[TKey]>;
21
40
  };
22
41
  export type PulseSyncSettingsConfig = {
23
42
  readonly sections: readonly {
@@ -25,13 +44,17 @@ export type PulseSyncSettingsConfig = {
25
44
  readonly items: readonly Record<string, unknown>[];
26
45
  }[];
27
46
  };
28
- export type PulseSyncSettingsDefinition<TSchema extends PulseSyncSettingsSchema = PulseSyncSettingsSchema> = {
47
+ export type PulseSyncAddonSettingsDefinition<TSchema extends PulseSyncSettingsSchema = PulseSyncSettingsSchema> = {
29
48
  readonly schema: TSchema;
30
49
  readonly defaults: InferPulseSyncSettings<TSchema>;
31
- use: (api: PulseSyncAddonApi) => InferPulseSyncSettings<TSchema>;
50
+ readonly store: InferPulseSyncSettings<TSchema>;
51
+ use: {
52
+ (): InferPulseSyncSettings<TSchema>;
53
+ <const TKey extends keyof TSchema>(keys: readonly TKey[]): Pick<InferPulseSyncSettings<TSchema>, TKey>;
54
+ };
32
55
  toConfig: () => PulseSyncSettingsConfig;
33
56
  };
34
- export type DefineSettingsOptions = {
57
+ export type DefineAddonSettingsOptions = {
35
58
  readonly title?: string;
36
59
  };
37
60
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/settings/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,KAAK,WAAW,CAAC,KAAK,SAAS,MAAM,EAAE,MAAM,IAAI;IAC7C,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,gBAAgB,GACtB,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,GAC/B,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,GAC5B,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACzB,CAAC,GACF,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS;QACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAClC,EAAE,CAAA;CACN,CAAC,CAAA;AAER,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAA;AAEhF,MAAM,MAAM,sBAAsB,CAAC,OAAO,SAAS,uBAAuB,IAAI;IAC1E,QAAQ,EAAE,IAAI,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;CAC7D,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS;QACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;KACrD,EAAE,CAAA;CACN,CAAA;AAED,MAAM,MAAM,2BAA2B,CAAC,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,IAAI;IACzG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAClD,GAAG,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAChE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/settings/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;sBACX,SAAS;oBACX,OAAO;qBACN,MAAM;mBACR,MAAM;qBACJ,QAAQ;qBACR,QAAQ;EACT,CAAA;AAEX,KAAK,WAAW,CAAC,KAAK,SAAS,MAAM,EAAE,MAAM,IAAI;IAC7C,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,gBAAgB,GACtB,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,GAC/B,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,GAC5B,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACzB,CAAC,GACF,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS;QACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAClC,EAAE,CAAA;CACN,CAAC,CAAA;AAER,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAA;AAEhF,MAAM,MAAM,qBAAqB,CAAC,QAAQ,SAAS,gBAAgB,IAAI,QAAQ,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC9G,OAAO,GACP,QAAQ,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC1C,MAAM,GACN,QAAQ,SAAS;IACX,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAA;KAAE,EAAE,CAAA;CAChE,GACD,MAAM,GACN,QAAQ,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;CAAE,GAC3D,MAAM,GACN,KAAK,CAAA;AAEjB,MAAM,MAAM,sBAAsB,CAAC,OAAO,SAAS,uBAAuB,IAAI;IAC1E,QAAQ,EAAE,IAAI,IAAI,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS;QACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;KACrD,EAAE,CAAA;CACN,CAAA;AAED,MAAM,MAAM,gCAAgC,CAAC,OAAO,SAAS,uBAAuB,GAAG,uBAAuB,IAAI;IAC9G,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAClD,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAC/C,GAAG,EAAE;QACD,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,OAAO,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAA;KACzG,CAAA;IACD,QAAQ,EAAE,MAAM,uBAAuB,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA"}
@@ -1,2 +1,9 @@
1
- export {};
1
+ export const SettingType = Object.freeze({
2
+ BOOLEAN: 'boolean',
3
+ COLOR: 'color',
4
+ STRING: 'text',
5
+ FILE: 'file',
6
+ NUMBER: 'number',
7
+ SELECT: 'select',
8
+ });
2
9
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/settings/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/settings/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;CACV,CAAC,CAAA"}
@@ -1,4 +1,4 @@
1
- import type { PulseSyncSettingsDefinition } from '../settings/types.js';
1
+ import type { PulseSyncAddonSettingsDefinition } from '../settings/types.js';
2
2
  export type PulseSyncAddonManifest = {
3
3
  readonly id: string;
4
4
  readonly directoryName: string;
@@ -16,7 +16,7 @@ export type PulseSyncAddonManifest = {
16
16
  };
17
17
  export type PulseSyncAddonViteOptions = {
18
18
  readonly manifest: PulseSyncAddonManifest;
19
- readonly settings?: PulseSyncSettingsDefinition;
19
+ readonly settings?: PulseSyncAddonSettingsDefinition;
20
20
  readonly entry?: string;
21
21
  readonly staticDir?: string | false;
22
22
  readonly outDir?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/vite/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAA;AAEvE,MAAM,MAAM,sBAAsB,GAAG;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAA;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACjD,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACpC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAA;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,2BAA2B,CAAA;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAA;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/vite/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAE5E,MAAM,MAAM,sBAAsB,GAAG;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAA;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACjD,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACpC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAA;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,gCAAgC,CAAA;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAA;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pulsesync/addon-sdk",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "description": "Official SDK for PulseSync WebHost addons",
5
5
  "author": "PulseSync <contact@pulsesync.dev>",
6
6
  "homepage": "https://pulsesync.dev",