@rindo/core 1.17.4 → 2.5.2

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 (164) hide show
  1. package/LICENSE.md +27 -27
  2. package/bin/cli.ts +20 -0
  3. package/bin/rindo +51 -56
  4. package/cli/index.cjs +1263 -0
  5. package/cli/index.d.ts +1 -1
  6. package/cli/index.js +1232 -495
  7. package/cli/package.json +9 -4
  8. package/compiler/lib.d.ts +24 -0
  9. package/compiler/lib.dom.d.ts +20230 -0
  10. package/compiler/lib.dom.iterable.d.ts +351 -0
  11. package/compiler/lib.es2015.collection.d.ts +89 -0
  12. package/compiler/lib.es2015.core.d.ts +517 -0
  13. package/compiler/lib.es2015.d.ts +30 -0
  14. package/compiler/lib.es2015.generator.d.ts +79 -0
  15. package/compiler/lib.es2015.iterable.d.ts +505 -0
  16. package/compiler/lib.es2015.promise.d.ts +150 -0
  17. package/compiler/lib.es2015.proxy.d.ts +41 -0
  18. package/compiler/lib.es2015.reflect.d.ts +123 -0
  19. package/compiler/lib.es2015.symbol.d.ts +48 -0
  20. package/compiler/lib.es2015.symbol.wellknown.d.ts +324 -0
  21. package/compiler/lib.es2016.array.include.d.ts +118 -0
  22. package/compiler/lib.es2016.d.ts +22 -0
  23. package/compiler/lib.es2016.full.d.ts +25 -0
  24. package/compiler/lib.es2017.d.ts +26 -0
  25. package/compiler/lib.es2017.full.d.ts +25 -0
  26. package/compiler/lib.es2017.intl.d.ts +32 -0
  27. package/compiler/lib.es2017.object.d.ts +51 -0
  28. package/compiler/lib.es2017.sharedmemory.d.ts +137 -0
  29. package/compiler/lib.es2017.string.d.ts +47 -0
  30. package/compiler/lib.es2017.typedarrays.d.ts +55 -0
  31. package/compiler/lib.es2018.asyncgenerator.d.ts +79 -0
  32. package/compiler/lib.es2018.asynciterable.d.ts +45 -0
  33. package/compiler/lib.es2018.d.ts +26 -0
  34. package/compiler/lib.es2018.full.d.ts +25 -0
  35. package/compiler/lib.es2018.intl.d.ts +61 -0
  36. package/compiler/lib.es2018.promise.d.ts +32 -0
  37. package/compiler/lib.es2018.regexp.d.ts +39 -0
  38. package/compiler/lib.es2019.array.d.ts +85 -0
  39. package/compiler/lib.es2019.d.ts +25 -0
  40. package/compiler/lib.es2019.full.d.ts +25 -0
  41. package/compiler/lib.es2019.object.d.ts +35 -0
  42. package/compiler/lib.es2019.string.d.ts +33 -0
  43. package/compiler/lib.es2019.symbol.d.ts +26 -0
  44. package/compiler/lib.es2020.bigint.d.ts +728 -0
  45. package/compiler/lib.es2020.d.ts +27 -0
  46. package/compiler/lib.es2020.full.d.ts +25 -0
  47. package/compiler/lib.es2020.intl.d.ts +310 -0
  48. package/compiler/lib.es2020.promise.d.ts +50 -0
  49. package/compiler/lib.es2020.sharedmemory.d.ts +99 -0
  50. package/compiler/lib.es2020.string.d.ts +30 -0
  51. package/compiler/lib.es2020.symbol.wellknown.d.ts +39 -0
  52. package/compiler/lib.es5.d.ts +4435 -0
  53. package/compiler/lib.es6.d.ts +25 -0
  54. package/compiler/lib.esnext.d.ts +25 -0
  55. package/compiler/lib.esnext.full.d.ts +25 -0
  56. package/compiler/lib.esnext.intl.d.ts +32 -0
  57. package/compiler/lib.esnext.promise.d.ts +43 -0
  58. package/compiler/lib.esnext.string.d.ts +35 -0
  59. package/compiler/lib.esnext.weakref.d.ts +75 -0
  60. package/compiler/lib.scripthost.d.ts +327 -0
  61. package/compiler/lib.webworker.d.ts +6042 -0
  62. package/compiler/lib.webworker.importscripts.d.ts +26 -0
  63. package/compiler/lib.webworker.iterable.d.ts +166 -0
  64. package/compiler/package.json +3 -3
  65. package/compiler/rindo.d.ts +0 -16
  66. package/compiler/rindo.js +42738 -40541
  67. package/compiler/rindo.min.js +2 -15
  68. package/dependencies.json +73 -50
  69. package/dev-server/client/index.js +33 -10
  70. package/dev-server/client/package.json +3 -3
  71. package/dev-server/connector.html +3 -3
  72. package/dev-server/index.d.ts +3 -6
  73. package/dev-server/index.js +256 -252
  74. package/dev-server/package.json +3 -3
  75. package/dev-server/server-process.js +1738 -0
  76. package/dev-server/server-worker-thread.js +39 -0
  77. package/dev-server/templates/initial-load.html +160 -160
  78. package/dev-server/ws.js +1 -1
  79. package/internal/app-data/{index.cjs.js → index.cjs} +7 -5
  80. package/internal/app-data/index.d.ts +1 -0
  81. package/internal/app-data/index.js +7 -6
  82. package/internal/app-data/package.json +11 -5
  83. package/internal/client/css-shim.js +2 -2
  84. package/internal/client/dom.js +1 -1
  85. package/internal/client/index.js +193 -119
  86. package/internal/client/package.json +4 -3
  87. package/internal/client/{patch.js → patch-browser.js} +8 -24
  88. package/internal/client/patch-esm.js +23 -0
  89. package/internal/client/polyfills/css-shim.js +1 -1
  90. package/internal/client/polyfills/index.js +34 -34
  91. package/internal/client/shadow-css.js +9 -3
  92. package/internal/hydrate/index.js +305 -281
  93. package/internal/hydrate/package.json +2 -2
  94. package/internal/hydrate/runner.d.ts +24 -12
  95. package/internal/hydrate/runner.js +153 -124
  96. package/internal/hydrate/shadow-css.js +24 -24
  97. package/internal/package.json +5 -4
  98. package/internal/rindo-core/index.cjs +1 -0
  99. package/internal/rindo-core/index.d.ts +51 -2
  100. package/internal/rindo-core/index.js +15 -1
  101. package/internal/rindo-ext-modules.d.ts +41 -39
  102. package/internal/rindo-private.d.ts +93 -148
  103. package/internal/rindo-public-compiler.d.ts +231 -155
  104. package/internal/rindo-public-runtime.d.ts +42 -39
  105. package/internal/testing/index.js +144 -121
  106. package/internal/testing/package.json +2 -2
  107. package/internal/testing/shadow-css.js +24 -24
  108. package/mock-doc/index.cjs +4610 -0
  109. package/mock-doc/index.d.ts +12 -1
  110. package/mock-doc/index.js +177 -67
  111. package/mock-doc/package.json +11 -5
  112. package/package.json +132 -133
  113. package/readme.md +21 -95
  114. package/screenshot/compare/build/app.js +33 -33
  115. package/screenshot/compare/build/p-f4745c2f.entry.js +1 -1
  116. package/screenshot/connector-base.d.ts +1 -1
  117. package/screenshot/connector-local.d.ts +1 -1
  118. package/screenshot/index.js +63 -46
  119. package/screenshot/package.json +10 -3
  120. package/screenshot/pixel-match.js +54 -57
  121. package/screenshot/screenshot-compare.d.ts +1 -1
  122. package/screenshot/screenshot-fs.d.ts +1 -1
  123. package/sys/deno/index.js +1785 -0
  124. package/sys/deno/node-compat.js +2654 -0
  125. package/sys/deno/worker.js +44 -0
  126. package/sys/node/autoprefixer.js +8 -1
  127. package/sys/node/glob.js +1 -1
  128. package/sys/node/graceful-fs.js +1 -1
  129. package/sys/node/index.d.ts +1 -1
  130. package/sys/node/index.js +689 -705
  131. package/sys/node/node-fetch.js +1 -1
  132. package/sys/node/package.json +3 -3
  133. package/sys/node/prompts.js +1 -1
  134. package/sys/node/worker.js +38 -19
  135. package/testing/index.d.ts +3 -3
  136. package/testing/index.js +863 -749
  137. package/testing/jest/jest-config.d.ts +2 -89
  138. package/testing/jest/jest-environment.d.ts +1 -1
  139. package/testing/jest/jest-runner.d.ts +1 -1
  140. package/testing/jest/jest-screenshot.d.ts +1 -1
  141. package/testing/jest-preset.js +32 -32
  142. package/testing/matchers/events.d.ts +1 -1
  143. package/testing/matchers/screenshot.d.ts +1 -1
  144. package/testing/mock-fetch.d.ts +1 -1
  145. package/testing/mocks.d.ts +1 -1
  146. package/testing/package.json +3 -3
  147. package/testing/puppeteer/index.d.ts +1 -1
  148. package/testing/puppeteer/puppeteer-browser.d.ts +2 -2
  149. package/testing/puppeteer/puppeteer-declarations.d.ts +11 -11
  150. package/testing/puppeteer/puppeteer-element.d.ts +3 -3
  151. package/testing/puppeteer/puppeteer-emulate.d.ts +1 -1
  152. package/testing/puppeteer/puppeteer-events.d.ts +3 -3
  153. package/testing/puppeteer/puppeteer-page.d.ts +1 -1
  154. package/testing/puppeteer/puppeteer-screenshot.d.ts +2 -2
  155. package/testing/reset-build-conditionals.d.ts +1 -1
  156. package/testing/spec-page.d.ts +1 -1
  157. package/testing/test-transpile.d.ts +1 -1
  158. package/testing/testing-logger.d.ts +1 -1
  159. package/testing/testing-utils.d.ts +1 -1
  160. package/testing/testing.d.ts +1 -1
  161. package/cli/index.cjs.js +0 -524
  162. package/dev-server/content-type-db.json +0 -1
  163. package/dev-server/server-worker.js +0 -1570
  164. package/mock-doc/index.cjs.js +0 -4500
