@ttoss/google-maps 1.20.8 → 1.20.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.
@@ -0,0 +1,259 @@
1
+ /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
+
3
+ // tsup.inject.js
4
+ import * as React from "react";
5
+
6
+ // src/GoogleMapsProvider.tsx
7
+ import * as React2 from "react";
8
+ import { useScript } from "@ttoss/hooks";
9
+ import { jsx } from "react/jsx-runtime";
10
+ var GoogleMapsContext = React2.createContext({
11
+ status: "idle",
12
+ googleMaps: null
13
+ });
14
+ var GoogleMapsProvider = ({
15
+ children,
16
+ apiKey,
17
+ libraries,
18
+ language
19
+ }) => {
20
+ const src = (() => {
21
+ let srcTemp = `https://maps.googleapis.com/maps/api/js?key=${apiKey}`;
22
+ if (libraries) {
23
+ srcTemp = srcTemp + `&libraries=${libraries.join(",")}`;
24
+ }
25
+ if (language) {
26
+ srcTemp = srcTemp + `&language=${language}`;
27
+ }
28
+ return srcTemp;
29
+ })();
30
+ const { status } = useScript(src);
31
+ const googleMaps = React2.useMemo(() => {
32
+ if (status === "ready" && window.google.maps) {
33
+ return window.google.maps;
34
+ }
35
+ return null;
36
+ }, [status]);
37
+ const value = React2.useMemo(() => {
38
+ if (status === "ready" && googleMaps) {
39
+ return {
40
+ status,
41
+ googleMaps
42
+ };
43
+ }
44
+ return {
45
+ status,
46
+ googleMaps: null
47
+ };
48
+ }, [googleMaps, status]);
49
+ return /* @__PURE__ */ jsx(GoogleMapsContext.Provider, {
50
+ value,
51
+ children
52
+ });
53
+ };
54
+ var useGoogleMaps = () => React2.useContext(GoogleMapsContext);
55
+
56
+ // src/useGeocoder.ts
57
+ import * as React3 from "react";
58
+ var useGeocoder = () => {
59
+ const { googleMaps } = useGoogleMaps();
60
+ const [isGeocoderInitialized, setIsGeocoderInitialized] = React3.useState(false);
61
+ const geocoder = React3.useMemo(() => {
62
+ if (googleMaps) {
63
+ const googleMapsGeocoder = new googleMaps.Geocoder();
64
+ setIsGeocoderInitialized(true);
65
+ return googleMapsGeocoder;
66
+ }
67
+ return null;
68
+ }, [googleMaps]);
69
+ return { geocoder, isGeocoderInitialized };
70
+ };
71
+
72
+ // src/useMap.ts
73
+ import * as React4 from "react";
74
+ import { useCallbackRef } from "use-callback-ref";
75
+ var useMap = (options = {}) => {
76
+ const [, forceUpdate] = React4.useState(0);
77
+ const ref = useCallbackRef(
78
+ null,
79
+ () => forceUpdate((n) => n + 1)
80
+ );
81
+ const { googleMaps } = useGoogleMaps();
82
+ const map = React4.useMemo(() => {
83
+ if (googleMaps && ref.current) {
84
+ return new googleMaps.Map(ref.current, options);
85
+ }
86
+ return null;
87
+ }, [googleMaps, ref.current]);
88
+ const optionsStringify = JSON.stringify(options);
89
+ React4.useEffect(() => {
90
+ if (map) {
91
+ const parsedOptions = JSON.parse(optionsStringify);
92
+ map.setOptions(parsedOptions);
93
+ }
94
+ }, [optionsStringify, map]);
95
+ return {
96
+ map,
97
+ ref
98
+ };
99
+ };
100
+
101
+ // src/usePlacesAutocomplete/index.ts
102
+ import { useCallback, useEffect as useEffect2, useRef as useRef2, useState as useState3 } from "react";
103
+
104
+ // src/usePlacesAutocomplete/debounce.ts
105
+ var debounce = (fn, delay) => {
106
+ let timer;
107
+ function debounceFn(...args) {
108
+ if (timer !== null) {
109
+ clearTimeout(timer);
110
+ timer = null;
111
+ }
112
+ timer = setTimeout(() => fn.apply(this, args), delay);
113
+ }
114
+ return debounceFn;
115
+ };
116
+ var debounce_default = debounce;
117
+
118
+ // src/usePlacesAutocomplete/useLatest.ts
119
+ import { useRef } from "react";
120
+ var useLatest_default = (val) => {
121
+ const ref = useRef(val);
122
+ ref.current = val;
123
+ return ref;
124
+ };
125
+
126
+ // src/usePlacesAutocomplete/index.ts
127
+ var usePlacesAutocomplete = ({
128
+ requestOptions,
129
+ debounce: debounce2 = 200,
130
+ cache = 24 * 60 * 60,
131
+ cacheKey,
132
+ callbackName,
133
+ defaultValue = "",
134
+ initOnMount = true
135
+ } = {}) => {
136
+ const [ready, setReady] = useState3(false);
137
+ const [value, setVal] = useState3(defaultValue);
138
+ const [suggestions, setSuggestions] = useState3({
139
+ loading: false,
140
+ status: "",
141
+ data: []
142
+ });
143
+ const asRef = useRef2(null);
144
+ const requestOptionsRef = useLatest_default(requestOptions);
145
+ const { googleMaps } = useGoogleMaps();
146
+ const googleMapsRef = useLatest_default(googleMaps);
147
+ const upaCacheKey = cacheKey ? `upa-${cacheKey}` : "upa";
148
+ const init = useCallback(() => {
149
+ if (asRef.current)
150
+ return;
151
+ if (!googleMaps) {
152
+ return;
153
+ }
154
+ const { current: gMaps } = googleMapsRef;
155
+ const placesLib = (gMaps == null ? void 0 : gMaps.places) || googleMaps.places;
156
+ if (!placesLib) {
157
+ return;
158
+ }
159
+ asRef.current = new placesLib.AutocompleteService();
160
+ setReady(true);
161
+ }, [googleMaps]);
162
+ const clearSuggestions = useCallback(() => {
163
+ setSuggestions({ loading: false, status: "", data: [] });
164
+ }, []);
165
+ const clearCache = useCallback(() => {
166
+ try {
167
+ sessionStorage.removeItem(upaCacheKey);
168
+ } catch (error) {
169
+ }
170
+ }, []);
171
+ const fetchPredictions = useCallback(
172
+ debounce_default((val) => {
173
+ var _a;
174
+ if (!val) {
175
+ clearSuggestions();
176
+ return;
177
+ }
178
+ setSuggestions((prevState) => ({ ...prevState, loading: true }));
179
+ let cachedData = {};
180
+ try {
181
+ cachedData = JSON.parse(sessionStorage.getItem(upaCacheKey) || "{}");
182
+ } catch (error) {
183
+ }
184
+ if (cache) {
185
+ cachedData = Object.keys(cachedData).reduce(
186
+ (acc, key) => {
187
+ if (cachedData[key].maxAge - Date.now() >= 0)
188
+ acc[key] = cachedData[key];
189
+ return acc;
190
+ },
191
+ {}
192
+ );
193
+ if (cachedData[val]) {
194
+ setSuggestions({
195
+ loading: false,
196
+ status: "OK",
197
+ data: cachedData[val].data
198
+ });
199
+ return;
200
+ }
201
+ }
202
+ (_a = asRef == null ? void 0 : asRef.current) == null ? void 0 : _a.getPlacePredictions(
203
+ { ...requestOptionsRef.current, input: val },
204
+ (data, status) => {
205
+ setSuggestions({ loading: false, status, data: data || [] });
206
+ if (cache && status === "OK") {
207
+ cachedData[val] = {
208
+ data,
209
+ maxAge: Date.now() + cache * 1e3
210
+ };
211
+ try {
212
+ sessionStorage.setItem(upaCacheKey, JSON.stringify(cachedData));
213
+ } catch (error) {
214
+ }
215
+ }
216
+ }
217
+ );
218
+ }, debounce2),
219
+ [debounce2, clearSuggestions]
220
+ );
221
+ const setValue = useCallback(
222
+ (val, shouldFetchData = true) => {
223
+ setVal(val);
224
+ if (asRef.current && shouldFetchData)
225
+ fetchPredictions(val);
226
+ },
227
+ [fetchPredictions]
228
+ );
229
+ useEffect2(() => {
230
+ if (!initOnMount) {
231
+ return () => null;
232
+ }
233
+ if (!googleMapsRef.current && !googleMaps && callbackName) {
234
+ window[callbackName] = init;
235
+ } else {
236
+ init();
237
+ }
238
+ return () => {
239
+ if (window[callbackName])
240
+ delete window[callbackName];
241
+ };
242
+ }, [callbackName, init]);
243
+ return {
244
+ ready,
245
+ value,
246
+ suggestions,
247
+ setValue,
248
+ clearSuggestions,
249
+ clearCache,
250
+ init
251
+ };
252
+ };
253
+ export {
254
+ GoogleMapsProvider,
255
+ useGeocoder,
256
+ useGoogleMaps,
257
+ useMap,
258
+ usePlacesAutocomplete
259
+ };
@@ -0,0 +1,77 @@
1
+ import * as React from 'react';
2
+ import { ScriptStatus } from '@ttoss/hooks';
3
+
4
+ declare type Extends<T, U extends T> = U;
5
+ declare type GoogleMaps = typeof google.maps;
6
+ declare type LoadedMapsStatus = Extends<ScriptStatus, 'ready'>;
7
+ declare type NotLoadedMapStatus = Extends<ScriptStatus, 'idle' | 'error' | 'loading'>;
8
+ declare type Libraries = 'places' | 'visualization' | 'drawing' | 'geometry';
9
+ declare const GoogleMapsProvider: ({ children, apiKey, libraries, language, }: {
10
+ children: React.ReactNode;
11
+ apiKey: string;
12
+ libraries?: Libraries[] | undefined;
13
+ /**
14
+ * https://developers.google.com/maps/faq#languagesupport
15
+ */
16
+ language?: string | undefined;
17
+ }) => JSX.Element;
18
+ /**
19
+ *
20
+ * @returns param.googleMaps: GoogleMaps - returns the google maps object which
21
+ * provides access to the [Google Maps API](https://developers.google.com/maps/documentation/javascript/overview).
22
+ */
23
+ declare const useGoogleMaps: () => {
24
+ status: LoadedMapsStatus;
25
+ googleMaps: GoogleMaps;
26
+ } | {
27
+ status: NotLoadedMapStatus;
28
+ googleMaps: null;
29
+ };
30
+
31
+ declare const useGeocoder: () => {
32
+ geocoder: google.maps.Geocoder | null;
33
+ isGeocoderInitialized: boolean;
34
+ };
35
+
36
+ declare const useMap: (options?: google.maps.MapOptions) => {
37
+ /**
38
+ * asss
39
+ */
40
+ map: google.maps.Map | null;
41
+ /**
42
+ * hhhh
43
+ */
44
+ ref: React.MutableRefObject<HTMLDivElement | null>;
45
+ };
46
+
47
+ interface HookArgs {
48
+ requestOptions?: Omit<google.maps.places.AutocompletionRequest, 'input'>;
49
+ debounce?: number;
50
+ cache?: number | false;
51
+ cacheKey?: string;
52
+ callbackName?: string;
53
+ defaultValue?: string;
54
+ initOnMount?: boolean;
55
+ }
56
+ declare type Suggestion = google.maps.places.AutocompletePrediction;
57
+ declare type Status = `${google.maps.places.PlacesServiceStatus}` | '';
58
+ interface Suggestions {
59
+ readonly loading: boolean;
60
+ readonly status: Status;
61
+ data: Suggestion[];
62
+ }
63
+ interface SetValue {
64
+ (val: string, shouldFetchData?: boolean): void;
65
+ }
66
+ interface HookReturn {
67
+ ready: boolean;
68
+ value: string;
69
+ suggestions: Suggestions;
70
+ setValue: SetValue;
71
+ clearSuggestions: () => void;
72
+ clearCache: () => void;
73
+ init: () => void;
74
+ }
75
+ declare const usePlacesAutocomplete: ({ requestOptions, debounce, cache, cacheKey, callbackName, defaultValue, initOnMount, }?: HookArgs) => HookReturn;
76
+
77
+ export { GoogleMapsProvider, useGeocoder, useGoogleMaps, useMap, usePlacesAutocomplete };
package/dist/index.js ADDED
@@ -0,0 +1,295 @@
1
+ /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
+ "use strict";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
23
+ mod
24
+ ));
25
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
+
27
+ // src/index.ts
28
+ var src_exports = {};
29
+ __export(src_exports, {
30
+ GoogleMapsProvider: () => GoogleMapsProvider,
31
+ useGeocoder: () => useGeocoder,
32
+ useGoogleMaps: () => useGoogleMaps,
33
+ useMap: () => useMap,
34
+ usePlacesAutocomplete: () => usePlacesAutocomplete
35
+ });
36
+ module.exports = __toCommonJS(src_exports);
37
+
38
+ // tsup.inject.js
39
+ var React = __toESM(require("react"));
40
+
41
+ // src/GoogleMapsProvider.tsx
42
+ var React2 = __toESM(require("react"));
43
+ var import_hooks = require("@ttoss/hooks");
44
+ var import_jsx_runtime = require("react/jsx-runtime");
45
+ var GoogleMapsContext = React2.createContext({
46
+ status: "idle",
47
+ googleMaps: null
48
+ });
49
+ var GoogleMapsProvider = ({
50
+ children,
51
+ apiKey,
52
+ libraries,
53
+ language
54
+ }) => {
55
+ const src = (() => {
56
+ let srcTemp = `https://maps.googleapis.com/maps/api/js?key=${apiKey}`;
57
+ if (libraries) {
58
+ srcTemp = srcTemp + `&libraries=${libraries.join(",")}`;
59
+ }
60
+ if (language) {
61
+ srcTemp = srcTemp + `&language=${language}`;
62
+ }
63
+ return srcTemp;
64
+ })();
65
+ const { status } = (0, import_hooks.useScript)(src);
66
+ const googleMaps = React2.useMemo(() => {
67
+ if (status === "ready" && window.google.maps) {
68
+ return window.google.maps;
69
+ }
70
+ return null;
71
+ }, [status]);
72
+ const value = React2.useMemo(() => {
73
+ if (status === "ready" && googleMaps) {
74
+ return {
75
+ status,
76
+ googleMaps
77
+ };
78
+ }
79
+ return {
80
+ status,
81
+ googleMaps: null
82
+ };
83
+ }, [googleMaps, status]);
84
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(GoogleMapsContext.Provider, {
85
+ value,
86
+ children
87
+ });
88
+ };
89
+ var useGoogleMaps = () => React2.useContext(GoogleMapsContext);
90
+
91
+ // src/useGeocoder.ts
92
+ var React3 = __toESM(require("react"));
93
+ var useGeocoder = () => {
94
+ const { googleMaps } = useGoogleMaps();
95
+ const [isGeocoderInitialized, setIsGeocoderInitialized] = React3.useState(false);
96
+ const geocoder = React3.useMemo(() => {
97
+ if (googleMaps) {
98
+ const googleMapsGeocoder = new googleMaps.Geocoder();
99
+ setIsGeocoderInitialized(true);
100
+ return googleMapsGeocoder;
101
+ }
102
+ return null;
103
+ }, [googleMaps]);
104
+ return { geocoder, isGeocoderInitialized };
105
+ };
106
+
107
+ // src/useMap.ts
108
+ var React4 = __toESM(require("react"));
109
+ var import_use_callback_ref = require("use-callback-ref");
110
+ var useMap = (options = {}) => {
111
+ const [, forceUpdate] = React4.useState(0);
112
+ const ref = (0, import_use_callback_ref.useCallbackRef)(
113
+ null,
114
+ () => forceUpdate((n) => n + 1)
115
+ );
116
+ const { googleMaps } = useGoogleMaps();
117
+ const map = React4.useMemo(() => {
118
+ if (googleMaps && ref.current) {
119
+ return new googleMaps.Map(ref.current, options);
120
+ }
121
+ return null;
122
+ }, [googleMaps, ref.current]);
123
+ const optionsStringify = JSON.stringify(options);
124
+ React4.useEffect(() => {
125
+ if (map) {
126
+ const parsedOptions = JSON.parse(optionsStringify);
127
+ map.setOptions(parsedOptions);
128
+ }
129
+ }, [optionsStringify, map]);
130
+ return {
131
+ map,
132
+ ref
133
+ };
134
+ };
135
+
136
+ // src/usePlacesAutocomplete/index.ts
137
+ var import_react2 = require("react");
138
+
139
+ // src/usePlacesAutocomplete/debounce.ts
140
+ var debounce = (fn, delay) => {
141
+ let timer;
142
+ function debounceFn(...args) {
143
+ if (timer !== null) {
144
+ clearTimeout(timer);
145
+ timer = null;
146
+ }
147
+ timer = setTimeout(() => fn.apply(this, args), delay);
148
+ }
149
+ return debounceFn;
150
+ };
151
+ var debounce_default = debounce;
152
+
153
+ // src/usePlacesAutocomplete/useLatest.ts
154
+ var import_react = require("react");
155
+ var useLatest_default = (val) => {
156
+ const ref = (0, import_react.useRef)(val);
157
+ ref.current = val;
158
+ return ref;
159
+ };
160
+
161
+ // src/usePlacesAutocomplete/index.ts
162
+ var usePlacesAutocomplete = ({
163
+ requestOptions,
164
+ debounce: debounce2 = 200,
165
+ cache = 24 * 60 * 60,
166
+ cacheKey,
167
+ callbackName,
168
+ defaultValue = "",
169
+ initOnMount = true
170
+ } = {}) => {
171
+ const [ready, setReady] = (0, import_react2.useState)(false);
172
+ const [value, setVal] = (0, import_react2.useState)(defaultValue);
173
+ const [suggestions, setSuggestions] = (0, import_react2.useState)({
174
+ loading: false,
175
+ status: "",
176
+ data: []
177
+ });
178
+ const asRef = (0, import_react2.useRef)(null);
179
+ const requestOptionsRef = useLatest_default(requestOptions);
180
+ const { googleMaps } = useGoogleMaps();
181
+ const googleMapsRef = useLatest_default(googleMaps);
182
+ const upaCacheKey = cacheKey ? `upa-${cacheKey}` : "upa";
183
+ const init = (0, import_react2.useCallback)(() => {
184
+ if (asRef.current)
185
+ return;
186
+ if (!googleMaps) {
187
+ return;
188
+ }
189
+ const { current: gMaps } = googleMapsRef;
190
+ const placesLib = (gMaps == null ? void 0 : gMaps.places) || googleMaps.places;
191
+ if (!placesLib) {
192
+ return;
193
+ }
194
+ asRef.current = new placesLib.AutocompleteService();
195
+ setReady(true);
196
+ }, [googleMaps]);
197
+ const clearSuggestions = (0, import_react2.useCallback)(() => {
198
+ setSuggestions({ loading: false, status: "", data: [] });
199
+ }, []);
200
+ const clearCache = (0, import_react2.useCallback)(() => {
201
+ try {
202
+ sessionStorage.removeItem(upaCacheKey);
203
+ } catch (error) {
204
+ }
205
+ }, []);
206
+ const fetchPredictions = (0, import_react2.useCallback)(
207
+ debounce_default((val) => {
208
+ var _a;
209
+ if (!val) {
210
+ clearSuggestions();
211
+ return;
212
+ }
213
+ setSuggestions((prevState) => ({ ...prevState, loading: true }));
214
+ let cachedData = {};
215
+ try {
216
+ cachedData = JSON.parse(sessionStorage.getItem(upaCacheKey) || "{}");
217
+ } catch (error) {
218
+ }
219
+ if (cache) {
220
+ cachedData = Object.keys(cachedData).reduce(
221
+ (acc, key) => {
222
+ if (cachedData[key].maxAge - Date.now() >= 0)
223
+ acc[key] = cachedData[key];
224
+ return acc;
225
+ },
226
+ {}
227
+ );
228
+ if (cachedData[val]) {
229
+ setSuggestions({
230
+ loading: false,
231
+ status: "OK",
232
+ data: cachedData[val].data
233
+ });
234
+ return;
235
+ }
236
+ }
237
+ (_a = asRef == null ? void 0 : asRef.current) == null ? void 0 : _a.getPlacePredictions(
238
+ { ...requestOptionsRef.current, input: val },
239
+ (data, status) => {
240
+ setSuggestions({ loading: false, status, data: data || [] });
241
+ if (cache && status === "OK") {
242
+ cachedData[val] = {
243
+ data,
244
+ maxAge: Date.now() + cache * 1e3
245
+ };
246
+ try {
247
+ sessionStorage.setItem(upaCacheKey, JSON.stringify(cachedData));
248
+ } catch (error) {
249
+ }
250
+ }
251
+ }
252
+ );
253
+ }, debounce2),
254
+ [debounce2, clearSuggestions]
255
+ );
256
+ const setValue = (0, import_react2.useCallback)(
257
+ (val, shouldFetchData = true) => {
258
+ setVal(val);
259
+ if (asRef.current && shouldFetchData)
260
+ fetchPredictions(val);
261
+ },
262
+ [fetchPredictions]
263
+ );
264
+ (0, import_react2.useEffect)(() => {
265
+ if (!initOnMount) {
266
+ return () => null;
267
+ }
268
+ if (!googleMapsRef.current && !googleMaps && callbackName) {
269
+ window[callbackName] = init;
270
+ } else {
271
+ init();
272
+ }
273
+ return () => {
274
+ if (window[callbackName])
275
+ delete window[callbackName];
276
+ };
277
+ }, [callbackName, init]);
278
+ return {
279
+ ready,
280
+ value,
281
+ suggestions,
282
+ setValue,
283
+ clearSuggestions,
284
+ clearCache,
285
+ init
286
+ };
287
+ };
288
+ // Annotate the CommonJS export names for ESM import in node:
289
+ 0 && (module.exports = {
290
+ GoogleMapsProvider,
291
+ useGeocoder,
292
+ useGoogleMaps,
293
+ useMap,
294
+ usePlacesAutocomplete
295
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ttoss/google-maps",
3
- "version": "1.20.8",
3
+ "version": "1.20.9",
4
4
  "license": "UNLICENSED",
5
5
  "author": "ttoss",
6
6
  "contributors": [
@@ -19,7 +19,7 @@
19
19
  },
20
20
  "typings": "dist/index.d.ts",
21
21
  "dependencies": {
22
- "@ttoss/hooks": "^1.20.7",
22
+ "@ttoss/hooks": "^1.20.8",
23
23
  "@types/google.maps": "^3.49.2",
24
24
  "use-callback-ref": "^1.3.0"
25
25
  },
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "devDependencies": {
31
31
  "@ttoss/config": "^1.18.3",
32
- "@ttoss/test-utils": "^1.16.10"
32
+ "@ttoss/test-utils": "^1.17.0"
33
33
  },
34
34
  "engines": {
35
35
  "node": ">=12"
@@ -37,5 +37,5 @@
37
37
  "publishConfig": {
38
38
  "access": "public"
39
39
  },
40
- "gitHead": "b9f9de9b8389be76965f125b593166f10c2171e6"
40
+ "gitHead": "eaf4015635a5476a3b59beb3c35284404c1f07d5"
41
41
  }