@obh/forge 0.2.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/LICENSE +21 -0
- package/README.md +146 -0
- package/dist/capabilities/analytics.d.ts +3 -0
- package/dist/capabilities/analytics.d.ts.map +1 -0
- package/dist/capabilities/analytics.js +91 -0
- package/dist/capabilities/analytics.js.map +1 -0
- package/dist/capabilities/api-keys.d.ts +3 -0
- package/dist/capabilities/api-keys.d.ts.map +1 -0
- package/dist/capabilities/api-keys.js +90 -0
- package/dist/capabilities/api-keys.js.map +1 -0
- package/dist/capabilities/audit.d.ts +3 -0
- package/dist/capabilities/audit.d.ts.map +1 -0
- package/dist/capabilities/audit.js +74 -0
- package/dist/capabilities/audit.js.map +1 -0
- package/dist/capabilities/entitlements.d.ts +3 -0
- package/dist/capabilities/entitlements.d.ts.map +1 -0
- package/dist/capabilities/entitlements.js +94 -0
- package/dist/capabilities/entitlements.js.map +1 -0
- package/dist/capabilities/events.d.ts +3 -0
- package/dist/capabilities/events.d.ts.map +1 -0
- package/dist/capabilities/events.js +107 -0
- package/dist/capabilities/events.js.map +1 -0
- package/dist/capabilities/files.d.ts +3 -0
- package/dist/capabilities/files.d.ts.map +1 -0
- package/dist/capabilities/files.js +100 -0
- package/dist/capabilities/files.js.map +1 -0
- package/dist/capabilities/helpers.d.ts +27 -0
- package/dist/capabilities/helpers.d.ts.map +1 -0
- package/dist/capabilities/helpers.js +63 -0
- package/dist/capabilities/helpers.js.map +1 -0
- package/dist/capabilities/import-export.d.ts +3 -0
- package/dist/capabilities/import-export.d.ts.map +1 -0
- package/dist/capabilities/import-export.js +267 -0
- package/dist/capabilities/import-export.js.map +1 -0
- package/dist/capabilities/index.d.ts +16 -0
- package/dist/capabilities/index.d.ts.map +1 -0
- package/dist/capabilities/index.js +71 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/jobs.d.ts +3 -0
- package/dist/capabilities/jobs.d.ts.map +1 -0
- package/dist/capabilities/jobs.js +117 -0
- package/dist/capabilities/jobs.js.map +1 -0
- package/dist/capabilities/notifications.d.ts +3 -0
- package/dist/capabilities/notifications.d.ts.map +1 -0
- package/dist/capabilities/notifications.js +113 -0
- package/dist/capabilities/notifications.js.map +1 -0
- package/dist/capabilities/search.d.ts +3 -0
- package/dist/capabilities/search.d.ts.map +1 -0
- package/dist/capabilities/search.js +121 -0
- package/dist/capabilities/search.js.map +1 -0
- package/dist/capabilities/settings.d.ts +3 -0
- package/dist/capabilities/settings.d.ts.map +1 -0
- package/dist/capabilities/settings.js +75 -0
- package/dist/capabilities/settings.js.map +1 -0
- package/dist/capabilities/types.d.ts +16 -0
- package/dist/capabilities/types.d.ts.map +1 -0
- package/dist/capabilities/types.js +3 -0
- package/dist/capabilities/types.js.map +1 -0
- package/dist/capabilities/webhooks.d.ts +3 -0
- package/dist/capabilities/webhooks.d.ts.map +1 -0
- package/dist/capabilities/webhooks.js +117 -0
- package/dist/capabilities/webhooks.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +60 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add.d.ts +3 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +88 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +94 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/generate.d.ts +3 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +41 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/inspect.d.ts +3 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +64 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/new.d.ts +18 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +149 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/shared.d.ts +14 -0
- package/dist/commands/shared.d.ts.map +1 -0
- package/dist/commands/shared.js +36 -0
- package/dist/commands/shared.js.map +1 -0
- package/dist/commands/skill.d.ts +3 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +59 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/stack.d.ts +13 -0
- package/dist/commands/stack.d.ts.map +1 -0
- package/dist/commands/stack.js +192 -0
- package/dist/commands/stack.js.map +1 -0
- package/dist/generators/api.d.ts +16 -0
- package/dist/generators/api.d.ts.map +1 -0
- package/dist/generators/api.js +375 -0
- package/dist/generators/api.js.map +1 -0
- package/dist/generators/lwd.d.ts +12 -0
- package/dist/generators/lwd.d.ts.map +1 -0
- package/dist/generators/lwd.js +143 -0
- package/dist/generators/lwd.js.map +1 -0
- package/dist/generators/mobile.d.ts +16 -0
- package/dist/generators/mobile.d.ts.map +1 -0
- package/dist/generators/mobile.js +180 -0
- package/dist/generators/mobile.js.map +1 -0
- package/dist/generators/platform-package.d.ts +18 -0
- package/dist/generators/platform-package.d.ts.map +1 -0
- package/dist/generators/platform-package.js +568 -0
- package/dist/generators/platform-package.js.map +1 -0
- package/dist/generators/root.d.ts +15 -0
- package/dist/generators/root.d.ts.map +1 -0
- package/dist/generators/root.js +249 -0
- package/dist/generators/root.js.map +1 -0
- package/dist/generators/sdk.d.ts +14 -0
- package/dist/generators/sdk.d.ts.map +1 -0
- package/dist/generators/sdk.js +137 -0
- package/dist/generators/sdk.js.map +1 -0
- package/dist/generators/web.d.ts +15 -0
- package/dist/generators/web.d.ts.map +1 -0
- package/dist/generators/web.js +203 -0
- package/dist/generators/web.js.map +1 -0
- package/dist/generators/worker.d.ts +13 -0
- package/dist/generators/worker.d.ts.map +1 -0
- package/dist/generators/worker.js +148 -0
- package/dist/generators/worker.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/project/context.d.ts +24 -0
- package/dist/project/context.d.ts.map +1 -0
- package/dist/project/context.js +63 -0
- package/dist/project/context.js.map +1 -0
- package/dist/project/manifest.d.ts +26 -0
- package/dist/project/manifest.d.ts.map +1 -0
- package/dist/project/manifest.js +73 -0
- package/dist/project/manifest.js.map +1 -0
- package/dist/project/paths.d.ts +25 -0
- package/dist/project/paths.d.ts.map +1 -0
- package/dist/project/paths.js +51 -0
- package/dist/project/paths.js.map +1 -0
- package/dist/project/plan.d.ts +42 -0
- package/dist/project/plan.d.ts.map +1 -0
- package/dist/project/plan.js +251 -0
- package/dist/project/plan.js.map +1 -0
- package/dist/prompts/index.d.ts +24 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +111 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/recipes/index.d.ts +25 -0
- package/dist/recipes/index.d.ts.map +1 -0
- package/dist/recipes/index.js +77 -0
- package/dist/recipes/index.js.map +1 -0
- package/dist/stack/infer.d.ts +4 -0
- package/dist/stack/infer.d.ts.map +1 -0
- package/dist/stack/infer.js +165 -0
- package/dist/stack/infer.js.map +1 -0
- package/dist/stack/lwd.d.ts +24 -0
- package/dist/stack/lwd.d.ts.map +1 -0
- package/dist/stack/lwd.js +62 -0
- package/dist/stack/lwd.js.map +1 -0
- package/dist/stack/lwdtoml.d.ts +38 -0
- package/dist/stack/lwdtoml.d.ts.map +1 -0
- package/dist/stack/lwdtoml.js +57 -0
- package/dist/stack/lwdtoml.js.map +1 -0
- package/dist/stack/manifest.d.ts +15 -0
- package/dist/stack/manifest.d.ts.map +1 -0
- package/dist/stack/manifest.js +86 -0
- package/dist/stack/manifest.js.map +1 -0
- package/dist/stack/types.d.ts +48 -0
- package/dist/stack/types.d.ts.map +1 -0
- package/dist/stack/types.js +5 -0
- package/dist/stack/types.js.map +1 -0
- package/dist/stack/wire.d.ts +40 -0
- package/dist/stack/wire.d.ts.map +1 -0
- package/dist/stack/wire.js +192 -0
- package/dist/stack/wire.js.map +1 -0
- package/dist/types.d.ts +114 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/fs.d.ts +13 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +64 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/git.d.ts +17 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +49 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/logger.d.ts +16 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +21 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/shell.d.ts +21 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +40 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/package.json +40 -0
- package/skills/obh-add-events/SKILL.md +26 -0
- package/skills/obh-generate-audit-rules/SKILL.md +26 -0
- package/skills/obh-inspect-project/SKILL.md +26 -0
- package/skills/obh-lwd-manifest/SKILL.md +26 -0
- package/skills/obh-retrofit-files/SKILL.md +24 -0
- package/skills/obh-retrofit-jobs/SKILL.md +26 -0
- package/skills/obh-sdk-extraction/SKILL.md +24 -0
- package/skills/obh-settings-migration/SKILL.md +24 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addMobileApp = addMobileApp;
|
|
4
|
+
/**
|
|
5
|
+
* Generates an Expo (React Native) app that drives the API through the shared
|
|
6
|
+
* SDK. Ships to app stores via EAS, so it gets no lwd manifest or Dockerfile.
|
|
7
|
+
* No build/typecheck scripts, so the workspace CI (pnpm -r build/typecheck)
|
|
8
|
+
* skips it — Expo builds happen through EAS, not CI.
|
|
9
|
+
*/
|
|
10
|
+
function addMobileApp(plan, opts) {
|
|
11
|
+
const dir = `apps/${opts.name}`;
|
|
12
|
+
const notes = opts.example === "notes";
|
|
13
|
+
plan.create(`${dir}/package.json`, JSON.stringify({
|
|
14
|
+
name: `${opts.scope}/${opts.name}`,
|
|
15
|
+
version: "0.1.0",
|
|
16
|
+
private: true,
|
|
17
|
+
main: "index.ts",
|
|
18
|
+
scripts: {
|
|
19
|
+
start: "expo start",
|
|
20
|
+
android: "expo start --android",
|
|
21
|
+
ios: "expo start --ios",
|
|
22
|
+
test: 'echo "no mobile tests yet"',
|
|
23
|
+
},
|
|
24
|
+
dependencies: {
|
|
25
|
+
[`${opts.scope}/sdk`]: "workspace:*",
|
|
26
|
+
expo: "~51.0.0",
|
|
27
|
+
"expo-status-bar": "~1.12.1",
|
|
28
|
+
react: "18.2.0",
|
|
29
|
+
"react-native": "0.74.5",
|
|
30
|
+
},
|
|
31
|
+
devDependencies: {
|
|
32
|
+
"@babel/core": "^7.24.0",
|
|
33
|
+
"@types/react": "~18.2.79",
|
|
34
|
+
typescript: "~5.3.3",
|
|
35
|
+
},
|
|
36
|
+
}, null, 2) + "\n", "mobile app package.json (Expo)");
|
|
37
|
+
plan.create(`${dir}/app.json`, appJson(opts.name), "Expo app config");
|
|
38
|
+
plan.create(`${dir}/eas.json`, EAS, "EAS build profiles");
|
|
39
|
+
plan.create(`${dir}/babel.config.js`, BABEL, "babel config");
|
|
40
|
+
plan.create(`${dir}/tsconfig.json`, JSON.stringify({ extends: "expo/tsconfig.base", compilerOptions: { strict: true }, include: ["**/*.ts", "**/*.tsx"] }, null, 2) + "\n", "mobile tsconfig");
|
|
41
|
+
plan.create(`${dir}/.gitignore`, GITIGNORE, "mobile gitignore");
|
|
42
|
+
plan.create(`${dir}/index.ts`, INDEX, "Expo entrypoint (registerRootComponent)");
|
|
43
|
+
plan.create(`${dir}/src/api.ts`, apiTs(opts.scope, notes), "mobile API client instance");
|
|
44
|
+
plan.create(`${dir}/App.tsx`, notes ? APP_NOTES : APP_BASE, "mobile App");
|
|
45
|
+
plan.addEnvVar({ name: "EXPO_PUBLIC_API_URL", example: "http://localhost:8080", comment: "API base URL baked into the mobile build" });
|
|
46
|
+
plan.nextStep(`Mobile: cd apps/${opts.name} && npx expo start (needs Expo Go or a dev build).`);
|
|
47
|
+
}
|
|
48
|
+
function appJson(name) {
|
|
49
|
+
return (JSON.stringify({
|
|
50
|
+
expo: {
|
|
51
|
+
name,
|
|
52
|
+
slug: name,
|
|
53
|
+
version: "1.0.0",
|
|
54
|
+
orientation: "portrait",
|
|
55
|
+
userInterfaceStyle: "automatic",
|
|
56
|
+
newArchEnabled: true,
|
|
57
|
+
ios: { supportsTablet: true },
|
|
58
|
+
android: {},
|
|
59
|
+
},
|
|
60
|
+
}, null, 2) + "\n");
|
|
61
|
+
}
|
|
62
|
+
const INDEX = `import { registerRootComponent } from "expo"
|
|
63
|
+
import App from "./App"
|
|
64
|
+
|
|
65
|
+
// Robust monorepo entry (avoids expo/AppEntry.js resolution issues under pnpm).
|
|
66
|
+
registerRootComponent(App)
|
|
67
|
+
`;
|
|
68
|
+
const EAS = `{
|
|
69
|
+
"cli": { "version": ">= 5.0.0" },
|
|
70
|
+
"build": {
|
|
71
|
+
"development": { "developmentClient": true, "distribution": "internal" },
|
|
72
|
+
"preview": { "distribution": "internal" },
|
|
73
|
+
"production": {}
|
|
74
|
+
},
|
|
75
|
+
"submit": { "production": {} }
|
|
76
|
+
}
|
|
77
|
+
`;
|
|
78
|
+
const BABEL = `module.exports = function (api) {
|
|
79
|
+
api.cache(true)
|
|
80
|
+
return { presets: ["babel-preset-expo"] }
|
|
81
|
+
}
|
|
82
|
+
`;
|
|
83
|
+
const GITIGNORE = `.expo/
|
|
84
|
+
dist/
|
|
85
|
+
web-build/
|
|
86
|
+
*.orig.*
|
|
87
|
+
`;
|
|
88
|
+
function apiTs(scope, notes) {
|
|
89
|
+
const typeReexport = notes
|
|
90
|
+
? `export type { HealthStatus, Note, CreateNoteInput, UpdateNoteInput } from "${scope}/sdk"`
|
|
91
|
+
: `export type { HealthStatus } from "${scope}/sdk"`;
|
|
92
|
+
return `import { createClient } from "${scope}/sdk"
|
|
93
|
+
${typeReexport}
|
|
94
|
+
|
|
95
|
+
export const api = createClient({
|
|
96
|
+
baseUrl: process.env.EXPO_PUBLIC_API_URL ?? "http://localhost:8080",
|
|
97
|
+
})
|
|
98
|
+
`;
|
|
99
|
+
}
|
|
100
|
+
const APP_BASE = `import { StatusBar } from "expo-status-bar"
|
|
101
|
+
import { useEffect, useState } from "react"
|
|
102
|
+
import { StyleSheet, Text, View } from "react-native"
|
|
103
|
+
import { api, type HealthStatus } from "./src/api"
|
|
104
|
+
|
|
105
|
+
export default function App(): JSX.Element {
|
|
106
|
+
const [health, setHealth] = useState<HealthStatus | null>(null)
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
api.health().then(setHealth).catch(() => setHealth({ status: "degraded" }))
|
|
109
|
+
}, [])
|
|
110
|
+
return (
|
|
111
|
+
<View style={styles.container}>
|
|
112
|
+
<Text style={styles.h1}>App</Text>
|
|
113
|
+
<Text>API health: {health?.status ?? "…"}</Text>
|
|
114
|
+
<StatusBar style="auto" />
|
|
115
|
+
</View>
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const styles = StyleSheet.create({
|
|
120
|
+
container: { flex: 1, padding: 24, paddingTop: 64, gap: 8 },
|
|
121
|
+
h1: { fontSize: 24, fontWeight: "600" },
|
|
122
|
+
})
|
|
123
|
+
`;
|
|
124
|
+
const APP_NOTES = `import { StatusBar } from "expo-status-bar"
|
|
125
|
+
import { useEffect, useState } from "react"
|
|
126
|
+
import { FlatList, StyleSheet, Text, TextInput, TouchableOpacity, View } from "react-native"
|
|
127
|
+
import { api, type Note } from "./src/api"
|
|
128
|
+
|
|
129
|
+
export default function App(): JSX.Element {
|
|
130
|
+
const [notes, setNotes] = useState<Note[]>([])
|
|
131
|
+
const [title, setTitle] = useState("")
|
|
132
|
+
|
|
133
|
+
const reload = () => api.notes.list().then(setNotes).catch(() => {})
|
|
134
|
+
useEffect(() => {
|
|
135
|
+
reload()
|
|
136
|
+
}, [])
|
|
137
|
+
|
|
138
|
+
const add = async () => {
|
|
139
|
+
if (!title.trim()) return
|
|
140
|
+
await api.notes.create({ title })
|
|
141
|
+
setTitle("")
|
|
142
|
+
reload()
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return (
|
|
146
|
+
<View style={styles.container}>
|
|
147
|
+
<Text style={styles.h1}>Notes</Text>
|
|
148
|
+
<View style={styles.row}>
|
|
149
|
+
<TextInput style={styles.input} value={title} onChangeText={setTitle} placeholder="New note" />
|
|
150
|
+
<TouchableOpacity style={styles.btn} onPress={add}>
|
|
151
|
+
<Text style={styles.btnText}>Add</Text>
|
|
152
|
+
</TouchableOpacity>
|
|
153
|
+
</View>
|
|
154
|
+
<FlatList
|
|
155
|
+
data={notes}
|
|
156
|
+
keyExtractor={(n) => n.id}
|
|
157
|
+
renderItem={({ item }) => (
|
|
158
|
+
<View style={styles.note}>
|
|
159
|
+
<Text style={styles.noteTitle}>{item.title}</Text>
|
|
160
|
+
{item.body ? <Text>{item.body}</Text> : null}
|
|
161
|
+
</View>
|
|
162
|
+
)}
|
|
163
|
+
/>
|
|
164
|
+
<StatusBar style="auto" />
|
|
165
|
+
</View>
|
|
166
|
+
)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const styles = StyleSheet.create({
|
|
170
|
+
container: { flex: 1, padding: 24, paddingTop: 64, gap: 12 },
|
|
171
|
+
h1: { fontSize: 24, fontWeight: "600" },
|
|
172
|
+
row: { flexDirection: "row", gap: 8 },
|
|
173
|
+
input: { flex: 1, borderWidth: 1, borderColor: "#ccc", borderRadius: 8, padding: 10 },
|
|
174
|
+
btn: { backgroundColor: "#111", borderRadius: 8, paddingHorizontal: 16, justifyContent: "center" },
|
|
175
|
+
btnText: { color: "#fff", fontWeight: "600" },
|
|
176
|
+
note: { borderWidth: 1, borderColor: "#eee", borderRadius: 8, padding: 12, marginVertical: 4 },
|
|
177
|
+
noteTitle: { fontWeight: "600", marginBottom: 2 },
|
|
178
|
+
})
|
|
179
|
+
`;
|
|
180
|
+
//# sourceMappingURL=mobile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobile.js","sourceRoot":"","sources":["../../src/generators/mobile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Plan } from "../project/plan";
|
|
2
|
+
export interface PlatformPackageOptions {
|
|
3
|
+
/** Primitive name, e.g. "ratelimit" → package @obh/ratelimit. */
|
|
4
|
+
name: string;
|
|
5
|
+
/** npm scope (default @obh). */
|
|
6
|
+
scope: string;
|
|
7
|
+
/** Also generate a worker/admin daemon app. */
|
|
8
|
+
daemon: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Generates a complete OBH platform-primitive repo (the qtool template): a pnpm
|
|
12
|
+
* monorepo publishing @obh/<name>, CommonJS + strict, Postgres-native with the
|
|
13
|
+
* standard pgAdapter / logger / ids / migrations kernel, a real record-store
|
|
14
|
+
* client over a platform.<name> table, tests, and CI. Optionally an admin/worker
|
|
15
|
+
* daemon. This is the single source that keeps new primitives consistent.
|
|
16
|
+
*/
|
|
17
|
+
export declare function addPlatformPackageProject(plan: Plan, opts: PlatformPackageOptions): void;
|
|
18
|
+
//# sourceMappingURL=platform-package.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-package.d.ts","sourceRoot":"","sources":["../../src/generators/platform-package.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAA;IACZ,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,+CAA+C;IAC/C,MAAM,EAAE,OAAO,CAAA;CAChB;AAWD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,sBAAsB,GAAG,IAAI,CA6CxF"}
|