@prosary/nuxt 0.0.0-stage → 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dist/THIRD-PARTY-LICENSES.md.gz +0 -0
- package/.dist/_chunks/libs/@types/hast.d.mts +945 -0
- package/.dist/config.d.mts +59 -0
- package/.dist/config.mjs +2 -0
- package/.dist/constant.d.mts +29 -0
- package/.dist/constant.mjs +8 -0
- package/.dist/module.d.mts +24 -0
- package/.dist/module.mjs +223 -0
- package/.dist/runtime/client.d.mts +23 -0
- package/.dist/runtime/client.mjs +74 -0
- package/.dist/runtime/composable.d.mts +40 -0
- package/.dist/runtime/composable.mjs +27 -0
- package/.dist/runtime/document.d.mts +21 -0
- package/.dist/runtime/document.mjs +15 -0
- package/.dist/runtime/negotiate.d.mts +12 -0
- package/.dist/runtime/negotiate.mjs +21 -0
- package/.dist/runtime/plugin.d.mts +22 -0
- package/.dist/runtime/plugin.mjs +29 -0
- package/.dist/runtime/server/content.d.mts +11 -0
- package/.dist/runtime/server/content.mjs +8 -0
- package/.dist/runtime/side.d.mts +5 -0
- package/.dist/runtime/side.mjs +2 -0
- package/.dist/runtime/store.d.mts +15 -0
- package/.dist/runtime/store.mjs +14 -0
- package/.dist/runtime/types.d.mts +80 -0
- package/.dist/runtime/types.mjs +1 -0
- package/README.md +27 -2
- package/package.json +58 -4
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AppProsarySelection } from "./types.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* The per-request state and cookies the plugin and composables share. The
|
|
4
|
+
* state is the visitor's selection only — the locale and how values are
|
|
5
|
+
* formatted — so it is all the server render hands the browser; the messages
|
|
6
|
+
* are loaded on each side and never serialized into the page.
|
|
7
|
+
*/
|
|
8
|
+
export declare const accessProsary: () => {
|
|
9
|
+
selection: import("vue").Ref<AppProsarySelection, AppProsarySelection>;
|
|
10
|
+
cookies: {
|
|
11
|
+
locale: import("vue").Ref<string | null, string | null>;
|
|
12
|
+
timeZone: import("vue").Ref<string | null, string | null>;
|
|
13
|
+
convention: import("vue").Ref<string | null, string | null>;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CONVENTION_COOKIE, LOCALE_COOKIE, TIME_ZONE_COOKIE } from "../constant.mjs";
|
|
2
|
+
import { useCookie, useState } from "#imports";
|
|
3
|
+
import { contract } from "#build/prosary/index.mjs";
|
|
4
|
+
const accessProsary = () => {
|
|
5
|
+
return {
|
|
6
|
+
selection: useState("prosary:selection", () => ({ locale: contract.locale })),
|
|
7
|
+
cookies: {
|
|
8
|
+
locale: useCookie(LOCALE_COOKIE),
|
|
9
|
+
timeZone: useCookie(TIME_ZONE_COOKIE),
|
|
10
|
+
convention: useCookie(CONVENTION_COOKIE)
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export { accessProsary };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Contract, Document } from "#build/prosary/index.mjs";
|
|
2
|
+
import { Bundle, Config, Key, Locale, Message, Prosary, Resolver } from "prosary";
|
|
3
|
+
/**
|
|
4
|
+
* The active contract: the `Contract` the build-time `index` module declares
|
|
5
|
+
* over its locales, messages and formats.
|
|
6
|
+
*/
|
|
7
|
+
export type AppProsaryContract = Contract;
|
|
8
|
+
/**
|
|
9
|
+
* A locale the app is built for.
|
|
10
|
+
*/
|
|
11
|
+
export type AppProsaryLocale = Locale<AppProsaryContract>;
|
|
12
|
+
/**
|
|
13
|
+
* The key of a message of the app.
|
|
14
|
+
*/
|
|
15
|
+
export type AppProsaryKey = Key<AppProsaryContract>;
|
|
16
|
+
/**
|
|
17
|
+
* A message of the app — its key, with the values it takes when it takes
|
|
18
|
+
* any — as data a component can be handed and resolve: `$t(message)`.
|
|
19
|
+
*/
|
|
20
|
+
export type AppProsaryMessage = Message<AppProsaryContract>;
|
|
21
|
+
/**
|
|
22
|
+
* A content document the app is built with, by its path.
|
|
23
|
+
*/
|
|
24
|
+
export type AppProsaryDocument = Document;
|
|
25
|
+
/**
|
|
26
|
+
* One locale's compiled messages.
|
|
27
|
+
*/
|
|
28
|
+
export type AppProsaryBundle = Bundle<AppProsaryContract>;
|
|
29
|
+
/**
|
|
30
|
+
* The caller-owned state container the service operates on.
|
|
31
|
+
*/
|
|
32
|
+
export type AppProsaryConfig = Config<AppProsaryContract>;
|
|
33
|
+
/**
|
|
34
|
+
* The runtime translation service bound to the app's contract.
|
|
35
|
+
*/
|
|
36
|
+
export type AppProsary = Prosary<AppProsaryContract>;
|
|
37
|
+
/**
|
|
38
|
+
* The app's messages as functions: what `$t` is.
|
|
39
|
+
*/
|
|
40
|
+
export type AppProsaryResolver = Resolver<AppProsaryContract>;
|
|
41
|
+
/**
|
|
42
|
+
* What a visitor has chosen, and what travels from the server render to the
|
|
43
|
+
* browser: the locale, and how values are formatted. The messages do not —
|
|
44
|
+
* each side loads the locale's bundle itself.
|
|
45
|
+
*/
|
|
46
|
+
export interface AppProsarySelection {
|
|
47
|
+
locale: AppProsaryLocale;
|
|
48
|
+
timeZone?: string | undefined;
|
|
49
|
+
convention?: string | undefined;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Switches the app to a locale: loads its bundle, then applies both in one
|
|
53
|
+
* step. Of calls that overlap, the last one made wins.
|
|
54
|
+
*/
|
|
55
|
+
export type SetLocale = (locale: AppProsaryLocale) => Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* The runtime hooks the service emits, keyed by event name. Shared between the
|
|
58
|
+
* `#app` augmentation and {@link ProsaryNuxtApp} so the two never drift.
|
|
59
|
+
*/
|
|
60
|
+
export interface ProsaryHooks {
|
|
61
|
+
"prosary:ready": (service: AppProsary) => void;
|
|
62
|
+
"prosary:locale": (locale: AppProsaryLocale) => void;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The minimal `nuxtApp` surface the instrumentation needs. Typing against this
|
|
66
|
+
* instead of `NuxtApp` keeps `makeProsary` off the `NuxtApp.$prosary` →
|
|
67
|
+
* `AppProsary` → `makeProsary` cycle that otherwise makes the augmentation
|
|
68
|
+
* recursive.
|
|
69
|
+
*/
|
|
70
|
+
export interface ProsaryNuxtApp {
|
|
71
|
+
callHook<H extends keyof ProsaryHooks>(name: H, ...args: Parameters<ProsaryHooks[H]>): unknown;
|
|
72
|
+
}
|
|
73
|
+
declare module "#app" {
|
|
74
|
+
interface NuxtApp {
|
|
75
|
+
$prosary: AppProsary;
|
|
76
|
+
$t: AppProsaryResolver;
|
|
77
|
+
$setLocale: SetLocale;
|
|
78
|
+
}
|
|
79
|
+
interface RuntimeNuxtHooks extends ProsaryHooks {}
|
|
80
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/README.md
CHANGED
|
@@ -1,3 +1,28 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @prosary/nuxt
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Nuxt module for prosary — builds the app's messages, loads one locale per visitor, and provides `$t`.
|
|
4
|
+
|
|
5
|
+
## Rendering content
|
|
6
|
+
|
|
7
|
+
`useDocument(path)` loads a content document as the HTML tree the kit built,
|
|
8
|
+
in the visitor's locale. `<Prose :tree>` renders it through
|
|
9
|
+
[`@prosary/vue`](../vue), with the app's overrides.
|
|
10
|
+
|
|
11
|
+
The overrides are the `.vue` files at the top level of `app/components/prose`
|
|
12
|
+
(or the directory `components` names, relative to `app/`). Each renders the tag or directive its
|
|
13
|
+
file name spells in kebab case: `H2.vue` renders every `h2`, `Callout.vue`
|
|
14
|
+
every `callout` directive. A component in place of a tag receives the
|
|
15
|
+
element's attributes as props and its children in the default slot; one in
|
|
16
|
+
place of a directive receives the directive's attributes by the names they
|
|
17
|
+
were written with. An override that names neither an element nor a directive
|
|
18
|
+
the content builds fails `nuxt typecheck`.
|
|
19
|
+
|
|
20
|
+
```vue
|
|
21
|
+
<script setup lang="ts">
|
|
22
|
+
const { data: guide } = await useDocument("guide.md");
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<template>
|
|
26
|
+
<Prose v-if="guide" :tree="guide" />
|
|
27
|
+
</template>
|
|
28
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,60 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prosary/nuxt",
|
|
3
|
-
"version": "0.0.0
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Nuxt module for prosary \u2014 builds the app's messages, loads one locale per visitor, and provides `$t`",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/zoobzio/prosary.git",
|
|
9
|
+
"directory": "integrations/nuxt"
|
|
10
|
+
},
|
|
11
|
+
"type": "module",
|
|
12
|
+
"main": "./.dist/module.mjs",
|
|
13
|
+
"types": "./.dist/module.d.mts",
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./.dist/module.d.mts",
|
|
17
|
+
"import": "./.dist/module.mjs"
|
|
18
|
+
},
|
|
19
|
+
"./config": {
|
|
20
|
+
"types": "./.dist/config.d.mts",
|
|
21
|
+
"import": "./.dist/config.mjs"
|
|
22
|
+
},
|
|
23
|
+
"./constant": {
|
|
24
|
+
"types": "./.dist/constant.d.mts",
|
|
25
|
+
"import": "./.dist/constant.mjs"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
".dist"
|
|
30
|
+
],
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "obuild",
|
|
33
|
+
"stub": "obuild --stub",
|
|
34
|
+
"lint": "oxlint",
|
|
35
|
+
"typecheck": "tsc --noEmit",
|
|
36
|
+
"test": "vitest run"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@nuxt/kit": "catalog:",
|
|
40
|
+
"@prosary/vue": "workspace:*",
|
|
41
|
+
"@types/hast": "catalog:",
|
|
42
|
+
"prosary": "workspace:*",
|
|
43
|
+
"vue": "catalog:"
|
|
44
|
+
},
|
|
45
|
+
"peerDependencies": {
|
|
46
|
+
"@prosary/kit": "workspace:*"
|
|
47
|
+
},
|
|
48
|
+
"peerDependenciesMeta": {
|
|
49
|
+
"@prosary/kit": {
|
|
50
|
+
"optional": true
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@prosary/kit": "workspace:*",
|
|
55
|
+
"@nuxt/nitro-server": "catalog:",
|
|
56
|
+
"@nuxt/schema": "catalog:",
|
|
57
|
+
"@types/node": "catalog:",
|
|
58
|
+
"nuxt": "catalog:"
|
|
59
|
+
}
|
|
60
|
+
}
|