@ankhorage/orchestrator-module-expo-localization 0.3.0 → 0.4.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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @ankhorage/orchestrator-module-expo-localization
2
2
 
3
+ ## 0.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 27d81c9: Add the package-owned Localization administration runtime for lifecycle configuration, canonical dictionary editing, metadata-driven authoring state, and translation-key linking through injected generic host context.
8
+
3
9
  ## 0.3.0
4
10
 
5
11
  ### Minor Changes
package/README.md CHANGED
@@ -30,43 +30,39 @@ The ledger configuration contains only lifecycle settings (`locales` and `defaul
30
30
  Translation dictionaries are module-owned domain resources at
31
31
  `src/modules/localization/locales/{locale}.json`. These files are the single writable dictionary
32
32
  source and are imported directly by the generated runtime; they are not mirrored into ledger config.
33
- Use the package APIs for ordinary dictionary edits without reinstalling or reconfiguring the module:
34
-
35
- ```ts
36
- import {
37
- readExpoLocalizationDictionaries,
38
- setExpoLocalizationTranslation,
39
- } from '@ankhorage/orchestrator-module-expo-localization';
40
-
41
- const dictionaries = await readExpoLocalizationDictionaries({
42
- projectRoot: '/path/to/project',
43
- locales: ['en', 'de'],
44
- });
45
-
46
- await setExpoLocalizationTranslation({
47
- projectRoot: '/path/to/project',
48
- locale: 'de',
49
- key: 'home.title',
50
- value: 'Startseite',
51
- });
52
- ```
33
+ Use the package APIs for ordinary dictionary edits without reinstalling or reconfiguring the module.
53
34
 
54
35
  Missing locale resource files load as empty dictionaries. Invalid files fail explicitly. Writes are
55
36
  atomic and keys are sorted so runtime and source-control output remain deterministic. Existing
56
37
  `translations` ledger data is accepted only as a one-time seed when a canonical locale file does not
57
38
  yet exist; normalized config never writes dictionaries back to the ledger.
58
39
 
59
- Package-neutral helpers for locale rules and translatable-field discovery are also exported from the
60
- root package. Discovery accepts manifest-shaped nodes and component metadata from the caller, so the
40
+ Package-neutral helpers for locale rules and translatable-field discovery are exported from the root
41
+ package. Discovery accepts manifest-shaped nodes and component metadata from the caller, so the
61
42
  module has no Studio component-registry dependency.
62
43
 
63
- Generic authoring hosts can opt into the package-owned metadata, layout integration, config
64
- normalizer, and serializable admin schema without making the core module depend on Studio:
44
+ ## Authoring host contribution
45
+
46
+ Generic authoring hosts can import the package-owned contribution without adding Studio, ZORA, or
47
+ React to the module root:
65
48
 
66
49
  ```ts
67
50
  import { expoLocalizationHostContribution } from '@ankhorage/orchestrator-module-expo-localization/host';
68
51
  ```
69
52
 
53
+ Its serializable `admin` schema continues to describe lifecycle configuration. The sibling
54
+ `adminRuntime` is server-side and conforms to the generic single-entry host contract:
55
+ `execute(context, { operation, input })`. The host treats the operation string, payload, validation,
56
+ and result as opaque module-owned data.
57
+
58
+ The package exports `EXPO_LOCALIZATION_ADMIN_OPERATIONS` as the canonical operation IDs. Locale and
59
+ default-locale operations use the injected lifecycle reconfiguration boundary. Dictionary operations
60
+ write canonical locale JSON directly, so ordinary translation edits never reinstall or reconfigure
61
+ the module. The load operation derives translatable fields, missing translations, search, and filters
62
+ from module-owned domain APIs. The link operation validates eligibility from injected component
63
+ metadata and uses the generic manifest mutation callback; new keys are seeded in the configured
64
+ default-locale dictionary without overwriting an existing translation.
65
+
70
66
  ## Why this exists
71
67
 
72
68
  Standardizes localization setup across apps.
@@ -0,0 +1,8 @@
1
+ import { type NormalizedExpoLocalizationModuleConfig } from '../config';
2
+ import type { ExpoLocalizationAdminHostContext } from './types';
3
+ export declare const expoLocalizationConfigAdminOperations: {
4
+ readonly addLocale: (context: ExpoLocalizationAdminHostContext, locale: string) => Promise<NormalizedExpoLocalizationModuleConfig>;
5
+ readonly removeLocale: (context: ExpoLocalizationAdminHostContext, locale: string) => Promise<NormalizedExpoLocalizationModuleConfig>;
6
+ readonly setDefaultLocale: (context: ExpoLocalizationAdminHostContext, locale: string) => Promise<NormalizedExpoLocalizationModuleConfig>;
7
+ };
8
+ //# sourceMappingURL=configOperations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configOperations.d.ts","sourceRoot":"","sources":["../../src/admin/configOperations.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,sCAAsC,EAI5C,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,SAAS,CAAC;AAEhE,eAAO,MAAM,qCAAqC;kCAErC,gCAAgC,UACjC,MAAM,KACb,OAAO,CAAC,sCAAsC,CAAC;qCAIvC,gCAAgC,UACjC,MAAM,KACb,OAAO,CAAC,sCAAsC,CAAC;yCAIvC,gCAAgC,UACjC,MAAM,KACb,OAAO,CAAC,sCAAsC,CAAC;CAG1C,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { addExpoLocalizationLocale, parseExpoLocalizationModuleConfig, removeExpoLocalizationLocale, setExpoLocalizationDefaultLocale, } from '../config';
2
+ export const expoLocalizationConfigAdminOperations = {
3
+ async addLocale(context, locale) {
4
+ return await reconfigure(context, addExpoLocalizationLocale, locale);
5
+ },
6
+ async removeLocale(context, locale) {
7
+ return await reconfigure(context, removeExpoLocalizationLocale, locale);
8
+ },
9
+ async setDefaultLocale(context, locale) {
10
+ return await reconfigure(context, setExpoLocalizationDefaultLocale, locale);
11
+ },
12
+ };
13
+ async function reconfigure(context, mutate, locale) {
14
+ const current = parseExpoLocalizationModuleConfig(await context.readConfig());
15
+ const next = mutate(current, locale);
16
+ await context.reconfigureConfig(next);
17
+ return next;
18
+ }
19
+ //# sourceMappingURL=configOperations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configOperations.js","sourceRoot":"","sources":["../../src/admin/configOperations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EAEzB,iCAAiC,EACjC,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,WAAW,CAAC;AAGnB,MAAM,CAAC,MAAM,qCAAqC,GAAG;IACnD,KAAK,CAAC,SAAS,CACb,OAAyC,EACzC,MAAc;QAEd,OAAO,MAAM,WAAW,CAAC,OAAO,EAAE,yBAAyB,EAAE,MAAM,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,CAAC,YAAY,CAChB,OAAyC,EACzC,MAAc;QAEd,OAAO,MAAM,WAAW,CAAC,OAAO,EAAE,4BAA4B,EAAE,MAAM,CAAC,CAAC;IAC1E,CAAC;IACD,KAAK,CAAC,gBAAgB,CACpB,OAAyC,EACzC,MAAc;QAEd,OAAO,MAAM,WAAW,CAAC,OAAO,EAAE,gCAAgC,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC;CACO,CAAC;AAEX,KAAK,UAAU,WAAW,CACxB,OAAyC,EACzC,MAG2C,EAC3C,MAAc;IAEd,MAAM,OAAO,GAAG,iCAAiC,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type ExpoLocalizationDictionary } from '../resources';
2
+ import type { ExpoLocalizationAdminHostContext } from './types';
3
+ export declare const expoLocalizationDictionaryAdminOperations: {
4
+ readonly setTranslation: (context: ExpoLocalizationAdminHostContext, input: {
5
+ readonly locale: string;
6
+ readonly key: string;
7
+ readonly value: string;
8
+ }) => Promise<ExpoLocalizationDictionary>;
9
+ readonly deleteTranslation: (context: ExpoLocalizationAdminHostContext, input: {
10
+ readonly locale: string;
11
+ readonly key: string;
12
+ }) => Promise<ExpoLocalizationDictionary>;
13
+ };
14
+ //# sourceMappingURL=dictionaryOperations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dictionaryOperations.d.ts","sourceRoot":"","sources":["../../src/admin/dictionaryOperations.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,0BAA0B,EAEhC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,SAAS,CAAC;AAEhE,eAAO,MAAM,yCAAyC;uCAEzC,gCAAgC,SAClC;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAC/E,OAAO,CAAC,0BAA0B,CAAC;0CAI3B,gCAAgC,SAClC;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,KACvD,OAAO,CAAC,0BAA0B,CAAC;CAG9B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { deleteExpoLocalizationTranslation, setExpoLocalizationTranslation, } from '../resources';
2
+ export const expoLocalizationDictionaryAdminOperations = {
3
+ async setTranslation(context, input) {
4
+ return await setExpoLocalizationTranslation({ projectRoot: context.projectRoot, ...input });
5
+ },
6
+ async deleteTranslation(context, input) {
7
+ return await deleteExpoLocalizationTranslation({ projectRoot: context.projectRoot, ...input });
8
+ },
9
+ };
10
+ //# sourceMappingURL=dictionaryOperations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dictionaryOperations.js","sourceRoot":"","sources":["../../src/admin/dictionaryOperations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EAEjC,8BAA8B,GAC/B,MAAM,cAAc,CAAC;AAGtB,MAAM,CAAC,MAAM,yCAAyC,GAAG;IACvD,KAAK,CAAC,cAAc,CAClB,OAAyC,EACzC,KAAgF;QAEhF,OAAO,MAAM,8BAA8B,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,KAAK,CAAC,iBAAiB,CACrB,OAAyC,EACzC,KAAwD;QAExD,OAAO,MAAM,iCAAiC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IACjG,CAAC;CACO,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ExpoLocalizationAdminHostContext, ExpoLocalizationLinkTranslationInput } from './types';
2
+ export declare function linkExpoLocalizationTranslationKey(context: ExpoLocalizationAdminHostContext, input: ExpoLocalizationLinkTranslationInput): Promise<{
3
+ readonly key: string;
4
+ readonly defaultLocale: string;
5
+ }>;
6
+ //# sourceMappingURL=linkTranslationKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linkTranslationKey.d.ts","sourceRoot":"","sources":["../../src/admin/linkTranslationKey.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gCAAgC,EAChC,oCAAoC,EAErC,MAAM,SAAS,CAAC;AAEjB,wBAAsB,kCAAkC,CACtD,OAAO,EAAE,gCAAgC,EACzC,KAAK,EAAE,oCAAoC,GAC1C,OAAO,CAAC;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAiDnE"}
@@ -0,0 +1,60 @@
1
+ import { collectExpoLocalizationTranslatableFields } from '../authoring';
2
+ import { parseExpoLocalizationModuleConfig } from '../config';
3
+ import { readExpoLocalizationDictionary, setExpoLocalizationTranslation } from '../resources';
4
+ export async function linkExpoLocalizationTranslationKey(context, input) {
5
+ const [rawConfig, authoring] = await Promise.all([
6
+ context.readConfig(),
7
+ context.readAuthoringContext(),
8
+ ]);
9
+ const config = parseExpoLocalizationModuleConfig(rawConfig);
10
+ const fields = collectExpoLocalizationTranslatableFields(authoring);
11
+ const field = fields.find((candidate) => candidate.screenId === input.screenId &&
12
+ candidate.nodeId === input.nodeId &&
13
+ candidate.keyProp === input.keyProp);
14
+ if (!field) {
15
+ throw new Error('The requested manifest field is not translatable according to component metadata.');
16
+ }
17
+ const key = input.key.trim();
18
+ if (!key)
19
+ throw new Error('Translation keys cannot be empty.');
20
+ const dictionary = await readExpoLocalizationDictionary({
21
+ projectRoot: context.projectRoot,
22
+ locale: config.defaultLocale,
23
+ });
24
+ const needsSeed = !Object.prototype.hasOwnProperty.call(dictionary, key);
25
+ const seedValue = input.value ?? field.defaultText;
26
+ if (needsSeed && !seedValue.trim()) {
27
+ throw new Error('A new translation key requires a non-empty default-locale value.');
28
+ }
29
+ const mutation = {
30
+ screenId: field.screenId,
31
+ nodeId: field.nodeId,
32
+ prop: field.keyProp,
33
+ value: key,
34
+ };
35
+ await context.mutateManifestField(mutation);
36
+ if (needsSeed) {
37
+ await persistSeedOrRestoreManifest(context, mutation, field.currentKey, config.defaultLocale, seedValue);
38
+ }
39
+ return { key, defaultLocale: config.defaultLocale };
40
+ }
41
+ async function persistSeedOrRestoreManifest(context, mutation, previousKey, locale, value) {
42
+ try {
43
+ await setExpoLocalizationTranslation({
44
+ projectRoot: context.projectRoot,
45
+ locale,
46
+ key: mutation.value,
47
+ value,
48
+ });
49
+ }
50
+ catch (error) {
51
+ try {
52
+ await context.mutateManifestField({ ...mutation, value: previousKey });
53
+ }
54
+ catch (rollbackError) {
55
+ throw new AggregateError([error, rollbackError], 'Translation linking failed and the manifest field could not be restored.', { cause: rollbackError });
56
+ }
57
+ throw error;
58
+ }
59
+ }
60
+ //# sourceMappingURL=linkTranslationKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linkTranslationKey.js","sourceRoot":"","sources":["../../src/admin/linkTranslationKey.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ExpoLocalizationAdminHostContext, ExpoLocalizationAdminLoadOptions, ExpoLocalizationAdminSnapshot } from './types';
2
+ export declare function loadExpoLocalizationAdmin(context: ExpoLocalizationAdminHostContext, options?: ExpoLocalizationAdminLoadOptions): Promise<ExpoLocalizationAdminSnapshot>;
3
+ //# sourceMappingURL=load.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/admin/load.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,gCAAgC,EAChC,gCAAgC,EAChC,6BAA6B,EAC9B,MAAM,SAAS,CAAC;AAEjB,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,gCAAgC,EACzC,OAAO,GAAE,gCAAqC,GAC7C,OAAO,CAAC,6BAA6B,CAAC,CAwBxC"}
@@ -0,0 +1,28 @@
1
+ import { collectExpoLocalizationTranslatableFields, filterExpoLocalizationTranslatableFields, findExpoLocalizationMissingTranslations, } from '../authoring';
2
+ import { parseExpoLocalizationModuleConfig } from '../config';
3
+ import { readExpoLocalizationDictionaries } from '../resources';
4
+ export async function loadExpoLocalizationAdmin(context, options = {}) {
5
+ const config = parseExpoLocalizationModuleConfig(await context.readConfig());
6
+ const [dictionaries, authoring] = await Promise.all([
7
+ readExpoLocalizationDictionaries({ projectRoot: context.projectRoot, locales: config.locales }),
8
+ context.readAuthoringContext(),
9
+ ]);
10
+ const fields = collectExpoLocalizationTranslatableFields(authoring);
11
+ return {
12
+ config,
13
+ dictionaries,
14
+ fields,
15
+ missingTranslations: findExpoLocalizationMissingTranslations({
16
+ fields,
17
+ locales: config.locales,
18
+ dictionaries,
19
+ }),
20
+ visibleFields: filterExpoLocalizationTranslatableFields({
21
+ fields,
22
+ locales: config.locales,
23
+ dictionaries,
24
+ ...options,
25
+ }),
26
+ };
27
+ }
28
+ //# sourceMappingURL=load.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/admin/load.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yCAAyC,EACzC,wCAAwC,EACxC,uCAAuC,GACxC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iCAAiC,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,gCAAgC,EAAE,MAAM,cAAc,CAAC;AAOhE,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAyC,EACzC,UAA4C,EAAE;IAE9C,MAAM,MAAM,GAAG,iCAAiC,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7E,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAClD,gCAAgC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/F,OAAO,CAAC,oBAAoB,EAAE;KAC/B,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,yCAAyC,CAAC,SAAS,CAAC,CAAC;IAEpE,OAAO;QACL,MAAM;QACN,YAAY;QACZ,MAAM;QACN,mBAAmB,EAAE,uCAAuC,CAAC;YAC3D,MAAM;YACN,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,YAAY;SACb,CAAC;QACF,aAAa,EAAE,wCAAwC,CAAC;YACtD,MAAM;YACN,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,YAAY;YACZ,GAAG,OAAO;SACX,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ExpoLocalizationAdminHostContext, ExpoLocalizationAdminInvocation } from './types';
2
+ export declare const EXPO_LOCALIZATION_ADMIN_OPERATIONS: {
3
+ readonly load: "load";
4
+ readonly addLocale: "config.add-locale";
5
+ readonly removeLocale: "config.remove-locale";
6
+ readonly setDefaultLocale: "config.set-default-locale";
7
+ readonly setTranslation: "dictionary.set-translation";
8
+ readonly deleteTranslation: "dictionary.delete-translation";
9
+ readonly linkTranslationKey: "link-translation-key";
10
+ };
11
+ export declare const expoLocalizationAdminRuntime: {
12
+ readonly kind: "module-admin-runtime";
13
+ readonly execute: typeof executeExpoLocalizationAdminOperation;
14
+ };
15
+ declare function executeExpoLocalizationAdminOperation(context: ExpoLocalizationAdminHostContext, invocation: ExpoLocalizationAdminInvocation): Promise<unknown>;
16
+ export type { ExpoLocalizationAdminAuthoringContext, ExpoLocalizationAdminHostContext, ExpoLocalizationAdminInvocation, ExpoLocalizationAdminLoadOptions, ExpoLocalizationAdminSnapshot, ExpoLocalizationLinkTranslationInput, ExpoLocalizationManifestFieldMutation, } from './types';
17
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/admin/runtime.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gCAAgC,EAChC,+BAA+B,EAGhC,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,kCAAkC;;;;;;;;CAQrC,CAAC;AAEX,eAAO,MAAM,4BAA4B;;;CAG/B,CAAC;AAEX,iBAAe,qCAAqC,CAClD,OAAO,EAAE,gCAAgC,EACzC,UAAU,EAAE,+BAA+B,GAC1C,OAAO,CAAC,OAAO,CAAC,CAkClB;AAyFD,YAAY,EACV,qCAAqC,EACrC,gCAAgC,EAChC,+BAA+B,EAC/B,gCAAgC,EAChC,6BAA6B,EAC7B,oCAAoC,EACpC,qCAAqC,GACtC,MAAM,SAAS,CAAC"}
@@ -0,0 +1,109 @@
1
+ import { expoLocalizationConfigAdminOperations } from './configOperations';
2
+ import { expoLocalizationDictionaryAdminOperations } from './dictionaryOperations';
3
+ import { linkExpoLocalizationTranslationKey } from './linkTranslationKey';
4
+ import { loadExpoLocalizationAdmin } from './load';
5
+ export const EXPO_LOCALIZATION_ADMIN_OPERATIONS = {
6
+ load: 'load',
7
+ addLocale: 'config.add-locale',
8
+ removeLocale: 'config.remove-locale',
9
+ setDefaultLocale: 'config.set-default-locale',
10
+ setTranslation: 'dictionary.set-translation',
11
+ deleteTranslation: 'dictionary.delete-translation',
12
+ linkTranslationKey: 'link-translation-key',
13
+ };
14
+ export const expoLocalizationAdminRuntime = {
15
+ kind: 'module-admin-runtime',
16
+ execute: executeExpoLocalizationAdminOperation,
17
+ };
18
+ async function executeExpoLocalizationAdminOperation(context, invocation) {
19
+ switch (invocation.operation) {
20
+ case EXPO_LOCALIZATION_ADMIN_OPERATIONS.load:
21
+ return await loadExpoLocalizationAdmin(context, readLoadOptions(invocation.input));
22
+ case EXPO_LOCALIZATION_ADMIN_OPERATIONS.addLocale:
23
+ return await expoLocalizationConfigAdminOperations.addLocale(context, readRequiredString(invocation.input, 'locale'));
24
+ case EXPO_LOCALIZATION_ADMIN_OPERATIONS.removeLocale:
25
+ return await expoLocalizationConfigAdminOperations.removeLocale(context, readRequiredString(invocation.input, 'locale'));
26
+ case EXPO_LOCALIZATION_ADMIN_OPERATIONS.setDefaultLocale:
27
+ return await expoLocalizationConfigAdminOperations.setDefaultLocale(context, readRequiredString(invocation.input, 'locale'));
28
+ case EXPO_LOCALIZATION_ADMIN_OPERATIONS.setTranslation:
29
+ return await expoLocalizationDictionaryAdminOperations.setTranslation(context, readSetTranslationInput(invocation.input));
30
+ case EXPO_LOCALIZATION_ADMIN_OPERATIONS.deleteTranslation:
31
+ return await expoLocalizationDictionaryAdminOperations.deleteTranslation(context, readDeleteTranslationInput(invocation.input));
32
+ case EXPO_LOCALIZATION_ADMIN_OPERATIONS.linkTranslationKey:
33
+ return await linkExpoLocalizationTranslationKey(context, readLinkInput(invocation.input));
34
+ default:
35
+ throw new Error(`Unsupported Localization admin operation '${invocation.operation}'.`);
36
+ }
37
+ }
38
+ function readLoadOptions(input) {
39
+ if (input === undefined)
40
+ return {};
41
+ const record = requireRecord(input);
42
+ const searchQuery = readOptionalString(record.searchQuery, 'searchQuery');
43
+ const filter = readFilter(record.filter);
44
+ return {
45
+ ...(searchQuery === undefined ? {} : { searchQuery }),
46
+ ...(filter === undefined ? {} : { filter }),
47
+ };
48
+ }
49
+ function readSetTranslationInput(input) {
50
+ const record = requireRecord(input);
51
+ return {
52
+ locale: readString(record.locale, 'locale'),
53
+ key: readString(record.key, 'key'),
54
+ value: readString(record.value, 'value'),
55
+ };
56
+ }
57
+ function readDeleteTranslationInput(input) {
58
+ const record = requireRecord(input);
59
+ return {
60
+ locale: readString(record.locale, 'locale'),
61
+ key: readString(record.key, 'key'),
62
+ };
63
+ }
64
+ function readLinkInput(input) {
65
+ const record = requireRecord(input);
66
+ const value = readOptionalString(record.value, 'value');
67
+ return {
68
+ screenId: readString(record.screenId, 'screenId'),
69
+ nodeId: readString(record.nodeId, 'nodeId'),
70
+ keyProp: readString(record.keyProp, 'keyProp'),
71
+ key: readString(record.key, 'key'),
72
+ ...(value === undefined ? {} : { value }),
73
+ };
74
+ }
75
+ function readRequiredString(input, key) {
76
+ return readString(requireRecord(input)[key], key);
77
+ }
78
+ function requireRecord(value) {
79
+ if (!isRecord(value)) {
80
+ throw new Error('Localization admin operation input must be an object.');
81
+ }
82
+ return value;
83
+ }
84
+ function isRecord(value) {
85
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
86
+ }
87
+ function readString(value, key) {
88
+ if (typeof value !== 'string') {
89
+ throw new Error(`Localization admin operation field '${key}' must be a string.`);
90
+ }
91
+ return value;
92
+ }
93
+ function readOptionalString(value, key) {
94
+ if (value === undefined)
95
+ return undefined;
96
+ return readString(value, key);
97
+ }
98
+ function readFilter(value) {
99
+ if (value === undefined)
100
+ return undefined;
101
+ if (value === 'all' ||
102
+ value === 'unlinked' ||
103
+ value === 'missing-translations' ||
104
+ value === 'incomplete') {
105
+ return value;
106
+ }
107
+ throw new Error("Localization admin operation field 'filter' is invalid.");
108
+ }
109
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/admin/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { ExpoLocalizationComponentMetaRegistry, ExpoLocalizationManifestScreen, ExpoLocalizationMissingTranslation, ExpoLocalizationTranslatableField } from '../authoring';
2
+ import type { NormalizedExpoLocalizationModuleConfig } from '../config';
3
+ import type { ExpoLocalizationDictionaries } from '../resources';
4
+ export interface ExpoLocalizationAdminInvocation {
5
+ readonly operation: string;
6
+ readonly input?: unknown;
7
+ }
8
+ export interface ExpoLocalizationAdminAuthoringContext {
9
+ readonly screens: readonly ExpoLocalizationManifestScreen[];
10
+ readonly componentMeta: ExpoLocalizationComponentMetaRegistry;
11
+ }
12
+ export interface ExpoLocalizationManifestFieldMutation {
13
+ readonly screenId: string;
14
+ readonly nodeId: string;
15
+ readonly prop: string;
16
+ readonly value: string;
17
+ }
18
+ export interface ExpoLocalizationAdminHostContext {
19
+ readonly projectRoot: string;
20
+ readonly readConfig: () => Promise<unknown>;
21
+ readonly reconfigureConfig: (config: unknown) => Promise<void>;
22
+ readonly readAuthoringContext: () => Promise<ExpoLocalizationAdminAuthoringContext>;
23
+ readonly mutateManifestField: (mutation: ExpoLocalizationManifestFieldMutation) => Promise<void>;
24
+ }
25
+ export interface ExpoLocalizationAdminSnapshot {
26
+ readonly config: NormalizedExpoLocalizationModuleConfig;
27
+ readonly dictionaries: ExpoLocalizationDictionaries;
28
+ readonly fields: readonly ExpoLocalizationTranslatableField[];
29
+ readonly visibleFields: readonly ExpoLocalizationTranslatableField[];
30
+ readonly missingTranslations: readonly ExpoLocalizationMissingTranslation[];
31
+ }
32
+ export interface ExpoLocalizationAdminLoadOptions {
33
+ readonly searchQuery?: string;
34
+ readonly filter?: 'all' | 'unlinked' | 'missing-translations' | 'incomplete';
35
+ }
36
+ export interface ExpoLocalizationLinkTranslationInput {
37
+ readonly screenId: string;
38
+ readonly nodeId: string;
39
+ readonly keyProp: string;
40
+ readonly key: string;
41
+ readonly value?: string;
42
+ }
43
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/admin/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qCAAqC,EACrC,8BAA8B,EAC9B,kCAAkC,EAClC,iCAAiC,EAClC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAEjE,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,qCAAqC;IACpD,QAAQ,CAAC,OAAO,EAAE,SAAS,8BAA8B,EAAE,CAAC;IAC5D,QAAQ,CAAC,aAAa,EAAE,qCAAqC,CAAC;CAC/D;AAED,MAAM,WAAW,qCAAqC;IACpD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,QAAQ,CAAC,oBAAoB,EAAE,MAAM,OAAO,CAAC,qCAAqC,CAAC,CAAC;IACpF,QAAQ,CAAC,mBAAmB,EAAE,CAAC,QAAQ,EAAE,qCAAqC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClG;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,EAAE,sCAAsC,CAAC;IACxD,QAAQ,CAAC,YAAY,EAAE,4BAA4B,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,SAAS,iCAAiC,EAAE,CAAC;IAC9D,QAAQ,CAAC,aAAa,EAAE,SAAS,iCAAiC,EAAE,CAAC;IACrE,QAAQ,CAAC,mBAAmB,EAAE,SAAS,kCAAkC,EAAE,CAAC;CAC7E;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,sBAAsB,GAAG,YAAY,CAAC;CAC9E;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/admin/types.ts"],"names":[],"mappings":""}
package/dist/host.d.ts CHANGED
@@ -1,8 +1,6 @@
1
1
  import { parseExpoLocalizationModuleConfig } from './config';
2
- /**
3
- * Optional package-owned data consumed by generic authoring hosts.
4
- * The core module remains independently usable from the package root.
5
- */
2
+ export { EXPO_LOCALIZATION_ADMIN_OPERATIONS, type ExpoLocalizationAdminAuthoringContext, type ExpoLocalizationAdminHostContext, type ExpoLocalizationAdminInvocation, type ExpoLocalizationAdminLoadOptions, expoLocalizationAdminRuntime, type ExpoLocalizationAdminSnapshot, type ExpoLocalizationLinkTranslationInput, type ExpoLocalizationManifestFieldMutation, } from './admin/runtime';
3
+ /** Optional package-owned data consumed by generic authoring hosts. */
6
4
  export declare const expoLocalizationHostContribution: {
7
5
  readonly id: "expo-localization";
8
6
  readonly name: "Localization (Expo)";
@@ -31,5 +29,9 @@ export declare const expoLocalizationHostContribution: {
31
29
  readonly required: true;
32
30
  }];
33
31
  };
32
+ readonly adminRuntime: {
33
+ readonly kind: "module-admin-runtime";
34
+ readonly execute: (context: import("./host").ExpoLocalizationAdminHostContext, invocation: import("./host").ExpoLocalizationAdminInvocation) => Promise<unknown>;
35
+ };
34
36
  };
35
37
  //# sourceMappingURL=host.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAE,MAAM,UAAU,CAAC;AAG7D;;;GAGG;AACH,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BnC,CAAC"}
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iCAAiC,EAAE,MAAM,UAAU,CAAC;AAG7D,OAAO,EACL,kCAAkC,EAClC,KAAK,qCAAqC,EAC1C,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,gCAAgC,EACrC,4BAA4B,EAC5B,KAAK,6BAA6B,EAClC,KAAK,oCAAoC,EACzC,KAAK,qCAAqC,GAC3C,MAAM,iBAAiB,CAAC;AAEzB,uEAAuE;AACvE,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsBnC,CAAC"}
package/dist/host.js CHANGED
@@ -1,9 +1,8 @@
1
+ import { expoLocalizationAdminRuntime } from './admin/runtime';
1
2
  import { parseExpoLocalizationModuleConfig } from './config';
2
3
  import { EXPO_LOCALIZATION_MODULE_ID, expoLocalizationModule } from './module';
3
- /**
4
- * Optional package-owned data consumed by generic authoring hosts.
5
- * The core module remains independently usable from the package root.
6
- */
4
+ export { EXPO_LOCALIZATION_ADMIN_OPERATIONS, expoLocalizationAdminRuntime, } from './admin/runtime';
5
+ /** Optional package-owned data consumed by generic authoring hosts. */
7
6
  export const expoLocalizationHostContribution = {
8
7
  id: EXPO_LOCALIZATION_MODULE_ID,
9
8
  name: 'Localization (Expo)',
@@ -21,19 +20,10 @@ export const expoLocalizationHostContribution = {
21
20
  title: 'Localization',
22
21
  description: 'Configure supported locales and the default locale.',
23
22
  fields: [
24
- {
25
- key: 'defaultLocale',
26
- label: 'Default locale',
27
- control: 'text',
28
- required: true,
29
- },
30
- {
31
- key: 'locales',
32
- label: 'Locales',
33
- control: 'string-list',
34
- required: true,
35
- },
23
+ { key: 'defaultLocale', label: 'Default locale', control: 'text', required: true },
24
+ { key: 'locales', label: 'Locales', control: 'string-list', required: true },
36
25
  ],
37
26
  },
27
+ adminRuntime: expoLocalizationAdminRuntime,
38
28
  };
39
29
  //# sourceMappingURL=host.js.map
package/dist/host.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,EAAE,EAAE,2BAA2B;IAC/B,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,kEAAkE;IAC/E,UAAU,EAAE,sBAAsB;IAClC,eAAe,EAAE,iCAAiC;IAClD,MAAM,EAAE;QACN,OAAO,EAAE,CAAC,sEAAsE,CAAC;QACjF,KAAK,EAAE,EAAE;QACT,aAAa,EAAE,CAAC,8BAA8B,CAAC;QAC/C,WAAW,EAAE,CAAC,+BAA+B,CAAC;KAC/C;IACD,KAAK,EAAE;QACL,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,qDAAqD;QAClE,MAAM,EAAE;YACN;gBACE,GAAG,EAAE,eAAe;gBACpB,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,aAAa;gBACtB,QAAQ,EAAE,IAAI;aACf;SACF;KACF;CACO,CAAC"}
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,iCAAiC,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAE/E,OAAO,EACL,kCAAkC,EAKlC,4BAA4B,GAI7B,MAAM,iBAAiB,CAAC;AAEzB,uEAAuE;AACvE,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,EAAE,EAAE,2BAA2B;IAC/B,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,kEAAkE;IAC/E,UAAU,EAAE,sBAAsB;IAClC,eAAe,EAAE,iCAAiC;IAClD,MAAM,EAAE;QACN,OAAO,EAAE,CAAC,sEAAsE,CAAC;QACjF,KAAK,EAAE,EAAE;QACT,aAAa,EAAE,CAAC,8BAA8B,CAAC;QAC/C,WAAW,EAAE,CAAC,+BAA+B,CAAC;KAC/C;IACD,KAAK,EAAE;QACL,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,qDAAqD;QAClE,MAAM,EAAE;YACN,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAClF,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE;SAC7E;KACF;IACD,YAAY,EAAE,4BAA4B;CAClC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "license": "MIT",
3
3
  "name": "@ankhorage/orchestrator-module-expo-localization",
4
- "version": "0.3.0",
4
+ "version": "0.4.0",
5
5
  "description": "Expo localization module for @ankhorage/orchestrator.",
6
6
  "type": "module",
7
7
  "main": "./dist/index.js",