@rindo/core 3.2.0 → 3.2.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 (41) hide show
  1. package/cli/index.cjs +34 -12
  2. package/cli/index.js +34 -12
  3. package/cli/package.json +1 -1
  4. package/compiler/package.json +1 -1
  5. package/compiler/rindo.js +765 -749
  6. package/compiler/rindo.min.js +2 -2
  7. package/dev-server/client/index.js +1 -1
  8. package/dev-server/client/package.json +1 -1
  9. package/dev-server/connector.html +2 -2
  10. package/dev-server/index.js +1 -1
  11. package/dev-server/package.json +1 -1
  12. package/dev-server/server-process.js +5795 -268
  13. package/internal/app-data/index.cjs +1 -0
  14. package/internal/app-data/index.js +1 -0
  15. package/internal/app-data/package.json +1 -1
  16. package/internal/client/css-shim.js +1 -1
  17. package/internal/client/dom.js +1 -1
  18. package/internal/client/index.js +1 -1
  19. package/internal/client/package.json +1 -1
  20. package/internal/client/patch-browser.js +1 -1
  21. package/internal/client/patch-esm.js +1 -1
  22. package/internal/client/shadow-css.js +1 -1
  23. package/internal/hydrate/package.json +1 -1
  24. package/internal/hydrate/runner.d.ts +1 -1
  25. package/internal/hydrate/runner.js +43 -43
  26. package/internal/package.json +1 -1
  27. package/internal/rindo-private.d.ts +30 -2
  28. package/internal/rindo-public-compiler.d.ts +2 -10
  29. package/internal/testing/index.js +5 -1
  30. package/internal/testing/package.json +1 -1
  31. package/mock-doc/index.cjs +7 -2
  32. package/mock-doc/index.d.ts +6 -1
  33. package/mock-doc/index.js +7 -2
  34. package/mock-doc/package.json +1 -1
  35. package/package.json +11 -11
  36. package/screenshot/package.json +1 -1
  37. package/sys/node/index.js +175 -179
  38. package/sys/node/package.json +1 -1
  39. package/sys/node/worker.js +1 -1
  40. package/testing/index.js +282 -280
  41. package/testing/package.json +1 -1
