fimo 0.7.0-experimental.1 → 0.7.0-experimental.11
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/assets/content-templates/hooks-template.eta +27 -73
- package/assets/content-templates/types-template.eta +1 -4
- package/assets/skills/fimo/SKILL.md +2 -2
- package/assets/skills/fimo/references/content.md +42 -46
- package/assets/skills/fimo/references/locales.md +0 -8
- package/assets/skills/fimo/references/setup-react-router.md +2 -2
- package/assets/skills/fimo/references/ui.md +1 -1
- package/assets/skills/fimo-cli/references/content.md +14 -17
- package/assets/skills/fimo-cli/references/locales.md +0 -6
- package/assets/skills/fimo-migration/SKILL.md +22 -2
- package/assets/skills/fimo-migration/references/content.md +8 -0
- package/assets/skills/fimo-migration/references/manifest.md +35 -0
- package/assets/skills/fimo-migration/references/qa.md +24 -2
- package/assets/skills/fimo-migration/references/workflow.md +12 -1
- package/assets/skills/fimo-migration/references/wrap.md +617 -0
- package/assets/skills/fimo-studio/references/visual-editing.md +5 -3
- package/dist/build/vite/plugins/translations.d.ts +2 -8
- package/dist/build/vite/plugins/translations.d.ts.map +1 -1
- package/dist/build/vite/plugins/translations.js +3 -121
- package/dist/cli/bundle.json +1 -1
- package/dist/cli/index.js +20644 -12459
- package/dist/runtime/app/FimoProviders.d.ts +1 -11
- package/dist/runtime/app/FimoProviders.d.ts.map +1 -1
- package/dist/runtime/app/FimoProviders.js +2 -23
- package/dist/runtime/astro/index.d.ts +2 -0
- package/dist/runtime/astro/index.d.ts.map +1 -0
- package/dist/runtime/astro/index.js +3 -0
- package/dist/runtime/astro/server.d.ts +3 -0
- package/dist/runtime/astro/server.d.ts.map +1 -0
- package/dist/runtime/astro/server.js +6 -0
- package/dist/runtime/content/utils/retrieve-data-sources.d.ts +0 -1
- package/dist/runtime/content/utils/retrieve-data-sources.d.ts.map +1 -1
- package/dist/runtime/content/utils/retrieve-data-sources.js +4 -27
- package/dist/runtime/i18n/FimoLocaleContext.d.ts.map +1 -1
- package/dist/runtime/i18n/FimoLocaleContext.js +1 -0
- package/dist/runtime/next/FimoNextProviders.d.ts +24 -0
- package/dist/runtime/next/FimoNextProviders.d.ts.map +1 -0
- package/dist/runtime/next/FimoNextProviders.js +20 -0
- package/dist/runtime/next/FimoNextScripts.d.ts +10 -0
- package/dist/runtime/next/FimoNextScripts.d.ts.map +1 -0
- package/dist/runtime/next/FimoNextScripts.js +19 -0
- package/dist/runtime/next/index.d.ts +14 -0
- package/dist/runtime/next/index.d.ts.map +1 -0
- package/dist/runtime/next/index.js +14 -0
- package/dist/runtime/next/server.d.ts +2 -0
- package/dist/runtime/next/server.d.ts.map +1 -0
- package/dist/runtime/next/server.js +4 -0
- package/dist/runtime/nuxt/composables.d.ts +9 -0
- package/dist/runtime/nuxt/composables.d.ts.map +1 -0
- package/dist/runtime/nuxt/composables.js +57 -0
- package/dist/runtime/nuxt/index.d.ts +3 -0
- package/dist/runtime/nuxt/index.d.ts.map +1 -0
- package/dist/runtime/nuxt/index.js +6 -0
- package/dist/runtime/nuxt/server.d.ts +3 -0
- package/dist/runtime/nuxt/server.d.ts.map +1 -0
- package/dist/runtime/nuxt/server.js +6 -0
- package/dist/runtime/paths/get-fimo-paths.d.ts.map +1 -1
- package/dist/runtime/paths/get-fimo-paths.js +5 -15
- package/dist/runtime/primitives/labels-hook.d.ts +33 -0
- package/dist/runtime/primitives/labels-hook.d.ts.map +1 -0
- package/dist/runtime/primitives/labels-hook.js +41 -0
- package/dist/runtime/primitives/labels-store.d.ts +12 -0
- package/dist/runtime/primitives/labels-store.d.ts.map +1 -0
- package/dist/runtime/primitives/labels-store.js +60 -0
- package/dist/runtime/primitives/labels-store.test.d.ts +2 -0
- package/dist/runtime/primitives/labels-store.test.d.ts.map +1 -0
- package/dist/runtime/primitives/labels-store.test.js +66 -0
- package/dist/runtime/primitives/lib/primitives.d.ts +2 -2
- package/dist/runtime/primitives/lib/primitives.d.ts.map +1 -1
- package/dist/runtime/primitives/lib/query.d.ts +3 -5
- package/dist/runtime/primitives/lib/query.d.ts.map +1 -1
- package/dist/runtime/primitives/lib/useFimoLiveValue.d.ts +5 -3
- package/dist/runtime/primitives/lib/useFimoLiveValue.d.ts.map +1 -1
- package/dist/runtime/primitives/lib/useFimoLiveValue.js +11 -4
- package/dist/runtime/primitives/public-surface.test.js +5 -9
- package/dist/runtime/primitives/translations.d.ts +1 -27
- package/dist/runtime/primitives/translations.d.ts.map +1 -1
- package/dist/runtime/primitives/translations.js +7 -85
- package/dist/runtime/react/FimoSpaProviders.d.ts +36 -0
- package/dist/runtime/react/FimoSpaProviders.d.ts.map +1 -0
- package/dist/runtime/react/FimoSpaProviders.js +63 -0
- package/dist/runtime/react/index.d.ts +33 -0
- package/dist/runtime/react/index.d.ts.map +1 -0
- package/dist/runtime/react/index.js +39 -0
- package/dist/runtime/remix/FimoRemixProviders.d.ts +16 -0
- package/dist/runtime/remix/FimoRemixProviders.d.ts.map +1 -0
- package/dist/runtime/remix/FimoRemixProviders.js +12 -0
- package/dist/runtime/remix/FimoRemixScripts.d.ts +10 -0
- package/dist/runtime/remix/FimoRemixScripts.d.ts.map +1 -0
- package/dist/runtime/remix/FimoRemixScripts.js +19 -0
- package/dist/runtime/remix/index.d.ts +12 -0
- package/dist/runtime/remix/index.d.ts.map +1 -0
- package/dist/runtime/remix/index.js +11 -0
- package/dist/runtime/remix/server.d.ts +2 -0
- package/dist/runtime/remix/server.d.ts.map +1 -0
- package/dist/runtime/remix/server.js +2 -0
- package/dist/runtime/seo/buildSeoForPath.d.ts +3 -1
- package/dist/runtime/seo/buildSeoForPath.d.ts.map +1 -1
- package/dist/runtime/seo/buildSeoForPath.js +1 -4
- package/dist/runtime/shared/display-routes.d.ts +14 -0
- package/dist/runtime/shared/display-routes.d.ts.map +1 -0
- package/dist/runtime/shared/display-routes.js +25 -0
- package/dist/runtime/shared/fimo-config.server.d.ts.map +1 -1
- package/dist/runtime/shared/fimo-config.server.js +1 -0
- package/dist/runtime/shared/fimo-config.types.d.ts +2 -0
- package/dist/runtime/shared/fimo-config.types.d.ts.map +1 -1
- package/dist/runtime/shared/i18n-messages.d.ts +29 -0
- package/dist/runtime/shared/i18n-messages.d.ts.map +1 -0
- package/dist/runtime/shared/i18n-messages.js +79 -0
- package/dist/runtime/shared/i18n-messages.test.d.ts +2 -0
- package/dist/runtime/shared/i18n-messages.test.d.ts.map +1 -0
- package/dist/runtime/shared/i18n-messages.test.js +39 -0
- package/dist/runtime/shared/labels-fetch.pure.d.ts +17 -0
- package/dist/runtime/shared/labels-fetch.pure.d.ts.map +1 -0
- package/dist/runtime/shared/labels-fetch.pure.js +71 -0
- package/dist/runtime/shared/labels-fetch.server.d.ts +7 -0
- package/dist/runtime/shared/labels-fetch.server.d.ts.map +1 -0
- package/dist/runtime/shared/labels-fetch.server.js +97 -0
- package/dist/runtime/shared/labels-t.pure.d.ts +2 -0
- package/dist/runtime/shared/labels-t.pure.d.ts.map +1 -0
- package/dist/runtime/shared/labels-t.pure.js +10 -0
- package/dist/runtime/strapi/client.d.ts +26 -0
- package/dist/runtime/strapi/client.d.ts.map +1 -0
- package/dist/runtime/strapi/client.js +88 -0
- package/dist/runtime/strapi/client.test.d.ts +2 -0
- package/dist/runtime/strapi/client.test.d.ts.map +1 -0
- package/dist/runtime/strapi/client.test.js +64 -0
- package/dist/runtime/strapi/index.d.ts +5 -0
- package/dist/runtime/strapi/index.d.ts.map +1 -0
- package/dist/runtime/strapi/index.js +6 -0
- package/dist/runtime/strapi/reshape.d.ts +28 -0
- package/dist/runtime/strapi/reshape.d.ts.map +1 -0
- package/dist/runtime/strapi/reshape.js +79 -0
- package/dist/runtime/strapi/reshape.test.d.ts +2 -0
- package/dist/runtime/strapi/reshape.test.d.ts.map +1 -0
- package/dist/runtime/strapi/reshape.test.js +33 -0
- package/dist/runtime/svelte/index.d.ts +3 -0
- package/dist/runtime/svelte/index.d.ts.map +1 -0
- package/dist/runtime/svelte/index.js +7 -0
- package/dist/runtime/svelte/server.d.ts +3 -0
- package/dist/runtime/svelte/server.d.ts.map +1 -0
- package/dist/runtime/svelte/server.js +6 -0
- package/dist/runtime/vue/index.d.ts +3 -0
- package/dist/runtime/vue/index.d.ts.map +1 -0
- package/dist/runtime/vue/index.js +5 -0
- package/dist/runtime/vue/server.d.ts +3 -0
- package/dist/runtime/vue/server.d.ts.map +1 -0
- package/dist/runtime/vue/server.js +6 -0
- package/dist/runtime/wrapped/FimoFileLink.d.ts +17 -0
- package/dist/runtime/wrapped/FimoFileLink.d.ts.map +1 -0
- package/dist/runtime/wrapped/FimoFileLink.js +19 -0
- package/dist/runtime/wrapped/FimoMediaImage.d.ts +14 -0
- package/dist/runtime/wrapped/FimoMediaImage.d.ts.map +1 -0
- package/dist/runtime/wrapped/FimoMediaImage.js +20 -0
- package/dist/runtime/wrapped/FimoMediaVideo.d.ts +14 -0
- package/dist/runtime/wrapped/FimoMediaVideo.d.ts.map +1 -0
- package/dist/runtime/wrapped/FimoMediaVideo.js +20 -0
- package/dist/runtime/wrapped/FimoRichTextBlock.d.ts +23 -0
- package/dist/runtime/wrapped/FimoRichTextBlock.d.ts.map +1 -0
- package/dist/runtime/wrapped/FimoRichTextBlock.js +22 -0
- package/dist/runtime/wrapped/FimoText.d.ts +22 -0
- package/dist/runtime/wrapped/FimoText.d.ts.map +1 -0
- package/dist/runtime/wrapped/FimoText.js +20 -0
- package/dist/runtime/wrapped/WrappedContentContext.d.ts +28 -0
- package/dist/runtime/wrapped/WrappedContentContext.d.ts.map +1 -0
- package/dist/runtime/wrapped/WrappedContentContext.js +30 -0
- package/dist/runtime/wrapped/WrappedProviders.d.ts +33 -0
- package/dist/runtime/wrapped/WrappedProviders.d.ts.map +1 -0
- package/dist/runtime/wrapped/WrappedProviders.js +101 -0
- package/dist/runtime/wrapped/dom.d.ts +4 -0
- package/dist/runtime/wrapped/dom.d.ts.map +1 -0
- package/dist/runtime/wrapped/dom.js +23 -0
- package/dist/runtime/wrapped/dom.test.d.ts +2 -0
- package/dist/runtime/wrapped/dom.test.d.ts.map +1 -0
- package/dist/runtime/wrapped/dom.test.js +16 -0
- package/dist/runtime/wrapped/server.d.ts +77 -0
- package/dist/runtime/wrapped/server.d.ts.map +1 -0
- package/dist/runtime/wrapped/server.js +237 -0
- package/dist/runtime/wrapped/server.test.d.ts +2 -0
- package/dist/runtime/wrapped/server.test.d.ts.map +1 -0
- package/dist/runtime/wrapped/server.test.js +91 -0
- package/dist/scripts/apply-wrap-templates.d.ts +61 -0
- package/dist/scripts/apply-wrap-templates.js +132 -0
- package/dist/scripts/apply-wrap-templates.test.d.ts +1 -0
- package/dist/scripts/apply-wrap-templates.test.js +199 -0
- package/dist/scripts/apply-wrap.d.ts +46 -0
- package/dist/scripts/apply-wrap.js +278 -0
- package/dist/scripts/apply-wrap.test.d.ts +1 -0
- package/dist/scripts/apply-wrap.test.js +226 -0
- package/dist/scripts/cms/discover.d.ts +2 -0
- package/dist/scripts/cms/discover.js +17 -0
- package/dist/scripts/cms/example-content.d.ts +32 -0
- package/dist/scripts/cms/example-content.js +108 -0
- package/dist/scripts/cms/example-content.test.d.ts +1 -0
- package/dist/scripts/cms/example-content.test.js +66 -0
- package/dist/scripts/cms/strapi/detect.d.ts +2 -0
- package/dist/scripts/cms/strapi/detect.js +186 -0
- package/dist/scripts/cms/strapi/detect.test.d.ts +1 -0
- package/dist/scripts/cms/strapi/detect.test.js +56 -0
- package/dist/scripts/cms/strapi/index.d.ts +3 -0
- package/dist/scripts/cms/strapi/index.js +25 -0
- package/dist/scripts/cms/strapi/list-source.d.ts +17 -0
- package/dist/scripts/cms/strapi/list-source.js +90 -0
- package/dist/scripts/cms/strapi/list-source.test.d.ts +1 -0
- package/dist/scripts/cms/strapi/list-source.test.js +33 -0
- package/dist/scripts/cms/strapi/schema-map.d.ts +9 -0
- package/dist/scripts/cms/strapi/schema-map.js +149 -0
- package/dist/scripts/cms/strapi/schema-map.test.d.ts +1 -0
- package/dist/scripts/cms/strapi/schema-map.test.js +91 -0
- package/dist/scripts/cms/strapi/touchpoints.d.ts +31 -0
- package/dist/scripts/cms/strapi/touchpoints.js +145 -0
- package/dist/scripts/cms/strapi/touchpoints.test.d.ts +1 -0
- package/dist/scripts/cms/strapi/touchpoints.test.js +62 -0
- package/dist/scripts/cms/strapi/wire-client.d.ts +15 -0
- package/dist/scripts/cms/strapi/wire-client.js +107 -0
- package/dist/scripts/cms/strapi/wire-client.test.d.ts +1 -0
- package/dist/scripts/cms/strapi/wire-client.test.js +51 -0
- package/dist/scripts/cms/strapi/wiring.d.ts +17 -0
- package/dist/scripts/cms/strapi/wiring.js +36 -0
- package/dist/scripts/cms/strapi/wiring.test.d.ts +1 -0
- package/dist/scripts/cms/strapi/wiring.test.js +27 -0
- package/dist/scripts/cms/types.d.ts +117 -0
- package/dist/scripts/cms/types.js +11 -0
- package/dist/scripts/detect-framework.d.ts +39 -0
- package/dist/scripts/detect-framework.js +133 -0
- package/dist/scripts/detect-framework.test.d.ts +1 -0
- package/dist/scripts/detect-framework.test.js +122 -0
- package/dist/scripts/draft-rows.d.ts +19 -0
- package/dist/scripts/draft-rows.js +135 -0
- package/dist/scripts/draft-rows.test.d.ts +1 -0
- package/dist/scripts/draft-rows.test.js +113 -0
- package/dist/scripts/draft-schemas.d.ts +27 -0
- package/dist/scripts/draft-schemas.js +188 -0
- package/dist/scripts/draft-schemas.test.d.ts +1 -0
- package/dist/scripts/draft-schemas.test.js +152 -0
- package/dist/scripts/extract-translations.js +16 -11
- package/dist/scripts/extract-translations.test.d.ts +1 -0
- package/dist/scripts/extract-translations.test.js +104 -0
- package/dist/scripts/frameworks/astro/routes.d.ts +3 -0
- package/dist/scripts/frameworks/astro/routes.js +55 -0
- package/dist/scripts/frameworks/astro/template-style.d.ts +7 -0
- package/dist/scripts/frameworks/astro/template-style.js +19 -0
- package/dist/scripts/frameworks/discover.d.ts +70 -0
- package/dist/scripts/frameworks/discover.js +178 -0
- package/dist/scripts/frameworks/next/rewire.d.ts +30 -0
- package/dist/scripts/frameworks/next/rewire.js +258 -0
- package/dist/scripts/frameworks/next/rewire.test.d.ts +1 -0
- package/dist/scripts/frameworks/next/rewire.test.js +134 -0
- package/dist/scripts/frameworks/next/routes.d.ts +17 -0
- package/dist/scripts/frameworks/next/routes.js +134 -0
- package/dist/scripts/frameworks/next/routes.test.d.ts +1 -0
- package/dist/scripts/frameworks/next/routes.test.js +64 -0
- package/dist/scripts/frameworks/next/wiring.d.ts +33 -0
- package/dist/scripts/frameworks/next/wiring.js +186 -0
- package/dist/scripts/frameworks/next/wiring.test.d.ts +1 -0
- package/dist/scripts/frameworks/next/wiring.test.js +174 -0
- package/dist/scripts/frameworks/nuxt/routes.d.ts +3 -0
- package/dist/scripts/frameworks/nuxt/routes.js +54 -0
- package/dist/scripts/frameworks/nuxt/template-style.d.ts +9 -0
- package/dist/scripts/frameworks/nuxt/template-style.js +27 -0
- package/dist/scripts/frameworks/remix/routes.d.ts +3 -0
- package/dist/scripts/frameworks/remix/routes.js +50 -0
- package/dist/scripts/frameworks/support.d.ts +75 -0
- package/dist/scripts/frameworks/support.js +165 -0
- package/dist/scripts/frameworks/support.test.d.ts +1 -0
- package/dist/scripts/frameworks/support.test.js +87 -0
- package/dist/scripts/frameworks/sveltekit/routes.d.ts +3 -0
- package/dist/scripts/frameworks/sveltekit/routes.js +50 -0
- package/dist/scripts/frameworks/sveltekit/template-style.d.ts +9 -0
- package/dist/scripts/frameworks/sveltekit/template-style.js +54 -0
- package/dist/scripts/frameworks/vite/routes.d.ts +15 -0
- package/dist/scripts/frameworks/vite/routes.js +93 -0
- package/dist/scripts/frameworks/vite/routes.test.d.ts +1 -0
- package/dist/scripts/frameworks/vite/routes.test.js +73 -0
- package/dist/scripts/frameworks/vite/wiring.d.ts +10 -0
- package/dist/scripts/frameworks/vite/wiring.js +99 -0
- package/dist/scripts/frameworks/vite/wiring.test.d.ts +1 -0
- package/dist/scripts/frameworks/vite/wiring.test.js +88 -0
- package/dist/scripts/generated-types.test.js +1 -1
- package/dist/scripts/i18n-namespace.d.ts +27 -0
- package/dist/scripts/i18n-namespace.js +155 -0
- package/dist/scripts/lib/validation-report.d.ts +1 -0
- package/dist/scripts/lib/validation-report.js +3 -0
- package/dist/scripts/render-parity/capture.d.ts +56 -0
- package/dist/scripts/render-parity/capture.js +366 -0
- package/dist/scripts/render-parity/capture.test.d.ts +1 -0
- package/dist/scripts/render-parity/capture.test.js +306 -0
- package/dist/scripts/render-parity/compare.d.ts +59 -0
- package/dist/scripts/render-parity/compare.js +0 -0
- package/dist/scripts/render-parity/compare.test.d.ts +1 -0
- package/dist/scripts/render-parity/compare.test.js +98 -0
- package/dist/scripts/render-parity/normalize-html.d.ts +13 -0
- package/dist/scripts/render-parity/normalize-html.js +223 -0
- package/dist/scripts/render-parity/normalize-html.test.d.ts +1 -0
- package/dist/scripts/render-parity/normalize-html.test.js +58 -0
- package/dist/scripts/render-parity/types.d.ts +41 -0
- package/dist/scripts/render-parity/types.js +1 -0
- package/dist/scripts/resolve-routes.js +1 -1
- package/dist/scripts/scan-wrappable.d.ts +196 -0
- package/dist/scripts/scan-wrappable.js +1232 -0
- package/dist/scripts/scan-wrappable.test.d.ts +1 -0
- package/dist/scripts/scan-wrappable.test.js +521 -0
- package/dist/scripts/sync-schemas.test.js +4 -24
- package/dist/scripts/validate-route-metadata.js +11 -0
- package/dist/scripts/validate-schemas.test.js +2 -2
- package/package.json +92 -5
- package/templates/react-router/package.json +7 -10
- package/dist/runtime/paths/get-fimo-paths.test.d.ts +0 -2
- package/dist/runtime/paths/get-fimo-paths.test.d.ts.map +0 -1
- package/dist/runtime/paths/get-fimo-paths.test.js +0 -69
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { applyLabelUpdate, getLabelSnapshot, hydrateLabels, subscribeLabels } from './labels-store.js';
|
|
3
|
+
describe('labels-store', () => {
|
|
4
|
+
it('hydrates the store and notifies subscribers', () => {
|
|
5
|
+
const listener = vi.fn();
|
|
6
|
+
const unsubscribe = subscribeLabels(listener);
|
|
7
|
+
hydrateLabels({
|
|
8
|
+
dictionaries: { en: { 'hero.title': 'Welcome' } },
|
|
9
|
+
defaultLocale: 'en',
|
|
10
|
+
signature: 'sig-hydrate-1',
|
|
11
|
+
updatedAt: null,
|
|
12
|
+
});
|
|
13
|
+
expect(getLabelSnapshot().dictionaries.en['hero.title']).toBe('Welcome');
|
|
14
|
+
expect(listener).toHaveBeenCalledTimes(1);
|
|
15
|
+
unsubscribe();
|
|
16
|
+
});
|
|
17
|
+
it('ignores updates with an unchanged signature', () => {
|
|
18
|
+
const listener = vi.fn();
|
|
19
|
+
const unsubscribe = subscribeLabels(listener);
|
|
20
|
+
hydrateLabels({
|
|
21
|
+
dictionaries: { en: { a: '1' } },
|
|
22
|
+
defaultLocale: 'en',
|
|
23
|
+
signature: 'sig-same',
|
|
24
|
+
updatedAt: null,
|
|
25
|
+
});
|
|
26
|
+
hydrateLabels({
|
|
27
|
+
dictionaries: { en: { a: '2' } },
|
|
28
|
+
defaultLocale: 'en',
|
|
29
|
+
signature: 'sig-same',
|
|
30
|
+
updatedAt: null,
|
|
31
|
+
});
|
|
32
|
+
expect(getLabelSnapshot().dictionaries.en.a).toBe('1');
|
|
33
|
+
expect(listener).toHaveBeenCalledTimes(1);
|
|
34
|
+
unsubscribe();
|
|
35
|
+
});
|
|
36
|
+
it('normalizes payloads in applyLabelUpdate and drops non-string values', () => {
|
|
37
|
+
applyLabelUpdate({
|
|
38
|
+
dictionaries: { en: { keep: 'yes', drop: 42 }, fr: 'not-a-record' },
|
|
39
|
+
defaultLocale: 'en',
|
|
40
|
+
signature: 'sig-normalize',
|
|
41
|
+
});
|
|
42
|
+
const snapshot = getLabelSnapshot();
|
|
43
|
+
expect(snapshot.dictionaries.en).toEqual({ keep: 'yes' });
|
|
44
|
+
expect(snapshot.dictionaries.fr).toBeUndefined();
|
|
45
|
+
expect(snapshot.updatedAt).toBeNull();
|
|
46
|
+
});
|
|
47
|
+
it('rejects payloads without dictionaries', () => {
|
|
48
|
+
const before = getLabelSnapshot();
|
|
49
|
+
applyLabelUpdate({ defaultLocale: 'de' });
|
|
50
|
+
applyLabelUpdate(null);
|
|
51
|
+
applyLabelUpdate('nope');
|
|
52
|
+
expect(getLabelSnapshot()).toBe(before);
|
|
53
|
+
});
|
|
54
|
+
it('stops notifying after unsubscribe', () => {
|
|
55
|
+
const listener = vi.fn();
|
|
56
|
+
const unsubscribe = subscribeLabels(listener);
|
|
57
|
+
unsubscribe();
|
|
58
|
+
hydrateLabels({
|
|
59
|
+
dictionaries: { en: {} },
|
|
60
|
+
defaultLocale: 'en',
|
|
61
|
+
signature: 'sig-after-unsub',
|
|
62
|
+
updatedAt: null,
|
|
63
|
+
});
|
|
64
|
+
expect(listener).not.toHaveBeenCalled();
|
|
65
|
+
});
|
|
66
|
+
});
|
|
@@ -9,12 +9,12 @@ export interface FimoSource {
|
|
|
9
9
|
source: string;
|
|
10
10
|
}
|
|
11
11
|
export interface FimoReference {
|
|
12
|
-
|
|
12
|
+
documentId: string;
|
|
13
13
|
}
|
|
14
14
|
/** Polymorphic reference value: the schema names a target set, so every value carries its own type. */
|
|
15
15
|
export interface FimoPolymorphicReference {
|
|
16
16
|
contentType: string;
|
|
17
|
-
|
|
17
|
+
documentId: string;
|
|
18
18
|
}
|
|
19
19
|
export declare const FIMO_SOURCE: unique symbol;
|
|
20
20
|
export declare const FIMO_PARTS: unique symbol;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../../src/runtime/primitives/lib/primitives.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;;GAKG;AAGH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../../src/runtime/primitives/lib/primitives.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,7 +43,6 @@ export type ManyReferenceOps = {
|
|
|
43
43
|
export type FilterFor<T> = [T] extends [FimoString | string] ? string | StringOps : [T] extends [FimoBoolean | boolean] ? boolean | BoolOps : [T] extends [FimoDate | Date] ? string | DateOps : [T] extends [number] ? number | NumberOps : [T] extends [FimoPolymorphicReference | null] ? never : [T] extends [FimoPolymorphicReference[]] ? never : [T] extends [FimoReference | null] ? string | null | ReferenceOps : [T] extends [FimoReference[]] ? string | ManyReferenceOps : [T] extends [FimoMedia | FimoMedia[]] ? NullOnlyOps : [T] extends [FimoRichText] ? string | StringOps : NullOnlyOps;
|
|
44
44
|
type BaseTopLevelWhere = {
|
|
45
45
|
id?: string | StringOps;
|
|
46
|
-
entryId?: string | StringOps;
|
|
47
46
|
documentId?: string | StringOps;
|
|
48
47
|
slug?: string | StringOps;
|
|
49
48
|
createdAt?: string | DateOps;
|
|
@@ -67,10 +66,9 @@ export type Fields<T> = Field<T> | readonly Field<T>[];
|
|
|
67
66
|
type SelectedField<TField> = TField extends `__fimo.${string}` ? '__fimo' : TField;
|
|
68
67
|
type SelectedFields<TFields> = TFields extends readonly (infer K)[] ? SelectedField<K> : SelectedField<TFields>;
|
|
69
68
|
type ListItem<TValue> = TValue extends readonly (infer K)[] ? K : TValue;
|
|
70
|
-
type EntryIdentityField<T> = Extract<'id' | 'entryId' | 'documentId' | 'locale', keyof T>;
|
|
71
69
|
export type Projected<T extends {
|
|
72
70
|
id: string;
|
|
73
|
-
}, TFields extends Fields<T> | undefined> = [TFields] extends [undefined] ? T : Pick<T,
|
|
71
|
+
}, TFields extends Fields<T> | undefined> = [TFields] extends [undefined] ? T : Pick<T, Extract<'id' | SelectedFields<TFields>, keyof T>>;
|
|
74
72
|
export declare const FIMO_REFERENCES: unique symbol;
|
|
75
73
|
export interface WithReferences<TReferences> {
|
|
76
74
|
readonly [FIMO_REFERENCES]?: TReferences;
|
|
@@ -81,7 +79,7 @@ export type Populate<TEntry> = ReferenceField<TEntry> | readonly ReferenceField<
|
|
|
81
79
|
type PopulatedKeys<TEntry, TPopulate> = Extract<ListItem<TPopulate>, keyof ReferenceMap<TEntry> & keyof TEntry>;
|
|
82
80
|
export type Populated<TEntry extends {
|
|
83
81
|
id: string;
|
|
84
|
-
}, TPopulate extends Populate<TEntry>> = Pick<TEntry,
|
|
82
|
+
}, TPopulate extends Populate<TEntry>> = Pick<TEntry, 'id'> & Omit<TEntry, PopulatedKeys<TEntry, TPopulate>> & {
|
|
85
83
|
[K in PopulatedKeys<TEntry, TPopulate>]: ReferenceMap<TEntry>[K];
|
|
86
84
|
};
|
|
87
85
|
export type PopulatedResult<TEntry extends {
|
|
@@ -91,7 +89,7 @@ export type PopulatedResult<TEntry extends {
|
|
|
91
89
|
] extends [undefined] ? TEntry : Populated<TEntry, NonNullable<TPopulate>>;
|
|
92
90
|
export type ProjectedWithPopulate<T extends {
|
|
93
91
|
id: string;
|
|
94
|
-
}, TFields extends string | readonly string[] | undefined, TPopulate extends string | readonly string[] | undefined> = [TFields] extends [undefined] ? T : Pick<T,
|
|
92
|
+
}, TFields extends string | readonly string[] | undefined, TPopulate extends string | readonly string[] | undefined> = [TFields] extends [undefined] ? T : Pick<T, Extract<'id' | SelectedFields<TFields> | ListItem<NonNullable<TPopulate>>, keyof T>>;
|
|
95
93
|
export type Query<T extends {
|
|
96
94
|
id: string;
|
|
97
95
|
}, TFields extends Fields<T> | undefined = Fields<T> | undefined, TPopulate extends string | readonly string[] | undefined = string | readonly string[] | undefined> = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../src/runtime/primitives/lib/query.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../src/runtime/primitives/lib/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,9 +9,11 @@ import { type RefObject } from 'react';
|
|
|
9
9
|
* preview knows to dispatch events instead of falling back to raw DOM writes,
|
|
10
10
|
* and updates internal state when a mutation arrives.
|
|
11
11
|
*
|
|
12
|
-
* In prod (published app):
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* In prod (published app): only `useFimoLiveValueProd` is linked. The dev
|
|
13
|
+
* check must work under any bundler (Vite, webpack, Turbopack) and plain
|
|
14
|
+
* Node SSR: `import.meta.env.DEV` only exists under Vite, and
|
|
15
|
+
* `process.env.NODE_ENV` is statically replaced by Next/webpack — checking
|
|
16
|
+
* both keeps the hook correct across adapters.
|
|
15
17
|
*/
|
|
16
18
|
declare function useFimoLiveValueDev<T, E extends HTMLElement = HTMLElement>(external: T): {
|
|
17
19
|
value: T;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFimoLiveValue.d.ts","sourceRoot":"","sources":["../../../../src/runtime/primitives/lib/useFimoLiveValue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,OAAO,CAAC;AAEpE
|
|
1
|
+
{"version":3,"file":"useFimoLiveValue.d.ts","sourceRoot":"","sources":["../../../../src/runtime/primitives/lib/useFimoLiveValue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,OAAO,CAAC;AAEpE;;;;;;;;;;;;;;;GAeG;AAEH,iBAAS,mBAAmB,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,GAAG,WAAW,EACjE,QAAQ,EAAE,CAAC,GACV;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,GAAG,EAAE,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;CAAE,CA8BxC;AAgBD,eAAO,MAAM,gBAAgB,EAExB,OAAO,mBAAmB,CAAC"}
|
|
@@ -10,9 +10,11 @@ import { useEffect, useRef, useState } from 'react';
|
|
|
10
10
|
* preview knows to dispatch events instead of falling back to raw DOM writes,
|
|
11
11
|
* and updates internal state when a mutation arrives.
|
|
12
12
|
*
|
|
13
|
-
* In prod (published app):
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* In prod (published app): only `useFimoLiveValueProd` is linked. The dev
|
|
14
|
+
* check must work under any bundler (Vite, webpack, Turbopack) and plain
|
|
15
|
+
* Node SSR: `import.meta.env.DEV` only exists under Vite, and
|
|
16
|
+
* `process.env.NODE_ENV` is statically replaced by Next/webpack — checking
|
|
17
|
+
* both keeps the hook correct across adapters.
|
|
16
18
|
*/
|
|
17
19
|
function useFimoLiveValueDev(external) {
|
|
18
20
|
const ref = useRef(null);
|
|
@@ -46,4 +48,9 @@ function useFimoLiveValueProd(external) {
|
|
|
46
48
|
const ref = useRef(null);
|
|
47
49
|
return { value: external, ref };
|
|
48
50
|
}
|
|
49
|
-
|
|
51
|
+
// globalThis lookup, not a bare `process` reference: this file is part of the
|
|
52
|
+
// browser-facing runtime surface, which must typecheck without node types
|
|
53
|
+
// (the generated-types gate enforces it).
|
|
54
|
+
const isDevRuntime = import.meta.env?.DEV === true ||
|
|
55
|
+
globalThis.process?.env?.NODE_ENV === 'development';
|
|
56
|
+
export const useFimoLiveValue = (isDevRuntime ? useFimoLiveValueDev : useFimoLiveValueProd);
|
|
@@ -12,11 +12,9 @@ describe('fimo/ui public type surface', () => {
|
|
|
12
12
|
expectTypeOf().toEqualTypeOf();
|
|
13
13
|
const localizedWhere = { locale: 'en' };
|
|
14
14
|
expectTypeOf(localizedWhere).toEqualTypeOf();
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
};
|
|
19
|
-
expectTypeOf(identityWhere).toEqualTypeOf();
|
|
15
|
+
// @ts-expect-error locale is not a filter on non-localized generated entry types.
|
|
16
|
+
const sharedWhere = { locale: 'en' };
|
|
17
|
+
expectTypeOf(sharedWhere).toEqualTypeOf();
|
|
20
18
|
});
|
|
21
19
|
it('supports the reference populate pattern emitted into generated schemas', () => {
|
|
22
20
|
const query = {
|
|
@@ -34,13 +32,11 @@ describe('fimo/ui public type surface', () => {
|
|
|
34
32
|
expectTypeOf().toEqualTypeOf();
|
|
35
33
|
expectTypeOf().toEqualTypeOf();
|
|
36
34
|
expectTypeOf().toEqualTypeOf();
|
|
37
|
-
expectTypeOf().toEqualTypeOf();
|
|
38
|
-
expectTypeOf().toEqualTypeOf();
|
|
39
35
|
// @ts-expect-error generated reference-aware queries only allow reference fields in populate.
|
|
40
36
|
const badQuery = { populate: 'name' };
|
|
41
37
|
expectTypeOf(badQuery).toEqualTypeOf();
|
|
42
|
-
// @ts-expect-error reference filters use target
|
|
43
|
-
const badWhere = { where: { sponsor: {
|
|
38
|
+
// @ts-expect-error reference filters use target documentId strings, not raw reference objects.
|
|
39
|
+
const badWhere = { where: { sponsor: { documentId: '750e8400-e29b-41d4-a716-446655440000' } } };
|
|
44
40
|
expectTypeOf(badWhere).toEqualTypeOf();
|
|
45
41
|
// @ts-expect-error contains is only valid for to-many reference fields.
|
|
46
42
|
const badToOneContains = { where: { sponsor: { $contains: '750e8400-e29b-41d4-a716-446655440000' } } };
|
|
@@ -1,28 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* Hook to provide a label function (`t`).
|
|
4
|
-
*
|
|
5
|
-
* Returns FimoString with source tracking for inline editing.
|
|
6
|
-
* Use with <Text> component for rendering, or String() for escape hatch.
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* const { t } = useLabels();
|
|
10
|
-
*
|
|
11
|
-
* // With Text component (recommended)
|
|
12
|
-
* <Text value={t('welcome')} />
|
|
13
|
-
*
|
|
14
|
-
* // Escape hatch for attributes
|
|
15
|
-
* <input placeholder={String(t('email.placeholder'))} />
|
|
16
|
-
*/
|
|
17
|
-
export declare function useLabels(): {
|
|
18
|
-
t: (fullKey: string) => FimoString;
|
|
19
|
-
locale: string;
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* Legacy alias for older projects. Prefer useLabels() in new code.
|
|
23
|
-
*/
|
|
24
|
-
export declare function useTranslations(): {
|
|
25
|
-
t: (fullKey: string) => FimoString;
|
|
26
|
-
locale: string;
|
|
27
|
-
};
|
|
1
|
+
export { useLabels, useTranslations } from './labels-hook.js';
|
|
28
2
|
//# sourceMappingURL=translations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../../src/runtime/primitives/translations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../../src/runtime/primitives/translations.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,61 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
// Vite flavor of the label layer: hydrates the framework-neutral store from
|
|
2
|
+
// the `virtual:translations` module (fimo/vite labels plugin) and wires HMR.
|
|
3
|
+
// Framework-agnostic consumers use ./labels-store.ts + ./labels-hook.ts.
|
|
2
4
|
import { defaultLocale as bundledDefaultLocale, dictionaries as bundledDictionaries, signature as translationSignature, updatedAt as bundledUpdatedAt, } from 'virtual:translations';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
const labelListeners = new Set();
|
|
6
|
-
let labelState = {
|
|
5
|
+
import { applyLabelUpdate, hydrateLabels } from './labels-store.js';
|
|
6
|
+
hydrateLabels({
|
|
7
7
|
dictionaries: bundledDictionaries ?? {},
|
|
8
8
|
defaultLocale: bundledDefaultLocale || 'en',
|
|
9
9
|
signature: translationSignature,
|
|
10
10
|
updatedAt: bundledUpdatedAt ?? null,
|
|
11
|
-
};
|
|
12
|
-
function subscribeLabels(listener) {
|
|
13
|
-
labelListeners.add(listener);
|
|
14
|
-
return () => {
|
|
15
|
-
labelListeners.delete(listener);
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
function getLabelSnapshot() {
|
|
19
|
-
return labelState;
|
|
20
|
-
}
|
|
21
|
-
function setLabelState(next) {
|
|
22
|
-
if (next.signature === labelState.signature) {
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
labelState = next;
|
|
26
|
-
for (const listener of labelListeners) {
|
|
27
|
-
listener();
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
function isRecord(value) {
|
|
31
|
-
return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
|
|
32
|
-
}
|
|
33
|
-
function normalizeDictionaries(value) {
|
|
34
|
-
if (!isRecord(value)) {
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
const dictionaries = {};
|
|
38
|
-
for (const [locale, labels] of Object.entries(value)) {
|
|
39
|
-
if (!isRecord(labels)) {
|
|
40
|
-
continue;
|
|
41
|
-
}
|
|
42
|
-
dictionaries[locale] = Object.fromEntries(Object.entries(labels).filter((entry) => typeof entry[1] === 'string'));
|
|
43
|
-
}
|
|
44
|
-
return dictionaries;
|
|
45
|
-
}
|
|
46
|
-
function applyLabelUpdate(payload) {
|
|
47
|
-
if (!isRecord(payload)) {
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
const dictionaries = normalizeDictionaries(payload.dictionaries);
|
|
51
|
-
if (!dictionaries) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
const defaultLocale = typeof payload.defaultLocale === 'string' ? payload.defaultLocale : labelState.defaultLocale;
|
|
55
|
-
const signature = typeof payload.signature === 'string' ? payload.signature : JSON.stringify({ dictionaries, defaultLocale });
|
|
56
|
-
const updatedAt = typeof payload.updatedAt === 'string' ? payload.updatedAt : null;
|
|
57
|
-
setLabelState({ dictionaries, defaultLocale, signature, updatedAt });
|
|
58
|
-
}
|
|
11
|
+
});
|
|
59
12
|
// @ts-ignore - import.meta.hot is provided by Vite during development.
|
|
60
13
|
if (import.meta.hot) {
|
|
61
14
|
const onLabelsUpdated = (payload) => {
|
|
@@ -69,35 +22,4 @@ if (import.meta.hot) {
|
|
|
69
22
|
import.meta.hot.off('fimo:labels-updated', onLabelsUpdated);
|
|
70
23
|
});
|
|
71
24
|
}
|
|
72
|
-
|
|
73
|
-
* Hook to provide a label function (`t`).
|
|
74
|
-
*
|
|
75
|
-
* Returns FimoString with source tracking for inline editing.
|
|
76
|
-
* Use with <Text> component for rendering, or String() for escape hatch.
|
|
77
|
-
*
|
|
78
|
-
* @example
|
|
79
|
-
* const { t } = useLabels();
|
|
80
|
-
*
|
|
81
|
-
* // With Text component (recommended)
|
|
82
|
-
* <Text value={t('welcome')} />
|
|
83
|
-
*
|
|
84
|
-
* // Escape hatch for attributes
|
|
85
|
-
* <input placeholder={String(t('email.placeholder'))} />
|
|
86
|
-
*/
|
|
87
|
-
export function useLabels() {
|
|
88
|
-
const localeContext = useLocale();
|
|
89
|
-
const labels = useSyncExternalStore(subscribeLabels, getLabelSnapshot, getLabelSnapshot);
|
|
90
|
-
const t = (fullKey) => {
|
|
91
|
-
const locale = localeContext.locale || labels.defaultLocale || 'en';
|
|
92
|
-
const dictionary = labels.dictionaries[locale] ?? labels.dictionaries[labels.defaultLocale] ?? {};
|
|
93
|
-
const text = dictionary[fullKey] ?? '';
|
|
94
|
-
return new FimoString(text, `__labels.${locale}.${fullKey}.value`);
|
|
95
|
-
};
|
|
96
|
-
return { t, locale: localeContext.locale };
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Legacy alias for older projects. Prefer useLabels() in new code.
|
|
100
|
-
*/
|
|
101
|
-
export function useTranslations() {
|
|
102
|
-
return useLabels();
|
|
103
|
-
}
|
|
25
|
+
export { useLabels, useTranslations } from './labels-hook.js';
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { FimoConfig } from '../shared/fimo-config.types.js';
|
|
3
|
+
import type { WrappedMediaEntry, WrappedRichTextEntry } from '../wrapped/WrappedContentContext.js';
|
|
4
|
+
export interface FimoSpaProvidersProps {
|
|
5
|
+
/** The project's fimo-config.json — import it directly: `import config from '../fimo-config.json'`. */
|
|
6
|
+
config: FimoConfig;
|
|
7
|
+
/** Tenant API base URL, e.g. `import.meta.env.VITE_API_URL`. Without it, wrapped values render their inline fallbacks. */
|
|
8
|
+
apiUrl?: string;
|
|
9
|
+
/** Preview client script for Fimo Studio edit mode. Pass only in dev, e.g. `import.meta.env.DEV ? import.meta.env.VITE_FIMO_PREVIEW_SCRIPT_URL : undefined`. */
|
|
10
|
+
previewScriptUrl?: string;
|
|
11
|
+
media?: Record<string, WrappedMediaEntry>;
|
|
12
|
+
richText?: Record<string, WrappedRichTextEntry>;
|
|
13
|
+
locale?: string;
|
|
14
|
+
children?: React.ReactNode;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Fimo providers for wrapped CLIENT-RENDERED React apps (Vite SPAs). There is
|
|
18
|
+
* no server pass to load labels in, so this adapter fetches the dictionary in
|
|
19
|
+
* the browser and hydrates the framework-neutral WrappedProviders; until the
|
|
20
|
+
* fetch resolves (or when it fails), every wrapped value renders its inline
|
|
21
|
+
* fallback — the original hardcoded string. Mount once around the app root:
|
|
22
|
+
*
|
|
23
|
+
* import config from '../fimo-config.json';
|
|
24
|
+
* <FimoSpaProviders
|
|
25
|
+
* config={config}
|
|
26
|
+
* apiUrl={import.meta.env.VITE_API_URL}
|
|
27
|
+
* previewScriptUrl={import.meta.env.DEV ? import.meta.env.VITE_FIMO_PREVIEW_SCRIPT_URL : undefined}
|
|
28
|
+
* >
|
|
29
|
+
* <App />
|
|
30
|
+
* </FimoSpaProviders>
|
|
31
|
+
*
|
|
32
|
+
* Navigation is History-API based (full page load): correct for any SPA
|
|
33
|
+
* router without depending on one.
|
|
34
|
+
*/
|
|
35
|
+
export declare function FimoSpaProviders({ config, apiUrl, previewScriptUrl, media, richText, locale, children, }: FimoSpaProvidersProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
//# sourceMappingURL=FimoSpaProviders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FimoSpaProviders.d.ts","sourceRoot":"","sources":["../../../src/runtime/react/FimoSpaProviders.tsx"],"names":[],"mappings":"AACA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAG5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAGnG,MAAM,WAAW,qBAAqB;IACpC,uGAAuG;IACvG,MAAM,EAAE,UAAU,CAAC;IACnB,0HAA0H;IAC1H,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gKAAgK;IAChK,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAYD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,MAAM,EACN,gBAAgB,EAChB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,QAAQ,GACT,EAAE,qBAAqB,2CA8CvB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
4
|
+
import { getFimoDefaultLocale, getFimoLocales } from '../i18n/locale.js';
|
|
5
|
+
import { fetchLabelBundle, serializeBundle } from '../shared/labels-fetch.pure.js';
|
|
6
|
+
import { WrappedProviders } from '../wrapped/WrappedProviders.js';
|
|
7
|
+
/** Browser-safe stable signature (labelSignature uses Buffer, server-only). */
|
|
8
|
+
function bundleSignature(bundle) {
|
|
9
|
+
const serialized = serializeBundle(bundle);
|
|
10
|
+
let hash = 5381;
|
|
11
|
+
for (let i = 0; i < serialized.length; i++) {
|
|
12
|
+
hash = ((hash << 5) + hash + serialized.charCodeAt(i)) | 0;
|
|
13
|
+
}
|
|
14
|
+
return `spa-${hash}`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Fimo providers for wrapped CLIENT-RENDERED React apps (Vite SPAs). There is
|
|
18
|
+
* no server pass to load labels in, so this adapter fetches the dictionary in
|
|
19
|
+
* the browser and hydrates the framework-neutral WrappedProviders; until the
|
|
20
|
+
* fetch resolves (or when it fails), every wrapped value renders its inline
|
|
21
|
+
* fallback — the original hardcoded string. Mount once around the app root:
|
|
22
|
+
*
|
|
23
|
+
* import config from '../fimo-config.json';
|
|
24
|
+
* <FimoSpaProviders
|
|
25
|
+
* config={config}
|
|
26
|
+
* apiUrl={import.meta.env.VITE_API_URL}
|
|
27
|
+
* previewScriptUrl={import.meta.env.DEV ? import.meta.env.VITE_FIMO_PREVIEW_SCRIPT_URL : undefined}
|
|
28
|
+
* >
|
|
29
|
+
* <App />
|
|
30
|
+
* </FimoSpaProviders>
|
|
31
|
+
*
|
|
32
|
+
* Navigation is History-API based (full page load): correct for any SPA
|
|
33
|
+
* router without depending on one.
|
|
34
|
+
*/
|
|
35
|
+
export function FimoSpaProviders({ config, apiUrl, previewScriptUrl, media, richText, locale, children, }) {
|
|
36
|
+
const [labels, setLabels] = useState(undefined);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
if (!apiUrl) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
let cancelled = false;
|
|
42
|
+
const defaultLocale = getFimoDefaultLocale(config);
|
|
43
|
+
fetchLabelBundle(apiUrl, getFimoLocales(config), defaultLocale)
|
|
44
|
+
.then((bundle) => {
|
|
45
|
+
if (!cancelled) {
|
|
46
|
+
setLabels({ ...bundle, signature: bundleSignature(bundle) });
|
|
47
|
+
}
|
|
48
|
+
})
|
|
49
|
+
.catch(() => {
|
|
50
|
+
// Unreachable API: keep rendering the inline fallbacks.
|
|
51
|
+
});
|
|
52
|
+
return () => {
|
|
53
|
+
cancelled = true;
|
|
54
|
+
};
|
|
55
|
+
}, [apiUrl, config]);
|
|
56
|
+
const navigation = useMemo(() => ({
|
|
57
|
+
pathname: typeof window !== 'undefined' ? window.location.pathname : null,
|
|
58
|
+
navigate: (to) => {
|
|
59
|
+
window.location.assign(to);
|
|
60
|
+
},
|
|
61
|
+
}), []);
|
|
62
|
+
return (_jsxs(WrappedProviders, { config: config, labels: labels, media: media, richText: richText, locale: locale, navigation: navigation, children: [previewScriptUrl ? _jsx("script", { type: "module", src: previewScriptUrl }) : null, children] }));
|
|
63
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export { Text } from '../primitives/components/Text.js';
|
|
2
|
+
export { Image } from '../primitives/components/Image.js';
|
|
3
|
+
export { StaticImage } from '../primitives/components/StaticImage.js';
|
|
4
|
+
export { Video } from '../primitives/components/Video.js';
|
|
5
|
+
export { Date } from '../primitives/components/Date.js';
|
|
6
|
+
export { Boolean } from '../primitives/components/Boolean.js';
|
|
7
|
+
export { RichText } from '../primitives/components/RichText.js';
|
|
8
|
+
export { useLabels, useTranslations } from '../primitives/labels-hook.js';
|
|
9
|
+
export { applyLabelUpdate, getLabelSnapshot, hydrateLabels, subscribeLabels } from '../primitives/labels-store.js';
|
|
10
|
+
export type { LabelState } from '../primitives/labels-store.js';
|
|
11
|
+
export { FimoText } from '../wrapped/FimoText.js';
|
|
12
|
+
export { FimoRichTextBlock } from '../wrapped/FimoRichTextBlock.js';
|
|
13
|
+
export { FimoMediaImage } from '../wrapped/FimoMediaImage.js';
|
|
14
|
+
export { FimoMediaVideo } from '../wrapped/FimoMediaVideo.js';
|
|
15
|
+
export { FimoFileLink } from '../wrapped/FimoFileLink.js';
|
|
16
|
+
export { useWrappedMedia, useWrappedRichText } from '../wrapped/WrappedContentContext.js';
|
|
17
|
+
export type { WrappedMediaEntry, WrappedRichTextEntry } from '../wrapped/WrappedContentContext.js';
|
|
18
|
+
export { FimoSpaProviders } from './FimoSpaProviders.js';
|
|
19
|
+
export type { FimoSpaProvidersProps } from './FimoSpaProviders.js';
|
|
20
|
+
export { FimoString, FimoDate, FimoMedia, FimoBoolean, FimoRichText, type FimoSource, type FimoPart, type FimoRichTextContent, type FimoRichTextNodeProps, type FimoRichTextMarkProps, type FimoRichTextComponents, FIMO_SOURCE, FIMO_PARTS, isFimoString, isFimoDate, hasFimoSource, getFimoSource, getFimoParts, } from '../primitives/lib/index.js';
|
|
21
|
+
export { fimo } from '../primitives/lib/template.js';
|
|
22
|
+
export { useFimoLiveValue } from '../primitives/lib/useFimoLiveValue.js';
|
|
23
|
+
export { DataSourcesProvider } from '../content/DataSourcesProvider.js';
|
|
24
|
+
export { ConsoleErrorProvider } from '../iframe/ConsoleErrorProvider.js';
|
|
25
|
+
export { ScreenshotProvider } from '../iframe/ScreenshotProvider.js';
|
|
26
|
+
export { FimoLocaleProvider, useLocale } from '../i18n/FimoLocaleContext.js';
|
|
27
|
+
export type { FimoLocaleContextValue } from '../i18n/FimoLocaleContext.js';
|
|
28
|
+
export { getFimoDefaultLocale, getFimoLocales, getFimoTextDirection, localizeFimoPath, resolveFimoLocale, toHtmlLang, } from '../i18n/locale.js';
|
|
29
|
+
export type { FimoLocaleResolution } from '../i18n/locale.js';
|
|
30
|
+
export { getDisplayRoutes } from '../shared/display-routes.js';
|
|
31
|
+
export type { DisplayRoute, ParamInfo } from '../shared/display-routes.js';
|
|
32
|
+
export type { FimoConfig, FimoRouteConfig, FimoSEO } from '../shared/fimo-config.types.js';
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/react/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,kCAAkC,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,kCAAkC,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAGhE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACnH,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAMhE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC1F,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGnE,OAAO,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,WAAW,EACX,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,WAAW,EACX,UAAU,EACV,YAAY,EACZ,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,GACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAGzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAGrE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC7E,YAAY,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAG9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC3E,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// fimo/react — the framework-agnostic React core of the Fimo runtime.
|
|
2
|
+
// No Vite virtual modules, no react-router, no bundler assumptions:
|
|
3
|
+
// per-framework adapters (fimo/react-router via fimo/ui, fimo/next, ...)
|
|
4
|
+
// build on this surface.
|
|
5
|
+
// Inline-editing components
|
|
6
|
+
export { Text } from '../primitives/components/Text.js';
|
|
7
|
+
export { Image } from '../primitives/components/Image.js';
|
|
8
|
+
export { StaticImage } from '../primitives/components/StaticImage.js';
|
|
9
|
+
export { Video } from '../primitives/components/Video.js';
|
|
10
|
+
export { Date } from '../primitives/components/Date.js';
|
|
11
|
+
export { Boolean } from '../primitives/components/Boolean.js';
|
|
12
|
+
export { RichText } from '../primitives/components/RichText.js';
|
|
13
|
+
// Labels (framework-neutral store + hook; adapters hydrate the store)
|
|
14
|
+
export { useLabels, useTranslations } from '../primitives/labels-hook.js';
|
|
15
|
+
export { applyLabelUpdate, getLabelSnapshot, hydrateLabels, subscribeLabels } from '../primitives/labels-store.js';
|
|
16
|
+
// Wrapped-site primitives (the --apply codemod imports these from fimo/react
|
|
17
|
+
// in Vite React SPAs) + the client-side providers that hydrate them. All are
|
|
18
|
+
// fallback-safe without a provider: FimoText renders its children, media
|
|
19
|
+
// elements render their original src.
|
|
20
|
+
export { FimoText } from '../wrapped/FimoText.js';
|
|
21
|
+
export { FimoRichTextBlock } from '../wrapped/FimoRichTextBlock.js';
|
|
22
|
+
export { FimoMediaImage } from '../wrapped/FimoMediaImage.js';
|
|
23
|
+
export { FimoMediaVideo } from '../wrapped/FimoMediaVideo.js';
|
|
24
|
+
export { FimoFileLink } from '../wrapped/FimoFileLink.js';
|
|
25
|
+
export { useWrappedMedia, useWrappedRichText } from '../wrapped/WrappedContentContext.js';
|
|
26
|
+
export { FimoSpaProviders } from './FimoSpaProviders.js';
|
|
27
|
+
// Source-tracking primitives & utilities
|
|
28
|
+
export { FimoString, FimoDate, FimoMedia, FimoBoolean, FimoRichText, FIMO_SOURCE, FIMO_PARTS, isFimoString, isFimoDate, hasFimoSource, getFimoSource, getFimoParts, } from '../primitives/lib/index.js';
|
|
29
|
+
export { fimo } from '../primitives/lib/template.js';
|
|
30
|
+
export { useFimoLiveValue } from '../primitives/lib/useFimoLiveValue.js';
|
|
31
|
+
// Preview/editor bridge providers (postMessage-based, framework-free)
|
|
32
|
+
export { DataSourcesProvider } from '../content/DataSourcesProvider.js';
|
|
33
|
+
export { ConsoleErrorProvider } from '../iframe/ConsoleErrorProvider.js';
|
|
34
|
+
export { ScreenshotProvider } from '../iframe/ScreenshotProvider.js';
|
|
35
|
+
// Locale
|
|
36
|
+
export { FimoLocaleProvider, useLocale } from '../i18n/FimoLocaleContext.js';
|
|
37
|
+
export { getFimoDefaultLocale, getFimoLocales, getFimoTextDirection, localizeFimoPath, resolveFimoLocale, toHtmlLang, } from '../i18n/locale.js';
|
|
38
|
+
// Config + routes
|
|
39
|
+
export { getDisplayRoutes } from '../shared/display-routes.js';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { FimoConfig } from '../shared/fimo-config.types.js';
|
|
3
|
+
import type { WrappedMediaEntry, WrappedRichTextEntry } from '../wrapped/WrappedContentContext.js';
|
|
4
|
+
import { type WrappedLabels } from '../wrapped/WrappedProviders.js';
|
|
5
|
+
export type FimoRemixLabels = WrappedLabels;
|
|
6
|
+
export interface FimoRemixProvidersProps {
|
|
7
|
+
config: FimoConfig;
|
|
8
|
+
labels?: FimoRemixLabels;
|
|
9
|
+
media?: Record<string, WrappedMediaEntry>;
|
|
10
|
+
richText?: Record<string, WrappedRichTextEntry>;
|
|
11
|
+
locale?: string;
|
|
12
|
+
children?: React.ReactNode;
|
|
13
|
+
}
|
|
14
|
+
/** Fimo providers for wrapped Remix apps — mount once in app/root.tsx. */
|
|
15
|
+
export declare function FimoRemixProviders(props: FimoRemixProvidersProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=FimoRemixProviders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FimoRemixProviders.d.ts","sourceRoot":"","sources":["../../../src/runtime/remix/FimoRemixProviders.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AACnG,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEtF,MAAM,MAAM,eAAe,GAAG,aAAa,CAAC;AAE5C,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,2CAQhE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useLocation, useNavigate } from '@remix-run/react';
|
|
4
|
+
import { useMemo } from 'react';
|
|
5
|
+
import { WrappedProviders } from '../wrapped/WrappedProviders.js';
|
|
6
|
+
/** Fimo providers for wrapped Remix apps — mount once in app/root.tsx. */
|
|
7
|
+
export function FimoRemixProviders(props) {
|
|
8
|
+
const location = useLocation();
|
|
9
|
+
const navigate = useNavigate();
|
|
10
|
+
const navigation = useMemo(() => ({ pathname: location.pathname, navigate: (to) => navigate(to) }), [location.pathname, navigate]);
|
|
11
|
+
return _jsx(WrappedProviders, { ...props, navigation: navigation });
|
|
12
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders the Fimo preview client script in development so the Fimo Studio
|
|
3
|
+
* preview can select/edit elements. Mount inside <head> in the root layout.
|
|
4
|
+
*
|
|
5
|
+
* The script URL comes from FIMO_PREVIEW_SCRIPT_URL (written by
|
|
6
|
+
* `fimo init` for wrapped projects, pointing at `<apiUrl>/preview.js`).
|
|
7
|
+
* Renders nothing in production builds.
|
|
8
|
+
*/
|
|
9
|
+
export declare function FimoRemixScripts(): import("react/jsx-runtime").JSX.Element | null;
|
|
10
|
+
//# sourceMappingURL=FimoRemixScripts.d.ts.map
|