@springfield/ham-radio-registry 1.0.1
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/CHANGELOG.md +19 -0
- package/README.md +93 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/registry/config-registry.d.ts +51 -0
- package/dist/registry/config-registry.d.ts.map +1 -0
- package/dist/registry/config-registry.js +280 -0
- package/dist/registry/config-registry.js.map +1 -0
- package/dist/registry/shared-components.d.ts +14 -0
- package/dist/registry/shared-components.d.ts.map +1 -0
- package/dist/registry/shared-components.js +68 -0
- package/dist/registry/shared-components.js.map +1 -0
- package/dist/types/plugin-module.d.ts +90 -0
- package/dist/types/plugin-module.d.ts.map +1 -0
- package/dist/types/plugin-module.js +2 -0
- package/dist/types/plugin-module.js.map +1 -0
- package/dist/types/radio-config.d.ts +40 -0
- package/dist/types/radio-config.d.ts.map +1 -0
- package/dist/types/radio-config.js +2 -0
- package/dist/types/radio-config.js.map +1 -0
- package/dist/utils/npm-client.d.ts +27 -0
- package/dist/utils/npm-client.d.ts.map +1 -0
- package/dist/utils/npm-client.js +111 -0
- package/dist/utils/npm-client.js.map +1 -0
- package/package.json +73 -0
- package/src/index.ts +37 -0
- package/src/registry/config-registry.ts +379 -0
- package/src/registry/shared-components.ts +80 -0
- package/src/types/plugin-module.ts +96 -0
- package/src/types/radio-config.ts +43 -0
- package/src/utils/npm-client.ts +167 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin module capabilities
|
|
3
|
+
*/
|
|
4
|
+
export interface PluginCapabilities {
|
|
5
|
+
dslProtocols: boolean;
|
|
6
|
+
customCodecs: boolean;
|
|
7
|
+
memoryRead: boolean;
|
|
8
|
+
memoryWrite: boolean;
|
|
9
|
+
sharedComponents: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Springfield-specific plugin configuration in package.json
|
|
13
|
+
*/
|
|
14
|
+
export interface SpringfieldPluginConfig {
|
|
15
|
+
pluginType: 'radio-module';
|
|
16
|
+
version: string;
|
|
17
|
+
manufacturer: string;
|
|
18
|
+
supportedRadios: string[];
|
|
19
|
+
capabilities: PluginCapabilities;
|
|
20
|
+
configPath: string;
|
|
21
|
+
sharedPath: string;
|
|
22
|
+
codecFactory?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Plugin module information
|
|
26
|
+
*/
|
|
27
|
+
export interface PluginModule {
|
|
28
|
+
name: string;
|
|
29
|
+
version: string;
|
|
30
|
+
manufacturer?: string;
|
|
31
|
+
configPath: string;
|
|
32
|
+
sharedPath: string;
|
|
33
|
+
codecFactoryPath?: string;
|
|
34
|
+
capabilities: Record<string, boolean>;
|
|
35
|
+
packageJson: any;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* NPM plugin information from registry
|
|
39
|
+
*/
|
|
40
|
+
export interface NpmPluginInfo {
|
|
41
|
+
name: string;
|
|
42
|
+
version: string;
|
|
43
|
+
description: string;
|
|
44
|
+
author: string;
|
|
45
|
+
license: string;
|
|
46
|
+
repository?: string;
|
|
47
|
+
downloads: number;
|
|
48
|
+
lastUpdated: string;
|
|
49
|
+
springfield?: SpringfieldPluginConfig;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Plugin manifest configuration
|
|
53
|
+
*/
|
|
54
|
+
export interface PluginManifest {
|
|
55
|
+
pluginType: 'radio-module';
|
|
56
|
+
version: string;
|
|
57
|
+
manufacturer: string;
|
|
58
|
+
author: string;
|
|
59
|
+
license: string;
|
|
60
|
+
repository?: string;
|
|
61
|
+
configurations: PluginManifestConfiguration[];
|
|
62
|
+
sharedComponents?: PluginSharedComponents;
|
|
63
|
+
security?: PluginSecurity;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Plugin manifest configuration entry
|
|
67
|
+
*/
|
|
68
|
+
export interface PluginManifestConfiguration {
|
|
69
|
+
id: string;
|
|
70
|
+
name: string;
|
|
71
|
+
file: string;
|
|
72
|
+
description: string;
|
|
73
|
+
usesSharedComponents?: string[];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Plugin shared components
|
|
77
|
+
*/
|
|
78
|
+
export interface PluginSharedComponents {
|
|
79
|
+
schemas?: Record<string, string>;
|
|
80
|
+
protocols?: Record<string, string>;
|
|
81
|
+
codecs?: Record<string, string>;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Plugin security information
|
|
85
|
+
*/
|
|
86
|
+
export interface PluginSecurity {
|
|
87
|
+
signature?: string;
|
|
88
|
+
checksum?: string;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=plugin-module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-module.d.ts","sourceRoot":"","sources":["../../src/types/plugin-module.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,kBAAkB,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,WAAW,EAAE,GAAG,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,2BAA2B,EAAE,CAAC;IAC9C,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-module.js","sourceRoot":"","sources":["../../src/types/plugin-module.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Radio } from '@springfield/ham-radio-api';
|
|
2
|
+
/**
|
|
3
|
+
* Radio configuration metadata
|
|
4
|
+
*/
|
|
5
|
+
export interface RadioConfigMetadata {
|
|
6
|
+
moduleId: string;
|
|
7
|
+
moduleVersion: string;
|
|
8
|
+
pluginPath: string;
|
|
9
|
+
lastUpdated?: string;
|
|
10
|
+
author?: string;
|
|
11
|
+
license?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Radio capabilities
|
|
15
|
+
*/
|
|
16
|
+
export interface RadioCapabilities {
|
|
17
|
+
dslProtocols: boolean;
|
|
18
|
+
customCodecs: boolean;
|
|
19
|
+
memoryRead: boolean;
|
|
20
|
+
memoryWrite: boolean;
|
|
21
|
+
sharedComponents: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Codec configuration
|
|
25
|
+
*/
|
|
26
|
+
export interface CodecConfig {
|
|
27
|
+
type: 'shared' | 'inline';
|
|
28
|
+
reference?: string;
|
|
29
|
+
config?: Record<string, unknown>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Registry radio configuration
|
|
33
|
+
*/
|
|
34
|
+
export interface RegistryRadio extends Radio {
|
|
35
|
+
$schema?: string;
|
|
36
|
+
capabilities: RadioCapabilities;
|
|
37
|
+
codec?: CodecConfig;
|
|
38
|
+
metadata: RadioConfigMetadata;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=radio-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-config.d.ts","sourceRoot":"","sources":["../../src/types/radio-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,KAAK;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,iBAAiB,CAAC;IAChC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,mBAAmB,CAAC;CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-config.js","sourceRoot":"","sources":["../../src/types/radio-config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ILogLayer } from 'loglayer';
|
|
2
|
+
import type { NpmPluginInfo } from '../types/plugin-module.js';
|
|
3
|
+
/**
|
|
4
|
+
* NPM registry client for plugin discovery and validation
|
|
5
|
+
*/
|
|
6
|
+
export interface NpmClient {
|
|
7
|
+
getPackageInfo(packageName: string): Promise<any>;
|
|
8
|
+
searchPackages(query: string): Promise<NpmPluginInfo[]>;
|
|
9
|
+
getPackageStats(packageName: string): Promise<any>;
|
|
10
|
+
validatePackage(packageName: string): Promise<boolean>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Default implementation of NPM client using npm registry API
|
|
14
|
+
*/
|
|
15
|
+
export declare class DefaultNpmClient implements NpmClient {
|
|
16
|
+
private logger;
|
|
17
|
+
private baseUrl;
|
|
18
|
+
constructor(logger: ILogLayer);
|
|
19
|
+
getPackageInfo(packageName: string): Promise<any>;
|
|
20
|
+
searchPackages(query: string): Promise<NpmPluginInfo[]>;
|
|
21
|
+
getPackageStats(packageName: string): Promise<any>;
|
|
22
|
+
validatePackage(packageName: string): Promise<boolean>;
|
|
23
|
+
private isRadioModule;
|
|
24
|
+
private transformToNpmPluginInfo;
|
|
25
|
+
private extractAuthor;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=npm-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-client.d.ts","sourceRoot":"","sources":["../../src/utils/npm-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,SAAS;IAExB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAGlD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAGxD,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAGnD,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxD;AAsBD;;GAEG;AACH,qBAAa,gBAAiB,YAAW,SAAS;IAChD,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,OAAO,CAAgC;gBAEnC,MAAM,EAAE,SAAS;IAIvB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAqBjD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAgCvD,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAYlD,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5D,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,aAAa;CAStB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default implementation of NPM client using npm registry API
|
|
3
|
+
*/
|
|
4
|
+
export class DefaultNpmClient {
|
|
5
|
+
logger;
|
|
6
|
+
baseUrl = 'https://registry.npmjs.org';
|
|
7
|
+
constructor(logger) {
|
|
8
|
+
this.logger = logger;
|
|
9
|
+
}
|
|
10
|
+
async getPackageInfo(packageName) {
|
|
11
|
+
try {
|
|
12
|
+
const response = await fetch(`${this.baseUrl}/${packageName}`);
|
|
13
|
+
if (!response.ok) {
|
|
14
|
+
if (response.status === 404) {
|
|
15
|
+
throw new Error(`Package not found: ${packageName}`);
|
|
16
|
+
}
|
|
17
|
+
throw new Error(`Failed to fetch package info: ${response.statusText}`);
|
|
18
|
+
}
|
|
19
|
+
const packageInfo = await response.json();
|
|
20
|
+
this.logger.withMetadata({ packageName }).info('Retrieved package info');
|
|
21
|
+
return packageInfo;
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
this.logger.withError(error).error('Failed to get package info');
|
|
25
|
+
throw error;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async searchPackages(query) {
|
|
29
|
+
try {
|
|
30
|
+
const searchQuery = encodeURIComponent(query);
|
|
31
|
+
const response = await fetch(`${this.baseUrl}/-/v1/search?text=${searchQuery}&size=50`);
|
|
32
|
+
if (!response.ok) {
|
|
33
|
+
throw new Error(`Failed to search packages: ${response.statusText}`);
|
|
34
|
+
}
|
|
35
|
+
const searchResults = (await response.json());
|
|
36
|
+
const packages = searchResults.objects || [];
|
|
37
|
+
// Filter and transform results
|
|
38
|
+
const pluginPackages = [];
|
|
39
|
+
for (const pkg of packages) {
|
|
40
|
+
const packageInfo = pkg.package;
|
|
41
|
+
// Check if this is a radio module
|
|
42
|
+
if (this.isRadioModule(packageInfo)) {
|
|
43
|
+
pluginPackages.push(this.transformToNpmPluginInfo(packageInfo));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
this.logger.withMetadata({ query, results: pluginPackages.length }).info('Searched packages');
|
|
47
|
+
return pluginPackages;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
this.logger.withError(error).error('Failed to search packages');
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async getPackageStats(packageName) {
|
|
55
|
+
try {
|
|
56
|
+
// Note: npm registry doesn't provide download stats via public API
|
|
57
|
+
// This would require npmjs.com API or alternative data source
|
|
58
|
+
this.logger.withMetadata({ packageName }).warn('Package stats not available via public npm registry API');
|
|
59
|
+
return { downloads: 0, lastUpdated: new Date().toISOString() };
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
this.logger.withError(error).error('Failed to get package stats');
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async validatePackage(packageName) {
|
|
67
|
+
try {
|
|
68
|
+
await this.getPackageInfo(packageName);
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
if (error instanceof Error && error.message.includes('not found')) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
isRadioModule(packageInfo) {
|
|
79
|
+
const name = packageInfo.name || '';
|
|
80
|
+
// Check naming convention
|
|
81
|
+
const isNamedCorrectly = name.includes('radio-module') || name.startsWith('@springfield/radio-module-');
|
|
82
|
+
// Check springfield plugin field
|
|
83
|
+
const hasSpringfieldField = packageInfo.springfield?.pluginType === 'radio-module';
|
|
84
|
+
// Check keywords
|
|
85
|
+
const hasKeywords = packageInfo.keywords?.includes('radio-module');
|
|
86
|
+
return isNamedCorrectly || hasSpringfieldField || hasKeywords;
|
|
87
|
+
}
|
|
88
|
+
transformToNpmPluginInfo(packageInfo) {
|
|
89
|
+
return {
|
|
90
|
+
name: packageInfo.name,
|
|
91
|
+
version: packageInfo.version,
|
|
92
|
+
description: packageInfo.description || '',
|
|
93
|
+
author: this.extractAuthor(packageInfo.author),
|
|
94
|
+
license: packageInfo.license || 'Unknown',
|
|
95
|
+
repository: packageInfo.repository?.url || packageInfo.homepage,
|
|
96
|
+
downloads: 0, // Not available via public API
|
|
97
|
+
lastUpdated: packageInfo.date || new Date().toISOString(),
|
|
98
|
+
springfield: packageInfo.springfield,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
extractAuthor(author) {
|
|
102
|
+
if (typeof author === 'string') {
|
|
103
|
+
return author;
|
|
104
|
+
}
|
|
105
|
+
if (typeof author === 'object' && author.name) {
|
|
106
|
+
return author.name;
|
|
107
|
+
}
|
|
108
|
+
return 'Unknown';
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=npm-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-client.js","sourceRoot":"","sources":["../../src/utils/npm-client.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@springfield/ham-radio-registry",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"author": "Bryan Hunt",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"packageManager": "yarn@4.9.2",
|
|
7
|
+
"readme": "README.md",
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"type": "module",
|
|
10
|
+
"types": "dist/index.d.ts",
|
|
11
|
+
"files": [
|
|
12
|
+
"src/",
|
|
13
|
+
"dist/"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"commitlint": "commitlint --edit",
|
|
18
|
+
"lint": "oxlint",
|
|
19
|
+
"lint:fix": "oxlint --fix --fix-suggestions",
|
|
20
|
+
"release": "semantic-release",
|
|
21
|
+
"prepare": "husky",
|
|
22
|
+
"test": "yarn test:unit && yarn test:integration",
|
|
23
|
+
"test:unit": "tsx --test test/unit/**/*.test.ts",
|
|
24
|
+
"test:integration": "tsx --test test/integration/**/*.test.ts"
|
|
25
|
+
},
|
|
26
|
+
"release": {
|
|
27
|
+
"branches": [
|
|
28
|
+
"main",
|
|
29
|
+
{
|
|
30
|
+
"name": "beta",
|
|
31
|
+
"prerelease": true
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"plugins": [
|
|
35
|
+
[
|
|
36
|
+
"@semantic-release/commit-analyzer",
|
|
37
|
+
{
|
|
38
|
+
"preset": "conventionalcommits"
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
"@semantic-release/release-notes-generator",
|
|
43
|
+
{
|
|
44
|
+
"preset": "conventionalcommits"
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"@semantic-release/changelog",
|
|
48
|
+
"semantic-release-yarn",
|
|
49
|
+
"@semantic-release/gitlab",
|
|
50
|
+
"@semantic-release/git"
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
"publishConfig": {
|
|
54
|
+
"access": "public"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@commitlint/cli": "19.8.1",
|
|
58
|
+
"@commitlint/config-conventional": "19.8.1",
|
|
59
|
+
"@semantic-release/changelog": "6.0.3",
|
|
60
|
+
"@semantic-release/git": "10.0.1",
|
|
61
|
+
"@semantic-release/gitlab": "13.2.6",
|
|
62
|
+
"chai": "^5.2.0",
|
|
63
|
+
"husky": "9.1.7",
|
|
64
|
+
"oxlint": "1.3.0",
|
|
65
|
+
"semantic-release": "23.1.1",
|
|
66
|
+
"semantic-release-yarn": "3.0.2",
|
|
67
|
+
"typescript": "5.8.3"
|
|
68
|
+
},
|
|
69
|
+
"dependencies": {
|
|
70
|
+
"@springfield/ham-radio-api": "^16.1.1",
|
|
71
|
+
"loglayer": "^6.4.3"
|
|
72
|
+
}
|
|
73
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Core types
|
|
2
|
+
export type {
|
|
3
|
+
RadioConfigMetadata,
|
|
4
|
+
RadioCapabilities,
|
|
5
|
+
CodecConfig,
|
|
6
|
+
} from './types/radio-config.js';
|
|
7
|
+
|
|
8
|
+
// Re-export common types from ham-radio-api
|
|
9
|
+
export type { ValidationResult } from '@springfield/ham-radio-api';
|
|
10
|
+
|
|
11
|
+
export type {
|
|
12
|
+
PluginModule,
|
|
13
|
+
PluginCapabilities,
|
|
14
|
+
SpringfieldPluginConfig,
|
|
15
|
+
NpmPluginInfo,
|
|
16
|
+
PluginManifest,
|
|
17
|
+
PluginManifestConfiguration,
|
|
18
|
+
PluginSharedComponents,
|
|
19
|
+
PluginSecurity,
|
|
20
|
+
} from './types/plugin-module.js';
|
|
21
|
+
|
|
22
|
+
// Registry components
|
|
23
|
+
import type { RadioConfigRegistry } from './registry/config-registry.js';
|
|
24
|
+
import { NpmBasedConfigRegistry } from './registry/config-registry.js';
|
|
25
|
+
|
|
26
|
+
// Shared components
|
|
27
|
+
export type { SharedComponentManager } from '@springfield/ham-radio-api';
|
|
28
|
+
export { DefaultSharedComponentManager } from './registry/shared-components.js';
|
|
29
|
+
|
|
30
|
+
// NPM client
|
|
31
|
+
export type { NpmClient } from './utils/npm-client.js';
|
|
32
|
+
export { DefaultNpmClient } from './utils/npm-client.js';
|
|
33
|
+
|
|
34
|
+
// Factory function for creating registry instances
|
|
35
|
+
export function createRegistry(logger: any): RadioConfigRegistry {
|
|
36
|
+
return new NpmBasedConfigRegistry(logger);
|
|
37
|
+
}
|