@lwrjs/view-registry 0.10.2 → 0.11.0-alpha.1
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/build/cjs/linkers/legacy_view_bootstrap.cjs +4 -2
- package/build/cjs/linkers/preload-utils.cjs +1 -1
- package/build/cjs/linkers/utils.cjs +3 -3
- package/build/cjs/linkers/view_bootstrap.cjs +4 -2
- package/build/cjs/utils.cjs +2 -2
- package/build/es/linkers/legacy_view_bootstrap.d.ts +1 -1
- package/build/es/linkers/legacy_view_bootstrap.js +3 -1
- package/build/es/linkers/link-lwr-resources.d.ts +1 -1
- package/build/es/linkers/preload-utils.d.ts +3 -3
- package/build/es/linkers/preload-utils.js +4 -4
- package/build/es/linkers/utils.js +1 -1
- package/build/es/linkers/view_bootstrap.d.ts +1 -1
- package/build/es/linkers/view_bootstrap.js +3 -1
- package/build/es/utils.d.ts +2 -2
- package/build/es/utils.js +2 -2
- package/package.json +7 -7
|
@@ -41,7 +41,7 @@ async function getHtmlResources(view, viewParams, resourceContext) {
|
|
|
41
41
|
viewMetadata
|
|
42
42
|
} = resourceContext;
|
|
43
43
|
const {lwrVersion, format, hmrEnabled, bundle, debug, minify} = runtimeEnvironment;
|
|
44
|
-
const {customElements} = viewMetadata;
|
|
44
|
+
const {customElements, ssrProps} = viewMetadata;
|
|
45
45
|
const version = lwrVersion;
|
|
46
46
|
const isAMD = format === "amd";
|
|
47
47
|
const {bundleConfig} = resourceContext;
|
|
@@ -180,7 +180,8 @@ async function getHtmlResources(view, viewParams, resourceContext) {
|
|
|
180
180
|
configResources.unshift((0, import_utils2.getViewBootstrapConfigurationResource)({
|
|
181
181
|
id: view.id,
|
|
182
182
|
url: viewParams?.page?.url,
|
|
183
|
-
configAsSrc: view.bootstrap?.configAsSrc || false
|
|
183
|
+
configAsSrc: view.bootstrap?.configAsSrc || false,
|
|
184
|
+
mixedMode: view.bootstrap?.mixedMode || false
|
|
184
185
|
}, {
|
|
185
186
|
appId: appIdentity.appName,
|
|
186
187
|
bootstrapModule: versionedSpecifier,
|
|
@@ -190,6 +191,7 @@ async function getHtmlResources(view, viewParams, resourceContext) {
|
|
|
190
191
|
default: (0, import_shared_utils.getModuleUriPrefix)(runtimeEnvironment, runtimeParams)
|
|
191
192
|
},
|
|
192
193
|
rootComponents,
|
|
194
|
+
ssrProps,
|
|
193
195
|
...isAMD && {requiredModules: requiredAmdModules},
|
|
194
196
|
...isAMD && {preloadModules: viewPreloads.specifiers}
|
|
195
197
|
}, runtimeEnvironment, runtimeParams));
|
|
@@ -56,7 +56,7 @@ async function getPreloadModulesMeta(specifier, viewPreloads, bundleConfig, modu
|
|
|
56
56
|
if (isExternal(specifier)) {
|
|
57
57
|
import_shared_utils.logger.warn(`"${specifier}" is configured in both bundleConfig.externals and bootstrap.preloadModules. We are treating it as external.`);
|
|
58
58
|
} else {
|
|
59
|
-
const versionedModuleId = await (0, import_shared_utils.getVersionedModuleId)(specifier, moduleRegistry);
|
|
59
|
+
const versionedModuleId = await (0, import_shared_utils.getVersionedModuleId)(specifier, moduleRegistry, runtimeParams);
|
|
60
60
|
const versionedModuleSpecifier = (0, import_shared_utils.getSpecifier)({
|
|
61
61
|
specifier,
|
|
62
62
|
version: (0, import_shared_utils.normalizeVersionToUri)(versionedModuleId.version)
|
|
@@ -53,7 +53,8 @@ function getViewBootstrapConfigurationResource(viewInfo, config, runtimeEnvironm
|
|
|
53
53
|
...config,
|
|
54
54
|
endpoints
|
|
55
55
|
})});`,
|
|
56
|
-
`globalThis.process = { env: { NODE_ENV: "${runtimeEnvironment.serverMode}", SSR: false } }
|
|
56
|
+
`globalThis.process = { env: { NODE_ENV: "${runtimeEnvironment.serverMode}", SSR: false } };`,
|
|
57
|
+
`globalThis.lwcRuntimeFlags = { ENABLE_MIXED_SHADOW_MODE: ${viewInfo.mixedMode} };`
|
|
57
58
|
].filter(Boolean).join("\n");
|
|
58
59
|
if (viewInfo.configAsSrc) {
|
|
59
60
|
const viewUrl = viewInfo.url || "/";
|
|
@@ -89,8 +90,7 @@ function getViewHmrConfigurationResource(view, viewMetadata) {
|
|
|
89
90
|
templates: ${JSON.stringify([contentTemplate, layoutTemplate].filter(Boolean))}
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
|
-
|
|
93
|
-
`globalThis.lwcRuntimeFlags = { ENABLE_HMR: true };`
|
|
93
|
+
`
|
|
94
94
|
].filter(Boolean).join("\n");
|
|
95
95
|
return {
|
|
96
96
|
type: CONTENT_TYPE,
|
|
@@ -41,7 +41,7 @@ async function getHtmlResources(view, viewParams, resourceContext) {
|
|
|
41
41
|
viewMetadata
|
|
42
42
|
} = resourceContext;
|
|
43
43
|
const {lwrVersion, format, hmrEnabled, bundle, debug, minify} = runtimeEnvironment;
|
|
44
|
-
const {customElements} = viewMetadata;
|
|
44
|
+
const {customElements, ssrProps} = viewMetadata;
|
|
45
45
|
const defRegistry = bundle ? moduleBundler : moduleRegistry;
|
|
46
46
|
const version = lwrVersion;
|
|
47
47
|
const isAMD = format === "amd";
|
|
@@ -173,7 +173,8 @@ async function getHtmlResources(view, viewParams, resourceContext) {
|
|
|
173
173
|
configResources.unshift((0, import_utils2.getViewBootstrapConfigurationResource)({
|
|
174
174
|
id: view.id,
|
|
175
175
|
url: viewParams?.page?.url,
|
|
176
|
-
configAsSrc: view.bootstrap?.configAsSrc || false
|
|
176
|
+
configAsSrc: view.bootstrap?.configAsSrc || false,
|
|
177
|
+
mixedMode: view.bootstrap?.mixedMode || false
|
|
177
178
|
}, {
|
|
178
179
|
appId: appIdentity.appName,
|
|
179
180
|
bootstrapModule: versionedSpecifier,
|
|
@@ -181,6 +182,7 @@ async function getHtmlResources(view, viewParams, resourceContext) {
|
|
|
181
182
|
imports: importMetadata?.imports,
|
|
182
183
|
index: importMetadata?.index,
|
|
183
184
|
rootComponents,
|
|
185
|
+
ssrProps,
|
|
184
186
|
...isAMD && {requiredModules: requiredAmdModules},
|
|
185
187
|
...isAMD && {preloadModules: viewPreloads.specifiers}
|
|
186
188
|
}, runtimeEnvironment, runtimeParams));
|
package/build/cjs/utils.cjs
CHANGED
|
@@ -228,7 +228,7 @@ function getModuleResourceByUri(uri, runtimeEnvironment, moduleResourceMeta) {
|
|
|
228
228
|
};
|
|
229
229
|
}
|
|
230
230
|
async function createJsonModule(specifier, moduleRegistry, environment, params) {
|
|
231
|
-
const {version} = await moduleRegistry.getModuleEntry({specifier});
|
|
231
|
+
const {version} = await moduleRegistry.getModuleEntry({specifier}, params);
|
|
232
232
|
const {namespace, name} = (0, import_shared_utils.explodeSpecifier)(specifier);
|
|
233
233
|
const moduleIdentifier = {
|
|
234
234
|
specifier,
|
|
@@ -236,7 +236,7 @@ async function createJsonModule(specifier, moduleRegistry, environment, params)
|
|
|
236
236
|
name,
|
|
237
237
|
version
|
|
238
238
|
};
|
|
239
|
-
const {ownHash} = await moduleRegistry.getModule(moduleIdentifier);
|
|
239
|
+
const {ownHash} = await moduleRegistry.getModule(moduleIdentifier, params);
|
|
240
240
|
return {
|
|
241
241
|
specifier: (0, import_shared_utils.getSpecifier)(moduleIdentifier),
|
|
242
242
|
version,
|
|
@@ -5,7 +5,7 @@ export interface LwrResourcesLinkedContext extends ResourceContext {
|
|
|
5
5
|
interface ResourceContext {
|
|
6
6
|
viewMetadata: RenderedViewMetadata;
|
|
7
7
|
runtimeEnvironment: RuntimeEnvironment;
|
|
8
|
-
runtimeParams
|
|
8
|
+
runtimeParams: RuntimeParams;
|
|
9
9
|
moduleRegistry: ModuleRegistry;
|
|
10
10
|
moduleBundler: ModuleBundler;
|
|
11
11
|
resourceRegistry: ResourceRegistry;
|
|
@@ -6,7 +6,7 @@ import { setPreloadModulesMeta, getPreloadModulesMeta } from './preload-utils.js
|
|
|
6
6
|
export async function getHtmlResources(view, viewParams, resourceContext) {
|
|
7
7
|
const { runtimeEnvironment, runtimeParams, moduleRegistry, moduleBundler, resourceRegistry, viewMetadata, } = resourceContext;
|
|
8
8
|
const { lwrVersion, format, hmrEnabled, bundle, debug, minify } = runtimeEnvironment;
|
|
9
|
-
const { customElements } = viewMetadata;
|
|
9
|
+
const { customElements, ssrProps } = viewMetadata;
|
|
10
10
|
const version = lwrVersion;
|
|
11
11
|
const isAMD = format === 'amd';
|
|
12
12
|
const { bundleConfig } = resourceContext;
|
|
@@ -199,6 +199,7 @@ export async function getHtmlResources(view, viewParams, resourceContext) {
|
|
|
199
199
|
id: view.id,
|
|
200
200
|
url: viewParams?.page?.url,
|
|
201
201
|
configAsSrc: view.bootstrap?.configAsSrc || false,
|
|
202
|
+
mixedMode: view.bootstrap?.mixedMode || false,
|
|
202
203
|
}, {
|
|
203
204
|
appId: appIdentity.appName,
|
|
204
205
|
bootstrapModule: versionedSpecifier,
|
|
@@ -208,6 +209,7 @@ export async function getHtmlResources(view, viewParams, resourceContext) {
|
|
|
208
209
|
default: getModuleUriPrefix(runtimeEnvironment, runtimeParams),
|
|
209
210
|
},
|
|
210
211
|
rootComponents,
|
|
212
|
+
ssrProps,
|
|
211
213
|
...(isAMD && { requiredModules: requiredAmdModules }),
|
|
212
214
|
// in AMD we need to tell the loader what modules we are preloading
|
|
213
215
|
...(isAMD && { preloadModules: viewPreloads.specifiers }),
|
|
@@ -5,7 +5,7 @@ export interface LwrResourcesLinkedContext extends ResourceContext {
|
|
|
5
5
|
interface ResourceContext {
|
|
6
6
|
viewMetadata: RenderedViewMetadata;
|
|
7
7
|
runtimeEnvironment: RuntimeEnvironment;
|
|
8
|
-
runtimeParams
|
|
8
|
+
runtimeParams: RuntimeParams;
|
|
9
9
|
moduleRegistry: ModuleRegistry;
|
|
10
10
|
moduleBundler: ModuleBundler;
|
|
11
11
|
resourceRegistry: ResourceRegistry;
|
|
@@ -9,9 +9,9 @@ export type ViewPreloads = {
|
|
|
9
9
|
*/
|
|
10
10
|
export declare function setPreloadModulesMeta(specifier: string, uri: string, groups: BundleGroups, preloads: ViewPreloads): void;
|
|
11
11
|
/**
|
|
12
|
-
* Recursively gets preloadModules metadata starting with a
|
|
12
|
+
* Recursively gets preloadModules metadata starting with a specifier
|
|
13
13
|
* Note: don't call me unless you got bundles
|
|
14
14
|
*/
|
|
15
|
-
export declare function getPreloadModulesMeta(specifier: string, //
|
|
16
|
-
viewPreloads: ViewPreloads, bundleConfig: BundleConfig, moduleRegistry: ModuleRegistry, defRegistry: ModuleBundler, runtimeEnvironment: RuntimeEnvironment, runtimeParams
|
|
15
|
+
export declare function getPreloadModulesMeta(specifier: string, // un-versioned specifier
|
|
16
|
+
viewPreloads: ViewPreloads, bundleConfig: BundleConfig, moduleRegistry: ModuleRegistry, defRegistry: ModuleBundler, runtimeEnvironment: RuntimeEnvironment, runtimeParams: RuntimeParams, pending?: Map<string, boolean>): Promise<void>;
|
|
17
17
|
//# sourceMappingURL=preload-utils.d.ts.map
|
|
@@ -3,7 +3,7 @@ import { explodeSpecifier, getGroupName, getVersionedModuleId, normalizeVersionT
|
|
|
3
3
|
* keeps track of preloadModules metadata
|
|
4
4
|
*/
|
|
5
5
|
export function setPreloadModulesMeta(specifier, uri, groups, preloads) {
|
|
6
|
-
// We need to support
|
|
6
|
+
// We need to support version-less preloadModules, including version-less rootComponents.
|
|
7
7
|
// Removing the "/v/version_not_provided" hack from the preloadModules specifier
|
|
8
8
|
// because otherwise the loader will wait for that module that will never get defined.
|
|
9
9
|
// TODO: remove pending W-12702948
|
|
@@ -24,10 +24,10 @@ export function setPreloadModulesMeta(specifier, uri, groups, preloads) {
|
|
|
24
24
|
groupName && preloadBundleGroupsMap.set(groupName, true);
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
|
-
* Recursively gets preloadModules metadata starting with a
|
|
27
|
+
* Recursively gets preloadModules metadata starting with a specifier
|
|
28
28
|
* Note: don't call me unless you got bundles
|
|
29
29
|
*/
|
|
30
|
-
export async function getPreloadModulesMeta(specifier, //
|
|
30
|
+
export async function getPreloadModulesMeta(specifier, // un-versioned specifier
|
|
31
31
|
viewPreloads, bundleConfig, moduleRegistry, defRegistry, runtimeEnvironment, runtimeParams, pending) {
|
|
32
32
|
const { exclude = [], external = {}, groups = {} } = bundleConfig;
|
|
33
33
|
const isExternal = function (rawSpecifier) {
|
|
@@ -42,7 +42,7 @@ viewPreloads, bundleConfig, moduleRegistry, defRegistry, runtimeEnvironment, run
|
|
|
42
42
|
}
|
|
43
43
|
else {
|
|
44
44
|
// eslint-disable-next-line no-await-in-loop
|
|
45
|
-
const versionedModuleId = await getVersionedModuleId(specifier, moduleRegistry); // TODO replace moduleRegistry with defRegistry
|
|
45
|
+
const versionedModuleId = await getVersionedModuleId(specifier, moduleRegistry, runtimeParams); // TODO replace moduleRegistry with defRegistry
|
|
46
46
|
const versionedModuleSpecifier = getSpecifier({
|
|
47
47
|
specifier,
|
|
48
48
|
version: normalizeVersionToUri(versionedModuleId.version),
|
|
@@ -28,6 +28,7 @@ export function getViewBootstrapConfigurationResource(viewInfo, config, runtimeE
|
|
|
28
28
|
// TODO: W-12639529 change NODE_ENV after addressing downstream customers
|
|
29
29
|
// Note: SSR is always false because this script is executed on the client
|
|
30
30
|
`globalThis.process = { env: { NODE_ENV: "${runtimeEnvironment.serverMode}", SSR: false } };`,
|
|
31
|
+
`globalThis.lwcRuntimeFlags = { ENABLE_MIXED_SHADOW_MODE: ${viewInfo.mixedMode} };`,
|
|
31
32
|
]
|
|
32
33
|
.filter(Boolean)
|
|
33
34
|
.join('\n');
|
|
@@ -67,7 +68,6 @@ export function getViewHmrConfigurationResource(view, viewMetadata) {
|
|
|
67
68
|
}
|
|
68
69
|
}
|
|
69
70
|
`,
|
|
70
|
-
`globalThis.lwcRuntimeFlags = { ENABLE_HMR: true };`,
|
|
71
71
|
]
|
|
72
72
|
.filter(Boolean)
|
|
73
73
|
.join('\n');
|
|
@@ -5,7 +5,7 @@ export interface LwrResourcesLinkedContext extends ResourceContext {
|
|
|
5
5
|
interface ResourceContext {
|
|
6
6
|
viewMetadata: RenderedViewMetadata;
|
|
7
7
|
runtimeEnvironment: RuntimeEnvironment;
|
|
8
|
-
runtimeParams
|
|
8
|
+
runtimeParams: RuntimeParams;
|
|
9
9
|
moduleRegistry: ModuleRegistry;
|
|
10
10
|
moduleBundler: ModuleBundler;
|
|
11
11
|
resourceRegistry: ResourceRegistry;
|
|
@@ -6,7 +6,7 @@ import { setPreloadModulesMeta, getPreloadModulesMeta } from './preload-utils.js
|
|
|
6
6
|
export async function getHtmlResources(view, viewParams, resourceContext) {
|
|
7
7
|
const { runtimeEnvironment, runtimeParams, moduleRegistry, moduleBundler, resourceRegistry, viewMetadata, } = resourceContext;
|
|
8
8
|
const { lwrVersion, format, hmrEnabled, bundle, debug, minify } = runtimeEnvironment;
|
|
9
|
-
const { customElements } = viewMetadata;
|
|
9
|
+
const { customElements, ssrProps } = viewMetadata;
|
|
10
10
|
const defRegistry = bundle ? moduleBundler : moduleRegistry;
|
|
11
11
|
const version = lwrVersion;
|
|
12
12
|
const isAMD = format === 'amd';
|
|
@@ -187,6 +187,7 @@ export async function getHtmlResources(view, viewParams, resourceContext) {
|
|
|
187
187
|
id: view.id,
|
|
188
188
|
url: viewParams?.page?.url,
|
|
189
189
|
configAsSrc: view.bootstrap?.configAsSrc || false,
|
|
190
|
+
mixedMode: view.bootstrap?.mixedMode || false,
|
|
190
191
|
}, {
|
|
191
192
|
appId: appIdentity.appName,
|
|
192
193
|
bootstrapModule: versionedSpecifier,
|
|
@@ -194,6 +195,7 @@ export async function getHtmlResources(view, viewParams, resourceContext) {
|
|
|
194
195
|
imports: importMetadata?.imports,
|
|
195
196
|
index: importMetadata?.index,
|
|
196
197
|
rootComponents,
|
|
198
|
+
ssrProps,
|
|
197
199
|
...(isAMD && { requiredModules: requiredAmdModules }),
|
|
198
200
|
// in AMD we need to tell the loader what modules we are preloading
|
|
199
201
|
...(isAMD && { preloadModules: viewPreloads.specifiers }),
|
package/build/es/utils.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export declare function normalizeRenderOptions(runtimeEnvironment: RuntimeEnviro
|
|
|
7
7
|
export declare function generatePageContext({ requestPath: url }: ViewRequest, { id, contentTemplate, properties }: LwrRoute | LwrErrorRoute): JsonCompatible<ViewPageContext>;
|
|
8
8
|
export declare function isViewResponse(response: RouteHandlerViewResponse): response is ViewResponse;
|
|
9
9
|
export declare function toJsonFormat(viewRequest: ViewRequest, viewDefinition: LinkedViewDefinition, route: LwrRoute | LwrErrorRoute, runtimeEnvironment: RuntimeEnvironment, runtimeParams: RuntimeParams, moduleRegistry: ModuleRegistry): Promise<ViewResponse>;
|
|
10
|
-
export declare function getModuleResource(moduleId: Pick<ModuleId, 'specifier' | 'version'>, runtimeEnvironment: RuntimeEnvironment, moduleResourceMeta: ViewModuleResourceContext, defRegistry: ModuleRegistry | ModuleBundler, runtimeParams
|
|
10
|
+
export declare function getModuleResource(moduleId: Pick<ModuleId, 'specifier' | 'version'>, runtimeEnvironment: RuntimeEnvironment, moduleResourceMeta: ViewModuleResourceContext, defRegistry: ModuleRegistry | ModuleBundler, runtimeParams: RuntimeParams): Promise<ResourceDefinition>;
|
|
11
11
|
export declare function getModuleResourceByUri(uri: string, runtimeEnvironment: RuntimeEnvironment, moduleResourceMeta: ViewModuleResourceContext): ResourceDefinition;
|
|
12
|
-
export declare function createJsonModule(specifier: string, moduleRegistry: PublicModuleRegistry, environment: RuntimeEnvironment, params
|
|
12
|
+
export declare function createJsonModule(specifier: string, moduleRegistry: PublicModuleRegistry, environment: RuntimeEnvironment, params: RuntimeParams): Promise<ModuleJson>;
|
|
13
13
|
//# sourceMappingURL=utils.d.ts.map
|
package/build/es/utils.js
CHANGED
|
@@ -212,7 +212,7 @@ export function getModuleResourceByUri(uri, runtimeEnvironment, moduleResourceMe
|
|
|
212
212
|
}
|
|
213
213
|
// Given a specifier and resource type, return the JSON serialized Module data
|
|
214
214
|
export async function createJsonModule(specifier, moduleRegistry, environment, params) {
|
|
215
|
-
const { version } = await moduleRegistry.getModuleEntry({ specifier });
|
|
215
|
+
const { version } = await moduleRegistry.getModuleEntry({ specifier }, params);
|
|
216
216
|
const { namespace, name } = explodeSpecifier(specifier);
|
|
217
217
|
const moduleIdentifier = {
|
|
218
218
|
specifier,
|
|
@@ -220,7 +220,7 @@ export async function createJsonModule(specifier, moduleRegistry, environment, p
|
|
|
220
220
|
name,
|
|
221
221
|
version,
|
|
222
222
|
};
|
|
223
|
-
const { ownHash } = await moduleRegistry.getModule(moduleIdentifier);
|
|
223
|
+
const { ownHash } = await moduleRegistry.getModule(moduleIdentifier, params);
|
|
224
224
|
return {
|
|
225
225
|
// versioned specifier
|
|
226
226
|
specifier: getSpecifier(moduleIdentifier),
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "0.
|
|
7
|
+
"version": "0.11.0-alpha.1",
|
|
8
8
|
"homepage": "https://developer.salesforce.com/docs/platform/lwr/overview",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
@@ -30,17 +30,17 @@
|
|
|
30
30
|
"build/**/*.d.ts"
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@lwrjs/app-service": "0.
|
|
34
|
-
"@lwrjs/diagnostics": "0.
|
|
35
|
-
"@lwrjs/instrumentation": "0.
|
|
36
|
-
"@lwrjs/shared-utils": "0.
|
|
33
|
+
"@lwrjs/app-service": "0.11.0-alpha.1",
|
|
34
|
+
"@lwrjs/diagnostics": "0.11.0-alpha.1",
|
|
35
|
+
"@lwrjs/instrumentation": "0.11.0-alpha.1",
|
|
36
|
+
"@lwrjs/shared-utils": "0.11.0-alpha.1",
|
|
37
37
|
"lru-cache": "^10.0.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@lwrjs/types": "0.
|
|
40
|
+
"@lwrjs/types": "0.11.0-alpha.1"
|
|
41
41
|
},
|
|
42
42
|
"engines": {
|
|
43
43
|
"node": ">=16.0.0"
|
|
44
44
|
},
|
|
45
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "6a840d4694fac9f0be5c3a21707015379cbadad7"
|
|
46
46
|
}
|