@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.
@@ -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(options) {
33
+ function defaultAssetTransformer(_options, lwrGlobalContext) {
34
+ const {assetRegistry} = lwrGlobalContext;
33
35
  return {
34
- name: "default-asset-transformer",
35
- async extractMetadata(code, assetSource) {
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
- return {metadata};
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
+ }
@@ -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(options: AssetTransformerOptions): AssetTransformPlugin;
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(options) {
5
+ export default function defaultAssetTransformer(_options, lwrGlobalContext) {
6
+ const { assetRegistry } = lwrGlobalContext;
5
7
  return {
6
- name: 'default-asset-transformer',
7
- async extractMetadata(code, assetSource) {
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
- return { metadata };
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-alpha.8",
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-alpha.8",
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-alpha.8"
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 <20"
53
+ "node": ">=16.0.0"
54
+ },
55
+ "volta": {
56
+ "extends": "../../../package.json"
42
57
  },
43
- "gitHead": "46bd72343e1db7c72470033320921df3a7eff18a"
58
+ "gitHead": "e6deaeef3db8aa079acefed508897eca19b3218a"
44
59
  }