@lwrjs/asset-transformer 0.10.0-alpha.8 → 0.10.0
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/index.cjs +58 -4
- package/build/es/index.d.ts +2 -2
- package/build/es/index.js +66 -5
- package/package.json +20 -5
package/build/cjs/index.cjs
CHANGED
|
@@ -28,15 +28,69 @@ __export(exports, {
|
|
|
28
28
|
});
|
|
29
29
|
var import_shared_utils = __toModule(require("@lwrjs/shared-utils"));
|
|
30
30
|
var import_css = __toModule(require("./metadata-collectors/css.cjs"));
|
|
31
|
+
var import_path = __toModule(require("path"));
|
|
31
32
|
var CSS_MIME = (0, import_shared_utils.mimeLookup)(".css");
|
|
32
|
-
function defaultAssetTransformer(
|
|
33
|
+
function defaultAssetTransformer(_options, lwrGlobalContext) {
|
|
34
|
+
const {assetRegistry} = lwrGlobalContext;
|
|
33
35
|
return {
|
|
34
|
-
name: "default-asset-transformer",
|
|
35
|
-
async
|
|
36
|
+
name: "lwr-default-asset-transformer",
|
|
37
|
+
async transformUri(assetUri, assetDef, runtimeEnvironment) {
|
|
38
|
+
const {entry, uri: existingUri} = assetUri;
|
|
39
|
+
const {type, ownHash} = assetDef;
|
|
40
|
+
const {apiVersion, immutableAssets, basePath} = runtimeEnvironment;
|
|
41
|
+
const immutable = immutableAssets ? "immutable/" : "";
|
|
42
|
+
const hash = immutableAssets ? ownHash : "latest";
|
|
43
|
+
const relativePath = basePath ? (0, import_path.relative)(basePath, existingUri) : existingUri;
|
|
44
|
+
const uri = (0, import_path.join)(`${basePath}/${apiVersion}/${type}/${immutable}s/${hash}`, encodeURI(relativePath));
|
|
45
|
+
import_shared_utils.logger.debug(`[${this.name}] normalized url ${entry} -> ${uri}`);
|
|
46
|
+
return {
|
|
47
|
+
...assetUri,
|
|
48
|
+
uri,
|
|
49
|
+
entry,
|
|
50
|
+
external: assetDef.type === "external",
|
|
51
|
+
immutable: !!immutableAssets
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
async transformSource(assetSource, runtimeEnvironment) {
|
|
36
55
|
if (assetSource.mime === CSS_MIME) {
|
|
56
|
+
import_shared_utils.logger.debug(`[${this.name}] extract metadata ${assetSource.entry}`);
|
|
57
|
+
const code = assetSource.content("utf-8");
|
|
37
58
|
const metadata = await (0, import_css.linkCss)(code.toString(), assetSource.entry);
|
|
38
|
-
|
|
59
|
+
const linkedAsset = await linkAsset(code, {
|
|
60
|
+
...assetSource,
|
|
61
|
+
metadata
|
|
62
|
+
}, runtimeEnvironment, assetRegistry.resolveAssetUri);
|
|
63
|
+
return {
|
|
64
|
+
source: linkedAsset,
|
|
65
|
+
metadata
|
|
66
|
+
};
|
|
39
67
|
}
|
|
68
|
+
return void 0;
|
|
40
69
|
}
|
|
41
70
|
};
|
|
42
71
|
}
|
|
72
|
+
async function linkAsset(source, assetSource, runtimeEnvironment, resolveUri) {
|
|
73
|
+
const assetReferences = assetSource.metadata?.assetReferences;
|
|
74
|
+
if (Buffer.isBuffer(source) || !assetReferences || assetReferences.length === 0) {
|
|
75
|
+
return source;
|
|
76
|
+
}
|
|
77
|
+
const codeStringBuilder = (0, import_shared_utils.createStringBuilder)(source);
|
|
78
|
+
const importer = assetSource.entry;
|
|
79
|
+
for (const assetRef of assetReferences) {
|
|
80
|
+
const {
|
|
81
|
+
url,
|
|
82
|
+
relative: relative2,
|
|
83
|
+
location: {startOffset, endOffset}
|
|
84
|
+
} = assetRef;
|
|
85
|
+
if (relative2) {
|
|
86
|
+
try {
|
|
87
|
+
assetRef.override = await resolveUri({specifier: url, importer}, runtimeEnvironment);
|
|
88
|
+
const overrideUrl = assetRef.override?.uri;
|
|
89
|
+
codeStringBuilder.overwrite(startOffset, endOffset, overrideUrl || url);
|
|
90
|
+
} catch (err) {
|
|
91
|
+
import_shared_utils.logger.warn(`Failed to resolve reference '${url}' in asset '${importer}'`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return codeStringBuilder.toString();
|
|
96
|
+
}
|
package/build/es/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { AssetTransformPlugin } from '@lwrjs/types';
|
|
1
|
+
import type { AssetTransformPlugin, ProviderContext } from '@lwrjs/types';
|
|
2
2
|
interface AssetTransformerOptions {
|
|
3
3
|
minify?: boolean;
|
|
4
4
|
}
|
|
5
|
-
export default function defaultAssetTransformer(
|
|
5
|
+
export default function defaultAssetTransformer(_options: AssetTransformerOptions, lwrGlobalContext: ProviderContext): AssetTransformPlugin;
|
|
6
6
|
export {};
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
package/build/es/index.js
CHANGED
|
@@ -1,15 +1,76 @@
|
|
|
1
|
-
import { mimeLookup } from '@lwrjs/shared-utils';
|
|
1
|
+
import { createStringBuilder, logger, mimeLookup } from '@lwrjs/shared-utils';
|
|
2
2
|
import { linkCss } from './metadata-collectors/css.js';
|
|
3
|
+
import { join, relative } from 'path';
|
|
3
4
|
const CSS_MIME = mimeLookup('.css');
|
|
4
|
-
export default function defaultAssetTransformer(
|
|
5
|
+
export default function defaultAssetTransformer(_options, lwrGlobalContext) {
|
|
6
|
+
const { assetRegistry } = lwrGlobalContext;
|
|
5
7
|
return {
|
|
6
|
-
name: 'default-asset-transformer',
|
|
7
|
-
|
|
8
|
+
name: 'lwr-default-asset-transformer',
|
|
9
|
+
/**
|
|
10
|
+
* Asset url normalization
|
|
11
|
+
*/
|
|
12
|
+
async transformUri(assetUri, assetDef, runtimeEnvironment) {
|
|
13
|
+
const { entry, uri: existingUri } = assetUri;
|
|
14
|
+
const { type, ownHash } = assetDef;
|
|
15
|
+
const { apiVersion, immutableAssets, basePath } = runtimeEnvironment;
|
|
16
|
+
const immutable = immutableAssets ? 'immutable/' : '';
|
|
17
|
+
const hash = immutableAssets ? ownHash : 'latest';
|
|
18
|
+
const relativePath = basePath ? relative(basePath, existingUri) : existingUri;
|
|
19
|
+
const uri = join(`${basePath}/${apiVersion}/${type}/${immutable}s/${hash}`, encodeURI(relativePath));
|
|
20
|
+
logger.debug(`[${this.name}] normalized url ${entry} -> ${uri}`);
|
|
21
|
+
return {
|
|
22
|
+
...assetUri,
|
|
23
|
+
uri,
|
|
24
|
+
entry,
|
|
25
|
+
external: assetDef.type === 'external',
|
|
26
|
+
immutable: !!immutableAssets,
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
/**
|
|
30
|
+
* Transforms CSS. Inserts relative links
|
|
31
|
+
*/
|
|
32
|
+
async transformSource(assetSource, runtimeEnvironment) {
|
|
8
33
|
if (assetSource.mime === CSS_MIME) {
|
|
34
|
+
logger.debug(`[${this.name}] extract metadata ${assetSource.entry}`);
|
|
35
|
+
const code = assetSource.content('utf-8');
|
|
9
36
|
const metadata = await linkCss(code.toString(), assetSource.entry);
|
|
10
|
-
|
|
37
|
+
const linkedAsset = await linkAsset(code, {
|
|
38
|
+
...assetSource,
|
|
39
|
+
metadata,
|
|
40
|
+
}, runtimeEnvironment, assetRegistry.resolveAssetUri);
|
|
41
|
+
return {
|
|
42
|
+
source: linkedAsset,
|
|
43
|
+
metadata,
|
|
44
|
+
};
|
|
11
45
|
}
|
|
46
|
+
// Source not modified move on
|
|
47
|
+
return undefined;
|
|
12
48
|
},
|
|
13
49
|
};
|
|
14
50
|
}
|
|
51
|
+
async function linkAsset(source, assetSource, runtimeEnvironment, resolveUri) {
|
|
52
|
+
const assetReferences = assetSource.metadata?.assetReferences;
|
|
53
|
+
if (Buffer.isBuffer(source) || !assetReferences || assetReferences.length === 0) {
|
|
54
|
+
return source;
|
|
55
|
+
}
|
|
56
|
+
const codeStringBuilder = createStringBuilder(source);
|
|
57
|
+
const importer = assetSource.entry;
|
|
58
|
+
for (const assetRef of assetReferences) {
|
|
59
|
+
const { url, relative, location: { startOffset, endOffset }, } = assetRef;
|
|
60
|
+
// Only override relative assets
|
|
61
|
+
if (relative) {
|
|
62
|
+
try {
|
|
63
|
+
// eslint-disable-next-line no-await-in-loop
|
|
64
|
+
assetRef.override = await resolveUri({ specifier: url, importer }, runtimeEnvironment);
|
|
65
|
+
const overrideUrl = assetRef.override?.uri;
|
|
66
|
+
codeStringBuilder.overwrite(startOffset, endOffset, overrideUrl || url);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
// Just logging a waring if the user cannot resolve a linked asset reference to not disrupt other linking
|
|
70
|
+
logger.warn(`Failed to resolve reference '${url}' in asset '${importer}'`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return codeStringBuilder.toString();
|
|
75
|
+
}
|
|
15
76
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "0.10.0
|
|
7
|
+
"version": "0.10.0",
|
|
8
8
|
"homepage": "https://developer.salesforce.com/docs/platform/lwr/overview",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
@@ -22,6 +22,10 @@
|
|
|
22
22
|
".": {
|
|
23
23
|
"import": "./build/es/index.js",
|
|
24
24
|
"require": "./build/cjs/index.cjs"
|
|
25
|
+
},
|
|
26
|
+
"./legacy": {
|
|
27
|
+
"import": "./build/es/legacy.js",
|
|
28
|
+
"require": "./build/cjs/legacy.cjs"
|
|
25
29
|
}
|
|
26
30
|
},
|
|
27
31
|
"files": [
|
|
@@ -29,16 +33,27 @@
|
|
|
29
33
|
"build/**/*.cjs",
|
|
30
34
|
"build/**/*.d.ts"
|
|
31
35
|
],
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build": "tsc -b",
|
|
38
|
+
"clean": "rm -rf build node_modules",
|
|
39
|
+
"test": "jest"
|
|
40
|
+
},
|
|
32
41
|
"dependencies": {
|
|
33
|
-
"@lwrjs/shared-utils": "0.10.0
|
|
42
|
+
"@lwrjs/shared-utils": "0.10.0",
|
|
43
|
+
"fs-extra": "^11.1.1",
|
|
34
44
|
"postcss": "^8.4.23",
|
|
35
45
|
"postcss-value-parser": "^4.2.0"
|
|
36
46
|
},
|
|
37
47
|
"devDependencies": {
|
|
38
|
-
"@lwrjs/types": "0.10.0
|
|
48
|
+
"@lwrjs/types": "0.10.0",
|
|
49
|
+
"jest": "^26.6.3",
|
|
50
|
+
"ts-jest": "^26.5.6"
|
|
39
51
|
},
|
|
40
52
|
"engines": {
|
|
41
|
-
"node": ">=16.0.0
|
|
53
|
+
"node": ">=16.0.0"
|
|
54
|
+
},
|
|
55
|
+
"volta": {
|
|
56
|
+
"extends": "../../../package.json"
|
|
42
57
|
},
|
|
43
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "e6deaeef3db8aa079acefed508897eca19b3218a"
|
|
44
59
|
}
|