@timber-js/app 0.1.7 → 0.1.9
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/_chunks/use-query-states-Dd9PVu-L.js +102 -0
- package/dist/_chunks/use-query-states-Dd9PVu-L.js.map +1 -0
- package/dist/client/index.js +1 -83
- package/dist/client/index.js.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/server-bundle.d.ts.map +1 -1
- package/dist/search-params/create.d.ts +0 -18
- package/dist/search-params/create.d.ts.map +1 -1
- package/dist/search-params/index.js +13 -7
- package/dist/search-params/index.js.map +1 -1
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/client/browser-entry.ts +0 -10
- package/src/plugins/server-bundle.ts +15 -6
- package/src/search-params/create.ts +11 -39
- package/src/server/ssr-entry.ts +0 -11
- package/dist/_chunks/registry-BfPM41ri.js +0 -20
- package/dist/_chunks/registry-BfPM41ri.js.map +0 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { useQueryStates } from "nuqs";
|
|
2
|
+
//#region src/search-params/registry.ts
|
|
3
|
+
var registry = /* @__PURE__ */ new Map();
|
|
4
|
+
/**
|
|
5
|
+
* Register a route's search params definition.
|
|
6
|
+
* Called by the generated route manifest loader when a route's modules load.
|
|
7
|
+
*/
|
|
8
|
+
function registerSearchParams(route, definition) {
|
|
9
|
+
registry.set(route, definition);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Look up a route's search params definition.
|
|
13
|
+
* Returns undefined if the route hasn't been loaded yet.
|
|
14
|
+
*/
|
|
15
|
+
function getSearchParams(route) {
|
|
16
|
+
return registry.get(route);
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/client/use-query-states.ts
|
|
20
|
+
/**
|
|
21
|
+
* useQueryStates — client-side hook for URL-synced search params.
|
|
22
|
+
*
|
|
23
|
+
* Delegates to nuqs for URL synchronization, batching, React 19 transitions,
|
|
24
|
+
* and throttled URL writes. Bridges timber's SearchParamCodec protocol to
|
|
25
|
+
* nuqs-compatible parsers.
|
|
26
|
+
*
|
|
27
|
+
* Design doc: design/23-search-params.md §"Codec Bridge"
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Bridge a timber SearchParamCodec to a nuqs-compatible SingleParser.
|
|
31
|
+
*
|
|
32
|
+
* nuqs parsers: { parse(string) → T|null, serialize?(T) → string, eq?, defaultValue? }
|
|
33
|
+
* timber codecs: { parse(string|string[]|undefined) → T, serialize(T) → string|null }
|
|
34
|
+
*/
|
|
35
|
+
function bridgeCodec(codec) {
|
|
36
|
+
return {
|
|
37
|
+
parse: (v) => codec.parse(v),
|
|
38
|
+
serialize: (v) => codec.serialize(v) ?? "",
|
|
39
|
+
defaultValue: codec.parse(void 0),
|
|
40
|
+
eq: (a, b) => codec.serialize(a) === codec.serialize(b)
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Bridge an entire codec map to nuqs-compatible parsers.
|
|
45
|
+
*/
|
|
46
|
+
function bridgeCodecs(codecs) {
|
|
47
|
+
const result = {};
|
|
48
|
+
for (const key of Object.keys(codecs)) result[key] = bridgeCodec(codecs[key]);
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Read and write typed search params from/to the URL.
|
|
53
|
+
*
|
|
54
|
+
* Delegates to nuqs internally. The timber nuqs adapter (auto-injected in
|
|
55
|
+
* browser-entry.ts) handles RSC navigation on non-shallow updates.
|
|
56
|
+
*
|
|
57
|
+
* Usage:
|
|
58
|
+
* ```ts
|
|
59
|
+
* // Via a SearchParamsDefinition
|
|
60
|
+
* const [params, setParams] = definition.useQueryStates()
|
|
61
|
+
*
|
|
62
|
+
* // Standalone with inline codecs
|
|
63
|
+
* const [params, setParams] = useQueryStates({
|
|
64
|
+
* page: fromSchema(z.coerce.number().int().min(1).default(1)),
|
|
65
|
+
* })
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
function useQueryStates$1(codecsOrRoute, _options, urlKeys) {
|
|
69
|
+
let codecs;
|
|
70
|
+
let resolvedUrlKeys = urlKeys;
|
|
71
|
+
if (typeof codecsOrRoute === "string") {
|
|
72
|
+
const definition = getSearchParams(codecsOrRoute);
|
|
73
|
+
if (!definition) throw new Error(`useQueryStates('${codecsOrRoute}'): no search params registered for this route. Either the route has no search-params.ts file, or it hasn't been loaded yet. For cross-route usage, import the definition explicitly.`);
|
|
74
|
+
codecs = definition.codecs;
|
|
75
|
+
resolvedUrlKeys = definition.urlKeys;
|
|
76
|
+
} else codecs = codecsOrRoute;
|
|
77
|
+
const bridged = bridgeCodecs(codecs);
|
|
78
|
+
const nuqsOptions = {};
|
|
79
|
+
if (resolvedUrlKeys && Object.keys(resolvedUrlKeys).length > 0) nuqsOptions.urlKeys = resolvedUrlKeys;
|
|
80
|
+
const [values, setValues] = useQueryStates(bridged, nuqsOptions);
|
|
81
|
+
const setParams = (partial, setOptions) => {
|
|
82
|
+
const nuqsSetOptions = {};
|
|
83
|
+
if (setOptions?.shallow !== void 0) nuqsSetOptions.shallow = setOptions.shallow;
|
|
84
|
+
if (setOptions?.scroll !== void 0) nuqsSetOptions.scroll = setOptions.scroll;
|
|
85
|
+
if (setOptions?.history !== void 0) nuqsSetOptions.history = setOptions.history;
|
|
86
|
+
setValues(partial, nuqsSetOptions);
|
|
87
|
+
};
|
|
88
|
+
return [values, setParams];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Create a useQueryStates binding for a SearchParamsDefinition.
|
|
92
|
+
* This is used internally by SearchParamsDefinition.useQueryStates().
|
|
93
|
+
*/
|
|
94
|
+
function bindUseQueryStates(definition) {
|
|
95
|
+
return (options) => {
|
|
96
|
+
return useQueryStates$1(definition.codecs, options, definition.urlKeys);
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//#endregion
|
|
100
|
+
export { registerSearchParams as i, useQueryStates$1 as n, getSearchParams as r, bindUseQueryStates as t };
|
|
101
|
+
|
|
102
|
+
//# sourceMappingURL=use-query-states-Dd9PVu-L.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-query-states-Dd9PVu-L.js","names":[],"sources":["../../src/search-params/registry.ts","../../src/client/use-query-states.ts"],"sourcesContent":["/**\n * Runtime registry for route-scoped search params definitions.\n *\n * When a route's modules load, the framework registers its search-params\n * definition here. useQueryStates('/route') resolves codecs from this map.\n *\n * Design doc: design/23-search-params.md §\"Runtime: Registration at Route Load\"\n */\n\nimport type { SearchParamsDefinition } from './create.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst registry = new Map<string, SearchParamsDefinition<any>>();\n\n/**\n * Register a route's search params definition.\n * Called by the generated route manifest loader when a route's modules load.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function registerSearchParams(route: string, definition: SearchParamsDefinition<any>): void {\n registry.set(route, definition);\n}\n\n/**\n * Look up a route's search params definition.\n * Returns undefined if the route hasn't been loaded yet.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getSearchParams(route: string): SearchParamsDefinition<any> | undefined {\n return registry.get(route);\n}\n","/**\n * useQueryStates — client-side hook for URL-synced search params.\n *\n * Delegates to nuqs for URL synchronization, batching, React 19 transitions,\n * and throttled URL writes. Bridges timber's SearchParamCodec protocol to\n * nuqs-compatible parsers.\n *\n * Design doc: design/23-search-params.md §\"Codec Bridge\"\n */\n\n'use client';\n\nimport { useQueryStates as nuqsUseQueryStates } from 'nuqs';\nimport type { SingleParser } from 'nuqs';\nimport type {\n SearchParamCodec,\n SearchParamsDefinition,\n SetParams,\n QueryStatesOptions,\n} from '#/search-params/create.js';\nimport { getSearchParams } from '#/search-params/registry.js';\n\n// ─── Codec Bridge ─────────────────────────────────────────────────\n\n/**\n * Bridge a timber SearchParamCodec to a nuqs-compatible SingleParser.\n *\n * nuqs parsers: { parse(string) → T|null, serialize?(T) → string, eq?, defaultValue? }\n * timber codecs: { parse(string|string[]|undefined) → T, serialize(T) → string|null }\n */\nfunction bridgeCodec<T>(codec: SearchParamCodec<T>): SingleParser<T> & { defaultValue: T } {\n return {\n parse: (v: string) => codec.parse(v),\n serialize: (v: T) => codec.serialize(v) ?? '',\n defaultValue: codec.parse(undefined) as T,\n eq: (a: T, b: T) => codec.serialize(a) === codec.serialize(b),\n };\n}\n\n/**\n * Bridge an entire codec map to nuqs-compatible parsers.\n */\nfunction bridgeCodecs<T extends Record<string, unknown>>(codecs: {\n [K in keyof T]: SearchParamCodec<T[K]>;\n}) {\n const result: Record<string, SingleParser<unknown> & { defaultValue: unknown }> = {};\n for (const key of Object.keys(codecs)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n result[key] = bridgeCodec(codecs[key as keyof T]) as any;\n }\n return result as { [K in keyof T]: SingleParser<T[K]> & { defaultValue: T[K] } };\n}\n\n// ─── Hook ─────────────────────────────────────────────────────────\n\n/**\n * Read and write typed search params from/to the URL.\n *\n * Delegates to nuqs internally. The timber nuqs adapter (auto-injected in\n * browser-entry.ts) handles RSC navigation on non-shallow updates.\n *\n * Usage:\n * ```ts\n * // Via a SearchParamsDefinition\n * const [params, setParams] = definition.useQueryStates()\n *\n * // Standalone with inline codecs\n * const [params, setParams] = useQueryStates({\n * page: fromSchema(z.coerce.number().int().min(1).default(1)),\n * })\n * ```\n */\nexport function useQueryStates<T extends Record<string, unknown>>(\n codecsOrRoute: { [K in keyof T]: SearchParamCodec<T[K]> } | string,\n _options?: QueryStatesOptions,\n urlKeys?: Readonly<Record<string, string>>\n): [T, SetParams<T>] {\n // Route-string overload: resolve codecs from the registry\n let codecs: { [K in keyof T]: SearchParamCodec<T[K]> };\n let resolvedUrlKeys = urlKeys;\n if (typeof codecsOrRoute === 'string') {\n const definition = getSearchParams(codecsOrRoute);\n if (!definition) {\n throw new Error(\n `useQueryStates('${codecsOrRoute}'): no search params registered for this route. ` +\n `Either the route has no search-params.ts file, or it hasn't been loaded yet. ` +\n `For cross-route usage, import the definition explicitly.`\n );\n }\n codecs = definition.codecs as { [K in keyof T]: SearchParamCodec<T[K]> };\n resolvedUrlKeys = definition.urlKeys;\n } else {\n codecs = codecsOrRoute;\n }\n\n const bridged = bridgeCodecs(codecs);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const nuqsOptions: any = {};\n if (resolvedUrlKeys && Object.keys(resolvedUrlKeys).length > 0) {\n nuqsOptions.urlKeys = resolvedUrlKeys;\n }\n\n const [values, setValues] = nuqsUseQueryStates(bridged, nuqsOptions);\n\n // Wrap the nuqs setter to match timber's SetParams<T> signature.\n // nuqs's setter accepts Partial<Nullable<Values>> | UpdaterFn | null.\n // timber's setter accepts Partial<T> with optional SetParamsOptions.\n const setParams: SetParams<T> = (partial, setOptions?) => {\n const nuqsSetOptions: Record<string, unknown> = {};\n if (setOptions?.shallow !== undefined) nuqsSetOptions.shallow = setOptions.shallow;\n if (setOptions?.scroll !== undefined) nuqsSetOptions.scroll = setOptions.scroll;\n if (setOptions?.history !== undefined) nuqsSetOptions.history = setOptions.history;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n void setValues(partial as any, nuqsSetOptions);\n };\n\n return [values as T, setParams];\n}\n\n// ─── Definition binding ───────────────────────────────────────────\n\n/**\n * Create a useQueryStates binding for a SearchParamsDefinition.\n * This is used internally by SearchParamsDefinition.useQueryStates().\n */\nexport function bindUseQueryStates<T extends Record<string, unknown>>(\n definition: SearchParamsDefinition<T>\n): (options?: QueryStatesOptions) => [T, SetParams<T>] {\n return (options?: QueryStatesOptions) => {\n return useQueryStates<T>(definition.codecs, options, definition.urlKeys);\n };\n}\n"],"mappings":";;AAYA,IAAM,2BAAW,IAAI,KAA0C;;;;;AAO/D,SAAgB,qBAAqB,OAAe,YAA+C;AACjG,UAAS,IAAI,OAAO,WAAW;;;;;;AAQjC,SAAgB,gBAAgB,OAAwD;AACtF,QAAO,SAAS,IAAI,MAAM;;;;;;;;;;;;;;;;;;;ACC5B,SAAS,YAAe,OAAmE;AACzF,QAAO;EACL,QAAQ,MAAc,MAAM,MAAM,EAAE;EACpC,YAAY,MAAS,MAAM,UAAU,EAAE,IAAI;EAC3C,cAAc,MAAM,MAAM,KAAA,EAAU;EACpC,KAAK,GAAM,MAAS,MAAM,UAAU,EAAE,KAAK,MAAM,UAAU,EAAE;EAC9D;;;;;AAMH,SAAS,aAAgD,QAEtD;CACD,MAAM,SAA4E,EAAE;AACpF,MAAK,MAAM,OAAO,OAAO,KAAK,OAAO,CAEnC,QAAO,OAAO,YAAY,OAAO,KAAgB;AAEnD,QAAO;;;;;;;;;;;;;;;;;;;AAsBT,SAAgB,iBACd,eACA,UACA,SACmB;CAEnB,IAAI;CACJ,IAAI,kBAAkB;AACtB,KAAI,OAAO,kBAAkB,UAAU;EACrC,MAAM,aAAa,gBAAgB,cAAc;AACjD,MAAI,CAAC,WACH,OAAM,IAAI,MACR,mBAAmB,cAAc,uLAGlC;AAEH,WAAS,WAAW;AACpB,oBAAkB,WAAW;OAE7B,UAAS;CAGX,MAAM,UAAU,aAAa,OAAO;CAGpC,MAAM,cAAmB,EAAE;AAC3B,KAAI,mBAAmB,OAAO,KAAK,gBAAgB,CAAC,SAAS,EAC3D,aAAY,UAAU;CAGxB,MAAM,CAAC,QAAQ,aAAa,eAAmB,SAAS,YAAY;CAKpE,MAAM,aAA2B,SAAS,eAAgB;EACxD,MAAM,iBAA0C,EAAE;AAClD,MAAI,YAAY,YAAY,KAAA,EAAW,gBAAe,UAAU,WAAW;AAC3E,MAAI,YAAY,WAAW,KAAA,EAAW,gBAAe,SAAS,WAAW;AACzE,MAAI,YAAY,YAAY,KAAA,EAAW,gBAAe,UAAU,WAAW;AAEtE,YAAU,SAAgB,eAAe;;AAGhD,QAAO,CAAC,QAAa,UAAU;;;;;;AASjC,SAAgB,mBACd,YACqD;AACrD,SAAQ,YAAiC;AACvC,SAAO,iBAAkB,WAAW,QAAQ,SAAS,WAAW,QAAQ"}
|
package/dist/client/index.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { TimberErrorBoundary } from "./error-boundary.js";
|
|
3
3
|
import { i as setSsrData, n as clearSsrData, r as getSsrData, t as useCookie } from "../_chunks/use-cookie-HcvNlW4L.js";
|
|
4
|
-
import { t as
|
|
4
|
+
import { n as useQueryStates, t as bindUseQueryStates } from "../_chunks/use-query-states-Dd9PVu-L.js";
|
|
5
5
|
import { createContext, createElement, useActionState as useActionState$1, useContext, useEffect, useMemo, useRef, useSyncExternalStore, useTransition } from "react";
|
|
6
6
|
import { jsxDEV } from "react/jsx-dev-runtime";
|
|
7
|
-
import { useQueryStates as useQueryStates$1 } from "nuqs";
|
|
8
7
|
//#region src/client/link-navigate-interceptor.tsx
|
|
9
8
|
var _jsxFileName$2 = "/Users/dsaewitz/y/timber-js-fresh/packages/timber-app/src/client/link-navigate-interceptor.tsx";
|
|
10
9
|
/** Symbol used to store the onNavigate callback on anchor elements. */
|
|
@@ -1133,87 +1132,6 @@ function useFormErrors(result) {
|
|
|
1133
1132
|
};
|
|
1134
1133
|
}
|
|
1135
1134
|
//#endregion
|
|
1136
|
-
//#region src/client/use-query-states.ts
|
|
1137
|
-
/**
|
|
1138
|
-
* useQueryStates — client-side hook for URL-synced search params.
|
|
1139
|
-
*
|
|
1140
|
-
* Delegates to nuqs for URL synchronization, batching, React 19 transitions,
|
|
1141
|
-
* and throttled URL writes. Bridges timber's SearchParamCodec protocol to
|
|
1142
|
-
* nuqs-compatible parsers.
|
|
1143
|
-
*
|
|
1144
|
-
* Design doc: design/23-search-params.md §"Codec Bridge"
|
|
1145
|
-
*/
|
|
1146
|
-
/**
|
|
1147
|
-
* Bridge a timber SearchParamCodec to a nuqs-compatible SingleParser.
|
|
1148
|
-
*
|
|
1149
|
-
* nuqs parsers: { parse(string) → T|null, serialize?(T) → string, eq?, defaultValue? }
|
|
1150
|
-
* timber codecs: { parse(string|string[]|undefined) → T, serialize(T) → string|null }
|
|
1151
|
-
*/
|
|
1152
|
-
function bridgeCodec(codec) {
|
|
1153
|
-
return {
|
|
1154
|
-
parse: (v) => codec.parse(v),
|
|
1155
|
-
serialize: (v) => codec.serialize(v) ?? "",
|
|
1156
|
-
defaultValue: codec.parse(void 0),
|
|
1157
|
-
eq: (a, b) => codec.serialize(a) === codec.serialize(b)
|
|
1158
|
-
};
|
|
1159
|
-
}
|
|
1160
|
-
/**
|
|
1161
|
-
* Bridge an entire codec map to nuqs-compatible parsers.
|
|
1162
|
-
*/
|
|
1163
|
-
function bridgeCodecs(codecs) {
|
|
1164
|
-
const result = {};
|
|
1165
|
-
for (const key of Object.keys(codecs)) result[key] = bridgeCodec(codecs[key]);
|
|
1166
|
-
return result;
|
|
1167
|
-
}
|
|
1168
|
-
/**
|
|
1169
|
-
* Read and write typed search params from/to the URL.
|
|
1170
|
-
*
|
|
1171
|
-
* Delegates to nuqs internally. The timber nuqs adapter (auto-injected in
|
|
1172
|
-
* browser-entry.ts) handles RSC navigation on non-shallow updates.
|
|
1173
|
-
*
|
|
1174
|
-
* Usage:
|
|
1175
|
-
* ```ts
|
|
1176
|
-
* // Via a SearchParamsDefinition
|
|
1177
|
-
* const [params, setParams] = definition.useQueryStates()
|
|
1178
|
-
*
|
|
1179
|
-
* // Standalone with inline codecs
|
|
1180
|
-
* const [params, setParams] = useQueryStates({
|
|
1181
|
-
* page: fromSchema(z.coerce.number().int().min(1).default(1)),
|
|
1182
|
-
* })
|
|
1183
|
-
* ```
|
|
1184
|
-
*/
|
|
1185
|
-
function useQueryStates(codecsOrRoute, _options, urlKeys) {
|
|
1186
|
-
let codecs;
|
|
1187
|
-
let resolvedUrlKeys = urlKeys;
|
|
1188
|
-
if (typeof codecsOrRoute === "string") {
|
|
1189
|
-
const definition = getSearchParams$1(codecsOrRoute);
|
|
1190
|
-
if (!definition) throw new Error(`useQueryStates('${codecsOrRoute}'): no search params registered for this route. Either the route has no search-params.ts file, or it hasn't been loaded yet. For cross-route usage, import the definition explicitly.`);
|
|
1191
|
-
codecs = definition.codecs;
|
|
1192
|
-
resolvedUrlKeys = definition.urlKeys;
|
|
1193
|
-
} else codecs = codecsOrRoute;
|
|
1194
|
-
const bridged = bridgeCodecs(codecs);
|
|
1195
|
-
const nuqsOptions = {};
|
|
1196
|
-
if (resolvedUrlKeys && Object.keys(resolvedUrlKeys).length > 0) nuqsOptions.urlKeys = resolvedUrlKeys;
|
|
1197
|
-
const [values, setValues] = useQueryStates$1(bridged, nuqsOptions);
|
|
1198
|
-
const setParams = (partial, setOptions) => {
|
|
1199
|
-
const nuqsSetOptions = {};
|
|
1200
|
-
if (setOptions?.shallow !== void 0) nuqsSetOptions.shallow = setOptions.shallow;
|
|
1201
|
-
if (setOptions?.scroll !== void 0) nuqsSetOptions.scroll = setOptions.scroll;
|
|
1202
|
-
if (setOptions?.history !== void 0) nuqsSetOptions.history = setOptions.history;
|
|
1203
|
-
setValues(partial, nuqsSetOptions);
|
|
1204
|
-
};
|
|
1205
|
-
return [values, setParams];
|
|
1206
|
-
}
|
|
1207
|
-
/**
|
|
1208
|
-
* Create a useQueryStates binding for a SearchParamsDefinition.
|
|
1209
|
-
* This is used internally by SearchParamsDefinition.useQueryStates().
|
|
1210
|
-
*/
|
|
1211
|
-
function bindUseQueryStates(definition) {
|
|
1212
|
-
return (options) => {
|
|
1213
|
-
return useQueryStates(definition.codecs, options, definition.urlKeys);
|
|
1214
|
-
};
|
|
1215
|
-
}
|
|
1216
|
-
//#endregion
|
|
1217
1135
|
export { HistoryStack, Link, LinkStatusContext, PrefetchCache, SegmentCache, SegmentProvider, TimberErrorBoundary, bindUseQueryStates, buildLinkProps, clearSsrData, createRouter, getRouter, getSsrData, interpolateParams, resolveHref, setCurrentParams, setSsrData, useActionState, useCookie, useFormAction, useFormErrors, useLinkStatus, useNavigationPending, useParams, usePathname, useQueryStates, useRouter, useSearchParams, useSegmentContext, useSelectedLayoutSegment, useSelectedLayoutSegments, validateLinkHref };
|
|
1218
1136
|
|
|
1219
1137
|
//# sourceMappingURL=index.js.map
|