package/cli/index.cjs.js DELETED
@@ -1,524 +0,0 @@
1
- function _interopNamespace(e) {
2
- if (e && e.__esModule) return e;
3
- var t = {};
4
- return e && Object.keys(e).forEach((function(s) {
5
- var n = Object.getOwnPropertyDescriptor(e, s);
6
- Object.defineProperty(t, s, n.get ? n : {
7
- enumerable: !0,
8
- get: function() {
9
- return e[s];
10
- }
11
- });
12
- })), t.default = e, t;
13
- }
14
-
15
- Object.defineProperty(exports, "__esModule", {
16
- value: !0
17
- });
18
-
19
- const IS_NODE_ENV = !("undefined" == typeof global || "function" != typeof require || !global.process || "string" != typeof __filename || global.origin && "string" == typeof global.origin), dashToPascalCase = e => (e => e.toLowerCase())(e).split("-").map(e => e.charAt(0).toUpperCase() + e.slice(1)).join(""), isFunction = e => "function" == typeof e, isString = e => "string" == typeof e, hasError = e => null != e && 0 !== e.length && e.some(e => "error" === e.level && "runtime" !== e.type), shouldIgnoreError = e => e === TASK_CANCELED_MSG, TASK_CANCELED_MSG = "task canceled", normalizePath = e => {
20
- if ("string" != typeof e) throw new Error("invalid path to normalize");
21
- e = normalizeSlashes(e.trim());
22
- const t = pathComponents(e, getRootLength(e)), s = reducePathComponents(t), n = s[0], r = s[1], o = n + s.slice(1).join("/");
23
- return "" === o ? "." : "" === n && r && e.includes("/") && !r.startsWith(".") && !r.startsWith("@") ? "./" + o : o;
24
- }, normalizeSlashes = e => e.replace(backslashRegExp, "/"), backslashRegExp = /\\/g, reducePathComponents = e => {
25
- if (!Array.isArray(e) || 0 === e.length) return [];
26
- const t = [ e[0] ];
27
- for (let s = 1; s < e.length; s++) {
28
- const n = e[s];
29
- if (n && "." !== n) {
30
- if (".." === n) if (t.length > 1) {
31
- if (".." !== t[t.length - 1]) {
32
- t.pop();
33
- continue;
34
- }
35
- } else if (t[0]) continue;
36
- t.push(n);
37
- }
38
- }
39
- return t;
40
- }, getRootLength = e => {
41
- const t = getEncodedRootLength(e);
42
- return t < 0 ? ~t : t;
43
- }, getEncodedRootLength = e => {
44
- if (!e) return 0;
45
- const t = e.charCodeAt(0);
46
- if (47 === t || 92 === t) {
47
- if (e.charCodeAt(1) !== t) return 1;
48
- const s = e.indexOf(47 === t ? "/" : "\\", 2);
49
- return s < 0 ? e.length : s + 1;
50
- }
51
- if (isVolumeCharacter(t) && 58 === e.charCodeAt(1)) {
52
- const t = e.charCodeAt(2);
53
- if (47 === t || 92 === t) return 3;
54
- if (2 === e.length) return 2;
55
- }
56
- const s = e.indexOf("://");
57
- if (-1 !== s) {
58
- const t = s + "://".length, n = e.indexOf("/", t);
59
- if (-1 !== n) {
60
- const r = e.slice(0, s), o = e.slice(t, n);
61
- if ("file" === r && ("" === o || "localhost" === o) && isVolumeCharacter(e.charCodeAt(n + 1))) {
62
- const t = getFileUrlVolumeSeparatorEnd(e, n + 2);
63
- if (-1 !== t) {
64
- if (47 === e.charCodeAt(t)) return ~(t + 1);
65
- if (t === e.length) return ~t;
66
- }
67
- }
68
- return ~(n + 1);
69
- }
70
- return ~e.length;
71
- }
72
- return 0;
73
- }, isVolumeCharacter = e => e >= 97 && e <= 122 || e >= 65 && e <= 90, getFileUrlVolumeSeparatorEnd = (e, t) => {
74
- const s = e.charCodeAt(t);
75
- if (58 === s) return t + 1;
76
- if (37 === s && 51 === e.charCodeAt(t + 1)) {
77
- const s = e.charCodeAt(t + 2);
78
- if (97 === s || 65 === s) return t + 3;
79
- }
80
- return -1;
81
- }, pathComponents = (e, t) => {
82
- const s = e.substring(0, t), n = e.substring(t).split("/"), r = n.length;
83
- return r > 0 && !n[r - 1] && n.pop(), [ s, ...n ];
84
- }, parseFlags = (e, t) => {
85
- const s = {
86
- task: null,
87
- args: [],
88
- knownArgs: [],
89
- unknownArgs: null
90
- };
91
- if (s.args = e.slice(), s.args.length > 0 && s.args[0] && !s.args[0].startsWith("-") && (s.task = s.args[0]),
92
- parseArgs(s, s.args, s.knownArgs), t && "node" === t.name) {
93
- const e = getNpmConfigEnvArgs(t);
94
- parseArgs(s, e, s.knownArgs), e.forEach(e => {
95
- s.args.includes(e) || s.args.push(e);
96
- });
97
- }
98
- if (null != s.task) {
99
- const e = s.args.indexOf(s.task);
100
- e > -1 && s.args.splice(e, 1);
101
- }
102
- return s.unknownArgs = s.args.filter(e => !s.knownArgs.includes(e)), s;
103
- }, parseArgs = (e, t, s) => {
104
- ARG_OPTS.boolean.forEach(n => {
105
- const r = ARG_OPTS.alias[n], o = configCase(n);
106
- "boolean" != typeof e[o] && (e[o] = null), t.forEach(t => {
107
- t === "--" + n || t === "--" + o ? (e[o] = !0, s.push(t)) : t === "--no-" + n || t === "--no" + dashToPascalCase(n) ? (e[o] = !1,
108
- s.push(t)) : r && t === "-" + r && (e[o] = !0, s.push(t));
109
- });
110
- }), ARG_OPTS.string.forEach(n => {
111
- const r = ARG_OPTS.alias[n], o = configCase(n);
112
- "string" != typeof e[o] && (e[o] = null);
113
- for (let i = 0; i < t.length; i++) {
114
- const a = t[i];
115
- if (a.startsWith(`--${n}=`)) {
116
- const t = a.split("=");
117
- t.shift(), e[o] = t.join("="), s.push(a);
118
- } else if (a === "--" + n) e[o] = t[i + 1], s.push(a), s.push(t[i + 1]); else if (a === "--" + o) e[o] = t[i + 1],
119
- s.push(a), s.push(t[i + 1]); else if (a.startsWith(`--${o}=`)) {
120
- const t = a.split("=");
121
- t.shift(), e[o] = t.join("="), s.push(a);
122
- } else if (r) if (a.startsWith(`-${r}=`)) {
123
- const t = a.split("=");
124
- t.shift(), e[o] = t.join("="), s.push(a);
125
- } else a === "-" + r && (e[o] = t[i + 1], s.push(t[i + 1]));
126
- }
127
- }), ARG_OPTS.number.forEach(n => {
128
- const r = ARG_OPTS.alias[n], o = configCase(n);
129
- "number" != typeof e[o] && (e[o] = null);
130
- for (let i = 0; i < t.length; i++) {
131
- const a = t[i];
132
- if (a.startsWith(`--${n}=`)) {
133
- const t = a.split("=");
134
- t.shift(), e[o] = parseInt(t.join(""), 10), s.push(a);
135
- } else if (a === "--" + n) e[o] = parseInt(t[i + 1], 10), s.push(t[i + 1]); else if (a.startsWith(`--${o}=`)) {
136
- const t = a.split("=");
137
- t.shift(), e[o] = parseInt(t.join(""), 10), s.push(a);
138
- } else if (a === "--" + o) e[o] = parseInt(t[i + 1], 10), s.push(t[i + 1]); else if (r) if (a.startsWith(`-${r}=`)) {
139
- const t = a.split("=");
140
- t.shift(), e[o] = parseInt(t.join(""), 10), s.push(a);
141
- } else a === "-" + r && (e[o] = parseInt(t[i + 1], 10), s.push(t[i + 1]));
142
- }
143
- });
144
- }, configCase = e => (e = dashToPascalCase(e)).charAt(0).toLowerCase() + e.substr(1), ARG_OPTS = {
145
- boolean: [ "build", "cache", "check-version", "ci", "compare", "debug", "dev", "devtools", "docs", "e2e", "es5", "esm", "headless", "help", "log", "open", "prerender", "prerender-external", "prod", "profile", "service-worker", "screenshot", "serve", "skip-node-check", "spec", "stats", "update-screenshot", "verbose", "version", "watch" ],
146
- number: [ "max-workers", "port" ],
147
- string: [ "address", "config", "docs-json", "emulate", "log-level", "root", "screenshot-connector" ],
148
- alias: {
149
- config: "c",
150
- help: "h",
151
- port: "p",
152
- version: "v"
153
- }
154
- }, getNpmConfigEnvArgs = e => {
155
- let t = [];
156
- try {
157
- const s = e.getEnvironmentVar("npm_config_argv");
158
- s && (t = JSON.parse(s).original, "run" === t[0] && (t = t.slice(2)));
159
- } catch (e) {}
160
- return t;
161
- }, dependencies = [ {
162
- name: "@rindo/core",
163
- version: "0.0.0-dev.20221104122636",
164
- main: "compiler/rindo.js",
165
- resources: [ "internal/index.js", "internal/index.d.ts", "internal/package.json", "internal/rindo-core/index.js", "internal/rindo-core/index.d.ts", "internal/rindo-ext-modules.d.ts", "internal/rindo-private.d.ts", "internal/rindo-public-compiler.d.ts", "internal/rindo-public-docs.d.ts", "internal/rindo-public-runtime.d.ts", "internal/client/css-shim.js", "internal/client/dom.js", "internal/client/index.js", "internal/client/patch.js", "internal/client/shadow-css.js", "internal/client/package.json", "internal/hydrate/index.js", "internal/hydrate/runner.js", "internal/hydrate/shadow-css.js", "internal/hydrate/package.json", "mock-doc/index.js", "mock-doc/package.json", "package.json" ]
166
- }, {
167
- name: "typescript",
168
- version: "3.9.7",
169
- main: "lib/typescript.js",
170
- resources: [ "lib/lib.dom.d.ts", "lib/lib.es2015.d.ts", "lib/lib.es5.d.ts", "lib/lib.es2015.core.d.ts", "lib/lib.es2015.collection.d.ts", "lib/lib.es2015.generator.d.ts", "lib/lib.es2015.iterable.d.ts", "lib/lib.es2015.symbol.d.ts", "lib/lib.es2015.promise.d.ts", "lib/lib.es2015.proxy.d.ts", "lib/lib.es2015.reflect.d.ts", "lib/lib.es2015.symbol.wellknown.d.ts", "lib/lib.es2016.d.ts", "lib/lib.es2016.array.include.d.ts", "lib/lib.es2017.d.ts", "lib/lib.es2017.typedarrays.d.ts", "lib/lib.es2017.intl.d.ts", "lib/lib.es2017.object.d.ts", "lib/lib.es2017.sharedmemory.d.ts", "lib/lib.es2017.string.d.ts", "lib/lib.es2018.d.ts", "lib/lib.es2018.asyncgenerator.d.ts", "lib/lib.es2018.asynciterable.d.ts", "lib/lib.es2018.promise.d.ts", "lib/lib.es2018.regexp.d.ts", "lib/lib.es2018.intl.d.ts", "lib/lib.esnext.intl.d.ts", "lib/lib.es2020.bigint.d.ts", "package.json" ]
171
- }, {
172
- name: "rollup",
173
- version: "2.23.0",
174
- main: "dist/rollup.browser.es.js"
175
- }, {
176
- name: "terser",
177
- version: "4.8.0",
178
- main: "dist/bundle.min.js"
179
- } ], startupCompilerLog = (e, t) => {
180
- if (!0 === t.suppressLogs) return;
181
- const {logger: s} = t, n = "debug" === s.getLevel(), r = e.version.includes("-"), o = e.version.includes("-dev.");
182
- r && !o && s.warn(s.yellow("This is a prerelease build, undocumented changes might happen at any time. Technical support is not available for prereleases, but any assistance testing is appreciated.")),
183
- t.devMode && !n && (t.buildEs5 && s.warn("Generating ES5 during development is a very task expensive, initial and incremental builds will be much slower. Drop the '--es5' flag and use a modern browser for development."),
184
- t.enableCache || s.warn("Disabling cache during development will slow down incremental builds."));
185
- }, runPrerenderTask = async (e, t, s, n, r) => {
186
- const o = [];
187
- try {
188
- const i = await e.createPrerenderer(t), a = await i.start({
189
- hydrateAppFilePath: s,
190
- componentGraph: n,
191
- srcIndexHtmlPath: r
192
- });
193
- o.push(...a.diagnostics);
194
- } catch (e) {
195
- ((e, t, s) => {
196
- const n = {
197
- level: "error",
198
- type: "build",
199
- header: "Build Error",
200
- messageText: "build error",
201
- relFilePath: null,
202
- absFilePath: null,
203
- lines: []
204
- };
205
- isString(void 0) ? n.messageText = void 0 : null != t && (null != t.stack ? n.messageText = t.stack.toString() : null != t.message ? n.messageText = t.message.toString() : n.messageText = t.toString()),
206
- null == e || shouldIgnoreError(n.messageText) || e.push(n);
207
- })(o, e);
208
- }
209
- return o;
210
- }, startCheckVersion = async (e, t) => e.devMode && !e.flags.ci && !t.includes("-dev.") && isFunction(e.sys.checkVersion) ? e.sys.checkVersion(e.logger, t) : null, printCheckVersionResults = async e => {
211
- if (e) {
212
- const t = await e;
213
- isFunction(t) && t();
214
- }
215
- }, isOutputTargetDocs = e => e.type === DOCS || e.type === DOCS_README || e.type === DOCS_JSON || e.type === DOCS_CUSTOM || e.type === DOCS_VSCODE, DOCS = "docs", DOCS_CUSTOM = "docs-custom", DOCS_JSON = "docs-json", DOCS_README = "docs-readme", DOCS_VSCODE = "docs-vscode", chooseFilesToGenerate = async () => {
216
- const {prompt: e} = await Promise.resolve().then((function() {
217
- return _interopNamespace(require("../sys/node/prompts.js"));
218
- }));
219
- return (await e({
220
- name: "filesToGenerate",
221
- type: "multiselect",
222
- message: "Which additional files do you want to generate?",
223
- choices: [ {
224
- value: "css",
225
- title: "Stylesheet (.css)",
226
- selected: !0
227
- }, {
228
- value: "spec.tsx",
229
- title: "Spec Test (.spec.tsx)",
230
- selected: !0
231
- }, {
232
- value: "e2e.ts",
233
- title: "E2E Test (.e2e.ts)",
234
- selected: !0
235
- } ]
236
- })).filesToGenerate;
237
- }, isTest = e => "e2e.ts" === e || "spec.tsx" === e, getBoilerplateByExtension = (e, t, s) => {
238
- switch (t) {
239
- case "tsx":
240
- return getComponentBoilerplate(e, s);
241
-
242
- case "css":
243
- return getStyleUrlBoilerplate();
244
-
245
- case "spec.tsx":
246
- return getSpecTestBoilerplate(e);
247
-
248
- case "e2e.ts":
249
- return getE2eTestBoilerplate(e);
250
-
251
- default:
252
- throw new Error(`Unkown extension "${t}".`);
253
- }
254
- }, getComponentBoilerplate = (e, t) => {
255
- const s = [ "{" ];
256
- return s.push(` tag: '${e}',`), t && s.push(` styleUrl: '${e}.css',`), s.push(" shadow: true,"),
257
- s.push("}"), `import { Component, Host, h } from '@rindo/core';\n\n@Component(${s.join("\n")})\nexport class ${toPascalCase(e)} {\n\n render() {\n return (\n <Host>\n <slot></slot>\n </Host>\n );\n }\n\n}\n`;
258
- }, getStyleUrlBoilerplate = () => ":host {\n display: block;\n}\n", getSpecTestBoilerplate = e => `import { newSpecPage } from '@rindo/core/testing';\nimport { ${toPascalCase(e)} } from '../${e}';\n\ndescribe('${e}', () => {\n it('renders', async () => {\n const page = await newSpecPage({\n components: [${toPascalCase(e)}],\n html: \`<${e}></${e}>\`,\n });\n expect(page.root).toEqualHtml(\`\n <${e}>\n <mock:shadow-root>\n <slot></slot>\n </mock:shadow-root>\n </${e}>\n \`);\n });\n});\n`, getE2eTestBoilerplate = e => `import { newE2EPage } from '@rindo/core/testing';\n\ndescribe('${e}', () => {\n it('renders', async () => {\n const page = await newE2EPage();\n await page.setContent('<${e}></${e}>');\n\n const element = await page.find('${e}');\n expect(element).toHaveClass('hydrated');\n });\n});\n`, toPascalCase = e => e.split("-").reduce((e, t) => e + t[0].toUpperCase() + t.substr(1), ""), taskHelp = (e, t) => {
259
- const s = t.dim("windows" === e.details.platform ? ">" : "$");
260
- console.log(`\n ${t.bold("Build:")} ${t.dim("Build components for development or production.")}\n\n ${s} ${t.green("rindo build [--dev] [--watch] [--prerender] [--debug]")}\n\n ${t.cyan("--dev")} ${t.dim(".............")} Development build\n ${t.cyan("--watch")} ${t.dim("...........")} Rebuild when files update\n ${t.cyan("--serve")} ${t.dim("...........")} Start the dev-server\n ${t.cyan("--prerender")} ${t.dim(".......")} Prerender the application\n ${t.cyan("--docs")} ${t.dim("............")} Generate component readme.md docs\n ${t.cyan("--config")} ${t.dim("..........")} Set rindo config file\n ${t.cyan("--stats")} ${t.dim("...........")} Write rindo-stats.json file\n ${t.cyan("--log")} ${t.dim(".............")} Write rindo-build.log file\n ${t.cyan("--debug")} ${t.dim("...........")} Set the log level to debug\n\n\n ${t.bold("Test:")} ${t.dim("Run unit and end-to-end tests.")}\n\n ${s} ${t.green("rindo test [--spec] [--e2e]")}\n\n ${t.cyan("--spec")} ${t.dim("............")} Run unit tests with Jest\n ${t.cyan("--e2e")} ${t.dim(".............")} Run e2e tests with Puppeteer\n\n\n ${t.bold("Generate:")} ${t.dim("Bootstrap components.")}\n\n ${s} ${t.green("rindo generate")} or ${t.green("rindo g")}\n\n\n ${t.bold("Examples:")}\n\n ${s} ${t.green("rindo build --dev --watch --serve")}\n ${s} ${t.green("rindo build --prerender")}\n ${s} ${t.green("rindo test --spec --e2e")}\n ${s} ${t.green("rindo generate")}\n ${s} ${t.green("rindo g my-component")}\n\n`);
261
- }, runTask = async (e, t, s) => {
262
- switch (t.flags = t.flags || {}, t.outputTargets = t.outputTargets || [], s) {
263
- case "build":
264
- await (async (e, t) => {
265
- if (t.flags.watch) return void await (async (e, t) => {
266
- let s = null, n = 0;
267
- try {
268
- startupCompilerLog(e, t);
269
- const r = startCheckVersion(t, e.version), o = await e.createCompiler(t), i = await o.createWatcher();
270
- if (t.flags.serve) {
271
- const e = t.sys.getDevServerExecutingPath(), {start: n} = await t.sys.dynamicImport(e);
272
- s = await n(t.devServer, t.logger, i);
273
- }
274
- t.sys.onProcessInterrupt(() => {
275
- t.logger.debug("close watch"), o && o.destroy();
276
- });
277
- const a = i.on("buildFinish", async () => {
278
- a(), printCheckVersionResults(r);
279
- });
280
- if (s) {
281
- const e = i.on("buildFinish", () => {
282
- e(), t.logger.info(t.logger.cyan(s.browserUrl) + "\n");
283
- });
284
- }
285
- t.flags.prerender && i.on("buildFinish", async s => {
286
- if (!s.hasError) {
287
- const n = await runPrerenderTask(e, t, s.hydrateAppFilePath, s.componentGraph, null);
288
- t.logger.printDiagnostics(n);
289
- }
290
- });
291
- const l = await i.start();
292
- l.exitCode > 0 && (n = l.exitCode);
293
- } catch (e) {
294
- n = 1, t.logger.error(e);
295
- }
296
- s && await s.close(), n > 0 && t.sys.exit(n);
297
- })(e, t);
298
- let s = 0;
299
- try {
300
- startupCompilerLog(e, t);
301
- const n = startCheckVersion(t, e.version), r = await e.createCompiler(t), o = await r.build();
302
- if (await r.destroy(), o.hasError) s = 1; else if (t.flags.prerender) {
303
- const n = await runPrerenderTask(e, t, o.hydrateAppFilePath, o.componentGraph, null);
304
- t.logger.printDiagnostics(n), n.some(e => "error" === e.level) && (s = 1);
305
- }
306
- await printCheckVersionResults(n);
307
- } catch (e) {
308
- s = 1, t.logger.error(e);
309
- }
310
- s > 0 && t.sys.exit(s);
311
- })(e, t);
312
- break;
313
-
314
- case "docs":
315
- await (async (e, t) => {
316
- t.devServer = null, t.outputTargets = t.outputTargets.filter(isOutputTargetDocs),
317
- t.devMode = !0, startupCompilerLog(e, t);
318
- const s = await e.createCompiler(t);
319
- await s.build(), await s.destroy();
320
- })(e, t);
321
- break;
322
-
323
- case "help":
324
- taskHelp(t.sys, t.logger);
325
- break;
326
-
327
- case "generate":
328
- case "g":
329
- await (async (e, t) => {
330
- IS_NODE_ENV || (t.logger.error('"generate" command is currently only implemented for a NodeJS environment'),
331
- t.sys.exit(1));
332
- const s = e.path;
333
- t.configPath || (t.logger.error("Please run this command in your root directory (i. e. the one containing rindo.config.ts)."),
334
- t.sys.exit(1));
335
- const n = t.srcDir;
336
- n || (t.logger.error("Rindo's srcDir was not specified."), t.sys.exit(1));
337
- const {prompt: r} = await Promise.resolve().then((function() {
338
- return _interopNamespace(require("../sys/node/prompts.js"));
339
- })), o = t.flags.unknownArgs.find(e => !e.startsWith("-")) || (await r({
340
- name: "tagName",
341
- type: "text",
342
- message: "Component tag name (dash-case):"
343
- })).tagName, {dir: i, base: a} = s.parse(o), l = (e => {
344
- if (e !== e.trim()) return "Tag can not contain white spaces";
345
- if (e !== e.toLowerCase()) return "Tag can not contain upper case characters";
346
- if ("string" != typeof e) return `Tag "${e}" must be a string type`;
347
- if (0 === e.length) return "Received empty tag value";
348
- if (e.indexOf(" ") > -1) return `"${e}" tag cannot contain a space`;
349
- if (e.indexOf(",") > -1) return `"${e}" tag cannot be used for multiple tags`;
350
- const t = e.replace(/\w|-/g, "");
351
- return "" !== t ? `"${e}" tag contains invalid characters: ${t}` : -1 === e.indexOf("-") ? `"${e}" tag must contain a dash (-) to work as a valid web component` : e.indexOf("--") > -1 ? `"${e}" tag cannot contain multiple dashes (--) next to each other` : 0 === e.indexOf("-") ? `"${e}" tag cannot start with a dash (-)` : e.lastIndexOf("-") === e.length - 1 ? `"${e}" tag cannot end with a dash (-)` : void 0;
352
- })(a);
353
- l && (t.logger.error(l), t.sys.exit(1));
354
- const c = [ "tsx", ...await chooseFilesToGenerate() ], d = c.some(isTest) ? "test" : "", g = s.join(n, "components", i, a);
355
- await t.sys.mkdir(s.join(g, d), {
356
- recursive: !0
357
- });
358
- const p = await Promise.all(c.map(s => (async (e, t, s, n, r, o) => {
359
- isTest(r) && (s = e.path.join(s, "test"));
360
- const i = e.path.join(s, `${n}.${r}`), a = getBoilerplateByExtension(n, r, o);
361
- return await t.sys.writeFile(i, a), i;
362
- })(e, t, g, a, s, c.includes("css")))).catch(e => t.logger.error(e));
363
- if (!p) return t.sys.exit(1);
364
- console.log(), console.log(`${t.logger.gray("$")} rindo generate ${o}`), console.log(),
365
- console.log(t.logger.bold("The following files have been generated:"));
366
- const u = t.rootDir;
367
- p.map(e => console.log(" - " + s.relative(u, e)));
368
- })(e, t);
369
- break;
370
-
371
- case "prerender":
372
- await (async (e, t) => {
373
- startupCompilerLog(e, t);
374
- const s = t.flags.unknownArgs[0];
375
- "string" != typeof s && (t.logger.error("Missing hydrate app script path"), t.sys.exit(1));
376
- const n = t.srcIndexHtml, r = await runPrerenderTask(e, t, s, null, n);
377
- t.logger.printDiagnostics(r), r.some(e => "error" === e.level) && t.sys.exit(1);
378
- })(e, t);
379
- break;
380
-
381
- case "serve":
382
- await (async e => {
383
- e.suppressLogs = !0, e.flags.serve = !0, e.devServer.openBrowser = e.flags.open,
384
- e.devServer.reloadStrategy = null, e.devServer.initialLoadUrl = "/", e.devServer.websocket = !1,
385
- e.maxConcurrentWorkers = 1, e.devServer.root = isString(e.flags.root) ? e.flags.root : e.sys.getCurrentDirectory();
386
- const t = e.sys.getDevServerExecutingPath(), {start: s} = await e.sys.dynamicImport(t), n = await s(e.devServer, e.logger);
387
- console.log(`${e.logger.cyan(" Root:")} ${n.root}`), console.log(`${e.logger.cyan(" Address:")} ${n.address}`),
388
- console.log(`${e.logger.cyan(" Port:")} ${n.port}`), console.log(`${e.logger.cyan(" Server:")} ${n.browserUrl}`),
389
- console.log(""), e.sys.onProcessInterrupt(() => {
390
- n && (e.logger.debug("dev server close: " + n.browserUrl), n.close());
391
- });
392
- })(t);
393
- break;
394
-
395
- case "test":
396
- await (async e => {
397
- IS_NODE_ENV || (e.logger.error('"test" command is currently only implemented for a NodeJS environment'),
398
- e.sys.exit(1));
399
- try {
400
- const t = {
401
- e2e: !!e.flags.e2e,
402
- screenshot: !!e.flags.screenshot,
403
- spec: !!e.flags.spec,
404
- updateScreenshot: !!e.flags.updateScreenshot
405
- }, s = [ "@types/jest", "jest", "jest-cli" ];
406
- if (t.e2e) {
407
- const n = e.testing.browserExecutablePath ? "puppeteer-core" : "puppeteer";
408
- s.push("@types/puppeteer", n), t.screenshot && e.logger.warn(e.logger.yellow("EXPERIMENTAL: screenshot visual diff testing is currently under heavy development and has not reached a stable status. However, any assistance testing would be appreciated."));
409
- }
410
- await e.sys.lazyRequire.ensure(e.logger, e.rootDir, s);
411
- const {createTesting: n} = await Promise.resolve().then((function() {
412
- return _interopNamespace(require("../testing/index.js"));
413
- })), r = await n(e), o = await r.run(t);
414
- await r.destroy(), o || e.sys.exit(1);
415
- } catch (t) {
416
- e.logger.error(t), e.sys.exit(1);
417
- }
418
- })(t);
419
- break;
420
-
421
- case "version":
422
- console.log(e.version);
423
- break;
424
-
425
- default:
426
- t.logger.error(t.logger.emoji("❌ ") + "Invalid rindo command, please see the options below:"),
427
- taskHelp(t.sys, t.logger), t.sys.exit(1);
428
- }
429
- };
430
-
431
- exports.parseFlags = parseFlags, exports.run = async e => {
432
- const {args: t, logger: s, sys: n} = e;
433
- try {
434
- const e = parseFlags(t, n), r = e.task;
435
- if ((e.debug || e.verbose) && s.setLevel("debug"), e.ci && s.enableColors(!1), isFunction(n.applyGlobalPatch) && n.applyGlobalPatch(n.getCurrentDirectory()),
436
- "help" === r || e.help) return void taskHelp(n, s);
437
- ((e, t) => {
438
- "info" !== t && "serve" !== t && "version" !== t && e.info(e.cyan("@rindo/core"));
439
- })(s, r);
440
- const o = await (async e => {
441
- const t = e.sys, s = t.getCurrentDirectory(), n = {
442
- configPath: null,
443
- rootDir: normalizePath(s),
444
- diagnostics: []
445
- };
446
- let r = e.configPath;
447
- r = isString(r) ? t.platformPath.isAbsolute(r) ? normalizePath(e.configPath) : normalizePath(t.platformPath.join(s, r)) : n.rootDir;
448
- const o = await t.stat(r);
449
- if (!o) {
450
- const e = (e => {
451
- const t = {
452
- level: "error",
453
- type: "build",
454
- header: "Build Error",
455
- messageText: "build error",
456
- relFilePath: null,
457
- absFilePath: null,
458
- lines: []
459
- };
460
- return e && e.push(t), t;
461
- })(n.diagnostics);
462
- return e.absFilePath = r, e.header = "Invalid config path", e.messageText = `Config path "${r}" not found`,
463
- n;
464
- }
465
- if (o.isFile()) n.configPath = r, n.rootDir = t.platformPath.dirname(r); else if (o.isDirectory()) for (const e of [ "rindo.config.ts", "rindo.config.js" ]) {
466
- const s = t.platformPath.join(r, e), o = await t.stat(s);
467
- if (o && o.isFile()) {
468
- n.configPath = s, n.rootDir = t.platformPath.dirname(s);
469
- break;
470
- }
471
- }
472
- return n;
473
- })({
474
- sys: n,
475
- configPath: e.config
476
- });
477
- hasError(o.diagnostics) && (s.printDiagnostics(o.diagnostics), n.exit(1));
478
- const i = await n.ensureDependencies({
479
- rootDir: o.rootDir,
480
- logger: s,
481
- dependencies
482
- });
483
- hasError(i.diagnostics) && (s.printDiagnostics(i.diagnostics), n.exit(1));
484
- const a = await (async e => (await e.dynamicImport(e.getCompilerExecutingPath()),
485
- globalThis.rindo))(n);
486
- if ("version" === r || e.version) return void console.log(a.version);
487
- if (((e, t, s) => {
488
- if ("info" === t || "serve" === t || "version" === t) return;
489
- let n;
490
- n = s.version.includes("-dev.") ? e.yellow("[LOCAL DEV]") : e.cyan("v" + s.version),
491
- n += e.emoji(" " + s.vermoji), e.info(n);
492
- })(s, r, a), ((e, t, s, n) => {
493
- const r = e.details, o = `${e.name} ${e.version}`, i = `${r.platform}, ${r.cpuModel}`, a = `cpus: ${e.hardwareConcurrency}, freemem: ${Math.round(r.freemem() / 1e6)}MB, totalmem: ${Math.round(r.totalmem / 1e6)}MB`;
494
- "debug" === t.getLevel() ? (t.debug(o), t.debug(i), t.debug(a), t.debug("compiler: " + e.getCompilerExecutingPath()),
495
- t.debug("build: " + n.buildId)) : s.ci && (t.info(o), t.info(i), t.info(a));
496
- })(n, s, e, a), "info" === r) return void ((e, t, s) => {
497
- const n = t.details, r = e.versions;
498
- console.log(""), console.log(`${s.cyan(" System:")} ${t.name} ${t.version}`),
499
- console.log(`${s.cyan(" Plaform:")} ${n.platform} (${n.release})`), console.log(`${s.cyan(" CPU Model:")} ${n.cpuModel} (${t.hardwareConcurrency} cpu${1 !== t.hardwareConcurrency ? "s" : ""})`),
500
- console.log(`${s.cyan(" Compiler:")} ${t.getCompilerExecutingPath()}`), console.log(`${s.cyan(" Build:")} ${e.buildId}`),
501
- console.log(`${s.cyan(" Rindo:")} ${e.version}${s.emoji(" " + e.vermoji)}`),
502
- console.log(`${s.cyan(" TypeScript:")} ${r.typescript}`), console.log(`${s.cyan(" Rollup:")} ${r.rollup}`),
503
- console.log(`${s.cyan(" Terser:")} ${r.terser}`), console.log("");
504
- })(a, n, s);
505
- const l = await a.loadConfig({
506
- config: {
507
- flags: e
508
- },
509
- configPath: o.configPath,
510
- logger: s,
511
- sys: n,
512
- typescriptPath: i.typescriptPath
513
- });
514
- l.diagnostics.length > 0 && (s.printDiagnostics(l.diagnostics), hasError(l.diagnostics) && n.exit(1)),
515
- isFunction(n.applyGlobalPatch) && n.applyGlobalPatch(l.config.rootDir), await n.ensureResources({
516
- rootDir: l.config.rootDir,
517
- logger: s,
518
- dependencies
519
- }), await runTask(a, l.config, r);
520
- } catch (e) {
521
- shouldIgnoreError(e) || (s.error(`uncaught cli error: ${e}${"debug" === s.getLevel() ? e.stack : ""}`),
522
- n.exit(1));
523
- }
524
- }, exports.runTask = runTask;