@rollup-extras/plugin-html 1.0.0 → 1.2.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/dist/index.cjs +88 -117
- package/dist/index.d.ts +5 -1
- package/dist/index.mjs +86 -116
- package/dist/types.d.ts +1 -1
- package/package.json +25 -30
package/dist/index.cjs
CHANGED
|
@@ -3,20 +3,34 @@
|
|
|
3
3
|
var fs = require('fs/promises');
|
|
4
4
|
var oldStyleFs = require('fs');
|
|
5
5
|
var path = require('path');
|
|
6
|
-
var
|
|
6
|
+
var options = require('@rollup-extras/utils/options');
|
|
7
|
+
var logger = require('@rollup-extras/utils/logger');
|
|
8
|
+
var mutliConfigPluginBase = require('@rollup-extras/utils/mutli-config-plugin-base');
|
|
7
9
|
|
|
8
10
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
9
11
|
|
|
10
12
|
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
|
|
11
13
|
var oldStyleFs__default = /*#__PURE__*/_interopDefaultLegacy(oldStyleFs);
|
|
12
14
|
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
|
|
15
|
+
var logger__default = /*#__PURE__*/_interopDefaultLegacy(logger);
|
|
13
16
|
|
|
14
17
|
const defaultTemplate = '<!DOCTYPE html><html><head></head><body></body></html>';
|
|
15
18
|
const headClosingElement = '</head>';
|
|
16
19
|
const bodyClosingElement = '</body>';
|
|
17
20
|
const cssExtention = '.css';
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
const defaults = {
|
|
22
|
+
pluginName: '@rollup-extras/plugin-html',
|
|
23
|
+
outputFile: 'index.html',
|
|
24
|
+
watch: true,
|
|
25
|
+
useWriteBundle: false,
|
|
26
|
+
emitFile: 'auto',
|
|
27
|
+
injectIntoHead: (fileName) => fileName.endsWith(cssExtention),
|
|
28
|
+
ignore: toAssetPredicate(false),
|
|
29
|
+
templateFactory: ((template, assets, defaultTemplateFactory) => defaultTemplateFactory(template, assets))
|
|
30
|
+
};
|
|
31
|
+
const factories = { logger: logger__default["default"], injectIntoHead: predicateFactory, ignore: predicateFactory };
|
|
32
|
+
function index (options$1 = {}) {
|
|
33
|
+
const { pluginName, outputFile, template, watch, emitFile, conditionalLoading, logger, useWriteBundle, logLevel, useEmittedTemplate, injectIntoHead, ignore, assetsFactory, templateFactory } = options.getOptionsObject(options$1, Object.assign(Object.assign({}, defaults), { useEmittedTemplate: !('template' in options$1), logLevel: options$1.verbose ? 1 /* info */ : 0 /* verbose */ }), factories), hasCustomTemplateFactory = 'templateFactory' in options$1;
|
|
20
34
|
let templateString = defaultTemplate, hasTemplateFile = false;
|
|
21
35
|
if (template) {
|
|
22
36
|
if (isUsableByDefaultTemplateFactory(template)) {
|
|
@@ -50,18 +64,23 @@ function index (options = {}) {
|
|
|
50
64
|
}
|
|
51
65
|
}
|
|
52
66
|
}
|
|
53
|
-
let
|
|
54
|
-
const
|
|
55
|
-
const instance =
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
67
|
+
let initialDir = '', fileNameInInitialDir, assets = freshAssets();
|
|
68
|
+
const processedFiles = new Set();
|
|
69
|
+
const instance = mutliConfigPluginBase.multiConfigPluginBase(useWriteBundle, pluginName, generateBundle, updateAssets);
|
|
70
|
+
const baseRenderStart = instance.renderStart;
|
|
71
|
+
const baseAddInstance = instance.api.addInstance;
|
|
72
|
+
instance.renderStart = function (outputOptions, inputOptions) {
|
|
73
|
+
logger('started collecting information', 0 /* verbose */);
|
|
74
|
+
initialDir = outputOptions.dir || '';
|
|
75
|
+
fileNameInInitialDir = path__default["default"].join(initialDir, outputFile);
|
|
76
|
+
return baseRenderStart.call(this, outputOptions, inputOptions);
|
|
77
|
+
};
|
|
78
|
+
instance.api.addInstance = () => {
|
|
79
|
+
const instance = baseAddInstance();
|
|
80
|
+
if (hasTemplateFile && watch) {
|
|
81
|
+
instance.buildStart = buildStart;
|
|
82
|
+
}
|
|
83
|
+
return instance;
|
|
65
84
|
};
|
|
66
85
|
if (hasTemplateFile && watch) {
|
|
67
86
|
instance.buildStart = async function () {
|
|
@@ -75,6 +94,29 @@ function index (options = {}) {
|
|
|
75
94
|
};
|
|
76
95
|
}
|
|
77
96
|
return instance;
|
|
97
|
+
async function updateAssets(options, bundle, remainingConfigsCount, remainingOutputsCount) {
|
|
98
|
+
await getAssets(options, bundle);
|
|
99
|
+
const statistics = Object.keys(assets)
|
|
100
|
+
.map(key => ({ key, count: assets[key].length }))
|
|
101
|
+
.filter(item => item.count)
|
|
102
|
+
.map(({ key, count }) => `${key}: ${count}`)
|
|
103
|
+
.join(', ');
|
|
104
|
+
logger(`assets collected: [${statistics}], remaining: ${remainingOutputsCount} outputs, ${remainingConfigsCount} configs`, 0 /* verbose */);
|
|
105
|
+
const dir = options.dir || '', fileName = path__default["default"].relative(dir, fileNameInInitialDir);
|
|
106
|
+
if (fileName in bundle) {
|
|
107
|
+
if (useEmittedTemplate) {
|
|
108
|
+
logger(`using exiting emitted ${fileName} as an input for out templateFactory`, 0 /* verbose */);
|
|
109
|
+
const source = bundle[fileName].type === 'asset' ? bundle[fileName].source.toString() : bundle[fileName].code;
|
|
110
|
+
useNewTemplate(source);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
logger(`removing exiting emitted ${fileName}`, 0 /* verbose */);
|
|
114
|
+
}
|
|
115
|
+
if (remainingConfigsCount === 0 && emitFile && !useWriteBundle) {
|
|
116
|
+
delete bundle[fileName];
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
78
120
|
function freshAssets() {
|
|
79
121
|
return {
|
|
80
122
|
asset: [],
|
|
@@ -97,87 +139,41 @@ function index (options = {}) {
|
|
|
97
139
|
logger('template nor a file or string', 2 /* warn */, e);
|
|
98
140
|
}
|
|
99
141
|
else {
|
|
100
|
-
logger(
|
|
142
|
+
logger('error reading template', 2 /* warn */, e);
|
|
101
143
|
}
|
|
102
144
|
}
|
|
103
145
|
function warnAboutUsingDefaultTemplate() {
|
|
104
146
|
logger('template is unusable by default template factory, using default one', 2 /* warn */);
|
|
105
147
|
}
|
|
106
|
-
function addInstance() {
|
|
107
|
-
const configId = ++configsCount;
|
|
108
|
-
configs.add(configId);
|
|
109
|
-
const instance = {
|
|
110
|
-
name: `${pluginName}#${configId}`,
|
|
111
|
-
renderStart: () => {
|
|
112
|
-
configs.delete(configId);
|
|
113
|
-
return renderStart();
|
|
114
|
-
},
|
|
115
|
-
[finalHook]: generateBundle
|
|
116
|
-
};
|
|
117
|
-
if (hasTemplateFile && watch) {
|
|
118
|
-
instance.buildStart = buildStart;
|
|
119
|
-
}
|
|
120
|
-
return instance;
|
|
121
|
-
}
|
|
122
148
|
async function buildStart() {
|
|
123
|
-
this.addWatchFile(
|
|
124
|
-
}
|
|
125
|
-
function renderStart() {
|
|
126
|
-
++remainingOutputsCount;
|
|
149
|
+
this.addWatchFile(template);
|
|
127
150
|
}
|
|
128
|
-
async function generateBundle(options
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
if (useEmittedTemplate) {
|
|
140
|
-
logger(`using exiting emitted ${fileName} as an input for out templateFactory`, logLevel);
|
|
141
|
-
const source = bundle[fileName].type === 'asset' ? bundle[fileName].source.toString() : bundle[fileName].code;
|
|
142
|
-
useNewTemplate(source);
|
|
151
|
+
async function generateBundle(options) {
|
|
152
|
+
logger.start('generating html', logLevel);
|
|
153
|
+
try {
|
|
154
|
+
const dir = options.dir || '', fileName = path__default["default"].relative(dir, fileNameInInitialDir);
|
|
155
|
+
const depromisifiedTemplateString = await templateString, source = await templateFactory(depromisifiedTemplateString, assets, defaultTemplateFactory);
|
|
156
|
+
if (!emitFile || fileName.startsWith('..') || useWriteBundle) {
|
|
157
|
+
if (emitFile && emitFile !== 'auto') {
|
|
158
|
+
logger('cannot emitFile because it is outside of current output.dir, using writeFile instead', 0 /* verbose */);
|
|
159
|
+
}
|
|
160
|
+
await fs__default["default"].mkdir(path__default["default"].dirname(fileNameInInitialDir), { recursive: true });
|
|
161
|
+
await fs__default["default"].writeFile(fileNameInInitialDir, source);
|
|
143
162
|
}
|
|
144
163
|
else {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
164
|
+
this.emitFile({
|
|
165
|
+
type: 'asset',
|
|
166
|
+
fileName,
|
|
167
|
+
source
|
|
168
|
+
});
|
|
149
169
|
}
|
|
170
|
+
// reset assets and configs for next iteration
|
|
171
|
+
assets = freshAssets();
|
|
172
|
+
processedFiles.clear();
|
|
173
|
+
logger.finish('html file generated');
|
|
150
174
|
}
|
|
151
|
-
|
|
152
|
-
logger.
|
|
153
|
-
try {
|
|
154
|
-
const depromisifiedTemplateString = await templateString, source = await templateFactory(depromisifiedTemplateString, assets, defaultTemplateFactory);
|
|
155
|
-
if (!emitFile || fileName.startsWith('..') || useWriteBundle) {
|
|
156
|
-
if (emitFile && emitFile !== 'auto') {
|
|
157
|
-
logger('cannot emitFile because it is outside of current output.dir, using writeFile instead', logLevel);
|
|
158
|
-
}
|
|
159
|
-
await fs__default["default"].mkdir(path__default["default"].dirname(fileNameInInitialDir), { recursive: true });
|
|
160
|
-
await fs__default["default"].writeFile(fileNameInInitialDir, source);
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
this.emitFile({
|
|
164
|
-
type: 'asset',
|
|
165
|
-
fileName,
|
|
166
|
-
source
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
// reset assets and configs for next iteration
|
|
170
|
-
assets = freshAssets();
|
|
171
|
-
for (let i = configsCount; i > 0; --i) {
|
|
172
|
-
configs.add(i);
|
|
173
|
-
}
|
|
174
|
-
processedFiles.clear();
|
|
175
|
-
logger.finish('html file generated');
|
|
176
|
-
}
|
|
177
|
-
catch (e) {
|
|
178
|
-
logger(`error generating html file\n${e}`, 3 /* error */, e);
|
|
179
|
-
logger.finish('html generation failed', 3 /* error */);
|
|
180
|
-
}
|
|
175
|
+
catch (e) {
|
|
176
|
+
logger.finish('html generation failed', 3 /* error */, e);
|
|
181
177
|
}
|
|
182
178
|
}
|
|
183
179
|
async function getAssets(options, bundle) {
|
|
@@ -246,7 +242,7 @@ function index (options = {}) {
|
|
|
246
242
|
}
|
|
247
243
|
}
|
|
248
244
|
catch (e) {
|
|
249
|
-
logger(
|
|
245
|
+
logger('exception in assetFactory', 2 /* warn */, e);
|
|
250
246
|
}
|
|
251
247
|
}
|
|
252
248
|
return false;
|
|
@@ -264,42 +260,17 @@ function getNonModuleScriptElement(fileName, conditionalLoading) {
|
|
|
264
260
|
function getModuleScriptElement(fileName) {
|
|
265
261
|
return `<script src="${fileName}" type="module"></script>`;
|
|
266
262
|
}
|
|
267
|
-
function
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
pluginName: (_a = userOptions.pluginName) !== null && _a !== void 0 ? _a : '@rollup-extras/plugin-html',
|
|
271
|
-
template: userOptions.template,
|
|
272
|
-
outputFile: (_b = userOptions.outputFile) !== null && _b !== void 0 ? _b : 'index.html',
|
|
273
|
-
watch: (_c = userOptions.watch) !== null && _c !== void 0 ? _c : true,
|
|
274
|
-
useWriteBundle: (_d = userOptions.useWriteBundle) !== null && _d !== void 0 ? _d : false,
|
|
275
|
-
useEmittedTemplate: (_e = userOptions.useEmittedTemplate) !== null && _e !== void 0 ? _e : !('template' in userOptions),
|
|
276
|
-
emitFile: (_f = userOptions.emitFile) !== null && _f !== void 0 ? _f : 'auto',
|
|
277
|
-
logLevel: userOptions.verbose ? 1 /* info */ : 0 /* verbose */,
|
|
278
|
-
conditionalLoading: userOptions.conditionalLoading,
|
|
279
|
-
injectIntoHead: (fileName) => fileName.endsWith(cssExtention),
|
|
280
|
-
ignore: toAssetPredicate(false),
|
|
281
|
-
assetsFactory: userOptions.assetsFactory,
|
|
282
|
-
templateFactory: (_g = userOptions.templateFactory) !== null && _g !== void 0 ? _g : ((template, assets, defaultTemplateFactory) => defaultTemplateFactory(template, assets)),
|
|
283
|
-
}, logger$1 = options.logger = logger.createLogger(options.pluginName), optionIgnoredText = 'option ignored because it is not a function, RegExp or boolean';
|
|
284
|
-
if (userOptions.injectIntoHead != null) {
|
|
285
|
-
const predicate = toAssetPredicate(userOptions.injectIntoHead);
|
|
286
|
-
if (predicate) {
|
|
287
|
-
options.injectIntoHead = predicate;
|
|
288
|
-
}
|
|
289
|
-
else {
|
|
290
|
-
logger$1(`injectIntoHead ${optionIgnoredText}`, 2 /* warn */);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
if (userOptions.ignore != null) {
|
|
294
|
-
const predicate = toAssetPredicate(userOptions.ignore);
|
|
263
|
+
function predicateFactory(options, field) {
|
|
264
|
+
if (options[field] != null) {
|
|
265
|
+
const predicate = toAssetPredicate(options[field]);
|
|
295
266
|
if (predicate) {
|
|
296
|
-
|
|
267
|
+
return predicate;
|
|
297
268
|
}
|
|
298
269
|
else {
|
|
299
|
-
logger
|
|
270
|
+
options.logger && options.logger(`${field} option ignored because it is not a function, RegExp or boolean`, 2 /* warn */);
|
|
300
271
|
}
|
|
301
272
|
}
|
|
302
|
-
return
|
|
273
|
+
return defaults[field];
|
|
303
274
|
}
|
|
304
275
|
function toAssetPredicate(sourceOption) {
|
|
305
276
|
if (typeof sourceOption === 'boolean') {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import { PluginHooks } from 'rollup';
|
|
2
2
|
import { HtmlPluginOptions } from './types';
|
|
3
|
-
export default function (options?: HtmlPluginOptions): Partial<PluginHooks
|
|
3
|
+
export default function (options?: HtmlPluginOptions): Partial<PluginHooks> & {
|
|
4
|
+
api: {
|
|
5
|
+
addInstance(): void;
|
|
6
|
+
};
|
|
7
|
+
};
|
package/dist/index.mjs
CHANGED
|
@@ -1,14 +1,27 @@
|
|
|
1
1
|
import fs from 'fs/promises';
|
|
2
2
|
import oldStyleFs from 'fs';
|
|
3
3
|
import path from 'path';
|
|
4
|
-
import {
|
|
4
|
+
import { getOptionsObject } from '@rollup-extras/utils/options';
|
|
5
|
+
import logger from '@rollup-extras/utils/logger';
|
|
6
|
+
import { multiConfigPluginBase } from '@rollup-extras/utils/mutli-config-plugin-base';
|
|
5
7
|
|
|
6
8
|
const defaultTemplate = '<!DOCTYPE html><html><head></head><body></body></html>';
|
|
7
9
|
const headClosingElement = '</head>';
|
|
8
10
|
const bodyClosingElement = '</body>';
|
|
9
11
|
const cssExtention = '.css';
|
|
12
|
+
const defaults = {
|
|
13
|
+
pluginName: '@rollup-extras/plugin-html',
|
|
14
|
+
outputFile: 'index.html',
|
|
15
|
+
watch: true,
|
|
16
|
+
useWriteBundle: false,
|
|
17
|
+
emitFile: 'auto',
|
|
18
|
+
injectIntoHead: (fileName) => fileName.endsWith(cssExtention),
|
|
19
|
+
ignore: toAssetPredicate(false),
|
|
20
|
+
templateFactory: ((template, assets, defaultTemplateFactory) => defaultTemplateFactory(template, assets))
|
|
21
|
+
};
|
|
22
|
+
const factories = { logger, injectIntoHead: predicateFactory, ignore: predicateFactory };
|
|
10
23
|
function index (options = {}) {
|
|
11
|
-
const { pluginName, outputFile, template, watch, emitFile, conditionalLoading, logger, useWriteBundle, logLevel, useEmittedTemplate, injectIntoHead, ignore, assetsFactory, templateFactory } =
|
|
24
|
+
const { pluginName, outputFile, template, watch, emitFile, conditionalLoading, logger, useWriteBundle, logLevel, useEmittedTemplate, injectIntoHead, ignore, assetsFactory, templateFactory } = getOptionsObject(options, Object.assign(Object.assign({}, defaults), { useEmittedTemplate: !('template' in options), logLevel: options.verbose ? 1 /* info */ : 0 /* verbose */ }), factories), hasCustomTemplateFactory = 'templateFactory' in options;
|
|
12
25
|
let templateString = defaultTemplate, hasTemplateFile = false;
|
|
13
26
|
if (template) {
|
|
14
27
|
if (isUsableByDefaultTemplateFactory(template)) {
|
|
@@ -42,18 +55,23 @@ function index (options = {}) {
|
|
|
42
55
|
}
|
|
43
56
|
}
|
|
44
57
|
}
|
|
45
|
-
let
|
|
46
|
-
const
|
|
47
|
-
const instance =
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
58
|
+
let initialDir = '', fileNameInInitialDir, assets = freshAssets();
|
|
59
|
+
const processedFiles = new Set();
|
|
60
|
+
const instance = multiConfigPluginBase(useWriteBundle, pluginName, generateBundle, updateAssets);
|
|
61
|
+
const baseRenderStart = instance.renderStart;
|
|
62
|
+
const baseAddInstance = instance.api.addInstance;
|
|
63
|
+
instance.renderStart = function (outputOptions, inputOptions) {
|
|
64
|
+
logger('started collecting information', 0 /* verbose */);
|
|
65
|
+
initialDir = outputOptions.dir || '';
|
|
66
|
+
fileNameInInitialDir = path.join(initialDir, outputFile);
|
|
67
|
+
return baseRenderStart.call(this, outputOptions, inputOptions);
|
|
68
|
+
};
|
|
69
|
+
instance.api.addInstance = () => {
|
|
70
|
+
const instance = baseAddInstance();
|
|
71
|
+
if (hasTemplateFile && watch) {
|
|
72
|
+
instance.buildStart = buildStart;
|
|
73
|
+
}
|
|
74
|
+
return instance;
|
|
57
75
|
};
|
|
58
76
|
if (hasTemplateFile && watch) {
|
|
59
77
|
instance.buildStart = async function () {
|
|
@@ -67,6 +85,29 @@ function index (options = {}) {
|
|
|
67
85
|
};
|
|
68
86
|
}
|
|
69
87
|
return instance;
|
|
88
|
+
async function updateAssets(options, bundle, remainingConfigsCount, remainingOutputsCount) {
|
|
89
|
+
await getAssets(options, bundle);
|
|
90
|
+
const statistics = Object.keys(assets)
|
|
91
|
+
.map(key => ({ key, count: assets[key].length }))
|
|
92
|
+
.filter(item => item.count)
|
|
93
|
+
.map(({ key, count }) => `${key}: ${count}`)
|
|
94
|
+
.join(', ');
|
|
95
|
+
logger(`assets collected: [${statistics}], remaining: ${remainingOutputsCount} outputs, ${remainingConfigsCount} configs`, 0 /* verbose */);
|
|
96
|
+
const dir = options.dir || '', fileName = path.relative(dir, fileNameInInitialDir);
|
|
97
|
+
if (fileName in bundle) {
|
|
98
|
+
if (useEmittedTemplate) {
|
|
99
|
+
logger(`using exiting emitted ${fileName} as an input for out templateFactory`, 0 /* verbose */);
|
|
100
|
+
const source = bundle[fileName].type === 'asset' ? bundle[fileName].source.toString() : bundle[fileName].code;
|
|
101
|
+
useNewTemplate(source);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
logger(`removing exiting emitted ${fileName}`, 0 /* verbose */);
|
|
105
|
+
}
|
|
106
|
+
if (remainingConfigsCount === 0 && emitFile && !useWriteBundle) {
|
|
107
|
+
delete bundle[fileName];
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
70
111
|
function freshAssets() {
|
|
71
112
|
return {
|
|
72
113
|
asset: [],
|
|
@@ -89,87 +130,41 @@ function index (options = {}) {
|
|
|
89
130
|
logger('template nor a file or string', 2 /* warn */, e);
|
|
90
131
|
}
|
|
91
132
|
else {
|
|
92
|
-
logger(
|
|
133
|
+
logger('error reading template', 2 /* warn */, e);
|
|
93
134
|
}
|
|
94
135
|
}
|
|
95
136
|
function warnAboutUsingDefaultTemplate() {
|
|
96
137
|
logger('template is unusable by default template factory, using default one', 2 /* warn */);
|
|
97
138
|
}
|
|
98
|
-
function addInstance() {
|
|
99
|
-
const configId = ++configsCount;
|
|
100
|
-
configs.add(configId);
|
|
101
|
-
const instance = {
|
|
102
|
-
name: `${pluginName}#${configId}`,
|
|
103
|
-
renderStart: () => {
|
|
104
|
-
configs.delete(configId);
|
|
105
|
-
return renderStart();
|
|
106
|
-
},
|
|
107
|
-
[finalHook]: generateBundle
|
|
108
|
-
};
|
|
109
|
-
if (hasTemplateFile && watch) {
|
|
110
|
-
instance.buildStart = buildStart;
|
|
111
|
-
}
|
|
112
|
-
return instance;
|
|
113
|
-
}
|
|
114
139
|
async function buildStart() {
|
|
115
|
-
this.addWatchFile(
|
|
116
|
-
}
|
|
117
|
-
function renderStart() {
|
|
118
|
-
++remainingOutputsCount;
|
|
140
|
+
this.addWatchFile(template);
|
|
119
141
|
}
|
|
120
|
-
async function generateBundle(options
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
if (useEmittedTemplate) {
|
|
132
|
-
logger(`using exiting emitted ${fileName} as an input for out templateFactory`, logLevel);
|
|
133
|
-
const source = bundle[fileName].type === 'asset' ? bundle[fileName].source.toString() : bundle[fileName].code;
|
|
134
|
-
useNewTemplate(source);
|
|
142
|
+
async function generateBundle(options) {
|
|
143
|
+
logger.start('generating html', logLevel);
|
|
144
|
+
try {
|
|
145
|
+
const dir = options.dir || '', fileName = path.relative(dir, fileNameInInitialDir);
|
|
146
|
+
const depromisifiedTemplateString = await templateString, source = await templateFactory(depromisifiedTemplateString, assets, defaultTemplateFactory);
|
|
147
|
+
if (!emitFile || fileName.startsWith('..') || useWriteBundle) {
|
|
148
|
+
if (emitFile && emitFile !== 'auto') {
|
|
149
|
+
logger('cannot emitFile because it is outside of current output.dir, using writeFile instead', 0 /* verbose */);
|
|
150
|
+
}
|
|
151
|
+
await fs.mkdir(path.dirname(fileNameInInitialDir), { recursive: true });
|
|
152
|
+
await fs.writeFile(fileNameInInitialDir, source);
|
|
135
153
|
}
|
|
136
154
|
else {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
155
|
+
this.emitFile({
|
|
156
|
+
type: 'asset',
|
|
157
|
+
fileName,
|
|
158
|
+
source
|
|
159
|
+
});
|
|
141
160
|
}
|
|
161
|
+
// reset assets and configs for next iteration
|
|
162
|
+
assets = freshAssets();
|
|
163
|
+
processedFiles.clear();
|
|
164
|
+
logger.finish('html file generated');
|
|
142
165
|
}
|
|
143
|
-
|
|
144
|
-
logger.
|
|
145
|
-
try {
|
|
146
|
-
const depromisifiedTemplateString = await templateString, source = await templateFactory(depromisifiedTemplateString, assets, defaultTemplateFactory);
|
|
147
|
-
if (!emitFile || fileName.startsWith('..') || useWriteBundle) {
|
|
148
|
-
if (emitFile && emitFile !== 'auto') {
|
|
149
|
-
logger('cannot emitFile because it is outside of current output.dir, using writeFile instead', logLevel);
|
|
150
|
-
}
|
|
151
|
-
await fs.mkdir(path.dirname(fileNameInInitialDir), { recursive: true });
|
|
152
|
-
await fs.writeFile(fileNameInInitialDir, source);
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
this.emitFile({
|
|
156
|
-
type: 'asset',
|
|
157
|
-
fileName,
|
|
158
|
-
source
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
// reset assets and configs for next iteration
|
|
162
|
-
assets = freshAssets();
|
|
163
|
-
for (let i = configsCount; i > 0; --i) {
|
|
164
|
-
configs.add(i);
|
|
165
|
-
}
|
|
166
|
-
processedFiles.clear();
|
|
167
|
-
logger.finish('html file generated');
|
|
168
|
-
}
|
|
169
|
-
catch (e) {
|
|
170
|
-
logger(`error generating html file\n${e}`, 3 /* error */, e);
|
|
171
|
-
logger.finish('html generation failed', 3 /* error */);
|
|
172
|
-
}
|
|
166
|
+
catch (e) {
|
|
167
|
+
logger.finish('html generation failed', 3 /* error */, e);
|
|
173
168
|
}
|
|
174
169
|
}
|
|
175
170
|
async function getAssets(options, bundle) {
|
|
@@ -238,7 +233,7 @@ function index (options = {}) {
|
|
|
238
233
|
}
|
|
239
234
|
}
|
|
240
235
|
catch (e) {
|
|
241
|
-
logger(
|
|
236
|
+
logger('exception in assetFactory', 2 /* warn */, e);
|
|
242
237
|
}
|
|
243
238
|
}
|
|
244
239
|
return false;
|
|
@@ -256,42 +251,17 @@ function getNonModuleScriptElement(fileName, conditionalLoading) {
|
|
|
256
251
|
function getModuleScriptElement(fileName) {
|
|
257
252
|
return `<script src="${fileName}" type="module"></script>`;
|
|
258
253
|
}
|
|
259
|
-
function
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
pluginName: (_a = userOptions.pluginName) !== null && _a !== void 0 ? _a : '@rollup-extras/plugin-html',
|
|
263
|
-
template: userOptions.template,
|
|
264
|
-
outputFile: (_b = userOptions.outputFile) !== null && _b !== void 0 ? _b : 'index.html',
|
|
265
|
-
watch: (_c = userOptions.watch) !== null && _c !== void 0 ? _c : true,
|
|
266
|
-
useWriteBundle: (_d = userOptions.useWriteBundle) !== null && _d !== void 0 ? _d : false,
|
|
267
|
-
useEmittedTemplate: (_e = userOptions.useEmittedTemplate) !== null && _e !== void 0 ? _e : !('template' in userOptions),
|
|
268
|
-
emitFile: (_f = userOptions.emitFile) !== null && _f !== void 0 ? _f : 'auto',
|
|
269
|
-
logLevel: userOptions.verbose ? 1 /* info */ : 0 /* verbose */,
|
|
270
|
-
conditionalLoading: userOptions.conditionalLoading,
|
|
271
|
-
injectIntoHead: (fileName) => fileName.endsWith(cssExtention),
|
|
272
|
-
ignore: toAssetPredicate(false),
|
|
273
|
-
assetsFactory: userOptions.assetsFactory,
|
|
274
|
-
templateFactory: (_g = userOptions.templateFactory) !== null && _g !== void 0 ? _g : ((template, assets, defaultTemplateFactory) => defaultTemplateFactory(template, assets)),
|
|
275
|
-
}, logger = options.logger = createLogger(options.pluginName), optionIgnoredText = 'option ignored because it is not a function, RegExp or boolean';
|
|
276
|
-
if (userOptions.injectIntoHead != null) {
|
|
277
|
-
const predicate = toAssetPredicate(userOptions.injectIntoHead);
|
|
278
|
-
if (predicate) {
|
|
279
|
-
options.injectIntoHead = predicate;
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
logger(`injectIntoHead ${optionIgnoredText}`, 2 /* warn */);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
if (userOptions.ignore != null) {
|
|
286
|
-
const predicate = toAssetPredicate(userOptions.ignore);
|
|
254
|
+
function predicateFactory(options, field) {
|
|
255
|
+
if (options[field] != null) {
|
|
256
|
+
const predicate = toAssetPredicate(options[field]);
|
|
287
257
|
if (predicate) {
|
|
288
|
-
|
|
258
|
+
return predicate;
|
|
289
259
|
}
|
|
290
260
|
else {
|
|
291
|
-
logger(
|
|
261
|
+
options.logger && options.logger(`${field} option ignored because it is not a function, RegExp or boolean`, 2 /* warn */);
|
|
292
262
|
}
|
|
293
263
|
}
|
|
294
|
-
return
|
|
264
|
+
return defaults[field];
|
|
295
265
|
}
|
|
296
266
|
function toAssetPredicate(sourceOption) {
|
|
297
267
|
if (typeof sourceOption === 'boolean') {
|
package/dist/types.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.
|
|
2
|
+
"version": "1.2.0",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"name": "@rollup-extras/plugin-html",
|
|
5
5
|
"author": {
|
|
@@ -29,49 +29,44 @@
|
|
|
29
29
|
"bugs": {
|
|
30
30
|
"url": "https://github.com/kshutkin/rollup-extras/issues"
|
|
31
31
|
},
|
|
32
|
-
"homepage": "https://github.com/kshutkin/rollup-extras/plugin-
|
|
32
|
+
"homepage": "https://github.com/kshutkin/rollup-extras/plugin-html/README.md",
|
|
33
|
+
"readme": "README.md",
|
|
34
|
+
"description": "Rollup plugin to inject assets names into html template.",
|
|
33
35
|
"keywords": [
|
|
34
|
-
"rollup-plugin"
|
|
36
|
+
"rollup-plugin",
|
|
37
|
+
"html",
|
|
38
|
+
"bundle"
|
|
35
39
|
],
|
|
36
40
|
"scripts": {
|
|
37
|
-
"build": "
|
|
38
|
-
"dev": "rimraf ./dist && rollup -c -w",
|
|
41
|
+
"build": "pkgbld",
|
|
39
42
|
"test": "jest --collectCoverage",
|
|
40
43
|
"lint": "eslint ./src",
|
|
41
44
|
"semantic-release": "npx semantic-release"
|
|
42
45
|
},
|
|
43
46
|
"devDependencies": {
|
|
44
|
-
"@rollup/plugin-commonjs": "21.0.1",
|
|
45
|
-
"@rollup/plugin-node-resolve": "13.0.6",
|
|
46
47
|
"@semantic-release/changelog": "6.0.1",
|
|
47
|
-
"@semantic-release/commit-analyzer": "9.0.
|
|
48
|
+
"@semantic-release/commit-analyzer": "9.0.2",
|
|
48
49
|
"@semantic-release/git": "10.0.1",
|
|
49
|
-
"@semantic-release/npm": "8.0.
|
|
50
|
-
"@semantic-release/release-notes-generator": "10.0.
|
|
51
|
-
"@types/jest": "27.0.
|
|
52
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
53
|
-
"@typescript-eslint/parser": "5.
|
|
50
|
+
"@semantic-release/npm": "8.0.3",
|
|
51
|
+
"@semantic-release/release-notes-generator": "10.0.3",
|
|
52
|
+
"@types/jest": "27.0.3",
|
|
53
|
+
"@typescript-eslint/eslint-plugin": "5.8.1",
|
|
54
|
+
"@typescript-eslint/parser": "5.8.1",
|
|
54
55
|
"conventional-changelog-angular": "5.0.13",
|
|
55
|
-
"eslint": "8.
|
|
56
|
-
"jest": "27.
|
|
57
|
-
"
|
|
58
|
-
"rimraf": "3.0.2",
|
|
59
|
-
"is-builtin-module": "3.1.0",
|
|
60
|
-
"rollup": "2.60.1",
|
|
61
|
-
"rollup-plugin-terser": "7.0.2",
|
|
62
|
-
"rollup-plugin-typescript2": "0.31.1",
|
|
63
|
-
"rollup-plugin-preprocess": "0.0.4",
|
|
64
|
-
"semantic-release": "18.0.0",
|
|
56
|
+
"eslint": "8.5.0",
|
|
57
|
+
"jest": "27.4.5",
|
|
58
|
+
"semantic-release": "18.0.1",
|
|
65
59
|
"semantic-release-monorepo": "7.0.5",
|
|
66
|
-
"ts-jest": "27.
|
|
67
|
-
"typescript": "4.
|
|
68
|
-
"update-monorepo-package-json": "0.
|
|
60
|
+
"ts-jest": "27.1.2",
|
|
61
|
+
"typescript": "4.5.x",
|
|
62
|
+
"update-monorepo-package-json": "0.2.0",
|
|
63
|
+
"pkgbld": "1.1.3"
|
|
69
64
|
},
|
|
70
65
|
"peerDependencies": {
|
|
71
|
-
"rollup": "^2.60.
|
|
66
|
+
"rollup": "^2.60.1"
|
|
72
67
|
},
|
|
73
68
|
"dependencies": {
|
|
74
|
-
"@niceties/logger": "^1.0
|
|
75
|
-
|
|
76
|
-
|
|
69
|
+
"@niceties/logger": "^1.1.0",
|
|
70
|
+
"@rollup-extras/utils": "^1.2.0"
|
|
71
|
+
}
|
|
77
72
|
}
|