@micromag/cli 0.3.767 → 0.3.771

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 (3) hide show
  1. package/bin/export.js +2 -2
  2. package/package.json +10 -10
  3. package/lib/index.js +0 -537
package/bin/export.js CHANGED
@@ -14,7 +14,7 @@ var nodeFetch = require('node-fetch');
14
14
  var express = require('express');
15
15
  var getPort = require('get-port');
16
16
  var React = require('react');
17
- var ReactDOMServer = require('react-dom/server');
17
+ var server = require('react-dom/server');
18
18
  var Viewer = require('@micromag/viewer');
19
19
 
20
20
  const readJSON = file => fsExtra.readJsonSync(file);
@@ -315,7 +315,7 @@ const getStoryHtmlSSR = (story, settings = {}) => {
315
315
  googleApiKey,
316
316
  memoryRouter: true
317
317
  });
318
- return ReactDOMServer.renderToStaticMarkup(element);
318
+ return server.renderToStaticMarkup(element);
319
319
  };
320
320
 
321
321
  const storyParser = new core.StoryParser({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micromag/cli",
3
- "version": "0.3.767",
3
+ "version": "0.3.771",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "keywords": [
@@ -46,13 +46,13 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "@babel/runtime": "^7.13.10",
49
- "@micromag/core": "^0.3.767",
50
- "@micromag/elements": "^0.3.767",
51
- "@micromag/fields": "^0.3.767",
52
- "@micromag/screens": "^0.3.767",
53
- "@micromag/transforms": "^0.3.767",
54
- "@micromag/viewer": "^0.3.767",
55
- "@micromag/viewer-build": "^0.3.767",
49
+ "@micromag/core": "^0.3.769",
50
+ "@micromag/elements": "^0.3.771",
51
+ "@micromag/fields": "^0.3.769",
52
+ "@micromag/screens": "^0.3.771",
53
+ "@micromag/transforms": "^0.3.769",
54
+ "@micromag/viewer": "^0.3.771",
55
+ "@micromag/viewer-build": "^0.3.771",
56
56
  "change-case": "^5.4.4",
57
57
  "classnames": "^2.2.6",
58
58
  "commander": "^12.0.0",
@@ -62,7 +62,7 @@
62
62
  "lodash": "^4.17.21",
63
63
  "node-fetch": "^3.3.2",
64
64
  "prop-types": "^15.7.2",
65
- "puppeteer": "^9.1.1",
65
+ "puppeteer": "^24.33.0",
66
66
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
67
67
  "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
68
68
  },
@@ -70,5 +70,5 @@
70
70
  "access": "public",
71
71
  "registry": "https://registry.npmjs.org/"
72
72
  },
73
- "gitHead": "af57b08ccc073db83b6480e3a43fe14e6f36e0f6"
73
+ "gitHead": "a74bf984979f2bee58b57859808a8d9f6fa31f4a"
74
74
  }