@@ -74,6 +74,7 @@ const BUILD = {
74
74
  propBoolean: true,
75
75
  propNumber: true,
76
76
  propString: true,
77
+ // TODO: Remove code implementing the CSS variable shim
77
78
  cssVarShim: false,
78
79
  constructableCSS: true,
79
80
  cmpShouldUpdate: true,
@@ -72,6 +72,7 @@ const BUILD = {
72
72
  propBoolean: true,
73
73
  propNumber: true,
74
74
  propString: true,
75
+ // TODO: Remove code implementing the CSS variable shim
75
76
  cssVarShim: false,
76
77
  constructableCSS: true,
77
78
  cmpShouldUpdate: true,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rindo/core/internal/app-data",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "description": "Used for default app data and build conditionals within builds.",
5
5
  "main": "./index.cjs",
6
6
  "module": "./index.js",
@@ -1,4 +1,4 @@
1
1
  /*
2
- Rindo Client Patch Esm v3.2.0 | MIT Licensed | https://rindojs.web.app
2
+ Rindo Client Patch Esm v3.2.2 | MIT Licensed | https://rindojs.web.app
3
3
  */
4
4
  var __assign=undefined&&undefined.__assign||function(){return __assign=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var s in t=arguments[r])Object.prototype.hasOwnProperty.call(t,s)&&(e[s]=t[s]);return e},__assign.apply(this,arguments)},StyleNode=function(){this.start=0,this.end=0,this.previous=null,this.parent=null,this.rules=null,this.parsedCssText="",this.cssText="",this.atRule=!1,this.type=0,this.keyframesName="",this.selector="",this.parsedSelector="";};function parse(e){return parseCss(lex(e=clean(e)),e)}function clean(e){return e.replace(RX.comments,"").replace(RX.port,"")}function lex(e){var t=new StyleNode;t.start=0,t.end=e.length;for(var r=t,n=0,s=e.length;n<s;n++)if(e[n]===OPEN_BRACE){r.rules||(r.rules=[]);var o=r,a=o.rules[o.rules.length-1]||null;(r=new StyleNode).start=n+1,r.parent=o,r.previous=a,o.rules.push(r);}else e[n]===CLOSE_BRACE&&(r.end=n+1,r=r.parent||t);return t}function parseCss(e,t){var r=t.substring(e.start,e.end-1);if(e.parsedCssText=e.cssText=r.trim(),e.parent){var n=e.previous?e.previous.end:e.parent.start;r=(r=(r=_expandUnicodeEscapes(r=t.substring(n,e.start-1))).replace(RX.multipleSpaces," ")).substring(r.lastIndexOf(";")+1);var s=e.parsedSelector=e.selector=r.trim();e.atRule=0===s.indexOf(AT_START),e.atRule?0===s.indexOf(MEDIA_START)?e.type=types.MEDIA_RULE:s.match(RX.keyframesRule)&&(e.type=types.KEYFRAMES_RULE,e.keyframesName=e.selector.split(RX.multipleSpaces).pop()):0===s.indexOf(VAR_START)?e.type=types.MIXIN_RULE:e.type=types.STYLE_RULE;}var o=e.rules;if(o)for(var a=0,i=o.length,l=void 0;a<i&&(l=o[a]);a++)parseCss(l,t);return e}function _expandUnicodeEscapes(e){return e.replace(/\\([0-9a-f]{1,6})\s/gi,(function(){for(var e=arguments[1],t=6-e.length;t--;)e="0"+e;return "\\"+e}))}var types={STYLE_RULE:1,KEYFRAMES_RULE:7,MEDIA_RULE:4,MIXIN_RULE:1e3},OPEN_BRACE="{",CLOSE_BRACE="}",RX={comments:/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,port:/@import[^;]*;/gim,customProp:/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,mixinProp:/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,mixinApply:/@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,varApply:/[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,keyframesRule:/^@[^\s]*keyframes/,multipleSpaces:/\s+/g},VAR_START="--",MEDIA_START="@media",AT_START="@",VAR_USAGE_START=/\bvar\(/,VAR_ASSIGN_START=/\B--[\w-]+\s*:/,COMMENTS=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,TRAILING_LINES=/^[\t ]+\n/gm;function findRegex(e,t,r){e.lastIndex=0;var n=t.substring(r).match(e);if(n){var s=r+n.index;return {start:s,end:s+n[0].length}}return null}function resolveVar(e,t,r){return e[t]?e[t]:r?executeTemplate(r,e):""}function findVarEndIndex(e,t){for(var r=0,n=t;n<e.length;n++){var s=e[n];if("("===s)r++;else if(")"===s&&--r<=0)return n+1}return n}function parseVar(e,t){var r=findRegex(VAR_USAGE_START,e,t);if(!r)return null;var n=findVarEndIndex(e,r.start),s=e.substring(r.end,n-1).split(","),o=s[0],a=s.slice(1);return {start:r.start,end:n,propName:o.trim(),fallback:a.length>0?a.join(",").trim():void 0}}function compileVar(e,t,r){var n=parseVar(e,r);if(!n)return t.push(e.substring(r,e.length)),e.length;var s=n.propName,o=null!=n.fallback?compileTemplate(n.fallback):void 0;return t.push(e.substring(r,n.start),(function(e){return resolveVar(e,s,o)})),n.end}function executeTemplate(e,t){for(var r="",n=0;n<e.length;n++){var s=e[n];r+="string"==typeof s?s:s(t);}return r}function findEndValue(e,t){for(var r=!1,n=!1,s=t;s<e.length;s++){var o=e[s];if(r)n&&'"'===o&&(r=!1),n||"'"!==o||(r=!1);else if('"'===o)r=!0,n=!0;else if("'"===o)r=!0,n=!1;else {if(";"===o)return s+1;if("}"===o)return s}}return s}function removeCustomAssigns(e){for(var t="",r=0;;){var n=findRegex(VAR_ASSIGN_START,e,r),s=n?n.start:e.length;if(t+=e.substring(r,s),!n)break;r=findEndValue(e,s);}return t}function compileTemplate(e){var t=0;e=removeCustomAssigns(e=e.replace(COMMENTS,"")).replace(TRAILING_LINES,"");for(var r=[];t<e.length;)t=compileVar(e,r,t);return r}function resolveValues(e){var t={};e.forEach((function(e){e.declarations.forEach((function(e){t[e.prop]=e.value;}));}));for(var r={},n=Object.entries(t),s=function(e){var t=!1;if(n.forEach((function(e){var n=e[0],s=executeTemplate(e[1],r);s!==r[n]&&(r[n]=s,t=!0);})),!t)return "break"},o=0;o<10;o++){if("break"===s())break}return r}function getSelectors(e,t){if(void 0===t&&(t=0),!e.rules)return [];var r=[];return e.rules.filter((function(e){return e.type===types.STYLE_RULE})).forEach((function(e){var n=getDeclarations(e.cssText);n.length>0&&e.parsedSelector.split(",").forEach((function(e){e=e.trim(),r.push({selector:e,declarations:n,specificity:computeSpecificity(),nu:t});})),t++;})),r}function computeSpecificity(e){return 1}var IMPORTANT="!important",FIND_DECLARATIONS=/(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};{])+)|\{([^}]*)\}(?:(?=[;\s}])|$))/gm;function getDeclarations(e){for(var t,r=[];t=FIND_DECLARATIONS.exec(e.trim());){var n=normalizeValue(t[2]),s=n.value,o=n.important;r.push({prop:t[1].trim(),value:compileTemplate(s),important:o});}return r}function normalizeValue(e){var t=(e=e.replace(/\s+/gim," ").trim()).endsWith(IMPORTANT);return t&&(e=e.slice(0,e.length-IMPORTANT.length).trim()),{value:e,important:t}}function getActiveSelectors(e,t,r){var n=[],s=getScopesForElement(t,e);return r.forEach((function(e){return n.push(e)})),s.forEach((function(e){return n.push(e)})),sortSelectors(getSelectorsForScopes(n).filter((function(t){return matches(e,t.selector)})))}function getScopesForElement(e,t){for(var r=[];t;){var n=e.get(t);n&&r.push(n),t=t.parentElement;}return r}function getSelectorsForScopes(e){var t=[];return e.forEach((function(e){t.push.apply(t,e.selectors);})),t}function sortSelectors(e){return e.sort((function(e,t){return e.specificity===t.specificity?e.nu-t.nu:e.specificity-t.specificity})),e}function matches(e,t){return ":root"===t||"html"===t||e.matches(t)}function parseCSS(e){var t=parse(e),r=compileTemplate(e);return {original:e,template:r,selectors:getSelectors(t),usesCssVars:r.length>1}}function addGlobalStyle(e,t){if(e.some((function(e){return e.styleEl===t})))return !1;var r=parseCSS(t.textContent);return r.styleEl=t,e.push(r),!0}function updateGlobalScopes(e){var t=resolveValues(getSelectorsForScopes(e));e.forEach((function(e){e.usesCssVars&&(e.styleEl.textContent=executeTemplate(e.template,t));}));}function reScope(e,t){var r=e.template.map((function(r){return "string"==typeof r?replaceScope(r,e.scopeId,t):r})),n=e.selectors.map((function(r){return __assign(__assign({},r),{selector:replaceScope(r.selector,e.scopeId,t)})}));return __assign(__assign({},e),{template:r,selectors:n,scopeId:t})}function replaceScope(e,t,r){return e=replaceAll(e,"\\.".concat(t),".".concat(r))}function replaceAll(e,t,r){return e.replace(new RegExp(t,"g"),r)}function loadDocument(e,t){return loadDocumentStyles(e,t),loadDocumentLinks(e,t).then((function(){updateGlobalScopes(t);}))}function startWatcher(e,t){"undefined"!=typeof MutationObserver&&new MutationObserver((function(){loadDocumentStyles(e,t)&&updateGlobalScopes(t);})).observe(document.head,{childList:!0});}function loadDocumentLinks(e,t){for(var r=[],n=e.querySelectorAll('link[rel="stylesheet"][href]:not([data-no-shim])'),s=0;s<n.length;s++)r.push(addGlobalLink(e,t,n[s]));return Promise.all(r)}function loadDocumentStyles(e,t){return Array.from(e.querySelectorAll("style:not([data-styles]):not([data-no-shim])")).map((function(e){return addGlobalStyle(t,e)})).some(Boolean)}function addGlobalLink(e,t,r){var n=r.href;return fetch(n).then((function(e){return e.text()})).then((function(s){if(hasCssVariables(s)&&r.parentNode){hasRelativeUrls(s)&&(s=fixRelativeUrls(s,n));var o=e.createElement("style");o.setAttribute("data-styles",""),o.textContent=s,addGlobalStyle(t,o),r.parentNode.insertBefore(o,r),r.remove();}})).catch((function(e){console.error(e);}))}var CSS_VARIABLE_REGEXP=/[\s;{]--[-a-zA-Z0-9]+\s*:/m;function hasCssVariables(e){return e.indexOf("var(")>-1||CSS_VARIABLE_REGEXP.test(e)}var CSS_URL_REGEXP=/url[\s]*\([\s]*['"]?(?!(?:https?|data)\:|\/)([^\'\"\)]*)[\s]*['"]?\)[\s]*/gim;function hasRelativeUrls(e){return CSS_URL_REGEXP.lastIndex=0,CSS_URL_REGEXP.test(e)}function fixRelativeUrls(e,t){var r=t.replace(/[^/]*$/,"");return e.replace(CSS_URL_REGEXP,(function(e,t){var n=r+t;return e.replace(t,n)}))}var CustomStyle=function(){function e(e,t){this.win=e,this.doc=t,this.count=0,this.hostStyleMap=new WeakMap,this.hostScopeMap=new WeakMap,this.globalScopes=[],this.scopesMap=new Map,this.didInit=!1;}return e.prototype.i=function(){var e=this;return this.didInit||!this.win.requestAnimationFrame?Promise.resolve():(this.didInit=!0,new Promise((function(t){e.win.requestAnimationFrame((function(){startWatcher(e.doc,e.globalScopes),loadDocument(e.doc,e.globalScopes).then((function(){return t()}));}));})))},e.prototype.addLink=function(e){var t=this;return addGlobalLink(this.doc,this.globalScopes,e).then((function(){t.updateGlobal();}))},e.prototype.addGlobalStyle=function(e){addGlobalStyle(this.globalScopes,e)&&this.updateGlobal();},e.prototype.createHostStyle=function(e,t,r,n){if(this.hostScopeMap.has(e))throw new Error("host style already created");var s=this.registerHostTemplate(r,t,n),o=this.doc.createElement("style");return o.setAttribute("data-no-shim",""),s.usesCssVars?n?(o["s-sc"]=t="".concat(s.scopeId,"-").concat(this.count),o.textContent="/*needs update*/",this.hostStyleMap.set(e,o),this.hostScopeMap.set(e,reScope(s,t)),this.count++):(s.styleEl=o,s.usesCssVars||(o.textContent=executeTemplate(s.template,{})),this.globalScopes.push(s),this.updateGlobal(),this.hostScopeMap.set(e,s)):o.textContent=r,o},e.prototype.removeHost=function(e){var t=this.hostStyleMap.get(e);t&&t.remove(),this.hostStyleMap.delete(e),this.hostScopeMap.delete(e);},e.prototype.updateHost=function(e){var t=this.hostScopeMap.get(e);if(t&&t.usesCssVars&&t.isScoped){var r=this.hostStyleMap.get(e);if(r){var n=resolveValues(getActiveSelectors(e,this.hostScopeMap,this.globalScopes));r.textContent=executeTemplate(t.template,n);}}},e.prototype.updateGlobal=function(){updateGlobalScopes(this.globalScopes);},e.prototype.registerHostTemplate=function(e,t,r){var n=this.scopesMap.get(t);return n||((n=parseCSS(e)).scopeId=t,n.isScoped=r,this.scopesMap.set(t,n)),n},e}();!function(e){!e||e.__cssshim||e.CSS&&e.CSS.supports&&e.CSS.supports("color","var(--c)")||(e.__cssshim=new CustomStyle(e,e.document));}("undefined"!=typeof window&&window);
@@ -1,5 +1,5 @@
1
1
  /*
2
- Rindo Client Patch Browser v3.2.0 | MIT Licensed | https://rindojs.web.app
2
+ Rindo Client Patch Browser v3.2.2 | MIT Licensed | https://rindojs.web.app
3
3
  */
4
4
  (function(){
5
5
  var aa=new Set("annotation-xml color-profile font-face font-face-src font-face-uri font-face-format font-face-name missing-glyph".split(" "));function g(a){var b=aa.has(a);a=/^[a-z][.0-9_a-z]*-[\-.0-9_a-z]*$/.test(a);return !b&&a}function l(a){var b=a.isConnected;if(void 0!==b)return b;for(;a&&!(a.__CE_isImportDocument||a instanceof Document);)a=a.parentNode||(window.ShadowRoot&&a instanceof ShadowRoot?a.host:void 0);return !(!a||!(a.__CE_isImportDocument||a instanceof Document))}
@@ -19,7 +19,7 @@ let renderingRef = null;
19
19
  let queueCongestion = 0;
20
20
  let queuePending = false;
21
21
  /*
22
- Rindo Client Platform v3.2.0 | MIT Licensed | https://rindojs.web.app
22
+ Rindo Client Platform v3.2.2 | MIT Licensed | https://rindojs.web.app
23
23
  */
24
24
  import { BUILD, NAMESPACE } from '@rindo/core/internal/app-data';
25
25
  const Build = {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rindo/core/internal/client",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "description": "Rindo internal client platform to be imported by the Rindo Compiler and internal runtime. Breaking changes can and will happen at any time.",
5
5
  "main": "./index.js",
6
6
  "private": true,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Rindo Client Patch Browser v3.2.0 | MIT Licensed | https://rindojs.web.app
2
+ Rindo Client Patch Browser v3.2.2 | MIT Licensed | https://rindojs.web.app
3
3
  */
4
4
  import { BUILD, NAMESPACE } from '@rindo/core/internal/app-data';
5
5
  import { consoleDevInfo, plt, win, doc, promiseResolve, H } from '@rindo/core';
@@ -1,5 +1,5 @@
1
1
  /*
2
- Rindo Client Patch Esm v3.2.0 | MIT Licensed | https://rindojs.web.app
2
+ Rindo Client Patch Esm v3.2.2 | MIT Licensed | https://rindojs.web.app
3
3
  */
4
4
  import { BUILD } from '@rindo/core/internal/app-data';
5
5
  import { CSS, plt, win, promiseResolve } from '@rindo/core';
@@ -1,5 +1,5 @@
1
1
  /*
2
- Rindo Client Platform v3.2.0 | MIT Licensed | https://rindojs.web.app
2
+ Rindo Client Platform v3.2.2 | MIT Licensed | https://rindojs.web.app
3
3
  */
4
4
  /**
5
5
  * @license
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rindo/core/internal/hydrate",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "description": "Rindo internal hydrate platform to be imported by the Rindo Compiler. Breaking changes can and will happen at any time.",
5
5
  "main": "./index.js",
6
6
  "private": true
@@ -1,4 +1,4 @@
1
- // Generated by dts-bundle-generator v7.1.0
1
+ // Generated by dts-bundle-generator v7.2.0
2
2
 
3
3
  export declare function createWindowFromHtml(templateHtml: string, uniqueId: string): any;
4
4
  export interface HydrateDocumentOptions {
@@ -279,37 +279,7 @@ function afterHydrate(e, t, r, s) {
279
279
  function finalizeHydrate(e, t, r, s, n) {
280
280
  try {
281
281
  if (inspectElement(s, t.documentElement, 0), !1 !== r.removeUnusedStyles) try {
282
- ((e, t) => {
283
- try {
284
- const r = e.head.querySelectorAll("style[data-styles]"), s = r.length;
285
- if (s > 0) {
286
- const n = (e => {
287
- const t = {
288
- attrs: new Set,
289
- classNames: new Set,
290
- ids: new Set,
291
- tags: new Set
292
- };
293
- return collectUsedSelectors(t, e), t;
294
- })(e.documentElement);
295
- for (let e = 0; e < s; e++) removeUnusedStyleText(n, t, r[e]);
296
- }
297
- } catch (e) {
298
- ((e, t, r) => {
299
- const s = {
300
- level: "error",
301
- type: "build",
302
- header: "Build Error",
303
- messageText: "build error",
304
- relFilePath: null,
305
- absFilePath: null,
306
- lines: []
307
- };
308
- null != t && (null != t.stack ? s.messageText = t.stack.toString() : null != t.message ? s.messageText = t.message.length ? t.message : "UNKNOWN ERROR" : s.messageText = t.toString()),
309
- null == e || shouldIgnoreError(s.messageText) || e.push(s);
310
- })(t, e);
311
- }
312
- })(t, s.diagnostics);
282
+ removeUnusedStyles(t, s.diagnostics);
313
283
  } catch (e) {
314
284
  renderCatchError(s, e);
315
285
  }
@@ -320,21 +290,12 @@ function finalizeHydrate(e, t, r, s, n) {
320
290
  }
321
291
  s.title = t.title, r.removeScripts && removeScripts(t.documentElement);
322
292
  try {
323
- ((e, t) => {
324
- let r = e.head.querySelector('link[rel="canonical"]');
325
- "string" == typeof t ? (null == r && (r = e.createElement("link"), r.setAttribute("rel", "canonical"),
326
- e.head.appendChild(r)), r.setAttribute("href", t)) : null != r && (r.getAttribute("href") || r.parentNode.removeChild(r));
327
- })(t, r.canonicalUrl);
293
+ updateCanonicalLink(t, r.canonicalUrl);
328
294
  } catch (e) {
329
295
  renderCatchError(s, e);
330
296
  }
331
297
  try {
332
- (e => {
333
- const t = e.head;
334
- let r = t.querySelector("meta[charset]");
335
- null == r ? (r = e.createElement("meta"), r.setAttribute("charset", "utf-8")) : r.remove(),
336
- t.insertBefore(r, t.firstChild);
337
- })(t);
298
+ relocateMetaCharset(t);
338
299
  } catch (e) {}
339
300
  hasError(s.diagnostics) || (s.httpStatus = 200);
340
301
  try {
@@ -385,7 +346,16 @@ import { MockWindow, cloneWindow, patchWindow, constrainTimeouts, serializeNodeT
385
346
 
386
347
  import { hydrateFactory } from "@rindo/core/hydrate-factory";
387
348
 
388
- const templateWindows = new Map, isPromise = e => !!e && ("object" == typeof e || "function" == typeof e) && "function" == typeof e.then, 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", parseCss = (e, t) => {
349
+ const templateWindows = new Map, isPromise = e => !!e && ("object" == typeof e || "function" == typeof e) && "function" == typeof e.then, hasError = e => null != e && 0 !== e.length && e.some((e => "error" === e.level && "runtime" !== e.type)), TASK_CANCELED_MSG = "task canceled", updateCanonicalLink = (e, t) => {
350
+ let r = e.head.querySelector('link[rel="canonical"]');
351
+ "string" == typeof t ? (null == r && (r = e.createElement("link"), r.setAttribute("rel", "canonical"),
352
+ e.head.appendChild(r)), r.setAttribute("href", t)) : null != r && (r.getAttribute("href") || r.parentNode.removeChild(r));
353
+ }, relocateMetaCharset = e => {
354
+ const t = e.head;
355
+ let r = t.querySelector("meta[charset]");
356
+ null == r ? (r = e.createElement("meta"), r.setAttribute("charset", "utf-8")) : r.remove(),
357
+ t.insertBefore(r, t.firstChild);
358
+ }, parseCss = (e, t) => {
389
359
  let r = 1, s = 1;
390
360
  const n = [], o = e => {
391
361
  const t = e.match(/\n/g);
@@ -732,6 +702,36 @@ const templateWindows = new Map, isPromise = e => !!e && ("object" == typeof e |
732
702
  }
733
703
  if (r) for (let t = 0, s = r.length; t < s; t++) collectUsedSelectors(e, r[t]);
734
704
  }
705
+ }, removeUnusedStyles = (e, t) => {
706
+ try {
707
+ const r = e.head.querySelectorAll("style[data-styles]"), s = r.length;
708
+ if (s > 0) {
709
+ const n = (e => {
710
+ const t = {
711
+ attrs: new Set,
712
+ classNames: new Set,
713
+ ids: new Set,
714
+ tags: new Set
715
+ };
716
+ return collectUsedSelectors(t, e), t;
717
+ })(e.documentElement);
718
+ for (let e = 0; e < s; e++) removeUnusedStyleText(n, t, r[e]);
719
+ }
720
+ } catch (e) {
721
+ ((e, t, r) => {
722
+ const s = {
723
+ level: "error",
724
+ type: "build",
725
+ header: "Build Error",
726
+ messageText: "build error",
727
+ relFilePath: null,
728
+ absFilePath: null,
729
+ lines: []
730
+ };
731
+ null != t && (null != t.stack ? s.messageText = t.stack.toString() : null != t.message ? s.messageText = t.message.length ? t.message : "UNKNOWN ERROR" : s.messageText = t.toString()),
732
+ null == e || (e => e === TASK_CANCELED_MSG)(s.messageText) || e.push(s);
733
+ })(t, e);
734
+ }
735
735
  }, removeUnusedStyleText = (e, t, r) => {
736
736
  try {
737
737
  const s = parseCss(r.innerHTML);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rindo/core/internal",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "description": "Rindo internals only to be imported by the Rindo Compiler. Breaking changes can and will happen at any time.",
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",
@@ -1,5 +1,5 @@
1
1
  import type { InMemoryFileSystem } from '../compiler/sys/in-memory-fs';
2
- import type { BuildEvents, BuildLog, BuildResultsComponentGraph, CompilerBuildResults, CompilerBuildStart, CompilerFsStats, CompilerRequestResponse, CompilerSystem, Config, CopyResults, DevServerConfig, DevServerEditor, Diagnostic, Logger, LoggerLineUpdater, LoggerTimeSpan, OptimizeCssInput, OptimizeCssOutput, OutputTargetWww, PageReloadStrategy, PrerenderConfig, StyleDoc, TaskCommand } from './rindo-public-compiler';
2
+ import type { BuildEvents, BuildLog, BuildResultsComponentGraph, CompilerBuildResults, CompilerBuildStart, CompilerFsStats, CompilerRequestResponse, CompilerSystem, Config, CopyResults, DevServerConfig, DevServerEditor, Diagnostic, Logger, LoggerLineUpdater, LoggerTimeSpan, OptimizeCssInput, OptimizeCssOutput, OutputTarget, OutputTargetWww, PageReloadStrategy, PrerenderConfig, StyleDoc, TaskCommand } from './rindo-public-compiler';
3
3
  import type { ComponentInterface, ListenOptions, ListenTargetOptions, VNode, VNodeData } from './rindo-public-runtime';
4
4
  export interface SourceMap {
5
5
  file: string;
@@ -187,6 +187,9 @@ export interface BuildCtx {
187
187
  indexBuildCount: number;
188
188
  indexDoc: Document;
189
189
  isRebuild: boolean;
190
+ /**
191
+ * A collection of Rindo's intermediate representation of components, tied to the current build
192
+ */
190
193
  moduleFiles: Module[];
191
194
  packageJson: PackageJsonData;
192
195
  pendingCopyTasks: Promise<CopyResults>[];
@@ -571,6 +574,9 @@ export interface CompilerCtx {
571
574
  hasSuccessfulBuild: boolean;
572
575
  isActivelyBuilding: boolean;
573
576
  lastBuildResults: CompilerBuildResults;
577
+ /**
578
+ * A mapping of a file path to a Rindo {@link Module}
579
+ */
574
580
  moduleMap: ModuleMap;
575
581
  nodeMap: NodeMap;
576
582
  resolvedCollections: Set<string>;
@@ -639,6 +645,13 @@ export interface ComponentCompilerFeatures {
639
645
  htmlTagNames: string[];
640
646
  htmlParts: string[];
641
647
  isUpdateable: boolean;
648
+ /**
649
+ * A plain component is one that doesn't have:
650
+ * - any members decorated with `@Prop()`, `@State()`, `@Element()`, `@Method()`
651
+ * - any methods decorated with `@Listen()`
652
+ * - any styles
653
+ * - any lifecycle methods, including `render()`
654
+ */
642
655
  isPlain: boolean;
643
656
  potentialCmpRefs: string[];
644
657
  }
@@ -1172,18 +1185,33 @@ export interface MinifyJsResult {
1172
1185
  pos: number;
1173
1186
  };
1174
1187
  }
1188
+ /**
1189
+ * A mapping from a TypeScript or JavaScript source file path on disk, to a Rindo {@link Module}.
1190
+ *
1191
+ * It is advised that the key (path) be normalized before storing/retrieving the `Module` to avoid unnecessary lookup
1192
+ * failures.
1193
+ */
1175
1194
  export type ModuleMap = Map<string, Module>;
1176
1195
  /**
1177
1196
  * Rindo's Intermediate Representation (IR) of a module, bundling together
1178
1197
  * various pieces of information like the classes declared within it, the path
1179
1198
  * to the original source file, HTML tag names defined in the file, and so on.
1180
1199
  *
1181
- * Note that this gets serialized/parsed as JSON and therefore cannot be a
1200
+ * Note that this gets serialized/parsed as JSON and therefore cannot contain a
1182
1201
  * `Map` or a `Set`.
1183
1202
  */
1184
1203
  export interface Module {
1185
1204
  cmps: ComponentCompilerMeta[];
1205
+ /**
1206
+ * A collection of modules that a component will need. The modules in this list must have import statements generated
1207
+ * in order for the component to function.
1208
+ */
1186
1209
  coreRuntimeApis: string[];
1210
+ /**
1211
+ * A collection of modules that a component will need for a specific output target. The modules in this list must
1212
+ * have import statements generated in order for the component to function, but only for a specific output target.
1213
+ */
1214
+ outputTargetCoreRuntimeApis: Partial<Record<OutputTarget['type'], string[]>>;
1187
1215
  collectionName: string;
1188
1216
  dtsFilePath: string;
1189
1217
  excludeFromCollection: boolean;
@@ -170,7 +170,7 @@ export interface RindoConfig {
170
170
  */
171
171
  invisiblePrehydration?: boolean;
172
172
  /**
173
- * Sets the task queue used by Rindo's runtime. The task queue schedules DOM read and writes
173
+ * Sets the task queue used by rindo's runtime. The task queue schedules DOM read and writes
174
174
  * across the frames to efficiently render and reduce layout thrashing. By default,
175
175
  * `async` is used. It's recommended to also try each setting to decide which works
176
176
  * best for your use-case. In all cases, if your app has many CPU intensive tasks causing the
@@ -1964,14 +1964,6 @@ export interface OutputTargetDistCustomElements extends OutputTargetBaseNext {
1964
1964
  */
1965
1965
  customElementsExportBehavior?: CustomElementsExportBehavior;
1966
1966
  }
1967
- export interface OutputTargetDistCustomElementsBundle extends OutputTargetBaseNext {
1968
- type: 'dist-custom-elements-bundle';
1969
- empty?: boolean;
1970
- externalRuntime?: boolean;
1971
- copy?: CopyTask[];
1972
- includeGlobalScripts?: boolean;
1973
- minify?: boolean;
1974
- }
1975
1967
  /**
1976
1968
  * The base type for output targets. All output targets should extend this base type.
1977
1969
  */
@@ -2061,7 +2053,7 @@ export interface OutputTargetWww extends OutputTargetBase {
2061
2053
  serviceWorker?: ServiceWorkerConfig | null | false;
2062
2054
  appDir?: string;
2063
2055
  }
2064
- export type OutputTarget = OutputTargetCopy | OutputTargetCustom | OutputTargetDist | OutputTargetDistCollection | OutputTargetDistCustomElements | OutputTargetDistCustomElementsBundle | OutputTargetDistLazy | OutputTargetDistGlobalStyles | OutputTargetDistLazyLoader | OutputTargetDocsJson | OutputTargetDocsCustom | OutputTargetDocsReadme | OutputTargetDocsVscode | OutputTargetWww | OutputTargetHydrate | OutputTargetStats | OutputTargetDistTypes;
2056
+ export type OutputTarget = OutputTargetCopy | OutputTargetCustom | OutputTargetDist | OutputTargetDistCollection | OutputTargetDistCustomElements | OutputTargetDistLazy | OutputTargetDistGlobalStyles | OutputTargetDistLazyLoader | OutputTargetDocsJson | OutputTargetDocsCustom | OutputTargetDocsReadme | OutputTargetDocsVscode | OutputTargetWww | OutputTargetHydrate | OutputTargetStats | OutputTargetDistTypes;
2065
2057
  export interface ServiceWorkerConfig {
2066
2058
  unregister?: boolean;
2067
2059
  swDest?: string;
@@ -93,7 +93,11 @@ function stopAutoApplyChanges() {
93
93
  isAutoApplyingChanges = !1, autoApplyTimer && (clearTimeout(autoApplyTimer), autoApplyTimer = void 0);
94
94
  }
95
95
 
96
- const mockDoc = require("@rindo/core/mock-doc"), appData = require("@rindo/core/internal/app-data"), styles = new Map, modeResolutionChain = [], cstrs = new Map, queuedTicks = [], queuedWriteTasks = [], queuedReadTasks = [], moduleLoaded = new Map, queuedLoadModules = [], caughtErrors = [], hostRefs = new Map, getAssetPath = e => {
96
+ const mockDoc = require("@rindo/core/mock-doc"), appData = require("@rindo/core/internal/app-data");
97
+
98
+ require("path");
99
+
100
+ const styles = new Map, modeResolutionChain = [], cstrs = new Map, queuedTicks = [], queuedWriteTasks = [], queuedReadTasks = [], moduleLoaded = new Map, queuedLoadModules = [], caughtErrors = [], hostRefs = new Map, getAssetPath = e => {
97
101
  const t = new URL(e, plt.$resourcesUrl$);
98
102
  return t.origin !== win.location.origin ? t.href : t.pathname;
99
103
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rindo/core/internal/testing",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "description": "Rindo internal testing platform to be imported by the Rindo Compiler. Breaking changes can and will happen at any time.",
5
5
  "main": "./index.js",
6
6
  "private": true
@@ -1,5 +1,5 @@
1
1
  /*!
2
- Rindo Mock Doc (CommonJS) v3.2.0 | MIT Licensed | https://rindojs.web.app
2
+ Rindo Mock Doc (CommonJS) v3.2.2 | MIT Licensed | https://rindojs.web.app
3
3
  */
4
4
  var mockDoc = (function(exports) {
5
5
  'use strict';
@@ -3997,9 +3997,14 @@ class MockWindow {
3997
3997
  this.__location = val;
3998
3998
  }
3999
3999
  }
4000
- matchMedia() {
4000
+ matchMedia(media) {
4001
4001
  return {
4002
+ media,
4002
4003
  matches: false,
4004
+ addEventListener,
4005
+ dispatchEvent,
4006
+ removeEventListener,
4007
+ onchange: null,
4003
4008
  };
4004
4009
  }
4005
4010
  get Node() {
@@ -890,8 +890,13 @@ declare class MockWindow {
890
890
  set localStorage(locStorage: MockStorage);
891
891
  get location(): MockLocation;
892
892
  set location(val: Location | string);
893
- matchMedia(): {
893
+ matchMedia(media: string): {
894
+ media: string;
894
895
  matches: boolean;
896
+ addEventListener: typeof addEventListener;
897
+ dispatchEvent: typeof dispatchEvent;
898
+ removeEventListener: typeof removeEventListener;
899
+ onchange: (this: MediaQueryList, ev: MediaQueryListEvent) => any;
895
900
  };
896
901
  get Node(): any;
897
902
  get NodeList(): any;
package/mock-doc/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- Rindo Mock Doc v3.2.0 | MIT Licensed | https://rindojs.web.app
2
+ Rindo Mock Doc v3.2.2 | MIT Licensed | https://rindojs.web.app
3
3
  */
4
4
  const CONTENT_REF_ID = 'r';
5
5
  const ORG_LOCATION_ID = 'o';
@@ -3994,9 +3994,14 @@ class MockWindow {
3994
3994
  this.__location = val;
3995
3995
  }
3996
3996
  }
3997
- matchMedia() {
3997
+ matchMedia(media) {
3998
3998
  return {
3999
+ media,
3999
4000
  matches: false,
4001
+ addEventListener,
4002
+ dispatchEvent,
4003
+ removeEventListener,
4004
+ onchange: null,
4000
4005
  };
4001
4006
  }
4002
4007
  get Node() {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rindo/core/mock-doc",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "description": "Mock window, document and DOM outside of a browser environment.",
5
5
  "main": "./index.cjs",
6
6
  "module": "./index.js",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rindo/core",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "license": "MIT",
5
5
  "main": "./internal/rindo-core/index.cjs",
6
6
  "module": "./internal/rindo-core/index.js",
@@ -72,15 +72,15 @@
72
72
  "@yarnpkg/lockfile": "^1.1.0",
73
73
  "ansi-colors": "4.1.3",
74
74
  "assert": "^2.0.0",
75
- "autoprefixer": "10.4.13",
75
+ "autoprefixer": "10.4.14",
76
76
  "conventional-changelog-cli": "^2.2.2",
77
- "dts-bundle-generator": "~7.1.0",
77
+ "dts-bundle-generator": "~7.2.0",
78
78
  "eslint": "^8.23.1",
79
79
  "eslint-config-prettier": "^8.5.0",
80
80
  "eslint-plugin-jest": "^27.0.4",
81
- "eslint-plugin-jsdoc": "^39.3.1",
81
+ "eslint-plugin-jsdoc": "^40.0.0",
82
82
  "eslint-plugin-simple-import-sort": "^10.0.0",
83
- "execa": "7.0.0",
83
+ "execa": "7.1.1",
84
84
  "exit": "^0.1.2",
85
85
  "fs-extra": "^11.0.0",
86
86
  "glob": "8.1.0",
@@ -95,14 +95,14 @@
95
95
  "merge-source-map": "^1.1.0",
96
96
  "mime-db": "^1.46.0",
97
97
  "minimatch": "5.1.2",
98
- "node-fetch": "2.6.7",
99
- "open": "^8.4.0",
98
+ "node-fetch": "3.3.1",
99
+ "open": "^9.0.0",
100
100
  "open-in-editor": "2.2.0",
101
101
  "parse5": "7.1.2",
102
102
  "path-browserify": "^1.0.1",
103
103
  "pixelmatch": "5.3.0",
104
104
  "postcss": "^8.2.8",
105
- "prettier": "2.8.3",
105
+ "prettier": "2.8.7",
106
106
  "process": "^0.11.10",
107
107
  "prompts": "2.4.2",
108
108
  "puppeteer": "^19.5.0",
@@ -110,10 +110,10 @@
110
110
  "rollup-plugin-sourcemaps": "^0.6.3",
111
111
  "semver": "^7.3.7",
112
112
  "sizzle": "^2.3.6",
113
- "terser": "5.16.1",
114
- "typescript": "4.9.4",
113
+ "terser": "5.16.8",
114
+ "typescript": "4.9.5",
115
115
  "webpack": "^5.75.0",
116
- "ws": "8.12.0"
116
+ "ws": "8.13.0"
117
117
  },
118
118
  "engines": {
119
119
  "node": ">=14.10.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rindo/core/screenshot",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "description": "Rindo Screenshot.",
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",