@plumbus/core 0.1.1 → 0.1.3
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 +163 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/ai/ai-service.d.ts.map +1 -1
- package/dist/ai/ai-service.js +1 -0
- package/dist/ai/ai-service.js.map +1 -1
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/route-generator.d.ts +5 -1
- package/dist/api/route-generator.d.ts.map +1 -1
- package/dist/api/route-generator.js +2 -1
- package/dist/api/route-generator.js.map +1 -1
- package/dist/cli/__tests__/cli.test.js +90 -1
- package/dist/cli/__tests__/cli.test.js.map +1 -1
- package/dist/cli/__tests__/create.test.js +22 -0
- package/dist/cli/__tests__/create.test.js.map +1 -1
- package/dist/cli/__tests__/generate.test.js +219 -1
- package/dist/cli/__tests__/generate.test.js.map +1 -1
- package/dist/cli/__tests__/init.test.js +9 -0
- package/dist/cli/__tests__/init.test.js.map +1 -1
- package/dist/cli/__tests__/start.test.d.ts +2 -0
- package/dist/cli/__tests__/start.test.d.ts.map +1 -0
- package/dist/cli/__tests__/start.test.js +91 -0
- package/dist/cli/__tests__/start.test.js.map +1 -0
- package/dist/cli/__tests__/utils.test.js +70 -2
- package/dist/cli/__tests__/utils.test.js.map +1 -1
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +16 -1
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/commands/create.d.ts.map +1 -1
- package/dist/cli/commands/create.js +28 -2
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/generate.d.ts +26 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +195 -4
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/index.d.ts +3 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +5 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +20 -21
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/run.d.ts +3 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +147 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/start.d.ts +25 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +125 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/translation.d.ts +3 -0
- package/dist/cli/commands/translation.d.ts.map +1 -0
- package/dist/cli/commands/translation.js +277 -0
- package/dist/cli/commands/translation.js.map +1 -0
- package/dist/cli/commands/ui.d.ts +8 -2
- package/dist/cli/commands/ui.d.ts.map +1 -1
- package/dist/cli/commands/ui.js +13 -5
- package/dist/cli/commands/ui.js.map +1 -1
- package/dist/cli/discover.d.ts +2 -0
- package/dist/cli/discover.d.ts.map +1 -1
- package/dist/cli/discover.js +11 -1
- package/dist/cli/discover.js.map +1 -1
- package/dist/cli/index.d.ts +3 -3
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +3 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/templates/resources.d.ts +1 -0
- package/dist/cli/templates/resources.d.ts.map +1 -1
- package/dist/cli/templates/resources.js +16 -0
- package/dist/cli/templates/resources.js.map +1 -1
- package/dist/cli/utils.d.ts +15 -0
- package/dist/cli/utils.d.ts.map +1 -1
- package/dist/cli/utils.js +47 -0
- package/dist/cli/utils.js.map +1 -1
- package/dist/config/loader.d.ts +2 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js.map +1 -1
- package/dist/data/__tests__/registry.test.js +15 -0
- package/dist/data/__tests__/registry.test.js.map +1 -1
- package/dist/data/__tests__/repository.test.js +33 -0
- package/dist/data/__tests__/repository.test.js.map +1 -1
- package/dist/data/registry.d.ts +2 -0
- package/dist/data/registry.d.ts.map +1 -1
- package/dist/data/registry.js +1 -0
- package/dist/data/registry.js.map +1 -1
- package/dist/data/repository.d.ts +2 -0
- package/dist/data/repository.d.ts.map +1 -1
- package/dist/data/repository.js +3 -3
- package/dist/data/repository.js.map +1 -1
- package/dist/define/__tests__/defineTranslation.test.d.ts +2 -0
- package/dist/define/__tests__/defineTranslation.test.d.ts.map +1 -0
- package/dist/define/__tests__/defineTranslation.test.js +90 -0
- package/dist/define/__tests__/defineTranslation.test.js.map +1 -0
- package/dist/define/defineTranslation.d.ts +21 -0
- package/dist/define/defineTranslation.d.ts.map +1 -0
- package/dist/define/defineTranslation.js +67 -0
- package/dist/define/defineTranslation.js.map +1 -0
- package/dist/define/index.d.ts +1 -0
- package/dist/define/index.d.ts.map +1 -1
- package/dist/define/index.js +1 -0
- package/dist/define/index.js.map +1 -1
- package/dist/execution/context-factory.d.ts +2 -0
- package/dist/execution/context-factory.d.ts.map +1 -1
- package/dist/execution/context-factory.js +5 -0
- package/dist/execution/context-factory.js.map +1 -1
- package/dist/fields/index.d.ts +1 -0
- package/dist/fields/index.d.ts.map +1 -1
- package/dist/fields/index.js +1 -0
- package/dist/fields/index.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -6
- package/dist/index.js.map +1 -1
- package/dist/server/bootstrap.d.ts.map +1 -1
- package/dist/server/bootstrap.js +7 -2
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/testing/context.js +2 -2
- package/dist/testing/context.js.map +1 -1
- package/dist/testing/index.d.ts +3 -3
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/translations/__tests__/translation-resolver.test.d.ts +2 -0
- package/dist/translations/__tests__/translation-resolver.test.d.ts.map +1 -0
- package/dist/translations/__tests__/translation-resolver.test.js +140 -0
- package/dist/translations/__tests__/translation-resolver.test.js.map +1 -0
- package/dist/translations/index.d.ts +40 -0
- package/dist/translations/index.d.ts.map +1 -0
- package/dist/translations/index.js +144 -0
- package/dist/translations/index.js.map +1 -0
- package/dist/types/context.d.ts +13 -7
- package/dist/types/context.d.ts.map +1 -1
- package/dist/types/fields.d.ts +1 -0
- package/dist/types/fields.d.ts.map +1 -1
- package/dist/types/flow.d.ts +2 -0
- package/dist/types/flow.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/translation.d.ts +28 -0
- package/dist/types/translation.d.ts.map +1 -0
- package/dist/types/translation.js +6 -0
- package/dist/types/translation.js.map +1 -0
- package/instructions/cli.md +24 -0
- package/instructions/deployment.md +332 -0
- package/instructions/translations.md +78 -0
- package/package.json +2 -2
package/dist/testing/index.js
CHANGED
|
@@ -13,9 +13,9 @@ export { chromium, firefox, webkit } from 'playwright';
|
|
|
13
13
|
export { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
14
14
|
// ── Context & Mock Factories ──
|
|
15
15
|
export { createInMemoryRepository, createTestAuth, createTestContext, createTestData, fixedTime, mockAI, mockAudit, mockEvents, mockFlows, mockLogger, } from './context.js';
|
|
16
|
-
export { buildEntityFieldMap, validateRecord } from './field-validation.js';
|
|
17
16
|
// ── E2E / Browser Test Utilities ──
|
|
18
17
|
export { createE2EServer, createTestBearerHeader } from './e2e.js';
|
|
18
|
+
export { buildEntityFieldMap, validateRecord } from './field-validation.js';
|
|
19
19
|
// ── Governance Test Helpers ──
|
|
20
20
|
export { assertGovernanceSignals, assertMaxSeverity, assertNoGovernanceSignal, assertOverridesApplied, assertPolicyCompliance, assertPolicyNonCompliance, emptyInventory, evaluateGovernance, } from './governance.js';
|
|
21
21
|
// ── Capability Test Runner ──
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,oFAAoF;AACpF,wFAAwF;AACxF,+DAA+D;AAC/D,EAAE;AACF,kFAAkF;AAGlF,6BAA6B;AAC7B,mFAAmF;AACnF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACvD,yBAAyB;AACzB,+EAA+E;AAC/E,4EAA4E;AAC5E,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAU9F,iCAAiC;AACjC,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,MAAM,EACN,SAAS,EACT,UAAU,EACV,SAAS,EACT,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,oFAAoF;AACpF,wFAAwF;AACxF,+DAA+D;AAC/D,EAAE;AACF,kFAAkF;AAGlF,6BAA6B;AAC7B,mFAAmF;AACnF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACvD,yBAAyB;AACzB,+EAA+E;AAC/E,4EAA4E;AAC5E,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAU9F,iCAAiC;AACjC,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,MAAM,EACN,SAAS,EACT,UAAU,EACV,SAAS,EACT,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,qCAAqC;AACrC,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5E,gCAAgC;AAChC,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,cAAc,EACd,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAEzB,+BAA+B;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMpD,mCAAmC;AACnC,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,8BAA8B;AAC9B,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAChB,MAAM,eAAe,CAAC;AAKvB,uBAAuB;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translation-resolver.test.d.ts","sourceRoot":"","sources":["../../../src/translations/__tests__/translation-resolver.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { defineTranslation } from '../../define/defineTranslation.js';
|
|
3
|
+
import { createTranslationResolver, createTranslationService, TranslationRegistry, } from '../index.js';
|
|
4
|
+
const commonTranslation = defineTranslation({
|
|
5
|
+
name: 'common',
|
|
6
|
+
defaultLocale: 'en',
|
|
7
|
+
locales: ['en', 'he'],
|
|
8
|
+
messages: {
|
|
9
|
+
en: {
|
|
10
|
+
greeting: 'Hello {name}',
|
|
11
|
+
farewell: 'Goodbye',
|
|
12
|
+
items: '{count, plural, one {# item} other {# items}}',
|
|
13
|
+
itemsWithZero: '{count, plural, zero {No items} one {# item} other {# items}}',
|
|
14
|
+
role: '{gender, select, male {He is an admin} female {She is an admin} other {They are an admin}}',
|
|
15
|
+
},
|
|
16
|
+
he: {
|
|
17
|
+
greeting: 'שלום {name}',
|
|
18
|
+
farewell: 'להתראות',
|
|
19
|
+
items: '{count, plural, one {פריט #} two {# פריטים} other {# פריטים}}',
|
|
20
|
+
itemsWithZero: '{count, plural, zero {אין פריטים} one {פריט #} other {# פריטים}}',
|
|
21
|
+
role: '{gender, select, male {הוא מנהל} female {היא מנהלת} other {מנהל/ת}}',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
const errorsTranslation = defineTranslation({
|
|
26
|
+
name: 'errors',
|
|
27
|
+
defaultLocale: 'en',
|
|
28
|
+
locales: ['en', 'he'],
|
|
29
|
+
messages: {
|
|
30
|
+
en: {
|
|
31
|
+
notFound: 'Not found',
|
|
32
|
+
forbidden: 'Access denied',
|
|
33
|
+
},
|
|
34
|
+
he: {
|
|
35
|
+
notFound: 'לא נמצא',
|
|
36
|
+
forbidden: 'הגישה נדחתה',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
describe('TranslationRegistry', () => {
|
|
41
|
+
it('resolves simple key in requested locale', () => {
|
|
42
|
+
const registry = new TranslationRegistry();
|
|
43
|
+
registry.register(commonTranslation);
|
|
44
|
+
expect(registry.t('he', 'common.farewell')).toBe('להתראות');
|
|
45
|
+
});
|
|
46
|
+
it('resolves key with interpolation', () => {
|
|
47
|
+
const registry = new TranslationRegistry();
|
|
48
|
+
registry.register(commonTranslation);
|
|
49
|
+
expect(registry.t('en', 'common.greeting', { name: 'World' })).toBe('Hello World');
|
|
50
|
+
expect(registry.t('he', 'common.greeting', { name: 'עולם' })).toBe('שלום עולם');
|
|
51
|
+
});
|
|
52
|
+
it('resolves plural — one', () => {
|
|
53
|
+
const registry = new TranslationRegistry();
|
|
54
|
+
registry.register(commonTranslation);
|
|
55
|
+
expect(registry.t('en', 'common.items', { count: 1 })).toBe('1 item');
|
|
56
|
+
});
|
|
57
|
+
it('resolves plural — other', () => {
|
|
58
|
+
const registry = new TranslationRegistry();
|
|
59
|
+
registry.register(commonTranslation);
|
|
60
|
+
expect(registry.t('en', 'common.items', { count: 5 })).toBe('5 items');
|
|
61
|
+
});
|
|
62
|
+
it('resolves plural — zero', () => {
|
|
63
|
+
const registry = new TranslationRegistry();
|
|
64
|
+
registry.register(commonTranslation);
|
|
65
|
+
expect(registry.t('en', 'common.itemsWithZero', { count: 0 })).toBe('No items');
|
|
66
|
+
});
|
|
67
|
+
it('resolves plural — Hebrew dual', () => {
|
|
68
|
+
const registry = new TranslationRegistry();
|
|
69
|
+
registry.register(commonTranslation);
|
|
70
|
+
expect(registry.t('he', 'common.items', { count: 2 })).toBe('2 פריטים');
|
|
71
|
+
});
|
|
72
|
+
it('resolves select', () => {
|
|
73
|
+
const registry = new TranslationRegistry();
|
|
74
|
+
registry.register(commonTranslation);
|
|
75
|
+
expect(registry.t('en', 'common.role', { gender: 'male' })).toBe('He is an admin');
|
|
76
|
+
expect(registry.t('en', 'common.role', { gender: 'female' })).toBe('She is an admin');
|
|
77
|
+
expect(registry.t('en', 'common.role', { gender: 'unknown' })).toBe('They are an admin');
|
|
78
|
+
});
|
|
79
|
+
it('falls back to default locale when requested locale is missing', () => {
|
|
80
|
+
const registry = new TranslationRegistry();
|
|
81
|
+
registry.register(commonTranslation);
|
|
82
|
+
expect(registry.t('fr', 'common.farewell')).toBe('Goodbye');
|
|
83
|
+
});
|
|
84
|
+
it('returns key as-is when namespace is unknown', () => {
|
|
85
|
+
const registry = new TranslationRegistry();
|
|
86
|
+
registry.register(commonTranslation);
|
|
87
|
+
expect(registry.t('en', 'unknown.key')).toBe('unknown.key');
|
|
88
|
+
});
|
|
89
|
+
it('returns key as-is when key has no namespace', () => {
|
|
90
|
+
const registry = new TranslationRegistry();
|
|
91
|
+
registry.register(commonTranslation);
|
|
92
|
+
expect(registry.t('en', 'plainkey')).toBe('plainkey');
|
|
93
|
+
});
|
|
94
|
+
it('registers multiple namespaces', () => {
|
|
95
|
+
const registry = new TranslationRegistry();
|
|
96
|
+
registry.registerAll([commonTranslation, errorsTranslation]);
|
|
97
|
+
expect(registry.t('en', 'common.farewell')).toBe('Goodbye');
|
|
98
|
+
expect(registry.t('he', 'errors.notFound')).toBe('לא נמצא');
|
|
99
|
+
});
|
|
100
|
+
it('getNamespaces returns all registered names', () => {
|
|
101
|
+
const registry = new TranslationRegistry();
|
|
102
|
+
registry.registerAll([commonTranslation, errorsTranslation]);
|
|
103
|
+
expect(registry.getNamespaces().sort()).toEqual(['common', 'errors']);
|
|
104
|
+
});
|
|
105
|
+
it('getDefinition returns specific definition', () => {
|
|
106
|
+
const registry = new TranslationRegistry();
|
|
107
|
+
registry.register(commonTranslation);
|
|
108
|
+
expect(registry.getDefinition('common')?.name).toBe('common');
|
|
109
|
+
expect(registry.getDefinition('unknown')).toBeUndefined();
|
|
110
|
+
});
|
|
111
|
+
it('getAllDefinitions returns all', () => {
|
|
112
|
+
const registry = new TranslationRegistry();
|
|
113
|
+
registry.registerAll([commonTranslation, errorsTranslation]);
|
|
114
|
+
expect(registry.getAllDefinitions()).toHaveLength(2);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
describe('createTranslationResolver', () => {
|
|
118
|
+
it('creates a resolver from definitions', () => {
|
|
119
|
+
const resolver = createTranslationResolver([commonTranslation, errorsTranslation]);
|
|
120
|
+
expect(resolver.t('en', 'common.farewell')).toBe('Goodbye');
|
|
121
|
+
expect(resolver.t('he', 'errors.forbidden')).toBe('הגישה נדחתה');
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
describe('createTranslationService', () => {
|
|
125
|
+
it('creates a locale-bound service', () => {
|
|
126
|
+
const registry = new TranslationRegistry();
|
|
127
|
+
registry.registerAll([commonTranslation, errorsTranslation]);
|
|
128
|
+
const service = createTranslationService(registry, 'he');
|
|
129
|
+
expect(service.locale).toBe('he');
|
|
130
|
+
expect(service.t('common.farewell')).toBe('להתראות');
|
|
131
|
+
expect(service.t('errors.notFound')).toBe('לא נמצא');
|
|
132
|
+
});
|
|
133
|
+
it('locale-bound service still uses interpolation', () => {
|
|
134
|
+
const registry = new TranslationRegistry();
|
|
135
|
+
registry.register(commonTranslation);
|
|
136
|
+
const service = createTranslationService(registry, 'en');
|
|
137
|
+
expect(service.t('common.greeting', { name: 'Alice' })).toBe('Hello Alice');
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
//# sourceMappingURL=translation-resolver.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translation-resolver.test.js","sourceRoot":"","sources":["../../../src/translations/__tests__/translation-resolver.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { TranslationDefinition, TranslationService } from '../types/translation.js';
|
|
2
|
+
/**
|
|
3
|
+
* Registry that holds multiple translation definitions (namespaces)
|
|
4
|
+
* and resolves keys at runtime.
|
|
5
|
+
*/
|
|
6
|
+
export declare class TranslationRegistry {
|
|
7
|
+
private readonly namespaces;
|
|
8
|
+
/** Register a translation definition (namespace) */
|
|
9
|
+
register(definition: TranslationDefinition): void;
|
|
10
|
+
/** Register multiple definitions at once */
|
|
11
|
+
registerAll(definitions: TranslationDefinition[]): void;
|
|
12
|
+
/**
|
|
13
|
+
* Resolve a translated string.
|
|
14
|
+
*
|
|
15
|
+
* @param locale - Target locale (e.g. "he")
|
|
16
|
+
* @param key - Dot-namespaced key: "namespace.messageKey" (e.g. "errors.projectNotFound")
|
|
17
|
+
* or plain key if namespace is provided separately
|
|
18
|
+
* @param params - ICU interpolation params
|
|
19
|
+
*/
|
|
20
|
+
t(locale: string, key: string, params?: Record<string, string | number>): string;
|
|
21
|
+
/** Get all registered namespace names */
|
|
22
|
+
getNamespaces(): string[];
|
|
23
|
+
/** Get a specific definition by name */
|
|
24
|
+
getDefinition(name: string): TranslationDefinition | undefined;
|
|
25
|
+
/** Get all registered definitions */
|
|
26
|
+
getAllDefinitions(): TranslationDefinition[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Create a translation resolver from a set of translation definitions.
|
|
30
|
+
* Returns an object with a `t(locale, key, params?)` method.
|
|
31
|
+
*/
|
|
32
|
+
export declare function createTranslationResolver(definitions: TranslationDefinition[]): {
|
|
33
|
+
t(locale: string, key: string, params?: Record<string, string | number>): string;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Create a locale-bound TranslationService from a registry.
|
|
37
|
+
* Used to inject into ExecutionContext — the locale is resolved once per request.
|
|
38
|
+
*/
|
|
39
|
+
export declare function createTranslationService(registry: TranslationRegistry, locale: string): TranslationService;
|
|
40
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/translations/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AA2DzF;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4C;IAEvE,oDAAoD;IACpD,QAAQ,CAAC,UAAU,EAAE,qBAAqB,GAAG,IAAI;IAIjD,4CAA4C;IAC5C,WAAW,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,IAAI;IAMvD;;;;;;;OAOG;IACH,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM;IAkChF,yCAAyC;IACzC,aAAa,IAAI,MAAM,EAAE;IAIzB,wCAAwC;IACxC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAI9D,qCAAqC;IACrC,iBAAiB,IAAI,qBAAqB,EAAE;CAG7C;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG;IAC/E,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;CAClF,CAMA;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,EAAE,MAAM,GACb,kBAAkB,CAKpB"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
// ── Translations Module ──
|
|
2
|
+
// Server-side translation registry and resolver.
|
|
3
|
+
// Provides ICU MessageFormat interpolation for backend use
|
|
4
|
+
// (capability error messages, flow status, etc.)
|
|
5
|
+
//
|
|
6
|
+
// Key exports: TranslationRegistry, createTranslationResolver
|
|
7
|
+
/**
|
|
8
|
+
* Lightweight ICU MessageFormat interpolation.
|
|
9
|
+
* Handles:
|
|
10
|
+
* - Simple placeholders: {name} → value
|
|
11
|
+
* - Plural rules: {count, plural, one {# item} other {# items}}
|
|
12
|
+
* - Select: {gender, select, male {He} female {She} other {They}}
|
|
13
|
+
*
|
|
14
|
+
* The `#` symbol inside plural branches is replaced with the numeric value.
|
|
15
|
+
*/
|
|
16
|
+
function interpolateICU(template, params) {
|
|
17
|
+
// Handle plural / select blocks first
|
|
18
|
+
let result = template.replace(/\{(\w+),\s*(plural|select),\s*((?:[^{}]|\{[^{}]*\})*)\}/g, (_match, paramName, type, branches) => {
|
|
19
|
+
const value = params[paramName];
|
|
20
|
+
if (value === undefined)
|
|
21
|
+
return _match;
|
|
22
|
+
// Parse branches: "one {# item} other {# items}" → { one: "# item", other: "# items" }
|
|
23
|
+
const branchMap = {};
|
|
24
|
+
const branchRegex = /(\w+)\s*\{([^}]*)\}/g;
|
|
25
|
+
for (const branchMatch of branches.matchAll(branchRegex)) {
|
|
26
|
+
const branchKey = branchMatch[1];
|
|
27
|
+
const branchValue = branchMatch[2];
|
|
28
|
+
if (branchKey && branchValue !== undefined) {
|
|
29
|
+
branchMap[branchKey] = branchValue;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (type === 'plural') {
|
|
33
|
+
const num = typeof value === 'number' ? value : Number.parseInt(String(value), 10);
|
|
34
|
+
// Determine plural category (simplified — covers English / Hebrew basics)
|
|
35
|
+
let category;
|
|
36
|
+
if (num === 0)
|
|
37
|
+
category = 'zero';
|
|
38
|
+
else if (num === 1)
|
|
39
|
+
category = 'one';
|
|
40
|
+
else if (num === 2)
|
|
41
|
+
category = 'two';
|
|
42
|
+
else
|
|
43
|
+
category = 'other';
|
|
44
|
+
const branch = branchMap[`=${num}`] ?? branchMap[category] ?? branchMap.other ?? String(num);
|
|
45
|
+
return branch.replace(/#/g, String(num));
|
|
46
|
+
}
|
|
47
|
+
// select
|
|
48
|
+
const branch = branchMap[String(value)] ?? branchMap.other ?? String(value);
|
|
49
|
+
return branch;
|
|
50
|
+
});
|
|
51
|
+
// Handle simple {param} placeholders
|
|
52
|
+
result = result.replace(/\{(\w+)\}/g, (_match, paramName) => {
|
|
53
|
+
const value = params[paramName];
|
|
54
|
+
return value !== undefined ? String(value) : _match;
|
|
55
|
+
});
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Registry that holds multiple translation definitions (namespaces)
|
|
60
|
+
* and resolves keys at runtime.
|
|
61
|
+
*/
|
|
62
|
+
export class TranslationRegistry {
|
|
63
|
+
namespaces = new Map();
|
|
64
|
+
/** Register a translation definition (namespace) */
|
|
65
|
+
register(definition) {
|
|
66
|
+
this.namespaces.set(definition.name, definition);
|
|
67
|
+
}
|
|
68
|
+
/** Register multiple definitions at once */
|
|
69
|
+
registerAll(definitions) {
|
|
70
|
+
for (const def of definitions) {
|
|
71
|
+
this.register(def);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Resolve a translated string.
|
|
76
|
+
*
|
|
77
|
+
* @param locale - Target locale (e.g. "he")
|
|
78
|
+
* @param key - Dot-namespaced key: "namespace.messageKey" (e.g. "errors.projectNotFound")
|
|
79
|
+
* or plain key if namespace is provided separately
|
|
80
|
+
* @param params - ICU interpolation params
|
|
81
|
+
*/
|
|
82
|
+
t(locale, key, params) {
|
|
83
|
+
const dotIndex = key.indexOf('.');
|
|
84
|
+
if (dotIndex === -1) {
|
|
85
|
+
return key; // No namespace — return key as-is
|
|
86
|
+
}
|
|
87
|
+
const namespace = key.substring(0, dotIndex);
|
|
88
|
+
const messageKey = key.substring(dotIndex + 1);
|
|
89
|
+
const definition = this.namespaces.get(namespace);
|
|
90
|
+
if (!definition) {
|
|
91
|
+
return key; // Unknown namespace — return key as-is
|
|
92
|
+
}
|
|
93
|
+
// Try requested locale, fall back to default locale
|
|
94
|
+
const messages = definition.messages[locale] ?? definition.messages[definition.defaultLocale];
|
|
95
|
+
if (!messages) {
|
|
96
|
+
return key;
|
|
97
|
+
}
|
|
98
|
+
const template = messages[messageKey];
|
|
99
|
+
if (template === undefined) {
|
|
100
|
+
// Try default locale as fallback
|
|
101
|
+
const fallback = definition.messages[definition.defaultLocale];
|
|
102
|
+
const fallbackTemplate = fallback?.[messageKey];
|
|
103
|
+
if (fallbackTemplate === undefined) {
|
|
104
|
+
return key; // Key not found anywhere — return key
|
|
105
|
+
}
|
|
106
|
+
return params ? interpolateICU(fallbackTemplate, params) : fallbackTemplate;
|
|
107
|
+
}
|
|
108
|
+
return params ? interpolateICU(template, params) : template;
|
|
109
|
+
}
|
|
110
|
+
/** Get all registered namespace names */
|
|
111
|
+
getNamespaces() {
|
|
112
|
+
return Array.from(this.namespaces.keys());
|
|
113
|
+
}
|
|
114
|
+
/** Get a specific definition by name */
|
|
115
|
+
getDefinition(name) {
|
|
116
|
+
return this.namespaces.get(name);
|
|
117
|
+
}
|
|
118
|
+
/** Get all registered definitions */
|
|
119
|
+
getAllDefinitions() {
|
|
120
|
+
return Array.from(this.namespaces.values());
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Create a translation resolver from a set of translation definitions.
|
|
125
|
+
* Returns an object with a `t(locale, key, params?)` method.
|
|
126
|
+
*/
|
|
127
|
+
export function createTranslationResolver(definitions) {
|
|
128
|
+
const registry = new TranslationRegistry();
|
|
129
|
+
registry.registerAll(definitions);
|
|
130
|
+
return {
|
|
131
|
+
t: (locale, key, params) => registry.t(locale, key, params),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Create a locale-bound TranslationService from a registry.
|
|
136
|
+
* Used to inject into ExecutionContext — the locale is resolved once per request.
|
|
137
|
+
*/
|
|
138
|
+
export function createTranslationService(registry, locale) {
|
|
139
|
+
return {
|
|
140
|
+
locale,
|
|
141
|
+
t: (key, params) => registry.t(locale, key, params),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/translations/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/context.d.ts
CHANGED
|
@@ -2,14 +2,17 @@ import type { z } from 'zod';
|
|
|
2
2
|
import type { AuditService } from './audit.js';
|
|
3
3
|
import type { ErrorService } from './errors.js';
|
|
4
4
|
import type { AuthContext } from './security.js';
|
|
5
|
-
|
|
5
|
+
import type { TranslationService } from './translation.js';
|
|
6
|
+
export interface Repository<T = Record<string, any>> {
|
|
6
7
|
findById(id: string): Promise<T | null>;
|
|
7
|
-
create(data:
|
|
8
|
-
update(id: string, updates:
|
|
8
|
+
create(data: Record<string, any>): Promise<T>;
|
|
9
|
+
update(id: string, updates: Record<string, any>): Promise<T>;
|
|
9
10
|
delete(id: string): Promise<void>;
|
|
10
|
-
findMany(query?: Record<string,
|
|
11
|
+
findMany(query?: Record<string, any>): Promise<T[]>;
|
|
12
|
+
}
|
|
13
|
+
export interface DataService {
|
|
14
|
+
[entity: string]: Repository;
|
|
11
15
|
}
|
|
12
|
-
export type DataService = Record<string, Repository>;
|
|
13
16
|
export interface EventService {
|
|
14
17
|
emit(eventName: string, payload: unknown): Promise<void>;
|
|
15
18
|
}
|
|
@@ -34,11 +37,13 @@ export interface AIService {
|
|
|
34
37
|
generate(config: {
|
|
35
38
|
prompt: string;
|
|
36
39
|
input: Record<string, unknown>;
|
|
37
|
-
}): Promise<
|
|
40
|
+
}): Promise<Record<string, any>>;
|
|
38
41
|
extract(config: {
|
|
39
42
|
schema: z.ZodTypeAny;
|
|
40
43
|
text: string;
|
|
41
|
-
|
|
44
|
+
prompt?: string;
|
|
45
|
+
input?: Record<string, unknown>;
|
|
46
|
+
}): Promise<Record<string, any>>;
|
|
42
47
|
classify(config: {
|
|
43
48
|
labels: string[];
|
|
44
49
|
text: string;
|
|
@@ -83,6 +88,7 @@ export interface ExecutionContext {
|
|
|
83
88
|
time: TimeService;
|
|
84
89
|
config: ConfigService;
|
|
85
90
|
security: SecurityService;
|
|
91
|
+
translations: TranslationService;
|
|
86
92
|
state?: unknown;
|
|
87
93
|
step?: string;
|
|
88
94
|
flowId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/types/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/types/context.ts"],"names":[],"mappings":"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"}
|
package/dist/types/fields.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/types/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGpE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAGD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,MAAM,eAAe,GACvB,iBAAiB,GACjB,qBAAqB,GACrB,qBAAqB,GACrB,sBAAsB,GACtB,sBAAsB,GACtB,wBAAwB,GACxB,mBAAmB,GACnB,mBAAmB,GACnB,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/types/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGpE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAGD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,MAAM,eAAe,GACvB,iBAAiB,GACjB,qBAAqB,GACrB,qBAAqB,GACrB,sBAAsB,GACtB,sBAAsB,GACtB,wBAAwB,GACxB,mBAAmB,GACnB,mBAAmB,GACnB,uBAAuB,CAAC"}
|
package/dist/types/flow.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export interface BaseFlowStep {
|
|
|
5
5
|
}
|
|
6
6
|
export interface CapabilityStep extends BaseFlowStep {
|
|
7
7
|
type: typeof FlowStepType.Capability;
|
|
8
|
+
capability?: string;
|
|
9
|
+
input?: Record<string, unknown>;
|
|
8
10
|
}
|
|
9
11
|
export interface ConditionalStep extends BaseFlowStep {
|
|
10
12
|
type: typeof FlowStepType.Conditional;
|
package/dist/types/flow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/types/flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGhE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,IAAI,EAAE,OAAO,YAAY,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/types/flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGhE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,IAAI,EAAE,OAAO,YAAY,CAAC,UAAU,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,IAAI,EAAE,OAAO,YAAY,CAAC,WAAW,CAAC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAS,SAAQ,YAAY;IAC5C,IAAI,EAAE,OAAO,YAAY,CAAC,IAAI,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,IAAI,EAAE,OAAO,YAAY,CAAC,KAAK,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,IAAI,EAAE,OAAO,YAAY,CAAC,QAAQ,CAAC;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,IAAI,EAAE,OAAO,YAAY,CAAC,SAAS,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,QAAQ,GAChB,cAAc,GACd,eAAe,GACf,QAAQ,GACR,SAAS,GACT,YAAY,GACZ,aAAa,CAAC;AAGlB,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,eAAe,CAAC;CAC1B;AAGD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,MAAM,WAAW,cAAc,CAC7B,MAAM,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,EAC1C,MAAM,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;IAE1C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,EAAE,CAAC;IAElB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -11,4 +11,5 @@ export type { CapabilityStep, ConditionalStep, DelayStep, EventEmitStep, FlowDef
|
|
|
11
11
|
export type { GovernanceOverride, GovernanceSignal, PolicyReport, RuleEvaluation, } from './governance.js';
|
|
12
12
|
export type { ModelConfig, PromptDefinition } from './prompt.js';
|
|
13
13
|
export type { AccessPolicy, AuthContext } from './security.js';
|
|
14
|
+
export type { MessageCatalog, TranslationDefinition, TranslationResolver, TranslationService, } from './translation.js';
|
|
14
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAMA,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EACL,eAAe,EACf,cAAc,EACd,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9D,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEjE,YAAY,EACV,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,cAAc,EACd,eAAe,EACf,SAAS,EACT,aAAa,EACb,cAAc,EACd,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,QAAQ,GACT,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAMA,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EACL,eAAe,EACf,cAAc,EACd,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9D,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEjE,YAAY,EACV,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,cAAc,EACd,eAAe,EACf,SAAS,EACT,aAAa,EACb,cAAc,EACd,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,QAAQ,GACT,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE/D,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** A record of message keys to ICU MessageFormat strings for one locale */
|
|
2
|
+
export type MessageCatalog = Record<string, string>;
|
|
3
|
+
/** Translation definition — a named, frozen i18n message catalog */
|
|
4
|
+
export interface TranslationDefinition {
|
|
5
|
+
/** Namespace identifier (e.g. "common", "errors", "auth") */
|
|
6
|
+
name: string;
|
|
7
|
+
/** Default fallback locale */
|
|
8
|
+
defaultLocale: string;
|
|
9
|
+
/** All supported locales — must include defaultLocale */
|
|
10
|
+
locales: string[];
|
|
11
|
+
/** Messages keyed by locale, then by message key */
|
|
12
|
+
messages: Record<string, MessageCatalog>;
|
|
13
|
+
}
|
|
14
|
+
/** Resolver function: look up a translated string by key */
|
|
15
|
+
export interface TranslationResolver {
|
|
16
|
+
/**
|
|
17
|
+
* Resolve a translated message.
|
|
18
|
+
* @param key - Dot-namespaced key, e.g. "errors.projectNotFound"
|
|
19
|
+
* @param params - Interpolation values for ICU placeholders
|
|
20
|
+
*/
|
|
21
|
+
t(key: string, params?: Record<string, string | number>): string;
|
|
22
|
+
}
|
|
23
|
+
/** Service that provides translation resolution for a specific locale */
|
|
24
|
+
export interface TranslationService extends TranslationResolver {
|
|
25
|
+
/** The currently active locale */
|
|
26
|
+
locale: string;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=translation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translation.d.ts","sourceRoot":"","sources":["../../src/types/translation.ts"],"names":[],"mappings":"AAKA,2EAA2E;AAC3E,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpD,oEAAoE;AACpE,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC1C;AAED,4DAA4D;AAC5D,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;CAClE;AAED,yEAAyE;AACzE,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translation.js","sourceRoot":"","sources":["../../src/types/translation.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,0DAA0D;AAC1D,uDAAuD;AACvD,2DAA2D"}
|
package/instructions/cli.md
CHANGED
|
@@ -105,6 +105,30 @@ All migration commands accept `--json` for machine-readable output.
|
|
|
105
105
|
plumbus dev
|
|
106
106
|
```
|
|
107
107
|
|
|
108
|
+
## App Commands
|
|
109
|
+
|
|
110
|
+
Run custom command scripts defined in your project's `app/commands/` directory. Use this for setup scripts, data migration tasks, and other one-off operations that need framework infrastructure (DB, config, password hashing).
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Run a command script
|
|
114
|
+
plumbus run <script-name>
|
|
115
|
+
|
|
116
|
+
# Pass arguments to the script
|
|
117
|
+
plumbus run <script-name> -- --email admin@example.com --role admin
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Command files must export a `default` or named `run` async function receiving `{ db, sql, args }`:
|
|
121
|
+
|
|
122
|
+
```ts
|
|
123
|
+
import { hashPassword } from "@plumbus/core";
|
|
124
|
+
|
|
125
|
+
export default async function (ctx: { sql: any; args: string[] }) {
|
|
126
|
+
const password = randomBytes(24).toString("base64url");
|
|
127
|
+
await ctx.sql`INSERT INTO "user" ...`;
|
|
128
|
+
console.log(`Password: ${password}`);
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
108
132
|
## Important Notes
|
|
109
133
|
|
|
110
134
|
- **Run from project root**: All commands must be executed from the consumer project directory where `package.json` lives.
|