@lwrjs/config 0.9.0-alpha.21 → 0.9.0-alpha.23
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/defaults.cjs +3 -1
- package/build/cjs/hooks.cjs +8 -4
- package/build/cjs/index.cjs +4 -1
- package/build/cjs/runtime-config.cjs +4 -2
- package/build/cjs/validation/app-config-context.cjs +3 -1
- package/build/cjs/validation/app-config.cjs +4 -1
- package/build/es/defaults.js +2 -0
- package/build/es/hooks.d.ts +2 -2
- package/build/es/hooks.js +8 -4
- package/build/es/index.d.ts +2 -1
- package/build/es/index.js +2 -1
- package/build/es/runtime-config.js +4 -2
- package/build/es/validation/app-config-context.d.ts +1 -1
- package/build/es/validation/app-config-context.js +2 -0
- package/build/es/validation/app-config.js +6 -1
- package/package.cjs +14 -1
- package/package.json +8 -5
package/build/cjs/defaults.cjs
CHANGED
|
@@ -118,6 +118,7 @@ var DEFAULT_LWR_CONFIG = {
|
|
|
118
118
|
rootDir: DEFAULT_ROOT_DIR,
|
|
119
119
|
cacheDir: DEFAULT_CACHE_FOLDER,
|
|
120
120
|
serverMode: MODE,
|
|
121
|
+
minify: null,
|
|
121
122
|
apiVersion: DEFAULT_API_VERSION,
|
|
122
123
|
assets: DEFAULT_ASSETS_DIR,
|
|
123
124
|
assetProviders: DEFAULT_ASSET_PROVIDERS,
|
|
@@ -139,5 +140,6 @@ var DEFAULT_LWR_CONFIG = {
|
|
|
139
140
|
routeHandlers: {},
|
|
140
141
|
bundleConfig: getDefaultBundleConfig(MODE),
|
|
141
142
|
serverType: DEFAULT_SERVER_TYPE,
|
|
142
|
-
locker: import_shared_utils.DEFAULT_LWR_LOCKER_CONFIG
|
|
143
|
+
locker: import_shared_utils.DEFAULT_LWR_LOCKER_CONFIG,
|
|
144
|
+
experimentalAllowDupeRouteIds: false
|
|
143
145
|
};
|
package/build/cjs/hooks.cjs
CHANGED
|
@@ -29,7 +29,7 @@ __export(exports, {
|
|
|
29
29
|
});
|
|
30
30
|
var import_routes = __toModule(require("./utils/routes.cjs"));
|
|
31
31
|
var import_app_config = __toModule(require("./validation/app-config.cjs"));
|
|
32
|
-
async function executeConfigHooks(hooks, globalConfig, runtimeEnvironment, globalData) {
|
|
32
|
+
async function executeConfigHooks(hooks, globalConfig, runtimeEnvironment, globalData, skipValidate = false) {
|
|
33
33
|
if (!hooks.length) {
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
@@ -41,9 +41,11 @@ async function executeConfigHooks(hooks, globalConfig, runtimeEnvironment, globa
|
|
|
41
41
|
}
|
|
42
42
|
globalConfig.routes = (0, import_routes.normalizeRoutes)(globalConfig.routes, globalConfig.routeHandlers);
|
|
43
43
|
globalConfig.errorRoutes = (0, import_routes.normalizeRoutes)(globalConfig.errorRoutes, globalConfig.routeHandlers);
|
|
44
|
-
(
|
|
44
|
+
if (!skipValidate) {
|
|
45
|
+
(0, import_app_config.validateLwrAppConfig)(globalConfig, "post");
|
|
46
|
+
}
|
|
45
47
|
}
|
|
46
|
-
function executeStartHooks(hooks, globalConfig) {
|
|
48
|
+
function executeStartHooks(hooks, globalConfig, skipValidate = false) {
|
|
47
49
|
if (!hooks.length) {
|
|
48
50
|
return;
|
|
49
51
|
}
|
|
@@ -54,5 +56,7 @@ function executeStartHooks(hooks, globalConfig) {
|
|
|
54
56
|
hook.onStart(globalConfig.routes);
|
|
55
57
|
}
|
|
56
58
|
globalConfig.routes = (0, import_routes.normalizeRoutes)(globalConfig.routes, globalConfig.routeHandlers);
|
|
57
|
-
(
|
|
59
|
+
if (!skipValidate) {
|
|
60
|
+
(0, import_app_config.validateLwrAppConfig)(globalConfig, "post");
|
|
61
|
+
}
|
|
58
62
|
}
|
package/build/cjs/index.cjs
CHANGED
|
@@ -24,14 +24,17 @@ var __toModule = (module2) => {
|
|
|
24
24
|
// packages/@lwrjs/config/src/index.ts
|
|
25
25
|
__markAsModule(exports);
|
|
26
26
|
__export(exports, {
|
|
27
|
+
LWC_VERSION: () => import_package.lwcVersion,
|
|
27
28
|
LWR_VERSION: () => import_package.version,
|
|
28
29
|
executeConfigHooks: () => import_hooks.executeConfigHooks,
|
|
29
30
|
executeStartHooks: () => import_hooks.executeStartHooks,
|
|
30
31
|
getRuntimeEnvironment: () => import_runtime_config.getRuntimeEnvironment,
|
|
31
32
|
loadConfig: () => import_global_config.loadConfig,
|
|
32
|
-
normalizeConfig: () => import_global_config.resolveGlobalConfig
|
|
33
|
+
normalizeConfig: () => import_global_config.resolveGlobalConfig,
|
|
34
|
+
validateLwrAppConfig: () => import_app_config.validateLwrAppConfig
|
|
33
35
|
});
|
|
34
36
|
var import_package = __toModule(require("@lwrjs/config/package"));
|
|
35
37
|
var import_global_config = __toModule(require("./global-config.cjs"));
|
|
36
38
|
var import_runtime_config = __toModule(require("./runtime-config.cjs"));
|
|
37
39
|
var import_hooks = __toModule(require("./hooks.cjs"));
|
|
40
|
+
var import_app_config = __toModule(require("./validation/app-config.cjs"));
|
|
@@ -96,9 +96,11 @@ function getServerModeConfig(serverMode) {
|
|
|
96
96
|
return selectedMode;
|
|
97
97
|
}
|
|
98
98
|
function getRuntimeEnvironment(config) {
|
|
99
|
-
const {serverMode, lwrVersion, apiVersion, basePath} = config;
|
|
99
|
+
const {serverMode, lwrVersion, apiVersion, basePath, minify} = config;
|
|
100
|
+
const serverModeConfig = getServerModeConfig(config.serverMode);
|
|
100
101
|
return {
|
|
101
|
-
...
|
|
102
|
+
...serverModeConfig,
|
|
103
|
+
minify: minify !== null ? minify : serverModeConfig.minify,
|
|
102
104
|
featureFlags: (0, import_shared_utils.getFeatureFlags)(),
|
|
103
105
|
serverMode,
|
|
104
106
|
lwrVersion,
|
|
@@ -70,9 +70,11 @@ var ROOT_ATTRIBUTE_KEYS = createKeys("root", [
|
|
|
70
70
|
"routeHandlers",
|
|
71
71
|
"routes",
|
|
72
72
|
"serverMode",
|
|
73
|
+
"minify",
|
|
73
74
|
"serverType",
|
|
74
75
|
"viewProviders",
|
|
75
|
-
"viewTransformers"
|
|
76
|
+
"viewTransformers",
|
|
77
|
+
"experimentalAllowDupeRouteIds"
|
|
76
78
|
]);
|
|
77
79
|
var ASSET_DIR_ATTRIBUTE_KEYS = createKeys("assetDir", ["alias", "dir", "urlPath"]);
|
|
78
80
|
var ASSET_FILE_ATTRIBUTE_KEYS = createKeys("assetFile", ["alias", "file", "urlPath"]);
|
|
@@ -149,7 +149,10 @@ function validateRoot(node, validationContext, preMerge) {
|
|
|
149
149
|
!preMerge && validationContext.assertRequiredKeys(node, "root", import_app_config_context.ROOT_ATTRIBUTE_KEYS);
|
|
150
150
|
const routes = (0, import_jsonc_parser.findNodeAtLocation)(node, ["routes"]);
|
|
151
151
|
const errorRoutes = (0, import_jsonc_parser.findNodeAtLocation)(node, ["errorRoutes"]);
|
|
152
|
-
|
|
152
|
+
const experimentalAllowDupeRouteIds = (0, import_jsonc_parser.findNodeAtLocation)(node, ["experimentalAllowDupeRouteIds"]);
|
|
153
|
+
if (experimentalAllowDupeRouteIds?.value !== true) {
|
|
154
|
+
validationContext.assertUniqueIds([...routes?.children || [], ...errorRoutes?.children || []], "routes");
|
|
155
|
+
}
|
|
153
156
|
validateRoutes(routes, validationContext, preMerge);
|
|
154
157
|
validateErrorRoutes(errorRoutes, validationContext);
|
|
155
158
|
validateRouteHandlers((0, import_jsonc_parser.findNodeAtLocation)(node, ["routeHandlers"]), validationContext);
|
package/build/es/defaults.js
CHANGED
|
@@ -86,6 +86,7 @@ export const DEFAULT_LWR_CONFIG = {
|
|
|
86
86
|
rootDir: DEFAULT_ROOT_DIR,
|
|
87
87
|
cacheDir: DEFAULT_CACHE_FOLDER,
|
|
88
88
|
serverMode: MODE,
|
|
89
|
+
minify: null,
|
|
89
90
|
apiVersion: DEFAULT_API_VERSION,
|
|
90
91
|
assets: DEFAULT_ASSETS_DIR,
|
|
91
92
|
assetProviders: DEFAULT_ASSET_PROVIDERS,
|
|
@@ -108,5 +109,6 @@ export const DEFAULT_LWR_CONFIG = {
|
|
|
108
109
|
bundleConfig: getDefaultBundleConfig(MODE),
|
|
109
110
|
serverType: DEFAULT_SERVER_TYPE,
|
|
110
111
|
locker: DEFAULT_LWR_LOCKER_CONFIG,
|
|
112
|
+
experimentalAllowDupeRouteIds: false,
|
|
111
113
|
};
|
|
112
114
|
//# sourceMappingURL=defaults.js.map
|
package/build/es/hooks.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ import type { GlobalData, HooksPlugin, NormalizedLwrGlobalConfig, RuntimeEnviron
|
|
|
13
13
|
* @param runtimeEnvironment - runtime environment resolved from programmatic config and config file
|
|
14
14
|
* @param globalData - resolved global data
|
|
15
15
|
*/
|
|
16
|
-
export declare function executeConfigHooks(hooks: HooksPlugin[], globalConfig: NormalizedLwrGlobalConfig, runtimeEnvironment: RuntimeEnvironment, globalData: GlobalData): Promise<void>;
|
|
16
|
+
export declare function executeConfigHooks(hooks: HooksPlugin[], globalConfig: NormalizedLwrGlobalConfig, runtimeEnvironment: RuntimeEnvironment, globalData: GlobalData, skipValidate?: boolean): Promise<void>;
|
|
17
17
|
/**
|
|
18
18
|
* Run `onStart` hooks
|
|
19
19
|
*
|
|
@@ -28,5 +28,5 @@ export declare function executeConfigHooks(hooks: HooksPlugin[], globalConfig: N
|
|
|
28
28
|
* @param hooks - hooks plugins
|
|
29
29
|
* @param globalConfig - global configuration
|
|
30
30
|
*/
|
|
31
|
-
export declare function executeStartHooks(hooks: HooksPlugin[], globalConfig: NormalizedLwrGlobalConfig): void;
|
|
31
|
+
export declare function executeStartHooks(hooks: HooksPlugin[], globalConfig: NormalizedLwrGlobalConfig, skipValidate?: boolean): void;
|
|
32
32
|
//# sourceMappingURL=hooks.d.ts.map
|
package/build/es/hooks.js
CHANGED
|
@@ -14,7 +14,7 @@ import { validateLwrAppConfig } from './validation/app-config.js';
|
|
|
14
14
|
* @param runtimeEnvironment - runtime environment resolved from programmatic config and config file
|
|
15
15
|
* @param globalData - resolved global data
|
|
16
16
|
*/
|
|
17
|
-
export async function executeConfigHooks(hooks, globalConfig, runtimeEnvironment, globalData) {
|
|
17
|
+
export async function executeConfigHooks(hooks, globalConfig, runtimeEnvironment, globalData, skipValidate = false) {
|
|
18
18
|
if (!hooks.length) {
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
@@ -27,7 +27,9 @@ export async function executeConfigHooks(hooks, globalConfig, runtimeEnvironment
|
|
|
27
27
|
}
|
|
28
28
|
globalConfig.routes = normalizeRoutes(globalConfig.routes, globalConfig.routeHandlers);
|
|
29
29
|
globalConfig.errorRoutes = normalizeRoutes(globalConfig.errorRoutes, globalConfig.routeHandlers);
|
|
30
|
-
|
|
30
|
+
if (!skipValidate) {
|
|
31
|
+
validateLwrAppConfig(globalConfig, 'post');
|
|
32
|
+
}
|
|
31
33
|
}
|
|
32
34
|
/**
|
|
33
35
|
* Run `onStart` hooks
|
|
@@ -43,7 +45,7 @@ export async function executeConfigHooks(hooks, globalConfig, runtimeEnvironment
|
|
|
43
45
|
* @param hooks - hooks plugins
|
|
44
46
|
* @param globalConfig - global configuration
|
|
45
47
|
*/
|
|
46
|
-
export function executeStartHooks(hooks, globalConfig) {
|
|
48
|
+
export function executeStartHooks(hooks, globalConfig, skipValidate = false) {
|
|
47
49
|
if (!hooks.length) {
|
|
48
50
|
return;
|
|
49
51
|
}
|
|
@@ -54,6 +56,8 @@ export function executeStartHooks(hooks, globalConfig) {
|
|
|
54
56
|
hook.onStart(globalConfig.routes);
|
|
55
57
|
}
|
|
56
58
|
globalConfig.routes = normalizeRoutes(globalConfig.routes, globalConfig.routeHandlers);
|
|
57
|
-
|
|
59
|
+
if (!skipValidate) {
|
|
60
|
+
validateLwrAppConfig(globalConfig, 'post');
|
|
61
|
+
}
|
|
58
62
|
}
|
|
59
63
|
//# sourceMappingURL=hooks.js.map
|
package/build/es/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export { version as LWR_VERSION } from '@lwrjs/config/package';
|
|
1
|
+
export { version as LWR_VERSION, lwcVersion as LWC_VERSION } from '@lwrjs/config/package';
|
|
2
2
|
export { loadConfig, resolveGlobalConfig as normalizeConfig } from './global-config.js';
|
|
3
3
|
export { getRuntimeEnvironment } from './runtime-config.js';
|
|
4
4
|
export { executeConfigHooks, executeStartHooks } from './hooks.js';
|
|
5
|
+
export { validateLwrAppConfig } from './validation/app-config.js';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
package/build/es/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export { version as LWR_VERSION } from '@lwrjs/config/package';
|
|
1
|
+
export { version as LWR_VERSION, lwcVersion as LWC_VERSION } from '@lwrjs/config/package';
|
|
2
2
|
export { loadConfig, resolveGlobalConfig as normalizeConfig } from './global-config.js';
|
|
3
3
|
export { getRuntimeEnvironment } from './runtime-config.js';
|
|
4
4
|
export { executeConfigHooks, executeStartHooks } from './hooks.js';
|
|
5
|
+
export { validateLwrAppConfig } from './validation/app-config.js';
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -80,9 +80,11 @@ export function getServerModeConfig(serverMode) {
|
|
|
80
80
|
* @returns {RuntimeEnvironment} the complete runtime environment
|
|
81
81
|
*/
|
|
82
82
|
export function getRuntimeEnvironment(config) {
|
|
83
|
-
const { serverMode, lwrVersion, apiVersion, basePath } = config;
|
|
83
|
+
const { serverMode, lwrVersion, apiVersion, basePath, minify } = config;
|
|
84
|
+
const serverModeConfig = getServerModeConfig(config.serverMode);
|
|
84
85
|
return {
|
|
85
|
-
...
|
|
86
|
+
...serverModeConfig,
|
|
87
|
+
minify: minify !== null ? minify : serverModeConfig.minify,
|
|
86
88
|
featureFlags: getFeatureFlags(),
|
|
87
89
|
serverMode,
|
|
88
90
|
lwrVersion,
|
|
@@ -16,7 +16,7 @@ interface ConfigMap {
|
|
|
16
16
|
bootstrap: NormalizedLwrAppBootstrapConfig;
|
|
17
17
|
locker: RequiredLwrLockerConfig;
|
|
18
18
|
}
|
|
19
|
-
export declare const ROOT_ATTRIBUTE_KEYS: ["amdLoader", "apiVersion", "assets", "assetProviders", "assetTransformers", "bundleConfig", "cacheDir", "contentDir", "environment", "errorRoutes", "esmLoader", "staticSiteGenerator", "globalData", "globalDataDir", "hooks", "ignoreLwrConfigFile", "lwrConfigFile", "layoutsDir", "locker", "lwc", "lwrVersion", "moduleProviders", "port", "basePath", "resourceProviders", "rootDir", "routeHandlers", "routes", "serverMode", "serverType", "viewProviders", "viewTransformers"];
|
|
19
|
+
export declare const ROOT_ATTRIBUTE_KEYS: ["amdLoader", "apiVersion", "assets", "assetProviders", "assetTransformers", "bundleConfig", "cacheDir", "contentDir", "environment", "errorRoutes", "esmLoader", "staticSiteGenerator", "globalData", "globalDataDir", "hooks", "ignoreLwrConfigFile", "lwrConfigFile", "layoutsDir", "locker", "lwc", "lwrVersion", "moduleProviders", "port", "basePath", "resourceProviders", "rootDir", "routeHandlers", "routes", "serverMode", "minify", "serverType", "viewProviders", "viewTransformers", "experimentalAllowDupeRouteIds"];
|
|
20
20
|
export declare const ASSET_DIR_ATTRIBUTE_KEYS: ["alias", "dir", "urlPath"];
|
|
21
21
|
export declare const ASSET_FILE_ATTRIBUTE_KEYS: ["alias", "file", "urlPath"];
|
|
22
22
|
export declare const LOCKER_ATTRIBUTE_KEYS: ["enabled", "trustedComponents", "clientOnly"];
|
|
@@ -36,9 +36,11 @@ export const ROOT_ATTRIBUTE_KEYS = createKeys('root', [
|
|
|
36
36
|
'routeHandlers',
|
|
37
37
|
'routes',
|
|
38
38
|
'serverMode',
|
|
39
|
+
'minify',
|
|
39
40
|
'serverType',
|
|
40
41
|
'viewProviders',
|
|
41
42
|
'viewTransformers',
|
|
43
|
+
'experimentalAllowDupeRouteIds',
|
|
42
44
|
]);
|
|
43
45
|
export const ASSET_DIR_ATTRIBUTE_KEYS = createKeys('assetDir', ['alias', 'dir', 'urlPath']);
|
|
44
46
|
export const ASSET_FILE_ATTRIBUTE_KEYS = createKeys('assetFile', ['alias', 'file', 'urlPath']);
|
|
@@ -71,6 +71,8 @@ function validateRouteCommon(node, validationContext, propPrefix) {
|
|
|
71
71
|
function validateRoutes(node, validationContext, preMerge) {
|
|
72
72
|
if (node) {
|
|
73
73
|
// routes may not be defined until after config hooks are applied
|
|
74
|
+
// note: there are 2 "post" hooks (onConfig/onStart) that routes can be applied.
|
|
75
|
+
// We need to ensure that we only validate after the last one (if both are used)
|
|
74
76
|
if (!preMerge) {
|
|
75
77
|
validationContext.assertNotEmptyArray(node, 'routes');
|
|
76
78
|
}
|
|
@@ -198,7 +200,10 @@ function validateRoot(node, validationContext, preMerge) {
|
|
|
198
200
|
!preMerge && validationContext.assertRequiredKeys(node, 'root', ROOT_ATTRIBUTE_KEYS);
|
|
199
201
|
const routes = findNode(node, ['routes']);
|
|
200
202
|
const errorRoutes = findNode(node, ['errorRoutes']);
|
|
201
|
-
|
|
203
|
+
const experimentalAllowDupeRouteIds = findNode(node, ['experimentalAllowDupeRouteIds']);
|
|
204
|
+
if (experimentalAllowDupeRouteIds?.value !== true) {
|
|
205
|
+
validationContext.assertUniqueIds([...(routes?.children || []), ...(errorRoutes?.children || [])], 'routes');
|
|
206
|
+
}
|
|
202
207
|
validateRoutes(routes, validationContext, preMerge);
|
|
203
208
|
validateErrorRoutes(errorRoutes, validationContext);
|
|
204
209
|
validateRouteHandlers(findNode(node, ['routeHandlers']), validationContext);
|
package/package.cjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const path = require('path');
|
|
3
|
+
const resolve = require('resolve');
|
|
3
4
|
const rootPath = path.join(__dirname, './');
|
|
4
5
|
|
|
6
|
+
// Get the LWR Version
|
|
5
7
|
let version;
|
|
6
8
|
if (globalThis.LWR_VERSION) {
|
|
7
9
|
version = globalThis.LWR_VERSION;
|
|
@@ -9,7 +11,18 @@ if (globalThis.LWR_VERSION) {
|
|
|
9
11
|
version = JSON.parse(fs.readFileSync(path.join(rootPath, 'package.json'), 'utf-8')).version;
|
|
10
12
|
}
|
|
11
13
|
|
|
14
|
+
// Get the LWC Version
|
|
15
|
+
let lwcVersion;
|
|
16
|
+
if (globalThis.LWC_VERSION) {
|
|
17
|
+
version = globalThis.LWC_VERSION;
|
|
18
|
+
} else {
|
|
19
|
+
const packageJsonPath = resolve.sync(`lwc/package.json`);
|
|
20
|
+
const { version: packageVersion } = JSON.parse(fs.readFileSync(packageJsonPath), 'utf-8');
|
|
21
|
+
lwcVersion = packageVersion;
|
|
22
|
+
}
|
|
23
|
+
|
|
12
24
|
module.exports = {
|
|
13
25
|
rootPath,
|
|
14
|
-
version
|
|
26
|
+
version,
|
|
27
|
+
lwcVersion
|
|
15
28
|
};
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "0.9.0-alpha.
|
|
7
|
+
"version": "0.9.0-alpha.23",
|
|
8
8
|
"homepage": "https://developer.salesforce.com/docs/platform/lwr/overview",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
@@ -36,16 +36,19 @@
|
|
|
36
36
|
"package.cjs"
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@lwrjs/diagnostics": "0.9.0-alpha.
|
|
40
|
-
"@lwrjs/shared-utils": "0.9.0-alpha.
|
|
39
|
+
"@lwrjs/diagnostics": "0.9.0-alpha.23",
|
|
40
|
+
"@lwrjs/shared-utils": "0.9.0-alpha.23",
|
|
41
41
|
"fs-extra": "^10.1.0",
|
|
42
42
|
"jsonc-parser": "^3.0.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@lwrjs/types": "0.9.0-alpha.
|
|
45
|
+
"@lwrjs/types": "0.9.0-alpha.23"
|
|
46
|
+
},
|
|
47
|
+
"peerDependencies": {
|
|
48
|
+
"lwc": "2.x"
|
|
46
49
|
},
|
|
47
50
|
"engines": {
|
|
48
51
|
"node": ">=14.15.4 <19"
|
|
49
52
|
},
|
|
50
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "13106b8a0e5011dfd0fab2e361aa9b518f409fbb"
|
|
51
54
|
}
|