package/lib/index.js DELETED
@@ -1,537 +0,0 @@
1
- 'use strict';
2
-
3
- var _regenerator = require('@babel/runtime/helpers/regenerator');
4
- var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
5
- var fs = require('fs');
6
- var core = require('@micromag/core');
7
- var screensManager = require('@micromag/screens');
8
- var FieldsManager = require('@micromag/fields');
9
- var transforms = require('@micromag/transforms');
10
- var _regeneratorValues = require('@babel/runtime/helpers/regeneratorValues');
11
- var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
12
- var path = require('path');
13
- var puppeteer = require('puppeteer');
14
- var fsExtra = require('fs-extra');
15
- var nodeFetch = require('node-fetch');
16
- var express = require('express');
17
- var getPort = require('get-port');
18
- var React = require('react');
19
- var ReactDOMServer = require('react-dom/server');
20
- var Viewer = require('@micromag/viewer');
21
-
22
- // Regexps involved with splitting words in various case formats.
23
- const SPLIT_LOWER_UPPER_RE = /([\p{Ll}\d])(\p{Lu})/gu;
24
- const SPLIT_UPPER_UPPER_RE = /(\p{Lu})([\p{Lu}][\p{Ll}])/gu;
25
- // Used to iterate over the initial split result and separate numbers.
26
- const SPLIT_SEPARATE_NUMBER_RE = /(\d)\p{Ll}|(\p{L})\d/u;
27
- // Regexp involved with stripping non-word characters from the result.
28
- const DEFAULT_STRIP_REGEXP = /[^\p{L}\d]+/giu;
29
- // The replacement value for splits.
30
- const SPLIT_REPLACE_VALUE = "$1\0$2";
31
- // The default characters to keep after transforming case.
32
- const DEFAULT_PREFIX_SUFFIX_CHARACTERS = "";
33
- /**
34
- * Split any cased input strings into an array of words.
35
- */
36
- function split(value) {
37
- let result = value.trim();
38
- result = result
39
- .replace(SPLIT_LOWER_UPPER_RE, SPLIT_REPLACE_VALUE)
40
- .replace(SPLIT_UPPER_UPPER_RE, SPLIT_REPLACE_VALUE);
41
- result = result.replace(DEFAULT_STRIP_REGEXP, "\0");
42
- let start = 0;
43
- let end = result.length;
44
- // Trim the delimiter from around the output string.
45
- while (result.charAt(start) === "\0")
46
- start++;
47
- if (start === end)
48
- return [];
49
- while (result.charAt(end - 1) === "\0")
50
- end--;
51
- return result.slice(start, end).split(/\0/g);
52
- }
53
- /**
54
- * Split the input string into an array of words, separating numbers.
55
- */
56
- function splitSeparateNumbers(value) {
57
- const words = split(value);
58
- for (let i = 0; i < words.length; i++) {
59
- const word = words[i];
60
- const match = SPLIT_SEPARATE_NUMBER_RE.exec(word);
61
- if (match) {
62
- const offset = match.index + (match[1] ?? match[2]).length;
63
- words.splice(i, 1, word.slice(0, offset), word.slice(offset));
64
- }
65
- }
66
- return words;
67
- }
68
- /**
69
- * Convert a string to camel case (`fooBar`).
70
- */
71
- function camelCase(input, options) {
72
- const [prefix, words, suffix] = splitPrefixSuffix(input, options);
73
- const lower = lowerFactory(options?.locale);
74
- const upper = upperFactory(options?.locale);
75
- const transform = pascalCaseTransformFactory(lower, upper);
76
- return (prefix +
77
- words
78
- .map((word, index) => {
79
- if (index === 0)
80
- return lower(word);
81
- return transform(word, index);
82
- })
83
- .join("") +
84
- suffix);
85
- }
86
- function lowerFactory(locale) {
87
- return (input) => input.toLocaleLowerCase(locale);
88
- }
89
- function upperFactory(locale) {
90
- return (input) => input.toLocaleUpperCase(locale);
91
- }
92
- function pascalCaseTransformFactory(lower, upper) {
93
- return (word, index) => {
94
- const char0 = word[0];
95
- const initial = index > 0 && char0 >= "0" && char0 <= "9" ? "_" + char0 : upper(char0);
96
- return initial + lower(word.slice(1));
97
- };
98
- }
99
- function splitPrefixSuffix(input, options = {}) {
100
- const splitFn = options.split ?? (options.separateNumbers ? splitSeparateNumbers : split);
101
- const prefixCharacters = options.prefixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;
102
- const suffixCharacters = options.suffixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;
103
- let prefixIndex = 0;
104
- let suffixIndex = input.length;
105
- while (prefixIndex < input.length) {
106
- const char = input.charAt(prefixIndex);
107
- if (!prefixCharacters.includes(char))
108
- break;
109
- prefixIndex++;
110
- }
111
- while (suffixIndex > prefixIndex) {
112
- const index = suffixIndex - 1;
113
- const char = input.charAt(index);
114
- if (!suffixCharacters.includes(char))
115
- break;
116
- suffixIndex = index;
117
- }
118
- return [
119
- input.slice(0, prefixIndex),
120
- splitFn(input.slice(prefixIndex, suffixIndex)),
121
- input.slice(suffixIndex),
122
- ];
123
- }
124
-
125
- var transformStory = function transformStory(story, format) {
126
- var transformKey = camelCase(format);
127
- var baseStory = transforms.transformer(story, transformKey, story);
128
- var _story$components = story.components,
129
- components = _story$components === void 0 ? [] : _story$components;
130
- var componentsStory = components.reduce(function (newStory, screen) {
131
- var type = screen.type;
132
- var _screensManager$getDe = screensManager.getDefinition(type),
133
- _screensManager$getDe2 = _screensManager$getDe.transforms,
134
- transforms = _screensManager$getDe2 === void 0 ? {} : _screensManager$getDe2;
135
- var transform = transforms[transformKey] || null;
136
- if (transform !== null) {
137
- return transform(newStory, screen, story);
138
- }
139
- return newStory;
140
- }, baseStory);
141
- return transforms.postProcessor(componentsStory, transformKey);
142
- };
143
-
144
- var startServer = /*#__PURE__*/function () {
145
- var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(path) {
146
- var port,
147
- finalPort,
148
- _args = arguments,
149
- _t;
150
- return _regenerator().w(function (_context) {
151
- while (1) switch (_context.n) {
152
- case 0:
153
- port = _args.length > 1 && _args[1] !== undefined ? _args[1] : null;
154
- _t = port;
155
- if (_t) {
156
- _context.n = 2;
157
- break;
158
- }
159
- _context.n = 1;
160
- return getPort({
161
- port: getPort.makeRange(3050, 3100)
162
- });
163
- case 1:
164
- _t = _context.v;
165
- case 2:
166
- finalPort = _t;
167
- return _context.a(2, new Promise(function (resolve) {
168
- var app = express();
169
- app.use(express["static"](path));
170
- var server = app.listen(finalPort, function () {
171
- return resolve(server);
172
- });
173
- }));
174
- }
175
- }, _callee);
176
- }));
177
- return function startServer(_x) {
178
- return _ref.apply(this, arguments);
179
- };
180
- }();
181
-
182
- var getOutputPath = function getOutputPath(output, filename) {
183
- if (output !== null) {
184
- var fileExt = path.extname(filename);
185
- var outputExt = path.extname(output);
186
- if (fileExt && outputExt === '') {
187
- return path.join(output, filename);
188
- }
189
- return output;
190
- }
191
- return path.join(process.cwd(), "./".concat(filename));
192
- };
193
-
194
- var DEBUG = false;
195
- var READY_WAIT_TIMEOUT = 20000; // ms
196
- var DEFAULT_VIEWPORT = {
197
- width: 360,
198
- height: 640,
199
- deviceScaleFactor: 3,
200
- isMobile: true
201
- };
202
- var captureStory = /*#__PURE__*/function () {
203
- var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(story, location) {
204
- var settings,
205
- _settings$viewport,
206
- defaultViewport,
207
- _settings$googleApiKe,
208
- googleApiKey,
209
- _settings$executableP,
210
- executablePath,
211
- server,
212
- serverPort,
213
- width,
214
- height,
215
- _ref2,
216
- _ref2$components,
217
- screens,
218
- browser,
219
- pages,
220
- hasPage,
221
- page,
222
- count,
223
- _loop,
224
- index,
225
- _args2 = arguments,
226
- _t2;
227
- return _regenerator().w(function (_context2) {
228
- while (1) switch (_context2.n) {
229
- case 0:
230
- settings = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : {};
231
- _settings$viewport = settings.viewport, defaultViewport = _settings$viewport === void 0 ? DEFAULT_VIEWPORT : _settings$viewport, _settings$googleApiKe = settings.googleApiKey, googleApiKey = _settings$googleApiKe === void 0 ? null : _settings$googleApiKe, _settings$executableP = settings.executablePath, executablePath = _settings$executableP === void 0 ? null : _settings$executableP;
232
- _context2.n = 1;
233
- return startServer(path.join(process.cwd(), './node_modules/@micromag/viewer-build/build/'));
234
- case 1:
235
- server = _context2.v;
236
- serverPort = server.address().port;
237
- width = defaultViewport.width, height = defaultViewport.height;
238
- _ref2 = story || {}, _ref2$components = _ref2.components, screens = _ref2$components === void 0 ? null : _ref2$components;
239
- _context2.n = 2;
240
- return puppeteer.launch(_objectSpread(_objectSpread({
241
- devtools: DEBUG
242
- }, executablePath !== null ? {
243
- executablePath: executablePath
244
- } : null), {}, {
245
- defaultViewport: defaultViewport,
246
- args: ['--no-sandbox']
247
- }));
248
- case 2:
249
- browser = _context2.v;
250
- _context2.n = 3;
251
- return browser.pages();
252
- case 3:
253
- pages = _context2.v;
254
- hasPage = pages.length > 0;
255
- if (!hasPage) {
256
- _context2.n = 4;
257
- break;
258
- }
259
- _t2 = pages[0];
260
- _context2.n = 6;
261
- break;
262
- case 4:
263
- _context2.n = 5;
264
- return browser.newPage();
265
- case 5:
266
- _t2 = _context2.v;
267
- case 6:
268
- page = _t2;
269
- _context2.n = 7;
270
- return page["goto"]("http://127.0.0.1:".concat(serverPort));
271
- case 7:
272
- if (!(screens !== null)) {
273
- _context2.n = 10;
274
- break;
275
- }
276
- count = screens.length;
277
- _loop = /*#__PURE__*/_regenerator().m(function _loop() {
278
- var screenNumber, screen, id, type, singleScreenStory, _screen$video, _screen$video2, _screen$video2$media, _screen$video2$media2, _screen$video2$media3, url, fileExtension, res, fileStream;
279
- return _regenerator().w(function (_context) {
280
- while (1) switch (_context.p = _context.n) {
281
- case 0:
282
- screenNumber = index + 1;
283
- screen = screens[index];
284
- id = screen.id, type = screen.type;
285
- singleScreenStory = _objectSpread(_objectSpread({}, story), {}, {
286
- components: screens.slice(index, index + 1)
287
- });
288
- console.log("Screen ".concat(screenNumber, "/").concat(count, " (").concat(type, ")..."));
289
- if (!(type === 'video' || type === 'video-360')) {
290
- _context.n = 2;
291
- break;
292
- }
293
- _screen$video = screen.video, _screen$video2 = _screen$video === void 0 ? {} : _screen$video, _screen$video2$media = _screen$video2.media, _screen$video2$media2 = _screen$video2$media === void 0 ? {} : _screen$video2$media, _screen$video2$media3 = _screen$video2$media2.url, url = _screen$video2$media3 === void 0 ? null : _screen$video2$media3;
294
- console.log("Downloading video from ".concat(url, "..."));
295
- fileExtension = url.split(/[#?]/)[0].split('.').pop().trim();
296
- _context.n = 1;
297
- return nodeFetch(url);
298
- case 1:
299
- res = _context.v;
300
- fileStream = fsExtra.createWriteStream(getOutputPath(location, "".concat(screenNumber, ".").concat(fileExtension)));
301
- _context.n = 2;
302
- return new Promise(function (resolve, reject) {
303
- res.body.pipe(fileStream);
304
- res.body.on('error', reject);
305
- fileStream.on('finish', resolve);
306
- });
307
- case 2:
308
- _context.n = 3;
309
- return page.evaluate(function (storyToRender, storyProps) {
310
- return renderStory(storyToRender, storyProps);
311
- }, singleScreenStory, {
312
- screen: id,
313
- renderContext: 'capture',
314
- withoutRouter: true,
315
- withoutMenu: true,
316
- width: width,
317
- height: height,
318
- googleApiKey: googleApiKey
319
- });
320
- case 3:
321
- _context.p = 3;
322
- _context.n = 4;
323
- return page.waitForSelector('[data-screen-ready="true"]', {
324
- timeout: READY_WAIT_TIMEOUT
325
- });
326
- case 4:
327
- _context.n = 6;
328
- break;
329
- case 5:
330
- _context.p = 5;
331
- _context.v;
332
- console.log("Timeout reached: ".concat(id));
333
- case 6:
334
- _context.n = 7;
335
- return page.screenshot({
336
- path: getOutputPath(location, "".concat(screenNumber, ".png"))
337
- });
338
- case 7:
339
- return _context.a(2);
340
- }
341
- }, _loop, null, [[3, 5]]);
342
- });
343
- index = 0;
344
- case 8:
345
- if (!(index < count)) {
346
- _context2.n = 10;
347
- break;
348
- }
349
- return _context2.d(_regeneratorValues(_loop()), 9);
350
- case 9:
351
- index += 1;
352
- _context2.n = 8;
353
- break;
354
- case 10:
355
- _context2.n = 11;
356
- return browser.close();
357
- case 11:
358
- server.close();
359
- case 12:
360
- return _context2.a(2);
361
- }
362
- }, _callee);
363
- }));
364
- return function captureStory(_x, _x2) {
365
- return _ref.apply(this, arguments);
366
- };
367
- }();
368
-
369
- var getStoryHtml = /*#__PURE__*/function () {
370
- var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(story) {
371
- var settings,
372
- _settings$googleApiKe,
373
- googleApiKey,
374
- _settings$executableP,
375
- executablePath,
376
- server,
377
- serverPort,
378
- browser,
379
- pages,
380
- hasPage,
381
- page,
382
- pageContent,
383
- _args = arguments,
384
- _t;
385
- return _regenerator().w(function (_context) {
386
- while (1) switch (_context.n) {
387
- case 0:
388
- settings = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};
389
- _settings$googleApiKe = settings.googleApiKey, googleApiKey = _settings$googleApiKe === void 0 ? null : _settings$googleApiKe, _settings$executableP = settings.executablePath, executablePath = _settings$executableP === void 0 ? null : _settings$executableP;
390
- _context.n = 1;
391
- return startServer(path.join(process.cwd(), './node_modules/@micromag/viewer-build/build/'));
392
- case 1:
393
- server = _context.v;
394
- serverPort = server.address().port;
395
- _context.n = 2;
396
- return puppeteer.launch(_objectSpread(_objectSpread({
397
- devtools: false
398
- }, executablePath !== null ? {
399
- executablePath: executablePath
400
- } : null), {}, {
401
- defaultViewport: {
402
- width: 360,
403
- height: 640,
404
- deviceScaleFactor: 3,
405
- isMobile: true
406
- }
407
- }));
408
- case 2:
409
- browser = _context.v;
410
- _context.n = 3;
411
- return browser.pages();
412
- case 3:
413
- pages = _context.v;
414
- hasPage = pages.length > 0;
415
- if (!hasPage) {
416
- _context.n = 4;
417
- break;
418
- }
419
- _t = pages[0];
420
- _context.n = 6;
421
- break;
422
- case 4:
423
- _context.n = 5;
424
- return browser.newPage();
425
- case 5:
426
- _t = _context.v;
427
- case 6:
428
- page = _t;
429
- _context.n = 7;
430
- return page["goto"]("http://127.0.0.1:".concat(serverPort));
431
- case 7:
432
- _context.n = 8;
433
- return page.evaluate(function (storyToRender, storyProps) {
434
- return renderStory(storyToRender, storyProps);
435
- }, story, {
436
- renderContext: 'static',
437
- withoutRouter: true,
438
- withoutMenu: true,
439
- googleApiKey: googleApiKey
440
- });
441
- case 8:
442
- _context.n = 9;
443
- return page.content();
444
- case 9:
445
- pageContent = _context.v;
446
- _context.n = 10;
447
- return browser.close();
448
- case 10:
449
- server.close();
450
- return _context.a(2, pageContent);
451
- }
452
- }, _callee);
453
- }));
454
- return function getStoryHtml(_x) {
455
- return _ref.apply(this, arguments);
456
- };
457
- }();
458
-
459
- var getStoryHtmlSSR = function getStoryHtmlSSR(story) {
460
- var settings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
461
- var _settings$googleApiKe = settings.googleApiKey,
462
- googleApiKey = _settings$googleApiKe === void 0 ? null : _settings$googleApiKe;
463
- var element = /*#__PURE__*/React.createElement(Viewer, {
464
- story: story,
465
- renderContext: 'static',
466
- withoutRouter: true,
467
- withoutMenu: true,
468
- googleApiKey: googleApiKey,
469
- memoryRouter: true
470
- });
471
- return ReactDOMServer.renderToStaticMarkup(element);
472
- };
473
-
474
- var storyParser = new core.StoryParser({
475
- fieldsManager: FieldsManager,
476
- screensManager: screensManager
477
- });
478
- var exportStoryToPath = /*#__PURE__*/function () {
479
- var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(story, format, output) {
480
- var settings,
481
- storyParsed,
482
- html,
483
- destination,
484
- _html,
485
- _destination,
486
- parsedDestination,
487
- newStory,
488
- fileDestination,
489
- _args = arguments,
490
- _t;
491
- return _regenerator().w(function (_context) {
492
- while (1) switch (_context.n) {
493
- case 0:
494
- settings = _args.length > 3 && _args[3] !== undefined ? _args[3] : {};
495
- storyParsed = storyParser.parse(story);
496
- _t = format;
497
- _context.n = _t === 'html' ? 1 : _t === 'html-ssr' ? 3 : _t === 'images' ? 4 : 5;
498
- break;
499
- case 1:
500
- _context.n = 2;
501
- return getStoryHtml(storyParsed, settings);
502
- case 2:
503
- html = _context.v;
504
- destination = getOutputPath(output, 'story.html');
505
- console.log('destination', destination);
506
- fs.writeFileSync(destination, html, 'utf-8');
507
- return _context.a(3, 6);
508
- case 3:
509
- _html = getStoryHtmlSSR(storyParsed, settings);
510
- _destination = getOutputPath(output, 'story-ssr.html');
511
- fs.writeFileSync(_destination, _html, 'utf-8');
512
- return _context.a(3, 6);
513
- case 4:
514
- captureStory(storyParsed, output, settings);
515
- return _context.a(3, 6);
516
- case 5:
517
- parsedDestination = getOutputPath(output, 'parsed.json');
518
- fs.writeFileSync(parsedDestination, JSON.stringify(storyParsed), 'utf-8');
519
- newStory = transformStory(storyParsed, format); // const mediaDestination = getOutputPath(output);
520
- fileDestination = getOutputPath(output, 'article.json');
521
- console.log(output, fileDestination);
522
- fs.writeFileSync(fileDestination, JSON.stringify(newStory), 'utf-8');
523
- return _context.a(3, 6);
524
- case 6:
525
- return _context.a(2);
526
- }
527
- }, _callee);
528
- }));
529
- return function exportStoryToPath(_x, _x2, _x3) {
530
- return _ref.apply(this, arguments);
531
- };
532
- }();
533
-
534
- exports.captureStory = captureStory;
535
- exports.exportStoryToPath = exportStoryToPath;
536
- exports.getStoryHtml = getStoryHtml;
537
- exports.transformStory = transformStory;