@thi.ng/meta-css 0.1.0 → 0.1.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.
- package/CHANGELOG.md +7 -1
- package/README.md +39 -9
- package/index.js +4 -4
- package/package.json +16 -17
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
-
- **Last updated**: 2023-12-
|
|
3
|
+
- **Last updated**: 2023-12-19T11:01:47Z
|
|
4
4
|
- **Generator**: [thi.ng/monopub](https://thi.ng/monopub)
|
|
5
5
|
|
|
6
6
|
All notable changes to this project will be documented in this file.
|
|
@@ -9,6 +9,12 @@ See [Conventional Commits](https://conventionalcommits.org/) for commit guidelin
|
|
|
9
9
|
**Note:** Unlisted _patch_ versions only involve non-code or otherwise excluded changes
|
|
10
10
|
and/or version bumps of transitive dependencies.
|
|
11
11
|
|
|
12
|
+
### [0.1.1](https://github.com/thi-ng/umbrella/tree/@thi.ng/meta-css@0.1.1) (2023-12-18)
|
|
13
|
+
|
|
14
|
+
#### ♻️ Refactoring
|
|
15
|
+
|
|
16
|
+
- update export cmd args ([7a2feaf](https://github.com/thi-ng/umbrella/commit/7a2feaf))
|
|
17
|
+
|
|
12
18
|
## [0.1.0](https://github.com/thi-ng/umbrella/tree/@thi.ng/meta-css@0.1.0) (2023-12-18)
|
|
13
19
|
|
|
14
20
|
#### 🚀 Features
|
package/README.md
CHANGED
|
@@ -13,7 +13,10 @@ This project is part of the
|
|
|
13
13
|
- [About](#about)
|
|
14
14
|
- [Generate](#generate)
|
|
15
15
|
- [Convert](#convert)
|
|
16
|
+
- [Including custom CSS files](#including-custom-css-files)
|
|
17
|
+
- [Force inclusion of unreferenced classes](#force-inclusion-of-unreferenced-classes)
|
|
16
18
|
- [Export](#export)
|
|
19
|
+
- [Media queries](#media-queries)
|
|
17
20
|
- [Framework generation rules](#framework-generation-rules)
|
|
18
21
|
- [Status](#status)
|
|
19
22
|
- [Related packages](#related-packages)
|
|
@@ -32,7 +35,7 @@ This project is part of the
|
|
|
32
35
|
|
|
33
36
|
## About
|
|
34
37
|
|
|
35
|
-
Data-driven CSS component & framework codegen.
|
|
38
|
+
Data-driven CSS component & framework codegen, transpiler, bundler.
|
|
36
39
|
|
|
37
40
|
This package provides a CLI multi-tool to:
|
|
38
41
|
|
|
@@ -105,19 +108,46 @@ Main:
|
|
|
105
108
|
-s STR, --specs STR [required] Path to generated JSON defs
|
|
106
109
|
```
|
|
107
110
|
|
|
111
|
+
#### Including custom CSS files
|
|
112
|
+
|
|
113
|
+
One or more existing CSS files can be included & prepended to the output via the
|
|
114
|
+
`--include`/`-I` arg (which can be given multiple times). These files are used
|
|
115
|
+
as-is and will **not** be transformed or reformatted in any way.
|
|
116
|
+
|
|
117
|
+
### Force inclusion of unreferenced classes
|
|
118
|
+
|
|
119
|
+
Only the CSS classes (and their optionally associated media queries) referenced
|
|
120
|
+
in a `.meta` stylesheet will appear in the export CSS bundle. This ensures that
|
|
121
|
+
the resulting CSS will only contain what's actually used. However, this also
|
|
122
|
+
means any CSS classes (and optionally, their media query qualifiers) which are
|
|
123
|
+
otherwise referenced (e.g. from JS/TS source code or HTML docs) **will not** be
|
|
124
|
+
included by default and they will need to be listed manually for forced inclusion.
|
|
125
|
+
|
|
126
|
+
This can be achieved via the `--force`/`-f` arg (also can be given multiple
|
|
127
|
+
times). This option also supports basic `*`-wildcard patterns, e.g. `bg-*` to
|
|
128
|
+
include all classes with prefix `bg-`. Furthermore, for larger projects it's
|
|
129
|
+
useful to store these names/patterns in a separate file. For that purpose, use
|
|
130
|
+
the `@` prefix (e.g. `-f @includes.txt`) to indicate reading from file (only
|
|
131
|
+
reading from a single file is supported at current)...
|
|
132
|
+
|
|
108
133
|
### Export
|
|
109
134
|
|
|
110
135
|
The `export` command is intended for those who're only interested in the CSS
|
|
111
136
|
framework generation aspect of this toolchain. This command merely takes an
|
|
112
137
|
existing generated framework JSON file and serializes it to a single CSS file,
|
|
113
|
-
e.g. to be then used with other CSS tooling (e.g. `postcss`).
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
138
|
+
e.g. to be then used with other CSS tooling (e.g. `postcss`).
|
|
139
|
+
|
|
140
|
+
#### Media queries
|
|
141
|
+
|
|
142
|
+
Users can choose to generate variations of all defined utility classes for any
|
|
143
|
+
of the framework-defined media query IDs. This will create suffixed versions of
|
|
144
|
+
all classes (with their appropriate media query wrappers) and cause a
|
|
145
|
+
potentially massive output (depending on the overall number/complexity of the
|
|
146
|
+
generated classes). Again, the idea is that the resulting CSS file will be
|
|
147
|
+
post-processed with 3rd party CSS tooling...
|
|
148
|
+
|
|
149
|
+
As with the `convert` command, additional CSS files can also be included
|
|
150
|
+
(prepended) in the output file.
|
|
121
151
|
|
|
122
152
|
```text
|
|
123
153
|
metacss export --help
|
package/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var L1={default:95,hint:90,multi:90,param:96,required:33};var _1=(X)=>X;var n=function(X,Z){return!Z&&(Z={}),(...J)=>{const V=JSON.stringify(J);if(V!==void 0)return V in Z?Z[V]:Z[V]=X.apply(null,J);return X.apply(null,J)}};var
|
|
3
|
-
`)}}var
|
|
4
|
-
`]:[],...W(Q),""].join("\n")),...n1(Z.suffix,Z.lineWidth)].join("\n")},S8=(X,Z,J,V,W)=>{const U=y8(Z,V),B=h8(Z,V,U),Y=J1(`--${D0(X)}`,V.param),Q=`${B}${Y}${U}`,z=Z.optional===!1&&Z.default===void 0,K=[];z&&K.push("required"),Z.multi&&K.push("multiple");const
|
|
5
|
-
`),A0(X,V);const Q=await X.ctx({logger:new m1(process.stderr,X.name,"INFO"),format:J?C1:P0,opts:Y.result,inputs:Y.rest},U);if(await U.fn(Q),X.post)await X.post(Q,U)}catch(W){process.stderr.write(W.message+"\n\n"),process.exit(1)}},A0=(X,Z)=>{process.stderr.write(Z1(X.opts,Z)),process.exit(1)},o8=(X)=>["\nAvailable commands:\n",...Object.keys(X).map((Z)=>`${$1(16)(Z)}: ${X[Z].desc}`),"\n"].join("\n");import{existsSync as i8,mkdirSync as a8,statSync as t8} from"fs";import{sep as c8} from"path";var b0=(X)=>{const Z=X.substring(0,X.lastIndexOf(c8));return Z.length>0&&!i8(Z)?(a8(Z,{recursive:!0}),!0):!1},L0=(X)=>t8(X).isDirectory();var T=(X)=>typeof X==="function";var M=(X)=>typeof X==="string";import{readdirSync as r8,statSync as P5} from"fs";import{sep as s8} from"path";function*S0(X,Z="",J,V=Infinity,W=0){if(W>=V)return;const U=XX(Z);for(let B of r8(X).sort()){const Y=X+s8+B;try{if(L0(Y))yield*S0(Y,Z,J,V,W+1);else if(U(Y))yield Y}catch(Q){J&&J.warn(`ignoring file: ${B} (${Q.message})`)}}}var _0=(X,Z="",J=Infinity,V)=>S0(X,Z,V,J,0);var e8=(X)=>M(X)?new RegExp(`${X.replace(/\./g,"\\.")}\$`):X,XX=(X)=>T(X)?X:(X=e8(X),(Z)=>X.test(Z));import{readFileSync as JX} from"fs";import{writeFileSync as ZX} from"fs";var y0=(X,Z,J,V,W=!1)=>{if(V&&V.info(`${W?"[dryrun] ":""}writing file: ${X}`),W)return;b0(X),ZX(X,Z,!J&&M(Z)?"utf-8":J)};var E=(X,Z,J="utf-8")=>{return Z&&Z.debug("reading file:",X),JX(X,J)},d1=(X,Z,J,V=!1)=>y0(X,w(Z)?Z.join("\n"):Z,"utf-8",J,V);var v=(X,Z)=>JSON.parse(E(X,Z));var M1=Object.freeze({level:H.NONE,enabled:()=>!1,fine(){},debug(){},info(){},warn(){},severe(){}});import{join as fX} from"path";var VX=R(()=>"Assertion failed"),h=(typeof process!=="undefined"&&process.env!==void 0?!0:import.meta.env?import.meta.env.MODE!=="production"||!!import.meta.env.UMBRELLA_ASSERTS||!!import.meta.env.VITE_UMBRELLA_ASSERTS:!0)?(X,Z)=>{if(typeof X==="function"&&!X()||!X)throw new VX(typeof Z==="function"?Z():Z)}:()=>{};var F1=(X)=>X!=null&&typeof X!=="function"&&X.length!==void 0;var h0=(X)=>{return(X==null||!X[Symbol.iterator])&&C(`value is not iterable: ${X}`),X};var f0=(X)=>F1(X)?X:[...h0(X)];var V1=(X)=>X[X.length-1];var WX=R(()=>"illegal arity"),o=(X)=>{throw new WX(X)};var UX=R(()=>"illegal state"),i=(X)=>{throw new UX(X)};var l1=function(...X){let[Z,J,V,W,U,B,Y,Q,z,K]=X;switch(X.length){case 0:o(0);case 1:return Z;case 2:return(...$)=>Z(J(...$));case 3:return(...$)=>Z(J(V(...$)));case 4:return(...$)=>Z(J(V(W(...$))));case 5:return(...$)=>Z(J(V(W(U(...$)))));case 6:return(...$)=>Z(J(V(W(U(B(...$))))));case 7:return(...$)=>Z(J(V(W(U(B(Y(...$)))))));case 8:return(...$)=>Z(J(V(W(U(B(Y(Q(...$))))))));case 9:return(...$)=>Z(J(V(W(U(B(Y(Q(z(...$)))))))));case 10:default:const q=(...$)=>Z(J(V(W(U(B(Y(Q(z(K(...$))))))))));return X.length===10?q:l1(q,...X.slice(10))}};var m0=(X,Z)=>new Promise((J)=>setTimeout(()=>J(X),Z));var u0=(X)=>X;var g0=["-moz-","-ms-","-o-","-webkit-"],a={rules:"",ruleSep:",",valSep:"",decls:"",declStart:"{",declEnd:"}",indent:"",comments:!1},w1={rules:"\n",ruleSep:", ",valSep:" ",decls:"\n",declStart:" {\n",declEnd:"}\n",indent:" ",comments:!0};var D=(X)=>X!=null&&typeof X[Symbol.iterator]==="function";var P1=(X,Z)=>X!=null&&typeof X[Z]==="function";var f=(X)=>P1(X,"xform")?X.xform():X;var b=function(...X){return X=X.map(f),l1.apply(null,X)};var N1=(X)=>X!=null&&typeof X!=="string"&&typeof X[Symbol.iterator]==="function";var t=(X,Z)=>[X[0],X[1],Z];var L=Symbol(),p1=()=>{};class o1{value;constructor(X){this.value=X}deref(){return this.value}}var G=(X)=>X instanceof o1;var _=(X)=>X instanceof o1?X.deref():X;var O1=function(...X){const Z=X[0],J=Z[0],V=Z[1],W=Z[2];X=YX(X);const U=X[0]==null?J():X[0],B=X[1];return _(V(P1(B,"$reduce")?B.$reduce(W,U):F1(B)?BX(W,U,B):QX(W,U,B)))};var YX=(X)=>X.length===2?[void 0,X[1]]:X.length===3?[X[1],X[2]]:o(X.length),BX=(X,Z,J)=>{for(let V=0,W=J.length;V<W;V++)if(Z=X(Z,J[V]),G(Z)){Z=Z.deref();break}return Z},QX=(X,Z,J)=>{for(let V of J)if(Z=X(Z,V),G(Z)){Z=Z.deref();break}return Z},c=(X,Z)=>[X,(J)=>J,Z];var D1=function(X){return X?[...X]:c(()=>[],(Z,J)=>(Z.push(J),Z))};function*G1(X,Z){const J=f(X)(D1()),V=J[1],W=J[2];for(let U of Z){const B=W([],U);if(G(B)){yield*_(V(B.deref()));return}if(B.length)yield*B}yield*_(V([]))}function*m(X,Z){const J=f(X)([p1,p1,(V,W)=>W])[2];for(let V of Z){let W=J(L,V);if(G(W)){if(W=_(W.deref()),W!==L)yield W;return}if(W!==L)yield W}}var j1=(X,Z,J=m)=>{const V=Z.length-1;return D(Z[V])?Z.length>1?J(X.apply(null,Z.slice(0,V)),Z[V]):J(X(),Z[0]):void 0};var i1=function(X,Z){return D(Z)?G1(i1(X),M(Z)?[Z]:Z):(J)=>{const V=J[2],W=(U,B)=>{const Y=X(B);if(Y){for(let Q of Y)if(U=W(U,Q),G(U))break;return U}return V(U,B)};return t(J,W)}};var x0=function(X){return i1((Z)=>N1(Z)?Z:void 0,X)};var P=function(X,Z){return D(Z)?m(P(X),Z):(J)=>{const V=J[2];return t(J,(W,U)=>V(W,X(U)))}};function*k1(...X){const Z=X.length-1;if(Z<0)return;const J=new Array(Z+1).fill(0),V=X.map(f0),W=V.reduce((U,B)=>U*B.length,1);for(let U=0;U<W;U++){const B=[];for(let Y=Z;Y>=0;Y--){const Q=V[Y];let z=J[Y];if(z===Q.length)J[Y]=z=0,Y>0&&J[Y-1]++;B[Y]=Q[z]}J[Z]++,yield B}}function*n0(X,Z=Infinity){while(Z-- >0)yield X}var a1=function(X,Z){X=X||"";let J=!0;return Z?[...Z].join(X):c(()=>"",(V,W)=>(V=J?V+W:V+X+W,J=!1,V))};var T1=function(...X){return KX(T1,O1,X)};var KX=(X,Z,J)=>{let V,W;switch(J.length){case 4:W=J[3],V=J[2];break;case 3:W=J[2];break;case 2:return P((U)=>X(J[0],J[1],U));default:o(J.length)}return Z(f(J[0])(J[1]),V,W)};var zX=new Set,$X=":[",d0=b(x0(),P((X)=>$X.indexOf(X.charAt(0))>=0?X:" "+X)),qX=(X,Z)=>b(X,P((J)=>M(J)&&J.indexOf(" .")==0?J+Z:J)),r=(X,Z,J,V)=>{const W=J.length,U=[];let B,Y;const Q=(z,K)=>{let q=null;if(w(K))r(X,t1(Z,U),K,V);else if(D(K)&&!M(K))r(X,t1(Z,U),[...K],V);else if((Y=T(K))||(q=V.fns[K]))if(!Z.length){if(q)return q.apply(null,J.slice(z+1))(X,V),!0;K(X,V)}else if(Y)Q(z,K());else C(`quoted fn ('${K}') only allowed at head position`);else if(k(K))B=Object.assign(B||{},K);else if(K!=null)U.push(K)};for(let z=0;z<W;z++)if(Q(z,J[z]))return X;return B&&X.push(CX(Z,U,B,V)),X},t1=(X,Z)=>X.length?[...k1(X,Z)]:Z,CX=(X,Z,J,V)=>{const W=V.format,U=I1(V),B=V.scope?qX(d0,V.scope):d0;return[U,T1(P((Y)=>T1(B,a1(),w(Y)?Y:[Y]).trim()),a1(W.ruleSep),t1(X,Z)),W.declStart,c1(J,V),U,W.declEnd].join("")},c1=(X,Z)=>{const J=Z.format,V=Z.autoprefix||zX,W=I1(Z,Z.depth+1),U=[];for(let B in X)if(X.hasOwnProperty(B)){let Y=X[B];if(T(Y))Y=Y(X);if(w(Y))Y=Y.map((Q)=>w(Q)?Q.join(" "):Q).join(J.ruleSep);if(V.has(B))for(let Q of Z.vendors)U.push(`${W}${Q}${B}:${J.valSep}${Y};`);U.push(`${W}${B}:${J.valSep}${Y};`)}return U.join(J.decls)+J.decls},I1=(X,Z=X.depth)=>Z>1?[...n0(X.format.indent,Z)].join(""):Z>0?X.format.indent:"";var p0=(X,Z,J)=>(V,W)=>{const U=I1(W);return V.push(`${U}${X} ${HX(Z)}${W.format.declStart}`),W.depth++,r(V,[],J,W),W.depth--,V.push(U+W.format.declEnd),V},HX=(X)=>{if(M(X))return X;const Z=[];for(let J in X)if(X.hasOwnProperty(J)){let V=X[J];if(V===!0)V=l0.has(J)?J:`(${J})`;else if(V===!1)V="not "+(l0.has(J)?J:`(${J})`);else if(V==="only")V+=" "+J;else V=`(${J}:${V})`;Z.push(V)}return Z.join(" and ")},l0=new Set(["all","print","screen"]);var W1=(X,Z)=>{return Z={format:a,vendors:g0,fns:{},depth:0,...Z},w(Z.autoprefix)&&(Z.autoprefix=new Set(Z.autoprefix)),k(X)?c1(X,Z):T(X)?X([],Z).join(Z.format.rules):r([],[],w(X)?X:N1(X)?[...X]:C("invalid rules"),Z).join(Z.format.rules)};var R1=(X,Z)=>p0("@media",X,Z);var E1=4,o0=(X)=>E1=X,r1=(X)=>X===(X|0)?String(X):X.toFixed(E1).replace(/^0./,".").replace(/0+$/,"");var s1=(X)=>`${r1(X)}rem`,i0=(X)=>`${r1(X)}%`,a0=(X)=>`${r1(X)}px`;var N=((X)=>{return X[X.IDLE=0]="IDLE",X[X.ACTIVE=1]="ACTIVE",X[X.DONE=2]="DONE",X[X.UNSUBSCRIBED=3]="UNSUBSCRIBED",X[X.ERROR=4]="ERROR",X})(N||{}),I=((X)=>{return X[X.NEVER=0]="NEVER",X[X.FIRST=1]="FIRST",X[X.LAST=2]="LAST",X})(I||{});var MX=0,FX=()=>MX++,u=(X,Z)=>!Z||!Z.id?{...Z,id:X+"-"+FX()}:Z;var O=M1;class S{constructor(X,Z){this.wrapped=X,Z=u("sub",{closeIn:I.LAST,closeOut:I.LAST,cache:!0,...Z}),this.parent=Z.parent,this.id=Z.id,this.closeIn=Z.closeIn,this.closeOut=Z.closeOut,this.cacheLast=Z.cache,Z.xform&&(this.xform=Z.xform(D1()))}id;closeIn;closeOut;parent;__owner;xform;cacheLast;last=L;state=N.IDLE;subs=[];deref(){return this.last!==L?this.last:void 0}getState(){return this.state}setState(X){this.state=X}subscribe(X,Z={}){this.ensureState();let J;if(X instanceof S&&!Z.xform)X.ensureState(),h(!X.parent,`sub '${X.id}' already has a parent`),X.parent=this,J=X;else J=new S(X,{...Z,parent:this});return this.subs.push(J),this.setState(N.ACTIVE),J.setState(N.ACTIVE),this.last!=L&&J.next(this.last),J}transform(...X){let Z,J;if(k(V1(X)))J=X.pop(),Z={error:J.error};return this.subscribe(Z,u("xform",X.length>0?{...J,xform:b(...X)}:J))}map(X,Z){return this.transform(P(X),Z||{})}unsubscribe(X){return X?this.unsubscribeChild(X):this.unsubscribeSelf()}unsubscribeSelf(){return O.debug(this.id,"unsub self"),this.parent&&this.parent.unsubscribe(this),this.state<N.UNSUBSCRIBED&&(this.state=N.UNSUBSCRIBED),this.release(),!0}unsubscribeChild(X){O.debug(this.id,"unsub child",X.id);const Z=this.subs.indexOf(X);if(Z>=0){if(this.subs.splice(Z,1),this.closeOut===I.FIRST||!this.subs.length&&this.closeOut!==I.NEVER)this.unsubscribe();return!0}return!1}next(X){if(this.state>=N.DONE)return;this.xform?this.dispatchXform(X):this.dispatch(X)}done(){if(O.debug(this.id,"entering done()"),this.state>=N.DONE)return;if(this.xform){if(!this.dispatchXformDone())return}if(this.state=N.DONE,this.dispatchTo("done"))this.state<N.UNSUBSCRIBED&&this.unsubscribe();O.debug(this.id,"exiting done()")}error(X){const Z=this.wrapped,J=Z&&Z.error;return J&&O.debug(this.id,"attempting wrapped error handler"),J&&Z.error(X)||this.unhandledError(X)}unhandledError(X){return(O!==M1?O:console).warn(this.id,"unhandled error:",X),this.unsubscribe(),this.state=N.ERROR,!1}dispatchTo(X,Z){let J=this.wrapped;if(J)try{J[X]&&J[X](Z)}catch(W){if(!this.error(W))return!1}const V=X==="next"?this.subs:[...this.subs];for(let W=V.length;W-- >0;){J=V[W];try{J[X]&&J[X](Z)}catch(U){if(X==="error"||!J.error||!J.error(U))return this.unhandledError(U)}}return!0}dispatch(X){O.debug(this.id,"dispatch",X),this.cacheLast&&(this.last=X),this.dispatchTo("next",X)}dispatchXform(X){let Z;try{Z=this.xform[2]([],X)}catch(J){this.error(J);return}if(this.dispatchXformVals(Z))G(Z)&&this.done()}dispatchXformDone(){let X;try{X=this.xform[1]([])}catch(Z){return this.error(Z)}return this.dispatchXformVals(X)}dispatchXformVals(X){const Z=_(X);for(let J=0,V=Z.length;J<V&&this.state<N.DONE;J++)this.dispatch(Z[J]);return this.state<N.ERROR}ensureState(){if(this.state>=N.DONE)i(`operation not allowed in state ${this.state}`)}release(){this.subs.length=0,delete this.parent,delete this.xform,delete this.last}}var t0=(X,Z)=>{const J=new c0(Z);return J.next(X),J};class c0 extends S{src;_cancel;_inited;constructor(X,Z){const[J,V]=T(X)?[X,Z||{}]:[void 0,X||{}];super(V.error?{error:V.error}:void 0,u("stream",V));this.src=J,this._inited=!1}subscribe(X,Z={}){const J=super.subscribe(X,Z);if(!this._inited){if(this.src)try{this._cancel=this.src(this)||(()=>{return})}catch(V){let W=this.wrapped;if(!W||!W.error||!W.error(V))this.unhandledError(V)}this._inited=!0}return J}unsubscribe(X){const Z=super.unsubscribe(X);if(Z&&(!X||(!this.subs||!this.subs.length)&&this.closeOut!==I.NEVER))this.cancel();return Z}done(){this.cancel(),super.done(),delete this.src,delete this._cancel}error(X){if(super.error(X))return!0;return this.cancel(),!1}cancel(){if(this._cancel){O.debug(this.id,"cancel");const X=this._cancel;delete this._cancel,X()}}}var r0=(X,Z)=>X===I.FIRST||X===I.LAST&&!Z;var e1=function(X){return X?O1(e1(),X):c(()=>({}),(Z,[J,V])=>(Z[J]=V,Z))};var X0=function(X,Z){return D(Z)?m(X0(X),Z):P(T(X)?(J)=>[X(J),J]:(J)=>[X,J])};var Z0=function(...X){const Z=j1(Z0,X);if(Z)return Z;const J=X[0],V=X[1]!==!1;return P((W)=>{const U=V?{}:W;for(let B in W)U[B]=J(W[B]);return U})};var J0=function(...X){const Z=j1(J0,X,G1);if(Z)return Z;const{key:J,mergeOnly:V,reset:W,all:U,backPressure:B}={key:u0,mergeOnly:!1,reset:!0,all:!0,backPressure:0,...X[1]},Y=w(X[0])?new Set(X[0]):X[0],Q=new Set,z=new Map;let K={};const q=([$,j,g])=>{let x=!0;if(V||B<1)return[$,(F)=>{if(W&&U&&Q.size>0||!W&&x)F=g(F,K),K={},Q.clear(),x=!1;return j(F)},(F,X1)=>{const A=J(X1);if(Y.has(A)){if(K[A]=X1,Q.add(A),V||s0(Y,Q))if(F=g(F,K),x=!1,W)K={},Q.clear();else K={...K}}return F}];else return[$,(F)=>{if(U&&Q.size>0)F=g(F,e0(z,Q)),z.clear(),Q.clear();return j(F)},(F,X1)=>{const A=J(X1);if(Y.has(A)){let B1=z.get(A);!B1&&z.set(A,B1=[]),B1.length>=B&&i(`max back pressure (${B}) exceeded for input: ${String(A)}`),B1.push(X1),Q.add(A);while(s0(Y,Q))if(F=g(F,e0(z,Q)),x=!1,G(F))break}return F}]};return q.keys=()=>Y,q.clear=()=>{z.clear(),Y.clear(),Q.clear(),K={}},q.add=($)=>{Y.add($)},q.delete=($,j=!0)=>{if(z.delete($),Y.delete($),j)Q.delete($),delete K[$]},q},s0=(X,Z)=>{if(Z.size<X.size)return!1;for(let J of X)if(!Z.has(J))return!1;return!0},e0=(X,Z)=>{const J={};for(let V of Z){const W=X.get(V);J[V]=W.shift(),!W.length&&Z.delete(V)}return J};var X8=(X,Z)=>{let J=!0;for(let V of Z)J=X.removeID(V)&&J;return J};var Z8=(X)=>new J8(X);class J8 extends S{sources;idSources;realSourceIDs;invRealSourceIDs;psync;clean;constructor(X){const Z=J0(new Set,{key:(V)=>V[0],mergeOnly:X.mergeOnly===!0,reset:X.reset===!0,all:X.all!==!1,backPressure:X.backPressure||0}),J=Z0((V)=>V[1]);super(void 0,u("streamsync",{...X,xform:X.xform?b(Z,J,X.xform):b(Z,J)}));this.sources=new Map,this.realSourceIDs=new Map,this.invRealSourceIDs=new Map,this.idSources=new Map,this.psync=Z,this.clean=!!X.clean,X.src&&this.addAll(X.src)}add(X,Z){Z||(Z=X.id),this.ensureState(),this.psync.add(Z),this.realSourceIDs.set(Z,X.id),this.invRealSourceIDs.set(X.id,Z),this.idSources.set(X.id,X),this.sources.set(X,X.subscribe({next:(J)=>J[1]instanceof S?this.add(J[1]):this.next(J),done:()=>this.markDone(X),__owner:this},{xform:X0(Z),id:`in-${Z}`}))}addAll(X){for(let Z in X)this.psync.add(Z);for(let Z in X)this.add(X[Z],Z)}remove(X){const Z=this.sources.get(X);if(Z){const J=this.invRealSourceIDs.get(X.id);return O.info(`removing src: ${X.id} (${J})`),this.psync.delete(J,this.clean),this.realSourceIDs.delete(J),this.invRealSourceIDs.delete(X.id),this.idSources.delete(X.id),this.sources.delete(X),Z.unsubscribe(),!0}return!1}removeID(X){const Z=this.getSourceForID(X);return Z?this.remove(Z):!1}removeAll(X){for(let J of X)this.psync.delete(this.invRealSourceIDs.get(J.id));let Z=!0;for(let J of X)Z=this.remove(J)&&Z;return Z}removeAllIDs(X){return X8(this,X)}getSourceForID(X){return this.idSources.get(this.realSourceIDs.get(X))}getSources(){const X={};for(let[Z,J]of this.idSources)X[this.invRealSourceIDs.get(Z)]=J;return X}unsubscribe(X){if(!X){O.debug(this.id,"unsub sources");for(let Z of this.sources.values())Z.unsubscribe();this.sources.clear(),this.psync.clear(),this.realSourceIDs.clear(),this.invRealSourceIDs.clear(),this.idSources.clear()}return super.unsubscribe(X)}markDone(X){this.remove(X),r0(this.closeIn,this.sources.size)&&this.done()}}var V0=n((X,Z=" ")=>{const J=d(String(Z),X);return(V,W)=>{if(V==null)return J;return V=V.toString(),W=W!==void 0?W:V.length,W<X?J.substring(W)+V:V}}),D2=V0(2,"0"),V8=V0(3,"0"),G2=V0(4,"0");var W0=function(X,Z){return D(Z)?m(W0(X),Z):(J)=>{const V=J[2];return t(J,(W,U)=>X(U)?V(W,U):W)}};import{watch as PX} from"fs";import{resolve as Y1} from"path";var W8={specs:p({alias:"s",optional:!1,desc:"Path to generated JSON defs"})},A1={include:z1({alias:"I",desc:"Include CSS files (prepend)"})},s={pretty:l({alias:"p",desc:"Pretty print output"})},v1={noHeader:l({desc:"Don't emit generated header comment"})},U8={watch:l({alias:"w",desc:"Watch input files for changes"})};import{resolve as wX} from"path";var e=(X,Z,J)=>{Z=M(Z)?Z:Z.join("\n"),X?d1(wX(X),Z,J):console.log(Z)},b1=({info:{name:X,version:Z}})=>`/*! ${X} v${Z} - generated by thi.ng/meta-css @ ${(new Date()).toISOString()} */`;var B8={desc:"Transpile & bundle meta stylesheets to CSS",opts:{...W8,...A1,...s,...v1,...U8,force:z1({alias:"f",desc:"CSS classes to force include (wildcards are supported, @-prefix will read from file)",delim:","})},fn:async(X)=>{const Z=v(Y1(X.opts.specs),X.logger),J=GX(Z,X.opts.force||[],X.logger);if(X.opts.watch)await NX(X,Z,J);else Q8(X,Z,J,X.inputs.map((V)=>E(Y1(V),X.logger)))}},NX=async(X,Z,J)=>{let V=!0;const W=()=>{X.logger.info("closing watchers..."),U.forEach((B)=>B.watcher.close()),V=!1},U=X.inputs.map((B,Y)=>{B=Y1(B);const Q=t0(E(B,X.logger),{id:`in${V8(Y)}`});return{input:Q,watcher:PX(B,{},(z)=>{if(z==="change")try{Q.next(E(B,X.logger))}catch(K){X.logger.warn(K.message),W()}else X.logger.warn("input removed:",B),W()})}});Z8({src:e1(P(({input:B})=>[B.id,B],U))}).subscribe({next(B){try{Q8(X,Z,J,Object.keys(B).sort().map((Y)=>B[Y]))}catch(Y){X.logger.warn(Y.message)}}}),process.on("SIGINT",W);while(V)await m0(null,250)},Q8=({logger:X,opts:{include:Z,noHeader:J,out:V,pretty:W}},U,B,Y)=>{const Q={logger:X,specs:U,format:W?w1:a,mediaQueryIDs:new Set(Object.keys(U.media)),mediaQueryRules:{...B.mediaQueryRules},plainRules:{...B.plainRules}},z=Z?Z.map((K)=>E(Y1(K),X).trim()):[];if(!J)z.push(b1(U));Y.forEach((K)=>jX(K,Q)),DX(z,Q),OX(z,Q),e(V,z,X)},OX=(X,{logger:Z,specs:J,format:V,mediaQueryRules:W})=>{for(let U in W){const B=z8(W[U],J);Z.debug("mediaquery rules",U,B),X.push(W1(R1(IX(J.media,U),B),{format:V}))}},DX=(X,{logger:Z,specs:J,format:V,plainRules:W})=>{const U=z8(W,J);Z.debug("plain rules",U),X.push(W1(U,{format:V}))},GX=(X,Z,J)=>{const V=new Set(Object.keys(X.media)),W=new Set(Object.keys(X.defs)),U={},B={};if(Z.length&&Z[0][0]==="@")Z=[...y(E(Y1(Z[0].substring(1)),J))];for(let Y of Z){if(!Y||Y.startsWith("//"))continue;const{token:Q,query:z}=$8(Y,V);let K;if(Q.includes("*")){const q=new RegExp(`^${Q.replace("*",".*")}\$`);K=[...W0(($)=>q.test($),W)]}else if(W.has(Q))K=[Q];else{J.warn(`unknown include rule ID: ${Y}, skipping...`);continue}for(let q of K)J.debug("including class:",q),z?q8(U,z,`.${q}`,q):C8(B,`.${q}`,q)}return{mediaQueryRules:U,plainRules:B}},jX=(X,{specs:Z,mediaQueryIDs:J,mediaQueryRules:V,plainRules:W})=>{const U=U1(),B=U1(U),Y={root:U,curr:B,scopes:[B]};for(let Q of y(X)){if(!Q||/^\s*\/\//.test(Q))continue;for(let z of y(Q,/\s+/g)){if(!z)continue;let K=Y.curr;switch(K.state){case"sel":case"nest":if(z==="{"){if(K.state==="sel")K.sel=K.sel.map((q)=>q.replace(",","")),K.path=kX(Y.scopes);K.state="class"}else if(z==="}")Y8(Y);else{const q=V1(K.sel);if(!q||q.endsWith(","))K.sel.push(z);else K.sel[K.sel.length-1]+=" "+z}break;case"class":if(z==="{")K.state="nest",Y.scopes.push(Y.curr=U1(K));else if(z==="}")Y8(Y);else{let{token:q,query:$}=$8(z,J);if(!Z.defs[q])C(`unknown rule ID: ${q}`);if($)q8(V,$,K.path,q);else C8(W,K.path,q)}break;default:i(K.state)}}}},U0=":",K8="///",U1=(X)=>({state:"sel",sel:X?[]:["<root>"],path:"",parent:X}),Y8=(X)=>{const Z=!X.curr.sel.length;if(h(!!X.curr.parent,"stack underflow"),X.scopes.pop(),X.scopes.length>0){if(X.curr=V1(X.scopes),!Z&&X.curr.state==="nest")X.scopes.push(X.curr=U1(X.curr))}else X.scopes.push(X.curr=U1(X.root))},kX=(X)=>X.map((Z)=>Z.sel.join(",")).join(K8),z8=(X,Z)=>Object.entries(X).map(([J,V])=>TX(J,V,Z)),TX=(X,Z,J)=>{const V=[];let W=V;const U=X.split(K8);for(let B=0;B<U.length;B++){const Y=U[B].split(",");if(B==U.length-1)Y.push(Object.assign({},...P((Q)=>J.defs[Q],Z)));W.push(Y),W=Y}return V[0]},$8=(X,Z)=>{if(/^::?/.test(X))return{token:X};const J=X.lastIndexOf(U0);if(J<0)return{token:X};const V=X.substring(0,J);if(!V.split(U0).every((U)=>Z.has(U)))C(`invalid media query in token: ${X}`);return{token:X.substring(J+1),query:V}},IX=(X,Z)=>Z.split(U0).reduce((J,V)=>Object.assign(J,X[V]),{}),q8=(X,Z,J,V)=>{if(!X[Z])X[Z]={};(X[Z][J]||(X[Z][J]=new Set)).add(V)},C8=(X,Z,J)=>(X[Z]||(X[Z]=new Set)).add(J);import{resolve as H8} from"path";var F8={desc:"Export entire generated framework as CSS",opts:{...A1,...s,...v1,media:p({alias:"m",desc:"Media query IDs (use 'ALL' for all)"})},inputs:1,fn:async(X)=>{const{logger:Z,opts:{include:J,media:V,noHeader:W,pretty:U,out:B},inputs:Y}=X,Q=v(H8(Y[0]),Z),z=J?J.map((K)=>E(H8(K),Z).trim()):[];if(!W)z.push(b1(Q));z.push(RX(Q,V,U,Z)),e(B,z,Z)}},RX=(X,Z,J,V)=>{const W=M8("",X);if(Z){const U=Z==="ALL"?Object.keys(X.media):Z.split(",");for(let B of U)if(X.media[B])W.push(R1(X.media[B],M8("-"+B,X)));else V.warn(`invalid media query ID: ${B}, skipping...`)}return W1(W,{format:J?w1:a})},M8=(X,Z)=>Object.entries(Z.defs).map(([J,V])=>[`.${J}${X}`,V]);import{statSync as EX} from"fs";import{resolve as AX} from"path";var w8={px:a0,rem:s1,"%":i0,norm:(X)=>parseFloat((X*0.01).toFixed(E1))},P8={"":[""],a:[""],h:["-left","-right"],v:["-top","-bottom"],t:["-top"],top:["top"],b:["-bottom"],bottom:["bottom"],r:["-right"],right:["right"],l:["-left"],left:["left"],x:["-x"],y:["-y"]},vX={all:["a","h","v","t","r","b","l"],trbl:["t","r","b","l"],TRBL:["top","right","bottom","left"],atrbl:["a","t","r","b","l"],h:["l","r"],v:["t","b"],xy:["x","y"],axy:["a","x","y"]},N8={desc:"Generate framework rules from specs",opts:{...s,prec:C0({default:3,desc:"Number of fractional digits"})},inputs:1,fn:async(X)=>{const{logger:Z,opts:{prec:J,out:V,pretty:W},inputs:U}=X,B=AX(U[0]);if(!EX(B).isDirectory())C(`${B} is not a directory`);const Y={info:{name:"TODO",version:"0.0.0"},media:{},defs:{}};for(let Q of _0(B,".json")){const z=v(Q,Z);Object.assign(Y.info,z.info),Object.assign(Y.media,z.media),bX(z,Y.defs,J)}e(V,JSON.stringify(Y,null,W?4:0),Z)}},bX=(X,Z={},J=3)=>{o0(J);for(let V of X.specs){const W=hX(V.var);if(V.def)for(let U of W)_X(Z,X,V,U);else{const U=M(V.prop)?[V.prop]:V.prop;for(let B of W){const Y=[...k1(U,P8[B])].map((Q)=>Q.join(""));LX(Z,X,{...V,prefix:V.prefix+B,prop:Y},B)}}}return Z},LX=(X,Z,J,V)=>{const W=J.prefix.replace("*",V),U=yX(J.prop,V),B=G8(Z,J);j8(Z,J.items).forEach((Q,z)=>{const K=O8(W,J.index,Q,z);h(!X[K],`duplicate rule ID: ${K}`);const q=D8(Q,B);X[K]=U.reduce(($,j)=>($[j]=q,$),{})})},_X=(X,Z,J,V)=>{const W=J.prefix.replace("*",V),U=G8(Z,J),B=j8(Z,J.items),Y=P8[V];B.forEach((Q,z)=>{const K=O8(W,J.index,Q,z);h(!X[K],`duplicate rule ID: ${K}`);const q=D8(Q,U),$=Object.entries(J.def).reduce((j,[g,x])=>(j[g.replace("*",Y)]=x.replace("*",q),j),{});X[K]=$})},O8=(X,Z,J,V)=>X+SX(Z,J,V),SX=(X,Z,J)=>{if(X===void 0)return"";switch(X){case"i":return J;case"i1":return J+1;case"v":return Z;default:C(`invalid index type: ${X}`)}},D8=(X,Z)=>Z?Z(X):X,G8=(X,{unit:Z,items:J})=>{if(Z===void 0)return s1;if(Z===null)return k(J)?(V)=>J[V]:(V)=>V;if(w8[Z])return w8[Z];return X.tables?.[Z]?(V)=>X.tables[Z][V]:C(`invalid unit: ${Z}`)},j8=(X,Z)=>{let J=Z;if(M(J))J=X.tables?.[J]||C(`invalid index: ${J}`);if(k(J))return Object.keys(J);return w(J)?J:C(Z)},yX=(X,Z)=>(M(X)?[X]:X).map((J)=>J.replace("*",Z)),hX=(X)=>{if(!X)return[""];if(M(X))return vX[X]||C(`invalid variation: ${X}`);return X};var Y0=v(fX(import.meta.dir,"package.json"));v0({name:"metacss",opts:{out:p({alias:"o",desc:"Output file (or stdout)"}),verbose:l({alias:"v",desc:"Display extra process information"})},commands:{convert:B8,export:F8,generate:N8},ctx:async(X)=>{if(X.opts.verbose)X.logger.level=H.DEBUG;return{...X,format:C1}},usage:{prefix:`
|
|
2
|
+
var L1={default:95,hint:90,multi:90,param:96,required:33};var _1=(X)=>X;var n=function(X,Z){return!Z&&(Z={}),(...J)=>{const V=JSON.stringify(J);if(V!==void 0)return V in Z?Z[V]:Z[V]=X.apply(null,J);return X.apply(null,J)}};var l=n((X,Z)=>X.repeat(Z));var B0=(X)=>/^[a-f0-9]+$/i.test(X);var Q0=(X)=>/^[-+]?\d+$/.test(X),K0=(X)=>/^[-+]?\d*\.?\d+(e[-+]?\d+)?$/i.test(X);var R=(X,Z=(J)=>J!==void 0?": "+J:"")=>class extends Error{constructor(J){super(X(J)+Z(J))}};var k8=R(()=>"illegal argument(s)"),C=(X)=>{throw new k8(X)};var S1=(X)=>K0(X)?parseFloat(X):C(`not a numeric value: ${X}`),z0=(X)=>X.map(S1),y1=(X)=>B0(X)?parseInt(X,16):C(`not a hex value: ${X}`),q0=(X)=>X.map(y1),h1=(X)=>Q0(X)?parseInt(X):C(`not an integer: ${X}`),$0=(X)=>X.map(h1);var Q1=(X,Z)=>(J)=>({coerce:X,hint:Z,group:"main",...J}),K1=(X,Z)=>(J)=>({hint:T8(Z,J.delim),multi:!0,coerce:X,group:"main",...J}),T8=(X,Z)=>X+(Z?`[${Z}..]`:""),d=(X)=>({flag:!0,default:!1,group:"flags",...X}),z1=Q1(_1,"STR"),p=K1(_1,"STR"),U4=Q1(S1,"NUM"),Y4=Q1(y1,"HEX"),C0=Q1(h1,"INT"),B4=K1(z0,"NUM"),Q4=K1(q0,"HEX"),K4=K1($0,"INT");var H=((X)=>{return X[X.FINE=0]="FINE",X[X.DEBUG=1]="DEBUG",X[X.INFO=2]="INFO",X[X.WARN=3]="WARN",X[X.SEVERE=4]="SEVERE",X[X.NONE=5]="NONE",X})(H||{});class f1{id;level;constructor(X,Z=H.FINE){this.id=X,this.level=typeof Z==="string"?H[Z]:Z}enabled(X){return this.level<=X}fine(...X){this.level<=H.FINE&&this.log(H.FINE,X)}debug(...X){this.level<=H.DEBUG&&this.log(H.DEBUG,X)}info(...X){this.level<=H.INFO&&this.log(H.INFO,X)}warn(...X){this.level<=H.WARN&&this.log(H.WARN,X)}severe(...X){this.level<=H.SEVERE&&this.log(H.SEVERE,X)}}var H0=(X)=>X.map((Z)=>{if(typeof Z==="function")Z=Z();if(!(typeof Z==="string"||typeof Z==="number"))Z=JSON.stringify(Z);return Z}).join(" ");class m1 extends f1{constructor(X,Z,J=H.FINE){super(Z,J);this.target=X}log(X,Z){this.target.write(`[${H[X]}] ${this.id}: ${H0(Z)}
|
|
3
|
+
`)}}var q1=n((X,Z=" ")=>{const J=l(String(Z),X);return(V,W)=>{if(V==null)return J;return V=V.toString(),W=W!==void 0?W:V.length,W<X?V+J.substring(W):V}});var M0=(X,Z)=>{return!Z&&(Z=new Map),(J)=>{let V;return Z.has(J)?Z.get(J):(Z.set(J,V=X(J)),V)}};var u1={black:1,blue:5,cyan:7,gray:17,green:3,magenta:6,red:2,white:24,yellow:4,lightBlue:21,lightCyan:23,lightGray:8,lightGreen:19,lightMagenta:22,lightRed:18,lightYellow:20,bgBlack:32,bgBlue:160,bgCyan:224,bgGray:544,bgGreen:96,bgMagenta:192,bgRed:64,bgWhite:768,bgYellow:128,bgLightBlue:672,bgLightCyan:736,bgLightGray:256,bgLightGreen:608,bgLightMagenta:704,bgLightRed:576,bgLightYellow:640};var I8=(X,Z)=>(J)=>X.format(Z,J),g1=(X)=>Object.keys(u1).reduce((Z,J)=>(Z[J]=I8(X,u1[J]),Z),{format:X});var F0="\x1B[0m",R8=["","1","2","1;2","4","1;4","2;4","1;2;4"],$1={format:(X,Z)=>$1.start(X)+Z+$1.end,start:M0((X)=>{let Z=[],J=X&15;return J&&Z.push(29+(X>>4&1)*60+J),J=X>>5&15,J&&Z.push(39+(X>>9&1)*60+J),J=X>>10,J&&Z.push(R8[J]),"\x1B["+Z.join(";")+"m"}),end:F0,prefix:F0,suffix:"\n"};var w0={format:(X,Z)=>String(Z),prefix:"",suffix:"\n",start:()=>"",end:""};var C1=g1($1),P0=g1(w0);var w=Array.isArray;var E8=(X)=>X.toUpperCase(),N0=(X)=>X.toLowerCase(),O0=(X)=>X.length?X[0].toUpperCase()+X.substring(1):X,D0=(X,Z="-")=>N0(X.replace(/([a-z0-9\u00e0-\u00fd])([A-Z\u00c0-\u00dd])/g,(J,V,W)=>V+Z+W));var G0=(X,Z="-")=>N0(X).replace(new RegExp(`\\${Z}+(\\w)`,"g"),(J,V)=>E8(V));var j0=Object.getPrototypeOf,k=(X)=>{let Z;return X!=null&&typeof X==="object"&&((Z=j0(X))===null||j0(Z)===null)};var A8=/\x1b\[[0-9;]+m/g,b8=(X)=>X.replace(A8,"");var H1=(X)=>b8(X).length;var k0=(X=!1,Z)=>(J)=>X||typeof J!=="string"&&typeof J!=="number"?JSON.stringify(J,null,Z):String(J);function*y(X,Z=/\r?\n/g,J=!1){let V=0;const W=X.length,U=~~J;let B;if(typeof Z==="string")B=new RegExp(Z,"g");else if(!Z.flags.includes("g"))B=new RegExp(Z,Z.flags+"g");else B=Z;for(;V<W;){const Y=B.exec(X);if(!Y){yield X.substring(V);return}const Q=Y[0].length;yield X.substring(V,Y.index+U*Q),V=Y.index+Q}}class x1{n=0;w=[];constructor(X,Z){X!=null&&this.add(X,Z)}add(X,Z=X.length){return this.w.push(X),this.n+=Z+~~(this.n>0),this}toString(){return this.w.join(" ")}}var v8={length:(X)=>X.length,split:(X,Z)=>Z},I0={length:H1,split:(X,Z)=>{const J=/\x1b\[[0-9;]+m/g;let V=Z,W;while(W=J.exec(X)){if(W.index>=Z)break;const U=W[0].length;V+=U,Z+=U}return V}},T0=(X,Z,J,V)=>{const W=X[X.length-1];W&&V-W.n>J?W.add(Z,J):X.push(new x1(Z,J))},L8=(X,{width:Z,min:J,hard:V,splitter:W},U=0,B=[])=>{let Y=W.length(X),Q=Z-U;if(Q<J&&Q<Y)Q=Z;while(V&&Y>Q){const z=W.split(X,Q),K=X.substring(0,z);T0(B,K,Q,Z),X=X.substring(z),Q=Z,Y=W.length(X)}return T0(B,X,Y,Z),B},_8=(X,Z,J=[])=>{if(!X.length)return J.push(new x1),J;const V={width:80,min:4,hard:!1,splitter:v8,...Z};for(let W of y(X,Z.delimWord||/\s/g)){const U=J[J.length-1];L8(W,V,U&&U.n>0?U.n+1:0,J)}return J},R0=(X,Z)=>{let J=[];for(let V of y(X,Z.delimLine))J=J.concat(_8(V,Z));return J};var Z1=(X,Z={})=>{Z={lineWidth:80,paramWidth:32,showDefaults:!0,prefix:"",suffix:"",groups:["flags","main"],...Z};const J=k(Z.color)?{...L1,...Z.color}:Z.color?L1:{},V=l(" ",Z.paramWidth),W=(Y)=>Y.map((Q)=>S8(Q,X[Q],Z,J,V)),U=Object.keys(X).sort(),B=Z.groups?Z.groups.map((Y)=>[Y,U.filter((Q)=>X[Q].group===Y)]).filter((Y)=>!!Y[1].length):[["options",U]];return[...n1(Z.prefix,Z.lineWidth),...B.map(([Y,Q])=>[...Z.showGroupNames?[`${O0(Y)}:
|
|
4
|
+
`]:[],...W(Q),""].join("\n")),...n1(Z.suffix,Z.lineWidth)].join("\n")},S8=(X,Z,J,V,W)=>{const U=y8(Z,V),B=h8(Z,V,U),Y=J1(`--${D0(X)}`,V.param),Q=`${B}${Y}${U}`,z=Z.optional===!1&&Z.default===void 0,K=[];z&&K.push("required"),Z.multi&&K.push("multiple");const $=f8(K,V,z)+(Z.desc||"")+m8(Z,J,V);return q1(J.paramWidth)(Q,H1(Q))+n1($,J.lineWidth-J.paramWidth).map((q,j)=>j>0?W+q:q).join("\n")},y8=(X,Z)=>X.hint?J1(" "+X.hint,Z.hint):"",h8=(X,Z,J)=>X.alias?`${J1("-"+X.alias,Z.param)}${J}, `:"",f8=(X,Z,J)=>X.length?J1(`[${X.join(", ")}] `,J?Z.required:Z.multi):"",m8=(X,Z,J)=>Z.showDefaults&&X.default!=null&&X.default!==!1?J1(` (default: ${k0(!0)(X.defaultHint!=null?X.defaultHint:X.default)})`,J.default):"",J1=(X,Z)=>Z!=null?`\x1B[${Z}m${X}\x1B[0m`:X,n1=(X,Z)=>X?R0(X,{width:Z,splitter:I0,hard:!0}):[];var u8=R(()=>"parse error"),E0=(X,Z,J)=>{J={start:2,showUsage:!0,help:["--help","-h"],...J};try{return g8(X,Z,J)}catch(V){if(J.showUsage)console.log(V.message+"\n\n"+Z1(X,J.usageOpts));throw new u8(V.message)}},g8=(X,Z,J)=>{const V=x8(X),W={};let U,B,Y=J.start;for(;Y<Z.length;){const Q=Z[Y];if(!U){if(J.help.includes(Q)){console.log(Z1(X,J.usageOpts));return}const z=n8(X,V,W,Q);if(U=z.id,B=z.spec,Y=Y+~~(z.state<2),z.state)break}else{if(l8(B,W,U,Q))break;U=null,Y++}}return U&&C(`missing value for: --${U}`),{result:d8(X,W),index:Y,rest:Z.slice(Y),done:Y>=Z.length}},x8=(X)=>Object.entries(X).reduce((Z,[J,V])=>V.alias?(Z[V.alias]=J,Z):Z,{}),n8=(X,Z,J,V)=>{if(V[0]==="-"){let W;if(V[1]==="-"){if(V==="--")return{state:1};W=G0(V.substring(2))}else W=Z[V.substring(1)],!W&&C(`unknown option: ${V}`);const U=X[W];if(!U&&C(W),U.flag){if(J[W]=!0,W=void 0,U.fn&&!U.fn("true"))return{state:1,spec:U}}return{state:0,id:W,spec:U}}return{state:2}},l8=(X,Z,J,V)=>{if(/^-[a-z]/i.test(V)&&C(`missing value for: --${J}`),X.multi)w(Z[J])?Z[J].push(V):Z[J]=[V];else Z[J]=V;return X.fn&&!X.fn(V)},d8=(X,Z)=>{let J;for(let V in X)if(J=X[V],Z[V]===void 0){if(J.default!==void 0)Z[V]=J.default;else if(J.optional===!1)C(`missing arg: --${V}`)}else if(J.coerce)p8(J,Z,V);return Z},p8=(X,Z,J)=>{try{if(X.multi&&X.delim)Z[J]=Z[J].reduce((V,W)=>(V.push(...W.split(X.delim)),V),[]);Z[J]=X.coerce(Z[J])}catch(V){throw new Error(`arg --${J}: ${V.message}`)}};var b0=async(X)=>{const Z=X.argv||process.argv,J=!process.env.NO_COLOR,V={prefix:"",color:J,...X.usage};try{let W,U,B=X.start??2;if(X.single){if(W=Object.keys(X.commands)[0],!W)C("no command provided");U=X.commands[W]}else{if(W=Z[B],U=X.commands[W],V.prefix+=o8(X.commands),!U)A0(X,V);B++}let Y;try{Y=E0({...X.opts,...U.opts},Z,{showUsage:!0,usageOpts:V,start:B})}catch(z){}if(!Y)process.exit(1);if(U.inputs!==void 0&&U.inputs!==Y.rest.length)process.stderr.write(`expected ${U.inputs||0} input(s)
|
|
5
|
+
`),A0(X,V);const Q=await X.ctx({logger:new m1(process.stderr,X.name,"INFO"),format:J?C1:P0,opts:Y.result,inputs:Y.rest},U);if(await U.fn(Q),X.post)await X.post(Q,U)}catch(W){process.stderr.write(W.message+"\n\n"),process.exit(1)}},A0=(X,Z)=>{process.stderr.write(Z1(X.opts,Z)),process.exit(1)},o8=(X)=>["\nAvailable commands:\n",...Object.keys(X).map((Z)=>`${q1(16)(Z)}: ${X[Z].desc}`),"\n"].join("\n");import{existsSync as i8,mkdirSync as a8,statSync as t8} from"fs";import{sep as c8} from"path";var v0=(X)=>{const Z=X.substring(0,X.lastIndexOf(c8));return Z.length>0&&!i8(Z)?(a8(Z,{recursive:!0}),!0):!1},L0=(X)=>t8(X).isDirectory();var T=(X)=>typeof X==="function";var M=(X)=>typeof X==="string";import{readdirSync as r8,statSync as P5} from"fs";import{sep as s8} from"path";function*S0(X,Z="",J,V=Infinity,W=0){if(W>=V)return;const U=XX(Z);for(let B of r8(X).sort()){const Y=X+s8+B;try{if(L0(Y))yield*S0(Y,Z,J,V,W+1);else if(U(Y))yield Y}catch(Q){J&&J.warn(`ignoring file: ${B} (${Q.message})`)}}}var _0=(X,Z="",J=Infinity,V)=>S0(X,Z,V,J,0);var e8=(X)=>M(X)?new RegExp(`${X.replace(/\./g,"\\.")}\$`):X,XX=(X)=>T(X)?X:(X=e8(X),(Z)=>X.test(Z));import{readFileSync as JX} from"fs";import{writeFileSync as ZX} from"fs";var y0=(X,Z,J,V,W=!1)=>{if(V&&V.info(`${W?"[dryrun] ":""}writing file: ${X}`),W)return;v0(X),ZX(X,Z,!J&&M(Z)?"utf-8":J)};var E=(X,Z,J="utf-8")=>{return Z&&Z.debug("reading file:",X),JX(X,J)},l1=(X,Z,J,V=!1)=>y0(X,w(Z)?Z.join("\n"):Z,"utf-8",J,V);var b=(X,Z)=>JSON.parse(E(X,Z));var M1=Object.freeze({level:H.NONE,enabled:()=>!1,fine(){},debug(){},info(){},warn(){},severe(){}});import{join as fX} from"path";var VX=R(()=>"Assertion failed"),h=(typeof process!=="undefined"&&process.env!==void 0?!0:import.meta.env?import.meta.env.MODE!=="production"||!!import.meta.env.UMBRELLA_ASSERTS||!!import.meta.env.VITE_UMBRELLA_ASSERTS:!0)?(X,Z)=>{if(typeof X==="function"&&!X()||!X)throw new VX(typeof Z==="function"?Z():Z)}:()=>{};var F1=(X)=>X!=null&&typeof X!=="function"&&X.length!==void 0;var h0=(X)=>{return(X==null||!X[Symbol.iterator])&&C(`value is not iterable: ${X}`),X};var f0=(X)=>F1(X)?X:[...h0(X)];var V1=(X)=>X[X.length-1];var WX=R(()=>"illegal arity"),o=(X)=>{throw new WX(X)};var UX=R(()=>"illegal state"),i=(X)=>{throw new UX(X)};var d1=function(...X){let[Z,J,V,W,U,B,Y,Q,z,K]=X;switch(X.length){case 0:o(0);case 1:return Z;case 2:return(...q)=>Z(J(...q));case 3:return(...q)=>Z(J(V(...q)));case 4:return(...q)=>Z(J(V(W(...q))));case 5:return(...q)=>Z(J(V(W(U(...q)))));case 6:return(...q)=>Z(J(V(W(U(B(...q))))));case 7:return(...q)=>Z(J(V(W(U(B(Y(...q)))))));case 8:return(...q)=>Z(J(V(W(U(B(Y(Q(...q))))))));case 9:return(...q)=>Z(J(V(W(U(B(Y(Q(z(...q)))))))));case 10:default:const $=(...q)=>Z(J(V(W(U(B(Y(Q(z(K(...q))))))))));return X.length===10?$:d1($,...X.slice(10))}};var m0=(X,Z)=>new Promise((J)=>setTimeout(()=>J(X),Z));var u0=(X)=>X;var g0=["-moz-","-ms-","-o-","-webkit-"],a={rules:"",ruleSep:",",valSep:"",decls:"",declStart:"{",declEnd:"}",indent:"",comments:!1},w1={rules:"\n",ruleSep:", ",valSep:" ",decls:"\n",declStart:" {\n",declEnd:"}\n",indent:" ",comments:!0};var D=(X)=>X!=null&&typeof X[Symbol.iterator]==="function";var P1=(X,Z)=>X!=null&&typeof X[Z]==="function";var f=(X)=>P1(X,"xform")?X.xform():X;var v=function(...X){return X=X.map(f),d1.apply(null,X)};var N1=(X)=>X!=null&&typeof X!=="string"&&typeof X[Symbol.iterator]==="function";var t=(X,Z)=>[X[0],X[1],Z];var L=Symbol(),p1=()=>{};class o1{value;constructor(X){this.value=X}deref(){return this.value}}var G=(X)=>X instanceof o1;var _=(X)=>X instanceof o1?X.deref():X;var O1=function(...X){const Z=X[0],J=Z[0],V=Z[1],W=Z[2];X=YX(X);const U=X[0]==null?J():X[0],B=X[1];return _(V(P1(B,"$reduce")?B.$reduce(W,U):F1(B)?BX(W,U,B):QX(W,U,B)))};var YX=(X)=>X.length===2?[void 0,X[1]]:X.length===3?[X[1],X[2]]:o(X.length),BX=(X,Z,J)=>{for(let V=0,W=J.length;V<W;V++)if(Z=X(Z,J[V]),G(Z)){Z=Z.deref();break}return Z},QX=(X,Z,J)=>{for(let V of J)if(Z=X(Z,V),G(Z)){Z=Z.deref();break}return Z},c=(X,Z)=>[X,(J)=>J,Z];var D1=function(X){return X?[...X]:c(()=>[],(Z,J)=>(Z.push(J),Z))};function*G1(X,Z){const J=f(X)(D1()),V=J[1],W=J[2];for(let U of Z){const B=W([],U);if(G(B)){yield*_(V(B.deref()));return}if(B.length)yield*B}yield*_(V([]))}function*m(X,Z){const J=f(X)([p1,p1,(V,W)=>W])[2];for(let V of Z){let W=J(L,V);if(G(W)){if(W=_(W.deref()),W!==L)yield W;return}if(W!==L)yield W}}var j1=(X,Z,J=m)=>{const V=Z.length-1;return D(Z[V])?Z.length>1?J(X.apply(null,Z.slice(0,V)),Z[V]):J(X(),Z[0]):void 0};var i1=function(X,Z){return D(Z)?G1(i1(X),M(Z)?[Z]:Z):(J)=>{const V=J[2],W=(U,B)=>{const Y=X(B);if(Y){for(let Q of Y)if(U=W(U,Q),G(U))break;return U}return V(U,B)};return t(J,W)}};var x0=function(X){return i1((Z)=>N1(Z)?Z:void 0,X)};var P=function(X,Z){return D(Z)?m(P(X),Z):(J)=>{const V=J[2];return t(J,(W,U)=>V(W,X(U)))}};function*k1(...X){const Z=X.length-1;if(Z<0)return;const J=new Array(Z+1).fill(0),V=X.map(f0),W=V.reduce((U,B)=>U*B.length,1);for(let U=0;U<W;U++){const B=[];for(let Y=Z;Y>=0;Y--){const Q=V[Y];let z=J[Y];if(z===Q.length)J[Y]=z=0,Y>0&&J[Y-1]++;B[Y]=Q[z]}J[Z]++,yield B}}function*n0(X,Z=Infinity){while(Z-- >0)yield X}var a1=function(X,Z){X=X||"";let J=!0;return Z?[...Z].join(X):c(()=>"",(V,W)=>(V=J?V+W:V+X+W,J=!1,V))};var T1=function(...X){return KX(T1,O1,X)};var KX=(X,Z,J)=>{let V,W;switch(J.length){case 4:W=J[3],V=J[2];break;case 3:W=J[2];break;case 2:return P((U)=>X(J[0],J[1],U));default:o(J.length)}return Z(f(J[0])(J[1]),V,W)};var zX=new Set,qX=":[",l0=v(x0(),P((X)=>qX.indexOf(X.charAt(0))>=0?X:" "+X)),$X=(X,Z)=>v(X,P((J)=>M(J)&&J.indexOf(" .")==0?J+Z:J)),r=(X,Z,J,V)=>{const W=J.length,U=[];let B,Y;const Q=(z,K)=>{let $=null;if(w(K))r(X,t1(Z,U),K,V);else if(D(K)&&!M(K))r(X,t1(Z,U),[...K],V);else if((Y=T(K))||($=V.fns[K]))if(!Z.length){if($)return $.apply(null,J.slice(z+1))(X,V),!0;K(X,V)}else if(Y)Q(z,K());else C(`quoted fn ('${K}') only allowed at head position`);else if(k(K))B=Object.assign(B||{},K);else if(K!=null)U.push(K)};for(let z=0;z<W;z++)if(Q(z,J[z]))return X;return B&&X.push(CX(Z,U,B,V)),X},t1=(X,Z)=>X.length?[...k1(X,Z)]:Z,CX=(X,Z,J,V)=>{const W=V.format,U=I1(V),B=V.scope?$X(l0,V.scope):l0;return[U,T1(P((Y)=>T1(B,a1(),w(Y)?Y:[Y]).trim()),a1(W.ruleSep),t1(X,Z)),W.declStart,c1(J,V),U,W.declEnd].join("")},c1=(X,Z)=>{const J=Z.format,V=Z.autoprefix||zX,W=I1(Z,Z.depth+1),U=[];for(let B in X)if(X.hasOwnProperty(B)){let Y=X[B];if(T(Y))Y=Y(X);if(w(Y))Y=Y.map((Q)=>w(Q)?Q.join(" "):Q).join(J.ruleSep);if(V.has(B))for(let Q of Z.vendors)U.push(`${W}${Q}${B}:${J.valSep}${Y};`);U.push(`${W}${B}:${J.valSep}${Y};`)}return U.join(J.decls)+J.decls},I1=(X,Z=X.depth)=>Z>1?[...n0(X.format.indent,Z)].join(""):Z>0?X.format.indent:"";var p0=(X,Z,J)=>(V,W)=>{const U=I1(W);return V.push(`${U}${X} ${HX(Z)}${W.format.declStart}`),W.depth++,r(V,[],J,W),W.depth--,V.push(U+W.format.declEnd),V},HX=(X)=>{if(M(X))return X;const Z=[];for(let J in X)if(X.hasOwnProperty(J)){let V=X[J];if(V===!0)V=d0.has(J)?J:`(${J})`;else if(V===!1)V="not "+(d0.has(J)?J:`(${J})`);else if(V==="only")V+=" "+J;else V=`(${J}:${V})`;Z.push(V)}return Z.join(" and ")},d0=new Set(["all","print","screen"]);var W1=(X,Z)=>{return Z={format:a,vendors:g0,fns:{},depth:0,...Z},w(Z.autoprefix)&&(Z.autoprefix=new Set(Z.autoprefix)),k(X)?c1(X,Z):T(X)?X([],Z).join(Z.format.rules):r([],[],w(X)?X:N1(X)?[...X]:C("invalid rules"),Z).join(Z.format.rules)};var R1=(X,Z)=>p0("@media",X,Z);var E1=4,o0=(X)=>E1=X,r1=(X)=>X===(X|0)?String(X):X.toFixed(E1).replace(/^0./,".").replace(/0+$/,"");var s1=(X)=>`${r1(X)}rem`,i0=(X)=>`${r1(X)}%`,a0=(X)=>`${r1(X)}px`;var N=((X)=>{return X[X.IDLE=0]="IDLE",X[X.ACTIVE=1]="ACTIVE",X[X.DONE=2]="DONE",X[X.UNSUBSCRIBED=3]="UNSUBSCRIBED",X[X.ERROR=4]="ERROR",X})(N||{}),I=((X)=>{return X[X.NEVER=0]="NEVER",X[X.FIRST=1]="FIRST",X[X.LAST=2]="LAST",X})(I||{});var MX=0,FX=()=>MX++,u=(X,Z)=>!Z||!Z.id?{...Z,id:X+"-"+FX()}:Z;var O=M1;class S{constructor(X,Z){this.wrapped=X,Z=u("sub",{closeIn:I.LAST,closeOut:I.LAST,cache:!0,...Z}),this.parent=Z.parent,this.id=Z.id,this.closeIn=Z.closeIn,this.closeOut=Z.closeOut,this.cacheLast=Z.cache,Z.xform&&(this.xform=Z.xform(D1()))}id;closeIn;closeOut;parent;__owner;xform;cacheLast;last=L;state=N.IDLE;subs=[];deref(){return this.last!==L?this.last:void 0}getState(){return this.state}setState(X){this.state=X}subscribe(X,Z={}){this.ensureState();let J;if(X instanceof S&&!Z.xform)X.ensureState(),h(!X.parent,`sub '${X.id}' already has a parent`),X.parent=this,J=X;else J=new S(X,{...Z,parent:this});return this.subs.push(J),this.setState(N.ACTIVE),J.setState(N.ACTIVE),this.last!=L&&J.next(this.last),J}transform(...X){let Z,J;if(k(V1(X)))J=X.pop(),Z={error:J.error};return this.subscribe(Z,u("xform",X.length>0?{...J,xform:v(...X)}:J))}map(X,Z){return this.transform(P(X),Z||{})}unsubscribe(X){return X?this.unsubscribeChild(X):this.unsubscribeSelf()}unsubscribeSelf(){return O.debug(this.id,"unsub self"),this.parent&&this.parent.unsubscribe(this),this.state<N.UNSUBSCRIBED&&(this.state=N.UNSUBSCRIBED),this.release(),!0}unsubscribeChild(X){O.debug(this.id,"unsub child",X.id);const Z=this.subs.indexOf(X);if(Z>=0){if(this.subs.splice(Z,1),this.closeOut===I.FIRST||!this.subs.length&&this.closeOut!==I.NEVER)this.unsubscribe();return!0}return!1}next(X){if(this.state>=N.DONE)return;this.xform?this.dispatchXform(X):this.dispatch(X)}done(){if(O.debug(this.id,"entering done()"),this.state>=N.DONE)return;if(this.xform){if(!this.dispatchXformDone())return}if(this.state=N.DONE,this.dispatchTo("done"))this.state<N.UNSUBSCRIBED&&this.unsubscribe();O.debug(this.id,"exiting done()")}error(X){const Z=this.wrapped,J=Z&&Z.error;return J&&O.debug(this.id,"attempting wrapped error handler"),J&&Z.error(X)||this.unhandledError(X)}unhandledError(X){return(O!==M1?O:console).warn(this.id,"unhandled error:",X),this.unsubscribe(),this.state=N.ERROR,!1}dispatchTo(X,Z){let J=this.wrapped;if(J)try{J[X]&&J[X](Z)}catch(W){if(!this.error(W))return!1}const V=X==="next"?this.subs:[...this.subs];for(let W=V.length;W-- >0;){J=V[W];try{J[X]&&J[X](Z)}catch(U){if(X==="error"||!J.error||!J.error(U))return this.unhandledError(U)}}return!0}dispatch(X){O.debug(this.id,"dispatch",X),this.cacheLast&&(this.last=X),this.dispatchTo("next",X)}dispatchXform(X){let Z;try{Z=this.xform[2]([],X)}catch(J){this.error(J);return}if(this.dispatchXformVals(Z))G(Z)&&this.done()}dispatchXformDone(){let X;try{X=this.xform[1]([])}catch(Z){return this.error(Z)}return this.dispatchXformVals(X)}dispatchXformVals(X){const Z=_(X);for(let J=0,V=Z.length;J<V&&this.state<N.DONE;J++)this.dispatch(Z[J]);return this.state<N.ERROR}ensureState(){if(this.state>=N.DONE)i(`operation not allowed in state ${this.state}`)}release(){this.subs.length=0,delete this.parent,delete this.xform,delete this.last}}var t0=(X,Z)=>{const J=new c0(Z);return J.next(X),J};class c0 extends S{src;_cancel;_inited;constructor(X,Z){const[J,V]=T(X)?[X,Z||{}]:[void 0,X||{}];super(V.error?{error:V.error}:void 0,u("stream",V));this.src=J,this._inited=!1}subscribe(X,Z={}){const J=super.subscribe(X,Z);if(!this._inited){if(this.src)try{this._cancel=this.src(this)||(()=>{return})}catch(V){let W=this.wrapped;if(!W||!W.error||!W.error(V))this.unhandledError(V)}this._inited=!0}return J}unsubscribe(X){const Z=super.unsubscribe(X);if(Z&&(!X||(!this.subs||!this.subs.length)&&this.closeOut!==I.NEVER))this.cancel();return Z}done(){this.cancel(),super.done(),delete this.src,delete this._cancel}error(X){if(super.error(X))return!0;return this.cancel(),!1}cancel(){if(this._cancel){O.debug(this.id,"cancel");const X=this._cancel;delete this._cancel,X()}}}var r0=(X,Z)=>X===I.FIRST||X===I.LAST&&!Z;var e1=function(X){return X?O1(e1(),X):c(()=>({}),(Z,[J,V])=>(Z[J]=V,Z))};var X0=function(X,Z){return D(Z)?m(X0(X),Z):P(T(X)?(J)=>[X(J),J]:(J)=>[X,J])};var Z0=function(...X){const Z=j1(Z0,X);if(Z)return Z;const J=X[0],V=X[1]!==!1;return P((W)=>{const U=V?{}:W;for(let B in W)U[B]=J(W[B]);return U})};var J0=function(...X){const Z=j1(J0,X,G1);if(Z)return Z;const{key:J,mergeOnly:V,reset:W,all:U,backPressure:B}={key:u0,mergeOnly:!1,reset:!0,all:!0,backPressure:0,...X[1]},Y=w(X[0])?new Set(X[0]):X[0],Q=new Set,z=new Map;let K={};const $=([q,j,g])=>{let x=!0;if(V||B<1)return[q,(F)=>{if(W&&U&&Q.size>0||!W&&x)F=g(F,K),K={},Q.clear(),x=!1;return j(F)},(F,X1)=>{const A=J(X1);if(Y.has(A)){if(K[A]=X1,Q.add(A),V||s0(Y,Q))if(F=g(F,K),x=!1,W)K={},Q.clear();else K={...K}}return F}];else return[q,(F)=>{if(U&&Q.size>0)F=g(F,e0(z,Q)),z.clear(),Q.clear();return j(F)},(F,X1)=>{const A=J(X1);if(Y.has(A)){let B1=z.get(A);!B1&&z.set(A,B1=[]),B1.length>=B&&i(`max back pressure (${B}) exceeded for input: ${String(A)}`),B1.push(X1),Q.add(A);while(s0(Y,Q))if(F=g(F,e0(z,Q)),x=!1,G(F))break}return F}]};return $.keys=()=>Y,$.clear=()=>{z.clear(),Y.clear(),Q.clear(),K={}},$.add=(q)=>{Y.add(q)},$.delete=(q,j=!0)=>{if(z.delete(q),Y.delete(q),j)Q.delete(q),delete K[q]},$},s0=(X,Z)=>{if(Z.size<X.size)return!1;for(let J of X)if(!Z.has(J))return!1;return!0},e0=(X,Z)=>{const J={};for(let V of Z){const W=X.get(V);J[V]=W.shift(),!W.length&&Z.delete(V)}return J};var X8=(X,Z)=>{let J=!0;for(let V of Z)J=X.removeID(V)&&J;return J};var Z8=(X)=>new J8(X);class J8 extends S{sources;idSources;realSourceIDs;invRealSourceIDs;psync;clean;constructor(X){const Z=J0(new Set,{key:(V)=>V[0],mergeOnly:X.mergeOnly===!0,reset:X.reset===!0,all:X.all!==!1,backPressure:X.backPressure||0}),J=Z0((V)=>V[1]);super(void 0,u("streamsync",{...X,xform:X.xform?v(Z,J,X.xform):v(Z,J)}));this.sources=new Map,this.realSourceIDs=new Map,this.invRealSourceIDs=new Map,this.idSources=new Map,this.psync=Z,this.clean=!!X.clean,X.src&&this.addAll(X.src)}add(X,Z){Z||(Z=X.id),this.ensureState(),this.psync.add(Z),this.realSourceIDs.set(Z,X.id),this.invRealSourceIDs.set(X.id,Z),this.idSources.set(X.id,X),this.sources.set(X,X.subscribe({next:(J)=>J[1]instanceof S?this.add(J[1]):this.next(J),done:()=>this.markDone(X),__owner:this},{xform:X0(Z),id:`in-${Z}`}))}addAll(X){for(let Z in X)this.psync.add(Z);for(let Z in X)this.add(X[Z],Z)}remove(X){const Z=this.sources.get(X);if(Z){const J=this.invRealSourceIDs.get(X.id);return O.info(`removing src: ${X.id} (${J})`),this.psync.delete(J,this.clean),this.realSourceIDs.delete(J),this.invRealSourceIDs.delete(X.id),this.idSources.delete(X.id),this.sources.delete(X),Z.unsubscribe(),!0}return!1}removeID(X){const Z=this.getSourceForID(X);return Z?this.remove(Z):!1}removeAll(X){for(let J of X)this.psync.delete(this.invRealSourceIDs.get(J.id));let Z=!0;for(let J of X)Z=this.remove(J)&&Z;return Z}removeAllIDs(X){return X8(this,X)}getSourceForID(X){return this.idSources.get(this.realSourceIDs.get(X))}getSources(){const X={};for(let[Z,J]of this.idSources)X[this.invRealSourceIDs.get(Z)]=J;return X}unsubscribe(X){if(!X){O.debug(this.id,"unsub sources");for(let Z of this.sources.values())Z.unsubscribe();this.sources.clear(),this.psync.clear(),this.realSourceIDs.clear(),this.invRealSourceIDs.clear(),this.idSources.clear()}return super.unsubscribe(X)}markDone(X){this.remove(X),r0(this.closeIn,this.sources.size)&&this.done()}}var V0=n((X,Z=" ")=>{const J=l(String(Z),X);return(V,W)=>{if(V==null)return J;return V=V.toString(),W=W!==void 0?W:V.length,W<X?J.substring(W)+V:V}}),D2=V0(2,"0"),V8=V0(3,"0"),G2=V0(4,"0");var W0=function(X,Z){return D(Z)?m(W0(X),Z):(J)=>{const V=J[2];return t(J,(W,U)=>X(U)?V(W,U):W)}};import{watch as PX} from"fs";import{resolve as Y1} from"path";var W8={specs:z1({alias:"s",optional:!1,desc:"Path to generated JSON defs"})},A1={include:p({alias:"I",desc:"Include CSS files (prepend)"})},s={pretty:d({alias:"p",desc:"Pretty print output"})},b1={noHeader:d({desc:"Don't emit generated header comment"})},U8={watch:d({alias:"w",desc:"Watch input files for changes"})};import{resolve as wX} from"path";var e=(X,Z,J)=>{Z=M(Z)?Z:Z.join("\n"),X?l1(wX(X),Z,J):console.log(Z)},v1=({info:{name:X,version:Z}})=>`/*! ${X} v${Z} - generated by thi.ng/meta-css @ ${(new Date()).toISOString()} */`;var B8={desc:"Transpile & bundle meta stylesheets to CSS",opts:{...W8,...A1,...s,...b1,...U8,force:p({alias:"f",desc:"CSS classes to force include (wildcards are supported, @-prefix will read from file)",delim:","})},fn:async(X)=>{const Z=b(Y1(X.opts.specs),X.logger),J=GX(Z,X.opts.force||[],X.logger);if(X.opts.watch)await NX(X,Z,J);else Q8(X,Z,J,X.inputs.map((V)=>E(Y1(V),X.logger)))}},NX=async(X,Z,J)=>{let V=!0;const W=()=>{X.logger.info("closing watchers..."),U.forEach((B)=>B.watcher.close()),V=!1},U=X.inputs.map((B,Y)=>{B=Y1(B);const Q=t0(E(B,X.logger),{id:`in${V8(Y)}`});return{input:Q,watcher:PX(B,{},(z)=>{if(z==="change")try{Q.next(E(B,X.logger))}catch(K){X.logger.warn(K.message),W()}else X.logger.warn("input removed:",B),W()})}});Z8({src:e1(P(({input:B})=>[B.id,B],U))}).subscribe({next(B){try{Q8(X,Z,J,Object.keys(B).sort().map((Y)=>B[Y]))}catch(Y){X.logger.warn(Y.message)}}}),process.on("SIGINT",W);while(V)await m0(null,250)},Q8=({logger:X,opts:{include:Z,noHeader:J,out:V,pretty:W}},U,B,Y)=>{const Q={logger:X,specs:U,format:W?w1:a,mediaQueryIDs:new Set(Object.keys(U.media)),mediaQueryRules:{...B.mediaQueryRules},plainRules:{...B.plainRules}},z=Z?Z.map((K)=>E(Y1(K),X).trim()):[];if(!J)z.push(v1(U));Y.forEach((K)=>jX(K,Q)),DX(z,Q),OX(z,Q),e(V,z,X)},OX=(X,{logger:Z,specs:J,format:V,mediaQueryRules:W})=>{for(let U in W){const B=z8(W[U],J);Z.debug("mediaquery rules",U,B),X.push(W1(R1(IX(J.media,U),B),{format:V}))}},DX=(X,{logger:Z,specs:J,format:V,plainRules:W})=>{const U=z8(W,J);Z.debug("plain rules",U),X.push(W1(U,{format:V}))},GX=(X,Z,J)=>{const V=new Set(Object.keys(X.media)),W=new Set(Object.keys(X.defs)),U={},B={};if(Z.length&&Z[0][0]==="@")Z=[...y(E(Y1(Z[0].substring(1)),J))];for(let Y of Z){if(!Y||Y.startsWith("//"))continue;const{token:Q,query:z}=q8(Y,V);let K;if(Q.includes("*")){const $=new RegExp(`^${Q.replace("*",".*")}\$`);K=[...W0((q)=>$.test(q),W)]}else if(W.has(Q))K=[Q];else{J.warn(`unknown include rule ID: ${Y}, skipping...`);continue}for(let $ of K)J.debug("including class:",$),z?$8(U,z,`.${$}`,$):C8(B,`.${$}`,$)}return{mediaQueryRules:U,plainRules:B}},jX=(X,{specs:Z,mediaQueryIDs:J,mediaQueryRules:V,plainRules:W})=>{const U=U1(),B=U1(U),Y={root:U,curr:B,scopes:[B]};for(let Q of y(X)){if(!Q||/^\s*\/\//.test(Q))continue;for(let z of y(Q,/\s+/g)){if(!z)continue;let K=Y.curr;switch(K.state){case"sel":case"nest":if(z==="{"){if(K.state==="sel")K.sel=K.sel.map(($)=>$.replace(",","")),K.path=kX(Y.scopes);K.state="class"}else if(z==="}")Y8(Y);else{const $=V1(K.sel);if(!$||$.endsWith(","))K.sel.push(z);else K.sel[K.sel.length-1]+=" "+z}break;case"class":if(z==="{")K.state="nest",Y.scopes.push(Y.curr=U1(K));else if(z==="}")Y8(Y);else{let{token:$,query:q}=q8(z,J);if(!Z.defs[$])C(`unknown rule ID: ${$}`);if(q)$8(V,q,K.path,$);else C8(W,K.path,$)}break;default:i(K.state)}}}},U0=":",K8="///",U1=(X)=>({state:"sel",sel:X?[]:["<root>"],path:"",parent:X}),Y8=(X)=>{const Z=!X.curr.sel.length;if(h(!!X.curr.parent,"stack underflow"),X.scopes.pop(),X.scopes.length>0){if(X.curr=V1(X.scopes),!Z&&X.curr.state==="nest")X.scopes.push(X.curr=U1(X.curr))}else X.scopes.push(X.curr=U1(X.root))},kX=(X)=>X.map((Z)=>Z.sel.join(",")).join(K8),z8=(X,Z)=>Object.entries(X).map(([J,V])=>TX(J,V,Z)),TX=(X,Z,J)=>{const V=[];let W=V;const U=X.split(K8);for(let B=0;B<U.length;B++){const Y=U[B].split(",");if(B==U.length-1)Y.push(Object.assign({},...P((Q)=>J.defs[Q],Z)));W.push(Y),W=Y}return V[0]},q8=(X,Z)=>{if(/^::?/.test(X))return{token:X};const J=X.lastIndexOf(U0);if(J<0)return{token:X};const V=X.substring(0,J);if(!V.split(U0).every((U)=>Z.has(U)))C(`invalid media query in token: ${X}`);return{token:X.substring(J+1),query:V}},IX=(X,Z)=>Z.split(U0).reduce((J,V)=>Object.assign(J,X[V]),{}),$8=(X,Z,J,V)=>{if(!X[Z])X[Z]={};(X[Z][J]||(X[Z][J]=new Set)).add(V)},C8=(X,Z,J)=>(X[Z]||(X[Z]=new Set)).add(J);import{resolve as H8} from"path";var F8={desc:"Export entire generated framework as CSS",opts:{...A1,...s,...b1,media:p({alias:"m",desc:"Media query IDs (use 'ALL' for all)",delim:","})},inputs:1,fn:async(X)=>{const{logger:Z,opts:{include:J,media:V,noHeader:W,pretty:U,out:B},inputs:Y}=X,Q=b(H8(Y[0]),Z),z=J?J.map((K)=>E(H8(K),Z).trim()):[];if(!W)z.push(v1(Q));z.push(RX(Q,V,U,Z)),e(B,z,Z)}},RX=(X,Z,J,V)=>{const W=M8("",X);if(Z){const U=Z[0]==="ALL"?Object.keys(X.media):Z;for(let B of U)if(X.media[B])W.push(R1(X.media[B],M8("-"+B,X)));else V.warn(`invalid media query ID: ${B}, skipping...`)}return W1(W,{format:J?w1:a})},M8=(X,Z)=>Object.entries(Z.defs).map(([J,V])=>[`.${J}${X}`,V]);import{statSync as EX} from"fs";import{resolve as AX} from"path";var w8={px:a0,rem:s1,"%":i0,norm:(X)=>parseFloat((X*0.01).toFixed(E1))},P8={"":[""],a:[""],h:["-left","-right"],v:["-top","-bottom"],t:["-top"],top:["top"],b:["-bottom"],bottom:["bottom"],r:["-right"],right:["right"],l:["-left"],left:["left"],x:["-x"],y:["-y"]},bX={all:["a","h","v","t","r","b","l"],trbl:["t","r","b","l"],TRBL:["top","right","bottom","left"],atrbl:["a","t","r","b","l"],h:["l","r"],v:["t","b"],xy:["x","y"],axy:["a","x","y"]},N8={desc:"Generate framework rules from specs",opts:{...s,prec:C0({default:3,desc:"Number of fractional digits"})},inputs:1,fn:async(X)=>{const{logger:Z,opts:{prec:J,out:V,pretty:W},inputs:U}=X,B=AX(U[0]);if(!EX(B).isDirectory())C(`${B} is not a directory`);const Y={info:{name:"TODO",version:"0.0.0"},media:{},defs:{}};for(let Q of _0(B,".json")){const z=b(Q,Z);Object.assign(Y.info,z.info),Object.assign(Y.media,z.media),vX(z,Y.defs,J)}e(V,JSON.stringify(Y,null,W?4:0),Z)}},vX=(X,Z={},J=3)=>{o0(J);for(let V of X.specs){const W=hX(V.var);if(V.def)for(let U of W)_X(Z,X,V,U);else{const U=M(V.prop)?[V.prop]:V.prop;for(let B of W){const Y=[...k1(U,P8[B])].map((Q)=>Q.join(""));LX(Z,X,{...V,prefix:V.prefix+B,prop:Y},B)}}}return Z},LX=(X,Z,J,V)=>{const W=J.prefix.replace("*",V),U=yX(J.prop,V),B=G8(Z,J);j8(Z,J.items).forEach((Q,z)=>{const K=O8(W,J.index,Q,z);h(!X[K],`duplicate rule ID: ${K}`);const $=D8(Q,B);X[K]=U.reduce((q,j)=>(q[j]=$,q),{})})},_X=(X,Z,J,V)=>{const W=J.prefix.replace("*",V),U=G8(Z,J),B=j8(Z,J.items),Y=P8[V];B.forEach((Q,z)=>{const K=O8(W,J.index,Q,z);h(!X[K],`duplicate rule ID: ${K}`);const $=D8(Q,U),q=Object.entries(J.def).reduce((j,[g,x])=>(j[g.replace("*",Y)]=x.replace("*",$),j),{});X[K]=q})},O8=(X,Z,J,V)=>X+SX(Z,J,V),SX=(X,Z,J)=>{if(X===void 0)return"";switch(X){case"i":return J;case"i1":return J+1;case"v":return Z;default:C(`invalid index type: ${X}`)}},D8=(X,Z)=>Z?Z(X):X,G8=(X,{unit:Z,items:J})=>{if(Z===void 0)return s1;if(Z===null)return k(J)?(V)=>J[V]:(V)=>V;if(w8[Z])return w8[Z];return X.tables?.[Z]?(V)=>X.tables[Z][V]:C(`invalid unit: ${Z}`)},j8=(X,Z)=>{let J=Z;if(M(J))J=X.tables?.[J]||C(`invalid index: ${J}`);if(k(J))return Object.keys(J);return w(J)?J:C(Z)},yX=(X,Z)=>(M(X)?[X]:X).map((J)=>J.replace("*",Z)),hX=(X)=>{if(!X)return[""];if(M(X))return bX[X]||C(`invalid variation: ${X}`);return X};var Y0=b(fX(import.meta.dir,"package.json"));b0({name:"metacss",opts:{out:z1({alias:"o",desc:"Output file (or stdout)"}),verbose:d({alias:"v",desc:"Display extra process information"})},commands:{convert:B8,export:F8,generate:N8},ctx:async(X)=>{if(X.opts.verbose)X.logger.level=H.DEBUG;return{...X,format:C1}},usage:{prefix:`
|
|
6
6
|
\u2588 \u2588 \u2588 \u2502
|
|
7
7
|
\u2588\u2588 \u2588 \u2502
|
|
8
8
|
\u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2588 \u2502 ${Y0.name} ${Y0.version}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thi.ng/meta-css",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Data-driven CSS
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "Data-driven CSS framework codegen, transpiler & bundler",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "./index.js",
|
|
7
7
|
"typings": "./index.d.ts",
|
|
@@ -38,25 +38,24 @@
|
|
|
38
38
|
"test": "bun test"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@thi.ng/api": "^8.9.
|
|
42
|
-
"@thi.ng/args": "^2.3.
|
|
43
|
-
"@thi.ng/arrays": "^2.7.
|
|
44
|
-
"@thi.ng/checks": "^3.4.
|
|
45
|
-
"@thi.ng/compose": "^2.1.
|
|
46
|
-
"@thi.ng/errors": "^2.4.
|
|
47
|
-
"@thi.ng/file-io": "^1.1.
|
|
48
|
-
"@thi.ng/hiccup-css": "^2.3.
|
|
49
|
-
"@thi.ng/logger": "^2.1.
|
|
50
|
-
"@thi.ng/rstream": "^8.2.
|
|
51
|
-
"@thi.ng/strings": "^3.7.
|
|
52
|
-
"@thi.ng/text-format": "^2.0.
|
|
53
|
-
"@thi.ng/transducers": "^8.8.
|
|
41
|
+
"@thi.ng/api": "^8.9.14",
|
|
42
|
+
"@thi.ng/args": "^2.3.1",
|
|
43
|
+
"@thi.ng/arrays": "^2.7.10",
|
|
44
|
+
"@thi.ng/checks": "^3.4.14",
|
|
45
|
+
"@thi.ng/compose": "^2.1.53",
|
|
46
|
+
"@thi.ng/errors": "^2.4.8",
|
|
47
|
+
"@thi.ng/file-io": "^1.1.1",
|
|
48
|
+
"@thi.ng/hiccup-css": "^2.3.1",
|
|
49
|
+
"@thi.ng/logger": "^2.1.1",
|
|
50
|
+
"@thi.ng/rstream": "^8.2.16",
|
|
51
|
+
"@thi.ng/strings": "^3.7.5",
|
|
52
|
+
"@thi.ng/text-format": "^2.0.1",
|
|
53
|
+
"@thi.ng/transducers": "^8.8.17"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@microsoft/api-extractor": "^7.38.3",
|
|
57
57
|
"esbuild": "^0.19.8",
|
|
58
58
|
"rimraf": "^5.0.5",
|
|
59
|
-
"tools": "^0.0.1",
|
|
60
59
|
"typedoc": "^0.25.4",
|
|
61
60
|
"typescript": "^5.3.2"
|
|
62
61
|
},
|
|
@@ -103,5 +102,5 @@
|
|
|
103
102
|
"status": "alpha",
|
|
104
103
|
"year": 2023
|
|
105
104
|
},
|
|
106
|
-
"gitHead": "
|
|
105
|
+
"gitHead": "0d9265be7be13eccf0ef75eaedbfd42626339279\n"
|
|
107
106
|
}
|