@lwrjs/shared-utils 0.8.0-alpha.9 → 0.8.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/env.cjs +8 -1
- package/build/cjs/fs.cjs +17 -1
- package/build/cjs/html-meta.cjs +12 -1
- package/build/cjs/index.cjs +1 -0
- package/build/cjs/logger.cjs +21 -5
- package/build/cjs/lwr-app-observer.cjs +82 -0
- package/build/cjs/urls.cjs +5 -0
- package/build/es/env.js +11 -1
- package/build/es/fs.js +17 -1
- package/build/es/html-meta.d.ts +2 -0
- package/build/es/html-meta.js +11 -0
- package/build/es/index.d.ts +1 -0
- package/build/es/index.js +1 -0
- package/build/es/logger.d.ts +7 -1
- package/build/es/logger.js +24 -4
- package/build/es/lwr-app-observer.d.ts +21 -0
- package/build/es/lwr-app-observer.js +55 -0
- package/build/es/urls.d.ts +1 -0
- package/build/es/urls.js +4 -0
- package/package.json +4 -4
package/build/cjs/env.cjs
CHANGED
|
@@ -11,7 +11,14 @@ __export(exports, {
|
|
|
11
11
|
getFeatureFlags: () => getFeatureFlags
|
|
12
12
|
});
|
|
13
13
|
function getFeatureFlags() {
|
|
14
|
+
let legacyLoader = process.env.LEGACY_LOADER !== void 0 && process.env.LEGACY_LOADER === "true" ? true : false;
|
|
15
|
+
try {
|
|
16
|
+
if (LWR) {
|
|
17
|
+
legacyLoader = LWR.LEGACY_LOADER;
|
|
18
|
+
}
|
|
19
|
+
} catch (e) {
|
|
20
|
+
}
|
|
14
21
|
return {
|
|
15
|
-
LEGACY_LOADER:
|
|
22
|
+
LEGACY_LOADER: legacyLoader
|
|
16
23
|
};
|
|
17
24
|
}
|
package/build/cjs/fs.cjs
CHANGED
|
@@ -43,10 +43,14 @@ var import_object = __toModule(require("./object.cjs"));
|
|
|
43
43
|
var import_chokidar = __toModule(require("chokidar"));
|
|
44
44
|
var import_diagnostics = __toModule(require("@lwrjs/diagnostics"));
|
|
45
45
|
var import_mime_types = __toModule(require("mime-types"));
|
|
46
|
+
var import_logger = __toModule(require("./logger.cjs"));
|
|
47
|
+
var fileCount = 0;
|
|
48
|
+
var files = new Map();
|
|
46
49
|
function hashContent(source) {
|
|
47
50
|
return import_crypto.default.createHash("md5").update(source).digest("hex");
|
|
48
51
|
}
|
|
49
52
|
function readFile(filePath) {
|
|
53
|
+
logMetrics(filePath);
|
|
50
54
|
return import_fs.default.readFileSync(filePath, "utf8");
|
|
51
55
|
}
|
|
52
56
|
function resolveFileExtension(filePath) {
|
|
@@ -77,7 +81,7 @@ function setupWatcher(onModuleChange) {
|
|
|
77
81
|
const fileWatcher = createFileWatcher();
|
|
78
82
|
fileWatcher.on("change", (0, import_object.debounce)((file) => onModuleChange(file), 500));
|
|
79
83
|
fileWatcher.on("unlink", (0, import_object.debounce)((file) => onModuleChange(file), 500));
|
|
80
|
-
fileWatcher.on("add", (file) =>
|
|
84
|
+
fileWatcher.on("add", (file) => import_logger.logger.info(`Watching: ${file}`));
|
|
81
85
|
return fileWatcher;
|
|
82
86
|
}
|
|
83
87
|
function canResolveView(source, type) {
|
|
@@ -124,3 +128,15 @@ function normalizeResourcePath(rawPath, {rootDir, assets, contentDir, layoutsDir
|
|
|
124
128
|
return alias;
|
|
125
129
|
});
|
|
126
130
|
}
|
|
131
|
+
function logMetrics(filePath) {
|
|
132
|
+
if (import_logger.logger.currentLevel == import_logger.DEBUG || import_logger.logger.currentLevel == import_logger.VERBOSE) {
|
|
133
|
+
let count = files.get(filePath) || 0;
|
|
134
|
+
if (++count % 100 === 0) {
|
|
135
|
+
import_logger.logger.debug(`[${count}] Repeat Read ${filePath}`);
|
|
136
|
+
}
|
|
137
|
+
files.set(filePath, count);
|
|
138
|
+
if (++fileCount % 1e3 === 0) {
|
|
139
|
+
import_logger.logger.debug(`Open file count [${fileCount}]`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
package/build/cjs/html-meta.cjs
CHANGED
|
@@ -24,7 +24,9 @@ var __toModule = (module2) => {
|
|
|
24
24
|
// packages/@lwrjs/shared-utils/src/html-meta.ts
|
|
25
25
|
__markAsModule(exports);
|
|
26
26
|
__export(exports, {
|
|
27
|
-
extractMetadataFromHtml: () => extractMetadataFromHtml
|
|
27
|
+
extractMetadataFromHtml: () => extractMetadataFromHtml,
|
|
28
|
+
isRelative: () => isRelative,
|
|
29
|
+
isSelfUrl: () => isSelfUrl
|
|
28
30
|
});
|
|
29
31
|
var import_identity = __toModule(require("./identity.cjs"));
|
|
30
32
|
var import_parse5_sax_parser = __toModule(require("parse5-sax-parser"));
|
|
@@ -38,12 +40,21 @@ function parseAssetLocation(htmlSource, tagName, attrLocation) {
|
|
|
38
40
|
return {
|
|
39
41
|
url,
|
|
40
42
|
tagName,
|
|
43
|
+
relative: isRelative(url),
|
|
41
44
|
location: {
|
|
42
45
|
startOffset: startOffset + keyAttr.length + 2,
|
|
43
46
|
endOffset: endOffset - 1
|
|
44
47
|
}
|
|
45
48
|
};
|
|
46
49
|
}
|
|
50
|
+
function isRelative(url) {
|
|
51
|
+
return !url?.match(isNotRelativeRegex);
|
|
52
|
+
}
|
|
53
|
+
var isNotRelativeRegex = /^(http(s)?:\/\/|\/)/i;
|
|
54
|
+
function isSelfUrl(url) {
|
|
55
|
+
return !url || !!url.match(isSelfUrlRegex);
|
|
56
|
+
}
|
|
57
|
+
var isSelfUrlRegex = /^\s*(data:|#)/i;
|
|
47
58
|
async function extractMetadataFromHtml(htmlSource) {
|
|
48
59
|
return new Promise((resolve, reject) => {
|
|
49
60
|
const customElements = [];
|
package/build/cjs/index.cjs
CHANGED
|
@@ -34,3 +34,4 @@ __exportStar(exports, __toModule(require("./mappings.cjs")));
|
|
|
34
34
|
__exportStar(exports, __toModule(require("./urls.cjs")));
|
|
35
35
|
__exportStar(exports, __toModule(require("./env.cjs")));
|
|
36
36
|
__exportStar(exports, __toModule(require("./logger.cjs")));
|
|
37
|
+
__exportStar(exports, __toModule(require("./lwr-app-observer.cjs")));
|
package/build/cjs/logger.cjs
CHANGED
|
@@ -38,8 +38,10 @@ var DEBUG = "debug";
|
|
|
38
38
|
var INFO = "info";
|
|
39
39
|
var WARN = "warn";
|
|
40
40
|
var ERROR = "error";
|
|
41
|
+
var options = {};
|
|
42
|
+
var DUPES = new Set();
|
|
41
43
|
var currentLevel = process.env.LOG_LEVEL || INFO;
|
|
42
|
-
|
|
44
|
+
function log(level, message, additionalInfo) {
|
|
43
45
|
const LOG_LEVEL = process.env.LOG_LEVEL || INFO;
|
|
44
46
|
if (currentLevel !== LOG_LEVEL) {
|
|
45
47
|
currentLevel = LOG_LEVEL;
|
|
@@ -63,21 +65,31 @@ var log = (level, message, additionalInfo) => {
|
|
|
63
65
|
shouldLog = true;
|
|
64
66
|
break;
|
|
65
67
|
}
|
|
68
|
+
if (shouldLog && options.dedupe && options.dedupe.has(level)) {
|
|
69
|
+
const key = `[${level}] : ${message}`;
|
|
70
|
+
if (DUPES.has(key)) {
|
|
71
|
+
shouldLog = false;
|
|
72
|
+
} else {
|
|
73
|
+
DUPES.add(key);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
66
76
|
if (shouldLog) {
|
|
67
77
|
let logMethod;
|
|
68
78
|
if (level == ERROR) {
|
|
69
79
|
logMethod = console.error;
|
|
80
|
+
} else if (level == WARN) {
|
|
81
|
+
logMethod = console.warn;
|
|
70
82
|
} else {
|
|
71
83
|
logMethod = console.log;
|
|
72
84
|
}
|
|
73
85
|
if (additionalInfo) {
|
|
74
|
-
logMethod(`[${level}]
|
|
86
|
+
logMethod(`[${level}] ${message}
|
|
75
87
|
Additional Info: ${JSON.stringify(additionalInfo)}`);
|
|
76
88
|
} else {
|
|
77
|
-
logMethod(`[${level}]
|
|
89
|
+
logMethod(`[${level}] ${message}`);
|
|
78
90
|
}
|
|
79
91
|
}
|
|
80
|
-
}
|
|
92
|
+
}
|
|
81
93
|
var stringifyError = (error) => {
|
|
82
94
|
if (error instanceof import_diagnostics.DiagnosticsError) {
|
|
83
95
|
return JSON.stringify({
|
|
@@ -104,5 +116,9 @@ var logger = {
|
|
|
104
116
|
info: (message, additionalInfo) => log(INFO, message, additionalInfo),
|
|
105
117
|
warn: (message, additionalInfo) => log(WARN, message, additionalInfo),
|
|
106
118
|
error: (error, additionalInfo) => log(ERROR, stringifyError(error), additionalInfo),
|
|
107
|
-
log
|
|
119
|
+
log,
|
|
120
|
+
setOptions: (opts) => {
|
|
121
|
+
options = opts;
|
|
122
|
+
},
|
|
123
|
+
currentLevel
|
|
108
124
|
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, {get: all[name], enumerable: true});
|
|
11
|
+
};
|
|
12
|
+
var __exportStar = (target, module2, desc) => {
|
|
13
|
+
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(module2))
|
|
15
|
+
if (!__hasOwnProp.call(target, key) && key !== "default")
|
|
16
|
+
__defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
|
|
17
|
+
}
|
|
18
|
+
return target;
|
|
19
|
+
};
|
|
20
|
+
var __toModule = (module2) => {
|
|
21
|
+
return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
// packages/@lwrjs/shared-utils/src/lwr-app-observer.ts
|
|
25
|
+
__markAsModule(exports);
|
|
26
|
+
__export(exports, {
|
|
27
|
+
LwrApplicationObserver: () => LwrApplicationObserver
|
|
28
|
+
});
|
|
29
|
+
var import_events = __toModule(require("events"));
|
|
30
|
+
var MODULE_DEF_CHANGED_EVENT = "module_definition_changed";
|
|
31
|
+
var MODULE_SOURCE_CHANGED_EVENT = "module_source_changed";
|
|
32
|
+
var VIEW_SOURCE_CHANGED_EVENT = "view_source_changed";
|
|
33
|
+
var ASSET_SOURCE_CHANGED_EVENT = "asset_source_changed";
|
|
34
|
+
var LwrEmitter = class {
|
|
35
|
+
constructor(observer) {
|
|
36
|
+
this.observer = observer;
|
|
37
|
+
}
|
|
38
|
+
notifyAssetSourceChanged(payload) {
|
|
39
|
+
this.observer.emit(ASSET_SOURCE_CHANGED_EVENT, {
|
|
40
|
+
eventType: ASSET_SOURCE_CHANGED_EVENT,
|
|
41
|
+
payload
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
notifyViewSourceChanged(payload) {
|
|
45
|
+
this.observer.emit(VIEW_SOURCE_CHANGED_EVENT, {
|
|
46
|
+
eventType: VIEW_SOURCE_CHANGED_EVENT,
|
|
47
|
+
payload
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
notifyModuleDefinitionChanged(payload) {
|
|
51
|
+
this.observer.emit(MODULE_DEF_CHANGED_EVENT, {
|
|
52
|
+
eventType: MODULE_DEF_CHANGED_EVENT,
|
|
53
|
+
payload
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
notifyModuleSourceChanged(payload) {
|
|
57
|
+
this.observer.emit(MODULE_SOURCE_CHANGED_EVENT, {
|
|
58
|
+
eventType: MODULE_SOURCE_CHANGED_EVENT,
|
|
59
|
+
payload
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
var LwrApplicationObserver = class extends import_events.EventEmitter {
|
|
64
|
+
constructor() {
|
|
65
|
+
super();
|
|
66
|
+
}
|
|
67
|
+
onModuleDefinitionChange(listener) {
|
|
68
|
+
this.on(MODULE_DEF_CHANGED_EVENT, listener);
|
|
69
|
+
}
|
|
70
|
+
onModuleSourceChange(listener) {
|
|
71
|
+
this.on(MODULE_SOURCE_CHANGED_EVENT, listener);
|
|
72
|
+
}
|
|
73
|
+
onViewSourceChange(listener) {
|
|
74
|
+
this.on(VIEW_SOURCE_CHANGED_EVENT, listener);
|
|
75
|
+
}
|
|
76
|
+
onAssetSourceChange(listener) {
|
|
77
|
+
this.on(ASSET_SOURCE_CHANGED_EVENT, listener);
|
|
78
|
+
}
|
|
79
|
+
createLwrEmitter() {
|
|
80
|
+
return new LwrEmitter(this);
|
|
81
|
+
}
|
|
82
|
+
};
|
package/build/cjs/urls.cjs
CHANGED
|
@@ -29,6 +29,7 @@ __export(exports, {
|
|
|
29
29
|
getClientBootstrapConfigurationRoutes: () => getClientBootstrapConfigurationRoutes,
|
|
30
30
|
getClientBootstrapConfigurationUri: () => getClientBootstrapConfigurationUri,
|
|
31
31
|
getClientBootstrapConfigurationUriPrefix: () => getClientBootstrapConfigurationUriPrefix,
|
|
32
|
+
isModuleOrBundleUrl: () => isModuleOrBundleUrl,
|
|
32
33
|
removeClientBootstrapConfigurationSuffix: () => removeClientBootstrapConfigurationSuffix
|
|
33
34
|
});
|
|
34
35
|
var import_path_to_regexp = __toModule(require("path-to-regexp"));
|
|
@@ -95,3 +96,7 @@ function extractRequestParams(parameterizedRoute, resolvedUrl, existingParams) {
|
|
|
95
96
|
}
|
|
96
97
|
return params;
|
|
97
98
|
}
|
|
99
|
+
var isModuleOrBundleRegEx = /^\/.*\/(module|bundle)\//i;
|
|
100
|
+
function isModuleOrBundleUrl(url) {
|
|
101
|
+
return isModuleOrBundleRegEx.test(url);
|
|
102
|
+
}
|
package/build/es/env.js
CHANGED
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
export function getFeatureFlags() {
|
|
2
|
+
let legacyLoader = process.env.LEGACY_LOADER !== undefined && process.env.LEGACY_LOADER === 'true' ? true : false;
|
|
3
|
+
try {
|
|
4
|
+
// Use the Shim for MRT since we don't have access to managing environment variables
|
|
5
|
+
if (LWR) {
|
|
6
|
+
legacyLoader = LWR.LEGACY_LOADER;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
catch (e) {
|
|
10
|
+
// No shim, ignore error
|
|
11
|
+
}
|
|
2
12
|
return {
|
|
3
13
|
// DEFAULT LEGACY_LOADER = false;
|
|
4
|
-
LEGACY_LOADER:
|
|
14
|
+
LEGACY_LOADER: legacyLoader,
|
|
5
15
|
};
|
|
6
16
|
}
|
|
7
17
|
//# sourceMappingURL=env.js.map
|
package/build/es/fs.js
CHANGED
|
@@ -6,6 +6,9 @@ import { debounce } from './object.js';
|
|
|
6
6
|
import chokidar from 'chokidar';
|
|
7
7
|
import { LwrUnresolvableError, createSingleDiagnosticError, descriptions } from '@lwrjs/diagnostics';
|
|
8
8
|
import { lookup } from 'mime-types';
|
|
9
|
+
import { DEBUG, logger, VERBOSE } from './logger.js';
|
|
10
|
+
let fileCount = 0;
|
|
11
|
+
const files = new Map();
|
|
9
12
|
/**
|
|
10
13
|
* Create a hash string for a source
|
|
11
14
|
* @param source
|
|
@@ -18,6 +21,7 @@ export function hashContent(source) {
|
|
|
18
21
|
* @param filePath
|
|
19
22
|
*/
|
|
20
23
|
export function readFile(filePath) {
|
|
24
|
+
logMetrics(filePath);
|
|
21
25
|
return fs.readFileSync(filePath, 'utf8');
|
|
22
26
|
}
|
|
23
27
|
/**
|
|
@@ -67,7 +71,7 @@ export function setupWatcher(onModuleChange) {
|
|
|
67
71
|
const fileWatcher = createFileWatcher();
|
|
68
72
|
fileWatcher.on('change', debounce((file) => onModuleChange(file), 500));
|
|
69
73
|
fileWatcher.on('unlink', debounce((file) => onModuleChange(file), 500));
|
|
70
|
-
fileWatcher.on('add', (file) =>
|
|
74
|
+
fileWatcher.on('add', (file) => logger.info(`Watching: ${file}`));
|
|
71
75
|
return fileWatcher;
|
|
72
76
|
}
|
|
73
77
|
/**
|
|
@@ -137,4 +141,16 @@ export function normalizeResourcePath(rawPath, { rootDir, assets, contentDir, la
|
|
|
137
141
|
});
|
|
138
142
|
}
|
|
139
143
|
export { lookup as mimeLookup };
|
|
144
|
+
function logMetrics(filePath) {
|
|
145
|
+
if (logger.currentLevel == DEBUG || logger.currentLevel == VERBOSE) {
|
|
146
|
+
let count = files.get(filePath) || 0;
|
|
147
|
+
if (++count % 100 === 0) {
|
|
148
|
+
logger.debug(`[${count}] Repeat Read ${filePath}`);
|
|
149
|
+
}
|
|
150
|
+
files.set(filePath, count);
|
|
151
|
+
if (++fileCount % 1000 === 0) {
|
|
152
|
+
logger.debug(`Open file count [${fileCount}]`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
140
156
|
//# sourceMappingURL=fs.js.map
|
package/build/es/html-meta.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { RenderedViewMetadata } from '@lwrjs/types';
|
|
2
|
+
export declare function isRelative(url: string): boolean;
|
|
3
|
+
export declare function isSelfUrl(url: string): boolean;
|
|
2
4
|
/**
|
|
3
5
|
* Pull the custom elements and img tags out of an HTML string, to use as metadata
|
|
4
6
|
* @param htmlSource - An HTML string to parse
|
package/build/es/html-meta.js
CHANGED
|
@@ -12,12 +12,23 @@ function parseAssetLocation(htmlSource, tagName, attrLocation) {
|
|
|
12
12
|
return {
|
|
13
13
|
url,
|
|
14
14
|
tagName,
|
|
15
|
+
relative: isRelative(url),
|
|
15
16
|
location: {
|
|
16
17
|
startOffset: startOffset + keyAttr.length + 2 /* =" */,
|
|
17
18
|
endOffset: endOffset - 1,
|
|
18
19
|
},
|
|
19
20
|
};
|
|
20
21
|
}
|
|
22
|
+
// Detect if this is a relative URL
|
|
23
|
+
export function isRelative(url) {
|
|
24
|
+
return !url?.match(isNotRelativeRegex);
|
|
25
|
+
}
|
|
26
|
+
const isNotRelativeRegex = /^(http(s)?:\/\/|\/)/i;
|
|
27
|
+
// Detect if this is just a self referential URL
|
|
28
|
+
export function isSelfUrl(url) {
|
|
29
|
+
return !url || !!url.match(isSelfUrlRegex);
|
|
30
|
+
}
|
|
31
|
+
const isSelfUrlRegex = /^\s*(data:|#)/i;
|
|
21
32
|
/**
|
|
22
33
|
* Pull the custom elements and img tags out of an HTML string, to use as metadata
|
|
23
34
|
* @param htmlSource - An HTML string to parse
|
package/build/es/index.d.ts
CHANGED
package/build/es/index.js
CHANGED
package/build/es/logger.d.ts
CHANGED
|
@@ -4,6 +4,10 @@ export declare const DEBUG: LEVEL;
|
|
|
4
4
|
export declare const INFO: LEVEL;
|
|
5
5
|
export declare const WARN: LEVEL;
|
|
6
6
|
export declare const ERROR: LEVEL;
|
|
7
|
+
declare type LoggerOptions = {
|
|
8
|
+
dedupe?: Set<string>;
|
|
9
|
+
};
|
|
10
|
+
declare function log(level: string, message: string, additionalInfo?: any): void;
|
|
7
11
|
export declare const stringifyError: (error: any) => string;
|
|
8
12
|
export declare const logger: {
|
|
9
13
|
verbose: (message: string, additionalInfo?: any) => void;
|
|
@@ -11,7 +15,9 @@ export declare const logger: {
|
|
|
11
15
|
info: (message: string, additionalInfo?: any) => void;
|
|
12
16
|
warn: (message: string, additionalInfo?: any) => void;
|
|
13
17
|
error: (error: any, additionalInfo?: any) => void;
|
|
14
|
-
log:
|
|
18
|
+
log: typeof log;
|
|
19
|
+
setOptions: (opts: LoggerOptions) => void;
|
|
20
|
+
currentLevel: string;
|
|
15
21
|
};
|
|
16
22
|
export {};
|
|
17
23
|
//# sourceMappingURL=logger.d.ts.map
|
package/build/es/logger.js
CHANGED
|
@@ -4,8 +4,10 @@ export const DEBUG = 'debug';
|
|
|
4
4
|
export const INFO = 'info';
|
|
5
5
|
export const WARN = 'warn';
|
|
6
6
|
export const ERROR = 'error';
|
|
7
|
+
let options = {};
|
|
8
|
+
const DUPES = new Set();
|
|
7
9
|
let currentLevel = process.env.LOG_LEVEL || INFO;
|
|
8
|
-
|
|
10
|
+
function log(level, message, additionalInfo) {
|
|
9
11
|
const LOG_LEVEL = process.env.LOG_LEVEL || INFO;
|
|
10
12
|
if (currentLevel !== LOG_LEVEL) {
|
|
11
13
|
currentLevel = LOG_LEVEL;
|
|
@@ -29,22 +31,36 @@ const log = (level, message, additionalInfo) => {
|
|
|
29
31
|
shouldLog = true;
|
|
30
32
|
break;
|
|
31
33
|
}
|
|
34
|
+
// Check if we should suppress dupes and we have already logged this message
|
|
35
|
+
if (shouldLog && options.dedupe && options.dedupe.has(level)) {
|
|
36
|
+
const key = `[${level}] : ${message}`;
|
|
37
|
+
if (DUPES.has(key)) {
|
|
38
|
+
shouldLog = false;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// add key to de-duplicate cache
|
|
42
|
+
DUPES.add(key);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
32
45
|
if (shouldLog) {
|
|
33
46
|
let logMethod;
|
|
34
47
|
if (level == ERROR) {
|
|
35
48
|
logMethod = console.error;
|
|
36
49
|
}
|
|
50
|
+
else if (level == WARN) {
|
|
51
|
+
logMethod = console.warn;
|
|
52
|
+
}
|
|
37
53
|
else {
|
|
38
54
|
logMethod = console.log;
|
|
39
55
|
}
|
|
40
56
|
if (additionalInfo) {
|
|
41
|
-
logMethod(`[${level}]
|
|
57
|
+
logMethod(`[${level}] ${message} \nAdditional Info: ${JSON.stringify(additionalInfo)}`);
|
|
42
58
|
}
|
|
43
59
|
else {
|
|
44
|
-
logMethod(`[${level}]
|
|
60
|
+
logMethod(`[${level}] ${message}`);
|
|
45
61
|
}
|
|
46
62
|
}
|
|
47
|
-
}
|
|
63
|
+
}
|
|
48
64
|
export const stringifyError = (error) => {
|
|
49
65
|
if (error instanceof DiagnosticsError) {
|
|
50
66
|
return JSON.stringify({
|
|
@@ -74,5 +90,9 @@ export const logger = {
|
|
|
74
90
|
warn: (message, additionalInfo) => log(WARN, message, additionalInfo),
|
|
75
91
|
error: (error, additionalInfo) => log(ERROR, stringifyError(error), additionalInfo),
|
|
76
92
|
log,
|
|
93
|
+
setOptions: (opts) => {
|
|
94
|
+
options = opts;
|
|
95
|
+
},
|
|
96
|
+
currentLevel,
|
|
77
97
|
};
|
|
78
98
|
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import { ModuleCompiled, LwrAppEmitter, LwrAppObserver, ModuleDefinitionChangedEvent, ModuleSourceChangedEvent, CompiledView, AssetSource, AssetSourceChangedEvent, ViewSourceChangedEvent } from '@lwrjs/types';
|
|
4
|
+
declare class LwrEmitter implements LwrAppEmitter {
|
|
5
|
+
observer: LwrApplicationObserver;
|
|
6
|
+
constructor(observer: LwrApplicationObserver);
|
|
7
|
+
notifyAssetSourceChanged(payload: AssetSource): void;
|
|
8
|
+
notifyViewSourceChanged(payload: CompiledView): void;
|
|
9
|
+
notifyModuleDefinitionChanged(payload: ModuleCompiled): void;
|
|
10
|
+
notifyModuleSourceChanged(payload: ModuleCompiled): void;
|
|
11
|
+
}
|
|
12
|
+
export declare class LwrApplicationObserver extends EventEmitter implements LwrAppObserver {
|
|
13
|
+
constructor();
|
|
14
|
+
onModuleDefinitionChange(listener: (event: ModuleDefinitionChangedEvent) => void): void;
|
|
15
|
+
onModuleSourceChange(listener: (event: ModuleSourceChangedEvent) => void): void;
|
|
16
|
+
onViewSourceChange(listener: (event: ViewSourceChangedEvent) => void): void;
|
|
17
|
+
onAssetSourceChange(listener: (event: AssetSourceChangedEvent) => void): void;
|
|
18
|
+
createLwrEmitter(): LwrEmitter;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=lwr-app-observer.d.ts.map
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
const MODULE_DEF_CHANGED_EVENT = 'module_definition_changed';
|
|
3
|
+
const MODULE_SOURCE_CHANGED_EVENT = 'module_source_changed';
|
|
4
|
+
const VIEW_SOURCE_CHANGED_EVENT = 'view_source_changed';
|
|
5
|
+
const ASSET_SOURCE_CHANGED_EVENT = 'asset_source_changed';
|
|
6
|
+
class LwrEmitter {
|
|
7
|
+
constructor(observer) {
|
|
8
|
+
this.observer = observer;
|
|
9
|
+
}
|
|
10
|
+
notifyAssetSourceChanged(payload) {
|
|
11
|
+
this.observer.emit(ASSET_SOURCE_CHANGED_EVENT, {
|
|
12
|
+
eventType: ASSET_SOURCE_CHANGED_EVENT,
|
|
13
|
+
payload,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
notifyViewSourceChanged(payload) {
|
|
17
|
+
this.observer.emit(VIEW_SOURCE_CHANGED_EVENT, {
|
|
18
|
+
eventType: VIEW_SOURCE_CHANGED_EVENT,
|
|
19
|
+
payload,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
notifyModuleDefinitionChanged(payload) {
|
|
23
|
+
this.observer.emit(MODULE_DEF_CHANGED_EVENT, {
|
|
24
|
+
eventType: MODULE_DEF_CHANGED_EVENT,
|
|
25
|
+
payload,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
notifyModuleSourceChanged(payload) {
|
|
29
|
+
this.observer.emit(MODULE_SOURCE_CHANGED_EVENT, {
|
|
30
|
+
eventType: MODULE_SOURCE_CHANGED_EVENT,
|
|
31
|
+
payload,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class LwrApplicationObserver extends EventEmitter {
|
|
36
|
+
constructor() {
|
|
37
|
+
super();
|
|
38
|
+
}
|
|
39
|
+
onModuleDefinitionChange(listener) {
|
|
40
|
+
this.on(MODULE_DEF_CHANGED_EVENT, listener);
|
|
41
|
+
}
|
|
42
|
+
onModuleSourceChange(listener) {
|
|
43
|
+
this.on(MODULE_SOURCE_CHANGED_EVENT, listener);
|
|
44
|
+
}
|
|
45
|
+
onViewSourceChange(listener) {
|
|
46
|
+
this.on(VIEW_SOURCE_CHANGED_EVENT, listener);
|
|
47
|
+
}
|
|
48
|
+
onAssetSourceChange(listener) {
|
|
49
|
+
this.on(ASSET_SOURCE_CHANGED_EVENT, listener);
|
|
50
|
+
}
|
|
51
|
+
createLwrEmitter() {
|
|
52
|
+
return new LwrEmitter(this);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=lwr-app-observer.js.map
|
package/build/es/urls.d.ts
CHANGED
|
@@ -27,4 +27,5 @@ export declare function getClientBootstrapConfigurationRoutes(): string[];
|
|
|
27
27
|
* @returns A parameter maps with existing parameters plus token value pairs from route and url
|
|
28
28
|
*/
|
|
29
29
|
export declare function extractRequestParams(parameterizedRoute: string, resolvedUrl: string, existingParams?: Record<string, string>): Record<string, string>;
|
|
30
|
+
export declare function isModuleOrBundleUrl(url: string): boolean;
|
|
30
31
|
//# sourceMappingURL=urls.d.ts.map
|
package/build/es/urls.js
CHANGED
|
@@ -87,4 +87,8 @@ export function extractRequestParams(parameterizedRoute, resolvedUrl, existingPa
|
|
|
87
87
|
}
|
|
88
88
|
return params;
|
|
89
89
|
}
|
|
90
|
+
const isModuleOrBundleRegEx = /^\/.*\/(module|bundle)\//i;
|
|
91
|
+
export function isModuleOrBundleUrl(url) {
|
|
92
|
+
return isModuleOrBundleRegEx.test(url);
|
|
93
|
+
}
|
|
90
94
|
//# sourceMappingURL=urls.js.map
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "0.8.
|
|
7
|
+
"version": "0.8.1",
|
|
8
8
|
"homepage": "https://developer.salesforce.com/docs/platform/lwr/overview",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
@@ -45,13 +45,13 @@
|
|
|
45
45
|
"winston": "^3.7.2"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@lwrjs/diagnostics": "0.8.
|
|
49
|
-
"@lwrjs/types": "0.8.
|
|
48
|
+
"@lwrjs/diagnostics": "0.8.1",
|
|
49
|
+
"@lwrjs/types": "0.8.1",
|
|
50
50
|
"@types/mime-types": "2.1.1",
|
|
51
51
|
"@types/path-to-regexp": "^1.7.0"
|
|
52
52
|
},
|
|
53
53
|
"engines": {
|
|
54
54
|
"node": ">=14.15.4 <19"
|
|
55
55
|
},
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "171c43556c5624849c8ee6b61ef6de5b65630e38"
|
|
57
57
|
}
|