react-native-maplibre-lite 0.2.1 → 0.2.2
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.
|
@@ -63,31 +63,67 @@ export async function writeVoicePref(pref) {
|
|
|
63
63
|
/* ignore */
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
+
const HTTP_URL_PREFIX_RE = /^https?:\/\//i;
|
|
67
|
+
function trimTrailingSlashes(s) {
|
|
68
|
+
return s.replace(/\/+$/, '');
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Strips `?query` and `#hash` — catalog URLs are plain paths. */
|
|
72
|
+
function stripUrlQueryAndHash(url) {
|
|
73
|
+
const q = url.indexOf('?');
|
|
74
|
+
const h = url.indexOf('#');
|
|
75
|
+
let end = url.length;
|
|
76
|
+
if (q >= 0) end = Math.min(end, q);
|
|
77
|
+
if (h >= 0) end = Math.min(end, h);
|
|
78
|
+
return url.slice(0, end);
|
|
79
|
+
}
|
|
80
|
+
function pathnameSegments(pathname) {
|
|
81
|
+
return pathname.split('/').filter(Boolean);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Parses `http(s)://host[:port]/path` without the URL API (Hermes-safe).
|
|
86
|
+
*/
|
|
87
|
+
function parseHttpUrl(url) {
|
|
88
|
+
const bare = stripUrlQueryAndHash(url.trim());
|
|
89
|
+
if (!HTTP_URL_PREFIX_RE.test(bare)) return null;
|
|
90
|
+
const schemeEnd = bare.indexOf('://');
|
|
91
|
+
const rest = bare.slice(schemeEnd + 3);
|
|
92
|
+
const slash = rest.indexOf('/');
|
|
93
|
+
const authority = slash === -1 ? rest : rest.slice(0, slash);
|
|
94
|
+
if (!authority) return null;
|
|
95
|
+
const pathname = slash === -1 ? '/' : rest.slice(slash);
|
|
96
|
+
const origin = bare.slice(0, schemeEnd + 3) + authority;
|
|
97
|
+
return {
|
|
98
|
+
origin,
|
|
99
|
+
pathname
|
|
100
|
+
};
|
|
101
|
+
}
|
|
66
102
|
export function resolveVoiceCatalogUrl(url) {
|
|
67
103
|
const t = url.trim();
|
|
68
104
|
if (!t) return null;
|
|
69
|
-
|
|
70
|
-
// eslint-disable-next-line no-new
|
|
71
|
-
new URL(t);
|
|
72
|
-
return t;
|
|
73
|
-
} catch {
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
105
|
+
return parseHttpUrl(t) ? t : null;
|
|
76
106
|
}
|
|
77
107
|
|
|
78
108
|
/** Base URL for a voice directory: `.../voices/{dir}`. */
|
|
79
109
|
export function voiceDirBaseUrl(catalogUrl, dir) {
|
|
80
|
-
const
|
|
81
|
-
|
|
110
|
+
const parsed = parseHttpUrl(catalogUrl);
|
|
111
|
+
if (!parsed) {
|
|
112
|
+
throw new Error('voiceDirBaseUrl: invalid catalog URL');
|
|
113
|
+
}
|
|
114
|
+
const parts = pathnameSegments(parsed.pathname);
|
|
82
115
|
if (parts.length > 0 && parts[parts.length - 1].toLowerCase().endsWith('.json')) {
|
|
83
116
|
parts.pop();
|
|
84
117
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
118
|
+
const safeDir = dir.trim().replace(/[/\\]+/g, '');
|
|
119
|
+
if (!safeDir) {
|
|
120
|
+
throw new Error('voiceDirBaseUrl: empty dir');
|
|
121
|
+
}
|
|
122
|
+
parts.push(safeDir);
|
|
123
|
+
return trimTrailingSlashes(`${parsed.origin}/${parts.join('/')}`);
|
|
88
124
|
}
|
|
89
125
|
function voiceManifestUrl(baseUrl) {
|
|
90
|
-
return `${baseUrl
|
|
126
|
+
return `${trimTrailingSlashes(baseUrl)}/data.json`;
|
|
91
127
|
}
|
|
92
128
|
export async function fetchVoiceCatalog(catalogUrl) {
|
|
93
129
|
const res = await fetch(catalogUrl);
|
|
@@ -206,7 +242,7 @@ function phraseKeyToClipId(manifest, key, variant) {
|
|
|
206
242
|
* манифесте ключи пропускаются.
|
|
207
243
|
*/
|
|
208
244
|
export function keysToClipUrls(manifest, clipBaseUrl, keys) {
|
|
209
|
-
const base = clipBaseUrl
|
|
245
|
+
const base = trimTrailingSlashes(clipBaseUrl);
|
|
210
246
|
const variants = new Map();
|
|
211
247
|
const urls = [];
|
|
212
248
|
for (const raw of keys) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AsyncStorage","isKnownPhraseKey","LS_VOICE_PREF","LS_VOICE_VOLUME","DEFAULT_VOICE_VOLUME_LEVEL","volumeLevelToGain","level","readVoiceVolumeLevel","raw","getItem","n","Number","parseInt","writeVoiceVolumeLevel","setItem","String","readVoicePref","parsed","JSON","parse","disabled","dir","trim","writeVoicePref","pref","stringify","
|
|
1
|
+
{"version":3,"names":["AsyncStorage","isKnownPhraseKey","LS_VOICE_PREF","LS_VOICE_VOLUME","DEFAULT_VOICE_VOLUME_LEVEL","volumeLevelToGain","level","readVoiceVolumeLevel","raw","getItem","n","Number","parseInt","writeVoiceVolumeLevel","setItem","String","readVoicePref","parsed","JSON","parse","disabled","dir","trim","writeVoicePref","pref","stringify","HTTP_URL_PREFIX_RE","trimTrailingSlashes","s","replace","stripUrlQueryAndHash","url","q","indexOf","h","end","length","Math","min","slice","pathnameSegments","pathname","split","filter","Boolean","parseHttpUrl","bare","test","schemeEnd","rest","slash","authority","origin","resolveVoiceCatalogUrl","t","voiceDirBaseUrl","catalogUrl","Error","parts","toLowerCase","endsWith","pop","safeDir","push","join","voiceManifestUrl","baseUrl","fetchVoiceCatalog","res","fetch","ok","status","data","json","Array","isArray","entries","item","name","e","locale","fetchVoiceManifest","clipBaseUrl","manifest","key","value","Object","every","v","resolveSelectedDir","catalog","found","find","loadVoiceRuntime","resolved","selectedDir","enabled","reloadVoiceForDir","entry","pickVariant","vars","floor","random","phraseKeyToClipId","variant","keysToClipUrls","keys","base","variants","Map","urls","get","set"],"sourceRoot":"../../../src","sources":["components/navigatorVoiceCatalog.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigatorVoiceCatalog.d.ts","sourceRoot":"","sources":["../../../../src/components/navigatorVoiceCatalog.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,4DAA4D;AAC5D,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAErD,MAAM,MAAM,SAAS,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,YAAY,GAAG;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC;AAKF,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAIjD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAEjE;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAUtE;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlF;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA0B/D;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnE;
|
|
1
|
+
{"version":3,"file":"navigatorVoiceCatalog.d.ts","sourceRoot":"","sources":["../../../../src/components/navigatorVoiceCatalog.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,4DAA4D;AAC5D,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAErD,MAAM,MAAM,SAAS,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,YAAY,GAAG;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC;AAKF,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAIjD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAEjE;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAUtE;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlF;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA0B/D;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnE;AAwCD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIjE;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBvE;AAMD,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA6BxF;AAED,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAgBpF;AAUD;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA6BvF;AAED,yEAAyE;AACzE,wBAAsB,iBAAiB,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,EAAE,EAC5B,GAAG,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC,CAcrF;AAaD;;;;GAIG;AACH,wBAAgB,cAAc,CAC1B,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EAAE,GACf,MAAM,EAAE,CAgBV"}
|
package/package.json
CHANGED
|
@@ -95,32 +95,73 @@ export async function writeVoicePref(pref: VoicePref): Promise<void> {
|
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
+
const HTTP_URL_PREFIX_RE = /^https?:\/\//i;
|
|
99
|
+
|
|
100
|
+
function trimTrailingSlashes(s: string): string {
|
|
101
|
+
return s.replace(/\/+$/, '');
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Strips `?query` and `#hash` — catalog URLs are plain paths. */
|
|
105
|
+
function stripUrlQueryAndHash(url: string): string {
|
|
106
|
+
const q = url.indexOf('?');
|
|
107
|
+
const h = url.indexOf('#');
|
|
108
|
+
let end = url.length;
|
|
109
|
+
if (q >= 0) end = Math.min(end, q);
|
|
110
|
+
if (h >= 0) end = Math.min(end, h);
|
|
111
|
+
return url.slice(0, end);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function pathnameSegments(pathname: string): string[] {
|
|
115
|
+
return pathname.split('/').filter(Boolean);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Parses `http(s)://host[:port]/path` without the URL API (Hermes-safe).
|
|
120
|
+
*/
|
|
121
|
+
function parseHttpUrl(url: string): { origin: string; pathname: string } | null {
|
|
122
|
+
const bare = stripUrlQueryAndHash(url.trim());
|
|
123
|
+
if (!HTTP_URL_PREFIX_RE.test(bare)) return null;
|
|
124
|
+
|
|
125
|
+
const schemeEnd = bare.indexOf('://');
|
|
126
|
+
const rest = bare.slice(schemeEnd + 3);
|
|
127
|
+
const slash = rest.indexOf('/');
|
|
128
|
+
const authority = slash === -1 ? rest : rest.slice(0, slash);
|
|
129
|
+
if (!authority) return null;
|
|
130
|
+
|
|
131
|
+
const pathname = slash === -1 ? '/' : rest.slice(slash);
|
|
132
|
+
const origin = bare.slice(0, schemeEnd + 3) + authority;
|
|
133
|
+
return { origin, pathname };
|
|
134
|
+
}
|
|
135
|
+
|
|
98
136
|
export function resolveVoiceCatalogUrl(url: string): string | null {
|
|
99
137
|
const t = url.trim();
|
|
100
138
|
if (!t) return null;
|
|
101
|
-
|
|
102
|
-
// eslint-disable-next-line no-new
|
|
103
|
-
new URL(t);
|
|
104
|
-
return t;
|
|
105
|
-
} catch {
|
|
106
|
-
return null;
|
|
107
|
-
}
|
|
139
|
+
return parseHttpUrl(t) ? t : null;
|
|
108
140
|
}
|
|
109
141
|
|
|
110
142
|
/** Base URL for a voice directory: `.../voices/{dir}`. */
|
|
111
143
|
export function voiceDirBaseUrl(catalogUrl: string, dir: string): string {
|
|
112
|
-
const
|
|
113
|
-
|
|
144
|
+
const parsed = parseHttpUrl(catalogUrl);
|
|
145
|
+
if (!parsed) {
|
|
146
|
+
throw new Error('voiceDirBaseUrl: invalid catalog URL');
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const parts = pathnameSegments(parsed.pathname);
|
|
114
150
|
if (parts.length > 0 && parts[parts.length - 1]!.toLowerCase().endsWith('.json')) {
|
|
115
151
|
parts.pop();
|
|
116
152
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
153
|
+
|
|
154
|
+
const safeDir = dir.trim().replace(/[/\\]+/g, '');
|
|
155
|
+
if (!safeDir) {
|
|
156
|
+
throw new Error('voiceDirBaseUrl: empty dir');
|
|
157
|
+
}
|
|
158
|
+
parts.push(safeDir);
|
|
159
|
+
|
|
160
|
+
return trimTrailingSlashes(`${parsed.origin}/${parts.join('/')}`);
|
|
120
161
|
}
|
|
121
162
|
|
|
122
163
|
function voiceManifestUrl(baseUrl: string): string {
|
|
123
|
-
return `${baseUrl
|
|
164
|
+
return `${trimTrailingSlashes(baseUrl)}/data.json`;
|
|
124
165
|
}
|
|
125
166
|
|
|
126
167
|
export async function fetchVoiceCatalog(catalogUrl: string): Promise<VoiceCatalogEntry[]> {
|
|
@@ -257,7 +298,7 @@ export function keysToClipUrls(
|
|
|
257
298
|
clipBaseUrl: string,
|
|
258
299
|
keys: string[]
|
|
259
300
|
): string[] {
|
|
260
|
-
const base = clipBaseUrl
|
|
301
|
+
const base = trimTrailingSlashes(clipBaseUrl);
|
|
261
302
|
const variants = new Map<VoicePhraseKey, string>();
|
|
262
303
|
const urls: string[] = [];
|
|
263
304
|
for (const raw of keys) {
|