@web/rollup-plugin-html 0.0.0-canary-20230316175616

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.
Files changed (113) hide show
  1. package/README.md +5 -0
  2. package/dist/RollupPluginHTMLOptions.d.ts +68 -0
  3. package/dist/RollupPluginHTMLOptions.d.ts.map +1 -0
  4. package/dist/RollupPluginHTMLOptions.js +3 -0
  5. package/dist/RollupPluginHTMLOptions.js.map +1 -0
  6. package/dist/assets/utils.d.ts +7 -0
  7. package/dist/assets/utils.d.ts.map +1 -0
  8. package/dist/assets/utils.js +138 -0
  9. package/dist/assets/utils.js.map +1 -0
  10. package/dist/index.d.ts +5 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +7 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/input/InputData.d.ts +16 -0
  15. package/dist/input/InputData.d.ts.map +1 -0
  16. package/dist/input/InputData.js +3 -0
  17. package/dist/input/InputData.js.map +1 -0
  18. package/dist/input/addRollupInput.d.ts +4 -0
  19. package/dist/input/addRollupInput.d.ts.map +1 -0
  20. package/dist/input/addRollupInput.js +36 -0
  21. package/dist/input/addRollupInput.js.map +1 -0
  22. package/dist/input/extract/extractAssets.d.ts +11 -0
  23. package/dist/input/extract/extractAssets.d.ts.map +1 -0
  24. package/dist/input/extract/extractAssets.js +37 -0
  25. package/dist/input/extract/extractAssets.js.map +1 -0
  26. package/dist/input/extract/extractModules.d.ts +13 -0
  27. package/dist/input/extract/extractModules.d.ts.map +1 -0
  28. package/dist/input/extract/extractModules.js +68 -0
  29. package/dist/input/extract/extractModules.js.map +1 -0
  30. package/dist/input/extract/extractModulesAndAssets.d.ts +14 -0
  31. package/dist/input/extract/extractModulesAndAssets.d.ts.map +1 -0
  32. package/dist/input/extract/extractModulesAndAssets.js +30 -0
  33. package/dist/input/extract/extractModulesAndAssets.js.map +1 -0
  34. package/dist/input/getInputData.d.ts +13 -0
  35. package/dist/input/getInputData.d.ts.map +1 -0
  36. package/dist/input/getInputData.js +94 -0
  37. package/dist/input/getInputData.js.map +1 -0
  38. package/dist/input/normalizeInputOptions.d.ts +4 -0
  39. package/dist/input/normalizeInputOptions.d.ts.map +1 -0
  40. package/dist/input/normalizeInputOptions.js +38 -0
  41. package/dist/input/normalizeInputOptions.js.map +1 -0
  42. package/dist/output/createHTMLOutput.d.ts +33 -0
  43. package/dist/output/createHTMLOutput.d.ts.map +1 -0
  44. package/dist/output/createHTMLOutput.js +39 -0
  45. package/dist/output/createHTMLOutput.js.map +1 -0
  46. package/dist/output/emitAssets.d.ts +12 -0
  47. package/dist/output/emitAssets.d.ts.map +1 -0
  48. package/dist/output/emitAssets.js +69 -0
  49. package/dist/output/emitAssets.js.map +1 -0
  50. package/dist/output/getEntrypointBundles.d.ts +18 -0
  51. package/dist/output/getEntrypointBundles.d.ts.map +1 -0
  52. package/dist/output/getEntrypointBundles.js +59 -0
  53. package/dist/output/getEntrypointBundles.js.map +1 -0
  54. package/dist/output/getOutputHTML.d.ts +18 -0
  55. package/dist/output/getOutputHTML.d.ts.map +1 -0
  56. package/dist/output/getOutputHTML.js +91 -0
  57. package/dist/output/getOutputHTML.js.map +1 -0
  58. package/dist/output/hashInlineScripts.d.ts +3 -0
  59. package/dist/output/hashInlineScripts.d.ts.map +1 -0
  60. package/dist/output/hashInlineScripts.js +131 -0
  61. package/dist/output/hashInlineScripts.js.map +1 -0
  62. package/dist/output/injectAbsoluteBaseUrl.d.ts +3 -0
  63. package/dist/output/injectAbsoluteBaseUrl.d.ts.map +1 -0
  64. package/dist/output/injectAbsoluteBaseUrl.js +37 -0
  65. package/dist/output/injectAbsoluteBaseUrl.js.map +1 -0
  66. package/dist/output/injectBundles.d.ts +5 -0
  67. package/dist/output/injectBundles.d.ts.map +1 -0
  68. package/dist/output/injectBundles.js +36 -0
  69. package/dist/output/injectBundles.js.map +1 -0
  70. package/dist/output/injectServiceWorkerRegistration.d.ts +9 -0
  71. package/dist/output/injectServiceWorkerRegistration.d.ts.map +1 -0
  72. package/dist/output/injectServiceWorkerRegistration.js +37 -0
  73. package/dist/output/injectServiceWorkerRegistration.js.map +1 -0
  74. package/dist/output/injectedUpdatedAssetPaths.d.ts +14 -0
  75. package/dist/output/injectedUpdatedAssetPaths.d.ts.map +1 -0
  76. package/dist/output/injectedUpdatedAssetPaths.js +60 -0
  77. package/dist/output/injectedUpdatedAssetPaths.js.map +1 -0
  78. package/dist/output/utils.d.ts +2 -0
  79. package/dist/output/utils.d.ts.map +1 -0
  80. package/dist/output/utils.js +12 -0
  81. package/dist/output/utils.js.map +1 -0
  82. package/dist/rollupPluginHTML.d.ts +13 -0
  83. package/dist/rollupPluginHTML.d.ts.map +1 -0
  84. package/dist/rollupPluginHTML.js +183 -0
  85. package/dist/rollupPluginHTML.js.map +1 -0
  86. package/dist/utils.d.ts +4 -0
  87. package/dist/utils.d.ts.map +1 -0
  88. package/dist/utils.js +10 -0
  89. package/dist/utils.js.map +1 -0
  90. package/index.mjs +6 -0
  91. package/package.json +55 -0
  92. package/src/RollupPluginHTMLOptions.ts +92 -0
  93. package/src/assets/utils.ts +145 -0
  94. package/src/index.ts +14 -0
  95. package/src/input/InputData.ts +16 -0
  96. package/src/input/addRollupInput.ts +55 -0
  97. package/src/input/extract/extractAssets.ts +53 -0
  98. package/src/input/extract/extractModules.ts +78 -0
  99. package/src/input/extract/extractModulesAndAssets.ts +34 -0
  100. package/src/input/getInputData.ts +120 -0
  101. package/src/input/normalizeInputOptions.ts +47 -0
  102. package/src/output/createHTMLOutput.ts +87 -0
  103. package/src/output/emitAssets.ts +80 -0
  104. package/src/output/getEntrypointBundles.ts +88 -0
  105. package/src/output/getOutputHTML.ts +115 -0
  106. package/src/output/hashInlineScripts.ts +153 -0
  107. package/src/output/injectAbsoluteBaseUrl.ts +41 -0
  108. package/src/output/injectBundles.ts +44 -0
  109. package/src/output/injectServiceWorkerRegistration.ts +48 -0
  110. package/src/output/injectedUpdatedAssetPaths.ts +89 -0
  111. package/src/output/utils.ts +5 -0
  112. package/src/rollupPluginHTML.ts +225 -0
  113. package/src/utils.ts +9 -0
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.hashInlineScripts = void 0;
7
+ const parse5_utils_1 = require("@web/parse5-utils");
8
+ const crypto_1 = __importDefault(require("crypto"));
9
+ function isMetaCSPTag(node) {
10
+ if (parse5_utils_1.getTagName(node) === 'meta' &&
11
+ parse5_utils_1.getAttribute(node, 'http-equiv') === 'Content-Security-Policy') {
12
+ return true;
13
+ }
14
+ return false;
15
+ }
16
+ function isInlineScript(node) {
17
+ if (parse5_utils_1.getTagName(node) === 'script' && !parse5_utils_1.hasAttribute(node, 'src')) {
18
+ return true;
19
+ }
20
+ return false;
21
+ }
22
+ /**
23
+ * Parses Meta CSP Content string as an object so we can easily mutate it in JS
24
+ * E.g.:
25
+ *
26
+ * "default-src 'self'; prefetch-src 'self'; upgrade-insecure-requests; style-src 'self' 'unsafe-inline';"
27
+ *
28
+ * becomes
29
+ *
30
+ * {
31
+ * 'default-src': ["'self'"],
32
+ * 'prefetch-src': ["'self'"],
33
+ * 'upgrade-insecure-requests': [],
34
+ * 'style-src': ["'self'", "'unsafe-inline'"]
35
+ * }
36
+ *
37
+ */
38
+ function parseMetaCSPContent(content) {
39
+ return content.split(';').reduce((acc, curr) => {
40
+ const trimmed = curr.trim();
41
+ if (!trimmed) {
42
+ return acc;
43
+ }
44
+ const splitItem = trimmed.split(' ');
45
+ const [, ...values] = splitItem;
46
+ return Object.assign(Object.assign({}, acc), { [splitItem[0]]: values });
47
+ }, {});
48
+ }
49
+ /**
50
+ * Serializes
51
+ *
52
+ * {
53
+ * 'default-src': ["'self'"],
54
+ * 'prefetch-src': ["'self'"],
55
+ * 'upgrade-insecure-requests': [],
56
+ * 'style-src': ["'self'", "'unsafe-inline'"]
57
+ * }
58
+ *
59
+ * back to
60
+ *
61
+ * "default-src 'self'; prefetch-src 'self'; upgrade-insecure-requests; style-src 'self' 'unsafe-inline';"
62
+ */
63
+ function serializeMetaCSPContent(data) {
64
+ const dataEntries = Object.entries(data);
65
+ return dataEntries.reduce((accOuter, currOuter, indexOuter) => {
66
+ let suffixOuter = ' ';
67
+ let sep = ' ';
68
+ // If there are no items for this key
69
+ if (currOuter[1].length === 0) {
70
+ suffixOuter = '; ';
71
+ sep = '';
72
+ }
73
+ // Don't insert space suffix when it is the last item
74
+ if (indexOuter === dataEntries.length - 1) {
75
+ suffixOuter = '';
76
+ }
77
+ return `${accOuter}${currOuter[0]}${sep}${currOuter[1].reduce((accInner, currInner, indexInner) => {
78
+ let suffixInner = ' ';
79
+ if (indexInner === currOuter[1].length - 1) {
80
+ suffixInner = ';';
81
+ }
82
+ return `${accInner}${currInner}${suffixInner}`;
83
+ }, '')}${suffixOuter}`;
84
+ }, '');
85
+ }
86
+ function injectCSPScriptRules(metaCSPEl, hashes) {
87
+ const content = parse5_utils_1.getAttribute(metaCSPEl, 'content');
88
+ if (content) {
89
+ const data = parseMetaCSPContent(content);
90
+ if (Array.isArray(data['script-src'])) {
91
+ data['script-src'].push(...hashes);
92
+ }
93
+ else {
94
+ data['script-src'] = ["'self'", ...hashes];
95
+ }
96
+ const newContent = serializeMetaCSPContent(data);
97
+ parse5_utils_1.setAttribute(metaCSPEl, 'content', newContent);
98
+ }
99
+ }
100
+ function injectCSPMetaTag(document, hashes) {
101
+ const metaTag = parse5_utils_1.createElement('meta', {
102
+ 'http-equiv': 'Content-Security-Policy',
103
+ content: `script-src 'self' ${hashes.join(' ')};`,
104
+ });
105
+ const head = parse5_utils_1.findNode(document, node => node.nodeName === 'head');
106
+ if (head) {
107
+ parse5_utils_1.prepend(head, metaTag);
108
+ }
109
+ }
110
+ function hashInlineScripts(document) {
111
+ const metaCSPEl = parse5_utils_1.findElement(document, isMetaCSPTag);
112
+ const inlineScripts = parse5_utils_1.findElements(document, isInlineScript);
113
+ const hashes = [];
114
+ inlineScripts.forEach(node => {
115
+ if (node.childNodes[0]) {
116
+ const scriptContent = parse5_utils_1.getTextContent(node.childNodes[0]);
117
+ const hash = crypto_1.default.createHash('sha256').update(scriptContent).digest('base64');
118
+ hashes.push(`'sha256-${hash}'`);
119
+ }
120
+ });
121
+ if (hashes.length > 0) {
122
+ if (metaCSPEl) {
123
+ injectCSPScriptRules(metaCSPEl, hashes);
124
+ }
125
+ else {
126
+ injectCSPMetaTag(document, hashes);
127
+ }
128
+ }
129
+ }
130
+ exports.hashInlineScripts = hashInlineScripts;
131
+ //# sourceMappingURL=hashInlineScripts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashInlineScripts.js","sourceRoot":"","sources":["../../src/output/hashInlineScripts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Document } from 'parse5';
2
+ export declare function injectAbsoluteBaseUrl(document: Document, absoluteBaseUrl: string): void;
3
+ //# sourceMappingURL=injectAbsoluteBaseUrl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectAbsoluteBaseUrl.d.ts","sourceRoot":"","sources":["../../src/output/injectAbsoluteBaseUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAW,MAAM,QAAQ,CAAC;AAwB3C,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,QAgBhF"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.injectAbsoluteBaseUrl = void 0;
4
+ const parse5_utils_1 = require("@web/parse5-utils");
5
+ function isAbsoluteableNode(node) {
6
+ const metaAttributes = ['og:url', 'og:image'];
7
+ switch (parse5_utils_1.getTagName(node)) {
8
+ case 'link':
9
+ if (parse5_utils_1.getAttribute(node, 'rel') === 'canonical' && parse5_utils_1.getAttribute(node, 'href')) {
10
+ return true;
11
+ }
12
+ return false;
13
+ case 'meta':
14
+ if (metaAttributes.includes(parse5_utils_1.getAttribute(node, 'property')) &&
15
+ parse5_utils_1.getAttribute(node, 'content')) {
16
+ return true;
17
+ }
18
+ return false;
19
+ default:
20
+ return false;
21
+ }
22
+ }
23
+ function injectAbsoluteBaseUrl(document, absoluteBaseUrl) {
24
+ const nodes = parse5_utils_1.findElements(document, isAbsoluteableNode);
25
+ for (const node of nodes) {
26
+ switch (parse5_utils_1.getTagName(node)) {
27
+ case 'link':
28
+ parse5_utils_1.setAttribute(node, 'href', new URL(parse5_utils_1.getAttribute(node, 'href'), absoluteBaseUrl).href);
29
+ break;
30
+ case 'meta':
31
+ parse5_utils_1.setAttribute(node, 'content', new URL(parse5_utils_1.getAttribute(node, 'content'), absoluteBaseUrl).href);
32
+ break;
33
+ }
34
+ }
35
+ }
36
+ exports.injectAbsoluteBaseUrl = injectAbsoluteBaseUrl;
37
+ //# sourceMappingURL=injectAbsoluteBaseUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectAbsoluteBaseUrl.js","sourceRoot":"","sources":["../../src/output/injectAbsoluteBaseUrl.ts"],"names":[],"mappings":";;;AACA,oDAAyF;AAEzF,SAAS,kBAAkB,CAAC,IAAa;IACvC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9C,QAAQ,yBAAU,CAAC,IAAI,CAAC,EAAE;QACxB,KAAK,MAAM;YACT,IAAI,2BAAY,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,WAAW,IAAI,2BAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;gBAC3E,OAAO,IAAI,CAAC;aACb;YACD,OAAO,KAAK,CAAC;QACf,KAAK,MAAM;YACT,IACE,cAAc,CAAC,QAAQ,CAAC,2BAAY,CAAC,IAAI,EAAE,UAAU,CAAE,CAAC;gBACxD,2BAAY,CAAC,IAAI,EAAE,SAAS,CAAC,EAC7B;gBACA,OAAO,IAAI,CAAC;aACb;YACD,OAAO,KAAK,CAAC;QACf;YACE,OAAO,KAAK,CAAC;KAChB;AACH,CAAC;AAED,SAAgB,qBAAqB,CAAC,QAAkB,EAAE,eAAuB;IAC/E,MAAM,KAAK,GAAG,2BAAY,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IACzD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,QAAQ,yBAAU,CAAC,IAAI,CAAC,EAAE;YACxB,KAAK,MAAM;gBACT,2BAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,2BAAY,CAAC,IAAI,EAAE,MAAM,CAAE,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC;gBACvF,MAAM;YACR,KAAK,MAAM;gBACT,2BAAY,CACV,IAAI,EACJ,SAAS,EACT,IAAI,GAAG,CAAC,2BAAY,CAAC,IAAI,EAAE,SAAS,CAAE,EAAE,eAAe,CAAC,CAAC,IAAI,CAC9D,CAAC;gBACF,MAAM;SACT;KACF;AACH,CAAC;AAhBD,sDAgBC"}
@@ -0,0 +1,5 @@
1
+ import { Document, Attribute } from 'parse5';
2
+ import { EntrypointBundle } from '../RollupPluginHTMLOptions';
3
+ export declare function createLoadScript(src: string, format: string, attributes?: Attribute[]): import("parse5").Element;
4
+ export declare function injectBundles(document: Document, entrypointBundles: Record<string, EntrypointBundle>): void;
5
+ //# sourceMappingURL=injectBundles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectBundles.d.ts","sourceRoot":"","sources":["../../src/output/injectBundles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAG7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG9D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,4BAgBrF;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,QAiBpD"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.injectBundles = exports.createLoadScript = void 0;
4
+ const parse5_utils_1 = require("@web/parse5-utils");
5
+ const utils_1 = require("../utils");
6
+ function createLoadScript(src, format, attributes) {
7
+ const attributesObject = {};
8
+ if (attributes) {
9
+ for (const attribute of attributes) {
10
+ attributesObject[attribute.name] = attribute.value;
11
+ }
12
+ }
13
+ if (['es', 'esm', 'module'].includes(format)) {
14
+ return parse5_utils_1.createScript(Object.assign({ type: 'module', src }, attributesObject));
15
+ }
16
+ if (['system', 'systemjs'].includes(format)) {
17
+ return parse5_utils_1.createScript({}, `System.import(${JSON.stringify(src)});`);
18
+ }
19
+ return parse5_utils_1.createScript({ src, defer: '' });
20
+ }
21
+ exports.createLoadScript = createLoadScript;
22
+ function injectBundles(document, entrypointBundles) {
23
+ const body = parse5_utils_1.findElement(document, e => parse5_utils_1.getTagName(e) === 'body');
24
+ if (!body) {
25
+ throw new Error('Missing body in HTML document.');
26
+ }
27
+ for (const { options, entrypoints } of Object.values(entrypointBundles)) {
28
+ if (!options.format)
29
+ throw utils_1.createError('Missing output format.');
30
+ for (const entrypoint of entrypoints) {
31
+ parse5_utils_1.appendChild(body, createLoadScript(entrypoint.importPath, options.format, entrypoint.attributes));
32
+ }
33
+ }
34
+ }
35
+ exports.injectBundles = injectBundles;
36
+ //# sourceMappingURL=injectBundles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectBundles.js","sourceRoot":"","sources":["../../src/output/injectBundles.ts"],"names":[],"mappings":";;;AACA,oDAAuF;AAGvF,oCAAuC;AAEvC,SAAgB,gBAAgB,CAAC,GAAW,EAAE,MAAc,EAAE,UAAwB;IACpF,MAAM,gBAAgB,GAA2B,EAAE,CAAC;IACpD,IAAI,UAAU,EAAE;QACd,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YAClC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;SACpD;KACF;IACD,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC5C,OAAO,2BAAY,iBAAG,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAK,gBAAgB,EAAG,CAAC;KACnE;IAED,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC3C,OAAO,2BAAY,CAAC,EAAE,EAAE,iBAAiB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KACnE;IAED,OAAO,2BAAY,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAhBD,4CAgBC;AAED,SAAgB,aAAa,CAC3B,QAAkB,EAClB,iBAAmD;IAEnD,MAAM,IAAI,GAAG,0BAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,yBAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;IAClE,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;KACnD;IAED,KAAK,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE;QACvE,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,mBAAW,CAAC,wBAAwB,CAAC,CAAC;QAEjE,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;YACpC,0BAAW,CACT,IAAI,EACJ,gBAAgB,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,CAC/E,CAAC;SACH;KACF;AACH,CAAC;AAnBD,sCAmBC"}
@@ -0,0 +1,9 @@
1
+ import { Document } from 'parse5';
2
+ export interface injectServiceWorkerRegistrationArgs {
3
+ document: Document;
4
+ serviceWorkerPath: string;
5
+ outputDir: string;
6
+ htmlFileName: string;
7
+ }
8
+ export declare function injectServiceWorkerRegistration(args: injectServiceWorkerRegistrationArgs): void;
9
+ //# sourceMappingURL=injectServiceWorkerRegistration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectServiceWorkerRegistration.d.ts","sourceRoot":"","sources":["../../src/output/injectServiceWorkerRegistration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AASlC,MAAM,WAAW,mCAAmC;IAClD,QAAQ,EAAE,QAAQ,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,mCAAmC,QA8BxF"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.injectServiceWorkerRegistration = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const parse5_utils_1 = require("@web/parse5-utils");
9
+ function injectServiceWorkerRegistration(args) {
10
+ const { document, serviceWorkerPath, outputDir, htmlFileName } = args;
11
+ const body = parse5_utils_1.findElement(document, e => parse5_utils_1.getTagName(e) === 'body');
12
+ if (!body) {
13
+ throw new Error('Missing body in HTML document.');
14
+ }
15
+ let serviceWorkerUrl = path_1.default.relative(outputDir, serviceWorkerPath);
16
+ serviceWorkerUrl = path_1.default.relative(path_1.default.dirname(htmlFileName), serviceWorkerUrl);
17
+ serviceWorkerUrl = serviceWorkerUrl.split(path_1.default.sep).join('/');
18
+ const code = `
19
+ if ('serviceWorker' in navigator) {
20
+ window.addEventListener('load', function() {
21
+ navigator.serviceWorker
22
+ .register('${serviceWorkerUrl}')
23
+ .then(function() {
24
+ console.log('ServiceWorker registered from "${serviceWorkerUrl}".');
25
+ })
26
+ .catch(function(err) {
27
+ console.log('ServiceWorker registration failed: ', err);
28
+ });
29
+ });
30
+ }
31
+ `;
32
+ const script = parse5_utils_1.createScript({}, code);
33
+ parse5_utils_1.setAttribute(script, 'inject-service-worker', '');
34
+ parse5_utils_1.appendChild(body, script);
35
+ }
36
+ exports.injectServiceWorkerRegistration = injectServiceWorkerRegistration;
37
+ //# sourceMappingURL=injectServiceWorkerRegistration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectServiceWorkerRegistration.js","sourceRoot":"","sources":["../../src/output/injectServiceWorkerRegistration.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,oDAM2B;AAS3B,SAAgB,+BAA+B,CAAC,IAAyC;IACvF,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IACtE,MAAM,IAAI,GAAG,0BAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,yBAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;IAClE,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;KACnD;IAED,IAAI,gBAAgB,GAAG,cAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACnE,gBAAgB,GAAG,cAAI,CAAC,QAAQ,CAAC,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC/E,gBAAgB,GAAG,gBAAgB,CAAC,KAAK,CAAC,cAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE9D,MAAM,IAAI,GAAG;;;;uBAIQ,gBAAgB;;0DAEmB,gBAAgB;;;;;;;GAOvE,CAAC;IAEF,MAAM,MAAM,GAAG,2BAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACtC,2BAAY,CAAC,MAAM,EAAE,uBAAuB,EAAE,EAAE,CAAC,CAAC;IAElD,0BAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5B,CAAC;AA9BD,0EA8BC"}
@@ -0,0 +1,14 @@
1
+ import { Document } from 'parse5';
2
+ import { InputData } from '../input/InputData';
3
+ import { EmittedAssets } from './emitAssets';
4
+ export interface InjectUpdatedAssetPathsArgs {
5
+ document: Document;
6
+ input: InputData;
7
+ outputDir: string;
8
+ rootDir: string;
9
+ emittedAssets: EmittedAssets;
10
+ publicPath?: string;
11
+ absolutePathPrefix?: string;
12
+ }
13
+ export declare function injectedUpdatedAssetPaths(args: InjectUpdatedAssetPathsArgs): void;
14
+ //# sourceMappingURL=injectedUpdatedAssetPaths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectedUpdatedAssetPaths.d.ts","sourceRoot":"","sources":["../../src/output/injectedUpdatedAssetPaths.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAUlC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAaD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,2BAA2B,QAmD1E"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.injectedUpdatedAssetPaths = void 0;
7
+ const parse5_utils_1 = require("@web/parse5-utils");
8
+ const path_1 = __importDefault(require("path"));
9
+ const utils_1 = require("../assets/utils");
10
+ const utils_2 = require("../utils");
11
+ const utils_3 = require("./utils");
12
+ function getSrcSetUrlWidthPairs(srcset) {
13
+ if (!srcset) {
14
+ return [];
15
+ }
16
+ const srcsetParts = srcset.includes(',') ? srcset.split(',') : [srcset];
17
+ const urls = srcsetParts
18
+ .map(url => url.trim())
19
+ .map(url => (url.includes(' ') ? url.split(' ') : [url]));
20
+ return urls;
21
+ }
22
+ function injectedUpdatedAssetPaths(args) {
23
+ const { document, input, outputDir, rootDir, emittedAssets, publicPath = './', absolutePathPrefix, } = args;
24
+ const assetNodes = utils_1.findAssets(document);
25
+ for (const node of assetNodes) {
26
+ const sourcePaths = utils_1.getSourcePaths(node);
27
+ for (const sourcePath of sourcePaths) {
28
+ const htmlFilePath = input.filePath ? input.filePath : path_1.default.join(rootDir, input.name);
29
+ const htmlDir = path_1.default.dirname(htmlFilePath);
30
+ const filePath = utils_1.resolveAssetFilePath(sourcePath, htmlDir, rootDir, absolutePathPrefix);
31
+ const assetPaths = utils_1.isHashedAsset(node) ? emittedAssets.hashed : emittedAssets.static;
32
+ const relativeOutputPath = assetPaths.get(filePath);
33
+ if (!relativeOutputPath) {
34
+ throw utils_2.createError(`Something went wrong while bundling HTML file ${input.name}. Could not find ${filePath} in emitted rollup assets.`);
35
+ }
36
+ const htmlOutputFilePath = path_1.default.join(outputDir, input.name);
37
+ const htmlOutputDir = path_1.default.dirname(htmlOutputFilePath);
38
+ const absoluteOutputPath = path_1.default.join(outputDir, relativeOutputPath);
39
+ const relativePathToHtmlFile = path_1.default.relative(htmlOutputDir, absoluteOutputPath);
40
+ const browserPath = path_1.default.posix.join(publicPath, utils_3.toBrowserPath(relativePathToHtmlFile));
41
+ const key = utils_1.getSourceAttribute(node);
42
+ let newAttributeValue = browserPath;
43
+ if (key === 'srcset') {
44
+ const srcset = parse5_utils_1.getAttribute(node, key);
45
+ if (srcset) {
46
+ const urlWidthPairs = getSrcSetUrlWidthPairs(srcset);
47
+ for (const urlWidthPair of urlWidthPairs) {
48
+ if (urlWidthPair[0] === sourcePath) {
49
+ urlWidthPair[0] = browserPath;
50
+ }
51
+ }
52
+ newAttributeValue = urlWidthPairs.map(urlWidthPair => urlWidthPair.join(' ')).join(', ');
53
+ }
54
+ }
55
+ parse5_utils_1.setAttribute(node, key, newAttributeValue);
56
+ }
57
+ }
58
+ }
59
+ exports.injectedUpdatedAssetPaths = injectedUpdatedAssetPaths;
60
+ //# sourceMappingURL=injectedUpdatedAssetPaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectedUpdatedAssetPaths.js","sourceRoot":"","sources":["../../src/output/injectedUpdatedAssetPaths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function toBrowserPath(filePath: string): string;
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/output/utils.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,UAE7C"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.toBrowserPath = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ function toBrowserPath(filePath) {
9
+ return filePath.split(path_1.default.sep).join('/');
10
+ }
11
+ exports.toBrowserPath = toBrowserPath;
12
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/output/utils.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,SAAgB,aAAa,CAAC,QAAgB;IAC5C,OAAO,QAAQ,CAAC,KAAK,CAAC,cAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAFD,sCAEC"}
@@ -0,0 +1,13 @@
1
+ import { Plugin } from 'rollup';
2
+ import { InputData } from './input/InputData';
3
+ import { RollupPluginHTMLOptions, TransformHtmlFunction } from './RollupPluginHTMLOptions';
4
+ export interface RollupPluginHtml extends Plugin {
5
+ api: {
6
+ getInputs(): InputData[];
7
+ addHtmlTransformer(transformHtmlFunction: TransformHtmlFunction): void;
8
+ disableDefaultInject(): void;
9
+ addOutput(name: string): Plugin;
10
+ };
11
+ }
12
+ export declare function rollupPluginHTML(pluginOptions?: RollupPluginHTMLOptions): RollupPluginHtml;
13
+ //# sourceMappingURL=rollupPluginHTML.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollupPluginHTML.d.ts","sourceRoot":"","sources":["../src/rollupPluginHTML.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,OAAO,EAEL,uBAAuB,EAEvB,qBAAqB,EACtB,MAAM,2BAA2B,CAAC;AAInC,MAAM,WAAW,gBAAiB,SAAQ,MAAM;IAC9C,GAAG,EAAE;QACH,SAAS,IAAI,SAAS,EAAE,CAAC;QACzB,kBAAkB,CAAC,qBAAqB,EAAE,qBAAqB,GAAG,IAAI,CAAC;QACvE,oBAAoB,IAAI,IAAI,CAAC;QAC7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;KACjC,CAAC;CACH;AAED,wBAAgB,gBAAgB,CAAC,aAAa,GAAE,uBAA4B,GAAG,gBAAgB,CAsM9F"}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.rollupPluginHTML = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const addRollupInput_1 = require("./input/addRollupInput");
9
+ const getInputData_1 = require("./input/getInputData");
10
+ const createHTMLOutput_1 = require("./output/createHTMLOutput");
11
+ const utils_1 = require("./utils");
12
+ const emitAssets_1 = require("./output/emitAssets");
13
+ function rollupPluginHTML(pluginOptions = {}) {
14
+ const multiOutputNames = [];
15
+ let inputs = [];
16
+ let generatedBundles = [];
17
+ let externalTransformHtmlFns = [];
18
+ let defaultInjectDisabled = false;
19
+ let serviceWorkerPath = '';
20
+ let injectServiceWorker = false;
21
+ let absolutePathPrefix;
22
+ let strictCSPInlineScripts = false;
23
+ function reset() {
24
+ inputs = [];
25
+ generatedBundles = [];
26
+ externalTransformHtmlFns = [];
27
+ }
28
+ return {
29
+ name: '@web/rollup-plugin-html',
30
+ options(inputOptions) {
31
+ reset();
32
+ inputs = getInputData_1.getInputData(pluginOptions, inputOptions.input);
33
+ const moduleImports = [];
34
+ for (const input of inputs) {
35
+ moduleImports.push(...input.moduleImports);
36
+ }
37
+ if (moduleImports.length === 0) {
38
+ // if there are only pages with pure HTML we need to make sure there is at
39
+ // least some input for rollup
40
+ moduleImports.push(utils_1.NOOP_IMPORT);
41
+ }
42
+ if (pluginOptions.serviceWorkerPath) {
43
+ serviceWorkerPath = pluginOptions.serviceWorkerPath;
44
+ }
45
+ if (pluginOptions.injectServiceWorker) {
46
+ injectServiceWorker = pluginOptions.injectServiceWorker;
47
+ }
48
+ if (pluginOptions.absolutePathPrefix) {
49
+ absolutePathPrefix = pluginOptions.absolutePathPrefix;
50
+ }
51
+ if (pluginOptions.strictCSPInlineScripts) {
52
+ strictCSPInlineScripts = pluginOptions.strictCSPInlineScripts;
53
+ }
54
+ if (pluginOptions.input == null) {
55
+ // we are reading rollup input, so replace whatever was there
56
+ return Object.assign(Object.assign({}, inputOptions), { input: moduleImports.map(mod => mod.importPath) });
57
+ }
58
+ else {
59
+ // we need to add modules to existing rollup input
60
+ return addRollupInput_1.addRollupInput(inputOptions, moduleImports);
61
+ }
62
+ },
63
+ /** Watch input files when running in watch mode */
64
+ buildStart() {
65
+ // watch filesf
66
+ for (const input of inputs) {
67
+ if (input.filePath) {
68
+ this.addWatchFile(input.filePath);
69
+ }
70
+ for (const asset of input.assets) {
71
+ this.addWatchFile(asset.filePath);
72
+ }
73
+ }
74
+ },
75
+ /** Notifies rollup that we will be handling these modules */
76
+ resolveId(id) {
77
+ if (id === utils_1.NOOP_IMPORT.importPath) {
78
+ return utils_1.NOOP_IMPORT.importPath;
79
+ }
80
+ for (const input of inputs) {
81
+ if (input.inlineModules.find(mod => mod.importPath === id)) {
82
+ return id;
83
+ }
84
+ }
85
+ },
86
+ /** Provide code for modules we are handling */
87
+ load(id) {
88
+ if (id === utils_1.NOOP_IMPORT.importPath) {
89
+ return 'export default "noop"';
90
+ }
91
+ for (const input of inputs) {
92
+ const foundMod = input.inlineModules.find(mod => mod.importPath === id);
93
+ if (foundMod) {
94
+ return foundMod.code;
95
+ }
96
+ }
97
+ },
98
+ /**
99
+ * Emits output html file if we are doing a single output build.
100
+ * @param {OutputOptions} options
101
+ * @param {OutputBundle} bundle
102
+ */
103
+ async generateBundle(options, bundle) {
104
+ if (multiOutputNames.length !== 0) {
105
+ // we are generating multiple build outputs, which is handled by child plugins
106
+ return;
107
+ }
108
+ if (!options.dir) {
109
+ throw utils_1.createError('Rollup output options must have a dir option set to emit an HTML file.');
110
+ }
111
+ generatedBundles.push({ name: 'default', options, bundle });
112
+ const emittedAssets = await emitAssets_1.emitAssets.call(this, inputs, pluginOptions);
113
+ const outputs = await createHTMLOutput_1.createHTMLOutput({
114
+ outputDir: path_1.default.resolve(options.dir),
115
+ inputs,
116
+ emittedAssets,
117
+ generatedBundles,
118
+ externalTransformHtmlFns,
119
+ pluginOptions,
120
+ defaultInjectDisabled,
121
+ serviceWorkerPath,
122
+ injectServiceWorker,
123
+ absolutePathPrefix,
124
+ strictCSPInlineScripts,
125
+ });
126
+ for (const output of outputs) {
127
+ this.emitFile(output);
128
+ }
129
+ },
130
+ api: {
131
+ getInputs() {
132
+ return inputs;
133
+ },
134
+ addHtmlTransformer(transformHtmlFunction) {
135
+ externalTransformHtmlFns.push(transformHtmlFunction);
136
+ },
137
+ disableDefaultInject() {
138
+ defaultInjectDisabled = true;
139
+ },
140
+ addOutput(name) {
141
+ if (!name || multiOutputNames.includes(name)) {
142
+ throw utils_1.createError('Each output must have a unique name');
143
+ }
144
+ multiOutputNames.push(name);
145
+ return {
146
+ name: `@web/rollup-plugin-html-multi-output-${multiOutputNames.length}`,
147
+ async generateBundle(options, bundle) {
148
+ if (!options.dir) {
149
+ throw utils_1.createError(`Output ${name} must have a dir option set.`);
150
+ }
151
+ generatedBundles.push({ name, options, bundle });
152
+ if (generatedBundles.length === multiOutputNames.length) {
153
+ // this is the last build, emit the HTML files
154
+ const outputDirs = new Set(generatedBundles.map(b => b.options.dir));
155
+ if (outputDirs.size !== 1) {
156
+ throw utils_1.createError('Unable to emit HTML output. Multiple rollup build outputs have a different output directory set.');
157
+ }
158
+ const emittedAssets = await emitAssets_1.emitAssets.call(this, inputs, pluginOptions);
159
+ const outputs = await createHTMLOutput_1.createHTMLOutput({
160
+ outputDir: path_1.default.resolve(options.dir),
161
+ inputs,
162
+ emittedAssets,
163
+ generatedBundles,
164
+ externalTransformHtmlFns,
165
+ pluginOptions,
166
+ defaultInjectDisabled,
167
+ serviceWorkerPath,
168
+ injectServiceWorker,
169
+ absolutePathPrefix,
170
+ strictCSPInlineScripts,
171
+ });
172
+ for (const output of outputs) {
173
+ this.emitFile(output);
174
+ }
175
+ }
176
+ },
177
+ };
178
+ },
179
+ },
180
+ };
181
+ }
182
+ exports.rollupPluginHTML = rollupPluginHTML;
183
+ //# sourceMappingURL=rollupPluginHTML.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollupPluginHTML.js","sourceRoot":"","sources":["../src/rollupPluginHTML.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ScriptModuleTag } from './RollupPluginHTMLOptions';
2
+ export declare const NOOP_IMPORT: ScriptModuleTag;
3
+ export declare function createError(msg: string): Error;
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAI5D,eAAO,MAAM,WAAW,EAAE,eAAgE,CAAC;AAE3F,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,SAEtC"}