@pulsesync/addon-sdk 0.1.2 → 0.1.4
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 +21 -11
- package/dist/addon/defineAddon.d.ts.map +1 -1
- package/dist/addon/defineAddon.js +19 -5
- package/dist/addon/defineAddon.js.map +1 -1
- package/dist/addon/types.d.ts +4 -1
- package/dist/addon/types.d.ts.map +1 -1
- package/dist/settings/defineSettings.d.ts +19 -2
- package/dist/settings/defineSettings.d.ts.map +1 -1
- package/dist/settings/defineSettings.js +83 -14
- package/dist/settings/defineSettings.js.map +1 -1
- package/dist/settings/index.d.ts +3 -2
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +2 -1
- package/dist/settings/index.js.map +1 -1
- package/dist/settings/types.d.ts +31 -4
- package/dist/settings/types.d.ts.map +1 -1
- package/dist/settings/types.js +8 -1
- package/dist/settings/types.js.map +1 -1
- package/dist/vite/plugin.d.ts.map +1 -1
- package/dist/vite/plugin.js +6 -0
- package/dist/vite/plugin.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -42,17 +42,17 @@ export default defineAddon({
|
|
|
42
42
|
|
|
43
43
|
```ts
|
|
44
44
|
// src/settings.ts
|
|
45
|
-
import {
|
|
45
|
+
import { defineAddonSettings, SettingType } from '@pulsesync/addon-sdk'
|
|
46
46
|
|
|
47
|
-
export const settings =
|
|
47
|
+
export const settings = defineAddonSettings(
|
|
48
48
|
{
|
|
49
49
|
enabled: {
|
|
50
|
-
type:
|
|
50
|
+
type: SettingType.BOOLEAN,
|
|
51
51
|
name: 'Включить аддон',
|
|
52
52
|
default: true,
|
|
53
53
|
},
|
|
54
54
|
accentColor: {
|
|
55
|
-
type:
|
|
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(
|
|
68
|
-
const { accentColor, enabled } = settings.use(
|
|
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
|
-
|
|
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`
|
|
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":"
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
1
|
+
{"version":3,"file":"defineAddon.js","sourceRoot":"","sources":["../../src/addon/defineAddon.ts"],"names":[],"mappings":"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"}
|
package/dist/addon/types.d.ts
CHANGED
|
@@ -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
|
};
|
|
@@ -47,6 +49,7 @@ export type PulseSyncWebHostApi = {
|
|
|
47
49
|
installAddon: (factory: PulseSyncAddonFactory) => Promise<PulseSyncAddonCleanup | undefined>;
|
|
48
50
|
registerAddon: (definition: PulseSyncAddonDefinition) => PulseSyncAddonCleanup;
|
|
49
51
|
unregisterAddon: (addonId: string) => boolean;
|
|
52
|
+
registerSlot: (slotName: string, element: Element) => PulseSyncAddonCleanup;
|
|
50
53
|
getPulseSyncApi: () => PulseSyncApi | undefined;
|
|
51
54
|
};
|
|
52
55
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/addon/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,20 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
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
|
+
/** @deprecated Use defineAddonSettings instead. */
|
|
18
|
+
export declare const defineSettings: typeof defineAddonSettings;
|
|
19
|
+
export {};
|
|
3
20
|
//# sourceMappingURL=defineSettings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defineSettings.d.ts","sourceRoot":"","sources":["../../src/settings/defineSettings.ts"],"names":[],"mappings":"
|
|
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;AAgBD,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,CAsF3C;AAED,mDAAmD;AACnD,eAAO,MAAM,cAAc,4BAAsB,CAAA"}
|
|
@@ -1,23 +1,92 @@
|
|
|
1
|
-
import { useEffect, useState } from 'react';
|
|
1
|
+
import { useEffect, useState, useSyncExternalStore } from 'react';
|
|
2
2
|
import { createSettingsConfig, createSettingsDefaults, resolveSettingsValues } from './schema.js';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
const settingsBinders = new WeakMap();
|
|
4
|
+
function freezeValues(values) {
|
|
5
|
+
return Object.freeze(values);
|
|
6
|
+
}
|
|
7
|
+
function isAddonApi(value) {
|
|
8
|
+
return Boolean(value && !Array.isArray(value) && typeof value === 'object' && 'addonId' in value);
|
|
9
|
+
}
|
|
10
|
+
export function bindAddonSettings(settings, api) {
|
|
11
|
+
const bind = settingsBinders.get(settings);
|
|
12
|
+
if (!bind)
|
|
13
|
+
throw new TypeError('PulseSync addon settings must be created with defineAddonSettings()');
|
|
14
|
+
return bind(api);
|
|
15
|
+
}
|
|
16
|
+
export function defineAddonSettings(schema, options = {}) {
|
|
5
17
|
const frozenSchema = Object.freeze({ ...schema });
|
|
6
|
-
|
|
18
|
+
const defaults = freezeValues(createSettingsDefaults(frozenSchema));
|
|
19
|
+
let currentValues = defaults;
|
|
20
|
+
let boundAddonId;
|
|
21
|
+
let removeStoreListener;
|
|
22
|
+
const listeners = new Set();
|
|
23
|
+
const notify = () => listeners.forEach((listener) => listener());
|
|
24
|
+
const updateValues = (current) => {
|
|
25
|
+
currentValues = freezeValues(resolveSettingsValues(frozenSchema, current));
|
|
26
|
+
notify();
|
|
27
|
+
};
|
|
28
|
+
const subscribe = (listener) => {
|
|
29
|
+
listeners.add(listener);
|
|
30
|
+
return () => listeners.delete(listener);
|
|
31
|
+
};
|
|
32
|
+
const getSnapshot = () => {
|
|
33
|
+
if (!boundAddonId) {
|
|
34
|
+
throw new Error('PulseSync addon settings are not initialized. Pass settings to defineAddon().');
|
|
35
|
+
}
|
|
36
|
+
return currentValues;
|
|
37
|
+
};
|
|
38
|
+
function use(apiOrKeys) {
|
|
39
|
+
const legacyApi = isAddonApi(apiOrKeys) ? apiOrKeys : undefined;
|
|
40
|
+
const [legacyValues, setLegacyValues] = useState(defaults);
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
if (!legacyApi)
|
|
43
|
+
return;
|
|
44
|
+
const store = legacyApi.pulsesyncApi?.getSettings(legacyApi.addonId);
|
|
45
|
+
if (!store) {
|
|
46
|
+
setLegacyValues(defaults);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const updateLegacyValues = (current) => setLegacyValues(freezeValues(resolveSettingsValues(frozenSchema, current)));
|
|
50
|
+
updateLegacyValues(store.getCurrent());
|
|
51
|
+
return store.onChange(updateLegacyValues);
|
|
52
|
+
}, [legacyApi]);
|
|
53
|
+
const boundValues = useSyncExternalStore(subscribe, legacyApi ? () => defaults : getSnapshot, () => defaults);
|
|
54
|
+
const values = legacyApi ? legacyValues : boundValues;
|
|
55
|
+
if (!Array.isArray(apiOrKeys))
|
|
56
|
+
return values;
|
|
57
|
+
return Object.fromEntries(apiOrKeys.map((key) => [key, values[key]]));
|
|
58
|
+
}
|
|
59
|
+
const definition = {
|
|
7
60
|
schema: frozenSchema,
|
|
8
61
|
defaults,
|
|
9
|
-
|
|
10
|
-
|
|
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;
|
|
62
|
+
get store() {
|
|
63
|
+
return getSnapshot();
|
|
19
64
|
},
|
|
65
|
+
use,
|
|
20
66
|
toConfig: () => createSettingsConfig(frozenSchema, options.title ?? 'Settings'),
|
|
67
|
+
};
|
|
68
|
+
settingsBinders.set(definition, (api) => {
|
|
69
|
+
if (boundAddonId) {
|
|
70
|
+
throw new Error(`PulseSync settings are already bound to addon ${boundAddonId}`);
|
|
71
|
+
}
|
|
72
|
+
boundAddonId = api.addonId;
|
|
73
|
+
const store = api.pulsesyncApi?.getSettings(api.addonId);
|
|
74
|
+
currentValues = store ? freezeValues(resolveSettingsValues(frozenSchema, store.getCurrent())) : defaults;
|
|
75
|
+
removeStoreListener = store?.onChange(updateValues);
|
|
76
|
+
let active = true;
|
|
77
|
+
return () => {
|
|
78
|
+
if (!active)
|
|
79
|
+
return;
|
|
80
|
+
active = false;
|
|
81
|
+
removeStoreListener?.();
|
|
82
|
+
removeStoreListener = undefined;
|
|
83
|
+
boundAddonId = undefined;
|
|
84
|
+
currentValues = defaults;
|
|
85
|
+
notify();
|
|
86
|
+
};
|
|
21
87
|
});
|
|
88
|
+
return Object.freeze(definition);
|
|
22
89
|
}
|
|
90
|
+
/** @deprecated Use defineAddonSettings instead. */
|
|
91
|
+
export const defineSettings = defineAddonSettings;
|
|
23
92
|
//# 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;
|
|
1
|
+
{"version":3,"file":"defineSettings.js","sourceRoot":"","sources":["../../src/settings/defineSettings.ts"],"names":[],"mappings":"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"}
|
package/dist/settings/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { defineSettings } from './defineSettings.js';
|
|
2
|
-
export
|
|
1
|
+
export { defineAddonSettings, defineSettings } from './defineSettings.js';
|
|
2
|
+
export { SettingType } from './types.js';
|
|
3
|
+
export type { DefineAddonSettingsOptions, DefineSettingsOptions, InferPulseSyncSettings, PulseSyncAddonSettingsDefinition, PulseSyncSetting, PulseSyncSettingValue, PulseSyncSettingsConfig, PulseSyncSettingsDefinition, 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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,YAAY,EACR,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,gCAAgC,EAChC,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,GAC1B,MAAM,YAAY,CAAA"}
|
package/dist/settings/index.js
CHANGED
|
@@ -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,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA"}
|
package/dist/settings/types.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import type { PulseSyncAddonApi } from '../addon/types.js';
|
|
2
|
+
export declare const SettingType: Readonly<{
|
|
3
|
+
readonly BOOLEAN: 'boolean';
|
|
4
|
+
readonly COLOR: 'color';
|
|
5
|
+
readonly STRING: 'text';
|
|
6
|
+
readonly FILE: 'file';
|
|
7
|
+
readonly NUMBER: 'number';
|
|
8
|
+
readonly SELECT: 'select';
|
|
9
|
+
}>;
|
|
2
10
|
type SettingBase<TType extends string, TValue> = {
|
|
3
11
|
readonly type: TType;
|
|
4
12
|
readonly name: string;
|
|
@@ -16,8 +24,20 @@ export type PulseSyncSetting = SettingBase<'boolean', boolean> | SettingBase<'co
|
|
|
16
24
|
}[];
|
|
17
25
|
});
|
|
18
26
|
export type PulseSyncSettingsSchema = Readonly<Record<string, PulseSyncSetting>>;
|
|
27
|
+
export type PulseSyncSettingValue<TSetting extends PulseSyncSetting> = TSetting extends {
|
|
28
|
+
readonly type: 'boolean';
|
|
29
|
+
} ? boolean : TSetting extends {
|
|
30
|
+
readonly type: 'number';
|
|
31
|
+
} ? number : TSetting extends {
|
|
32
|
+
readonly type: 'select';
|
|
33
|
+
readonly options: readonly {
|
|
34
|
+
readonly value: infer TValue;
|
|
35
|
+
}[];
|
|
36
|
+
} ? TValue : TSetting extends {
|
|
37
|
+
readonly type: 'color' | 'text' | 'file';
|
|
38
|
+
} ? string : never;
|
|
19
39
|
export type InferPulseSyncSettings<TSchema extends PulseSyncSettingsSchema> = {
|
|
20
|
-
readonly [TKey in keyof TSchema]: TSchema[TKey]
|
|
40
|
+
readonly [TKey in keyof TSchema]: PulseSyncSettingValue<TSchema[TKey]>;
|
|
21
41
|
};
|
|
22
42
|
export type PulseSyncSettingsConfig = {
|
|
23
43
|
readonly sections: readonly {
|
|
@@ -25,14 +45,21 @@ export type PulseSyncSettingsConfig = {
|
|
|
25
45
|
readonly items: readonly Record<string, unknown>[];
|
|
26
46
|
}[];
|
|
27
47
|
};
|
|
28
|
-
export type
|
|
48
|
+
export type PulseSyncAddonSettingsDefinition<TSchema extends PulseSyncSettingsSchema = PulseSyncSettingsSchema> = {
|
|
29
49
|
readonly schema: TSchema;
|
|
30
50
|
readonly defaults: InferPulseSyncSettings<TSchema>;
|
|
31
|
-
|
|
51
|
+
readonly store: InferPulseSyncSettings<TSchema>;
|
|
52
|
+
use: {
|
|
53
|
+
(): InferPulseSyncSettings<TSchema>;
|
|
54
|
+
(api: PulseSyncAddonApi): InferPulseSyncSettings<TSchema>;
|
|
55
|
+
<const TKey extends keyof TSchema>(keys: readonly TKey[]): Pick<InferPulseSyncSettings<TSchema>, TKey>;
|
|
56
|
+
};
|
|
32
57
|
toConfig: () => PulseSyncSettingsConfig;
|
|
33
58
|
};
|
|
34
|
-
export type
|
|
59
|
+
export type PulseSyncSettingsDefinition<TSchema extends PulseSyncSettingsSchema = PulseSyncSettingsSchema> = PulseSyncAddonSettingsDefinition<TSchema>;
|
|
60
|
+
export type DefineAddonSettingsOptions = {
|
|
35
61
|
readonly title?: string;
|
|
36
62
|
};
|
|
63
|
+
export type DefineSettingsOptions = DefineAddonSettingsOptions;
|
|
37
64
|
export {};
|
|
38
65
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/settings/types.ts"],"names":[],"mappings":"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"}
|
package/dist/settings/types.js
CHANGED
|
@@ -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":"AAEA,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/vite/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAA8B,MAAM,MAAM,CAAA;AAG9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/vite/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAA8B,MAAM,MAAM,CAAA;AAG9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAW3D,wBAAgB,cAAc,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM,CA2EzE"}
|
package/dist/vite/plugin.js
CHANGED
|
@@ -2,6 +2,7 @@ import { promises as fs } from 'node:fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { createAddonMetadata } from './manifest.js';
|
|
4
4
|
const REACT_EXTERNALS = ['react', 'react/jsx-runtime', 'react/jsx-dev-runtime'];
|
|
5
|
+
const RESERVED_OUTPUT_FILE_NAMES = new Set(['metadata.json', 'script.css', 'script.js']);
|
|
5
6
|
function resolveOutputDirectory(root, options) {
|
|
6
7
|
return options.outDir
|
|
7
8
|
? path.resolve(root, options.outDir)
|
|
@@ -59,6 +60,11 @@ export function pulseSyncAddon(options) {
|
|
|
59
60
|
if (options.staticDir !== false) {
|
|
60
61
|
const staticDirectory = path.resolve(resolvedConfig.root, options.staticDir ?? 'addon');
|
|
61
62
|
try {
|
|
63
|
+
const staticEntries = await fs.readdir(staticDirectory);
|
|
64
|
+
const reservedEntry = staticEntries.find(entry => RESERVED_OUTPUT_FILE_NAMES.has(entry.toLowerCase()));
|
|
65
|
+
if (reservedEntry) {
|
|
66
|
+
throw new Error(`PulseSync addon static directory cannot contain reserved output file: ${reservedEntry}`);
|
|
67
|
+
}
|
|
62
68
|
await fs.cp(staticDirectory, outputDirectory, { recursive: true, force: true });
|
|
63
69
|
}
|
|
64
70
|
catch (error) {
|
package/dist/vite/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/vite/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,IAAI,MAAM,WAAW,CAAA;AAI5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAGnD,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/vite/plugin.ts"],"names":[],"mappings":"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"}
|