@master/create-css 2.0.0-rc.15 → 2.0.0-rc.16

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.
@@ -0,0 +1,232 @@
1
+ #!/usr/bin/env node
2
+ import { resolve } from 'node:path';
3
+ import { Command } from 'commander';
4
+ import { readJSONFileSync } from '@techor/fs';
5
+ import log from '@techor/log';
6
+ import { detect } from 'detect-package-manager';
7
+ import { existsSync } from 'fs';
8
+ import { downloadTemplate } from 'giget';
9
+ import { execSync } from 'node:child_process';
10
+ import { writeFileSync, existsSync as existsSync$1 } from 'node:fs';
11
+ import ora from 'ora';
12
+ import { dirname } from 'path';
13
+ import { fileURLToPath } from 'url';
14
+
15
+ var detectAppExt = (()=>{
16
+ // automatically detect the format
17
+ if (existsSync('tsconfig.json')) {
18
+ log.i`Detected **tsconfig.json**`;
19
+ return 'ts';
20
+ } else {
21
+ const { type } = readJSONFileSync('./package.json') || {};
22
+ if (type === 'module') {
23
+ log.i`package.json has **type="module"** set`;
24
+ return 'mjs';
25
+ } else {
26
+ return 'js';
27
+ }
28
+ }
29
+ });
30
+
31
+ var detectAppTech = (()=>{
32
+ if (existsSync('next.config.js') || existsSync('next.config.cjs') || existsSync('next.config.mjs') || existsSync('next.config.ts')) {
33
+ return 'nextjs';
34
+ }
35
+ if (existsSync('nuxt.config.js') || existsSync('nuxt.config.cjs') || existsSync('nuxt.config.mjs') || existsSync('nuxt.config.ts')) {
36
+ return 'nuxtjs';
37
+ }
38
+ if (existsSync('remix.config.js') || existsSync('remix.config.cjs') || existsSync('remix.config.mjs') || existsSync('remix.config.ts')) {
39
+ return 'remix';
40
+ }
41
+ if (existsSync('svelte.config.js') || existsSync('svelte.config.cjs') || existsSync('svelte.config.mjs') || existsSync('svelte.config.ts')) {
42
+ return 'svelte';
43
+ }
44
+ if (existsSync('astro.config.js') || existsSync('astro.config.cjs') || existsSync('astro.config.mjs') || existsSync('astro.config.ts')) {
45
+ return 'astro';
46
+ }
47
+ if (existsSync('composer.json')) {
48
+ return 'laravel';
49
+ }
50
+ if (existsSync('angular.json')) {
51
+ return 'angular';
52
+ }
53
+ const pkg = readJSONFileSync('package.json');
54
+ if (pkg?.dependencies?.['@remix-run/react'] || pkg?.devDependencies?.['@remix-run/react']) {
55
+ return 'remix';
56
+ }
57
+ if (pkg?.dependencies?.['@sveltejs/kit'] || pkg?.devDependencies?.['@sveltejs/kit']) {
58
+ return 'svelte';
59
+ }
60
+ if (pkg?.dependencies?.['astro'] || pkg?.devDependencies?.['astro']) {
61
+ return 'astro';
62
+ }
63
+ if (pkg?.dependencies?.['next'] || pkg?.devDependencies?.['next']) {
64
+ return 'nextjs';
65
+ }
66
+ if (pkg?.dependencies?.['nuxt'] || pkg?.devDependencies?.['nuxt']) {
67
+ return 'nuxtjs';
68
+ }
69
+ if (pkg?.dependencies?.['@angular/core'] || pkg?.devDependencies?.['@angular/core']) {
70
+ return 'angular';
71
+ }
72
+ if (pkg?.dependencies?.['react'] || pkg?.devDependencies?.['react']) {
73
+ return 'react';
74
+ }
75
+ if (pkg?.dependencies?.['vue'] || pkg?.devDependencies?.['vue']) {
76
+ return 'vuejs';
77
+ }
78
+ if (existsSync('vite.config.js') || existsSync('vite.config.cjs') || existsSync('vite.config.mjs') || existsSync('vite.config.ts')) {
79
+ return 'vite';
80
+ }
81
+ if (existsSync('webpack.config.js') || existsSync('webpack.config.cjs') || existsSync('webpack.config.mjs') || existsSync('webpack.config.ts')) {
82
+ return 'webpack';
83
+ }
84
+ });
85
+
86
+ var CONFIG_ESM_TEXT = `/** @type {import('@master/css').Config} */
87
+ export default {
88
+ styles: {},
89
+ rules: {},
90
+ variables: {},
91
+ semantics: {},
92
+ mediaQueries: {},
93
+ animations: {},
94
+ selectors: {},
95
+ functions: {}
96
+ }`;
97
+
98
+ var CONFIG_TS_TEXT = `import type { Config } from '@master/css'
99
+
100
+ export default {
101
+ styles: {},
102
+ rules: {},
103
+ variables: {},
104
+ semantics: {},
105
+ mediaQueries: {},
106
+ animations: {},
107
+ selectors: {},
108
+ functions: {}
109
+ } as Config`;
110
+
111
+ var CONFIG_TEXT = `/** @type {import('@master/css').Config} */
112
+ module.exports = {
113
+ styles: {},
114
+ rules: {},
115
+ variables: {},
116
+ semantics: {},
117
+ mediaQueries: {},
118
+ animations: {},
119
+ selectors: {},
120
+ functions: {}
121
+ }`;
122
+
123
+ const __filename = fileURLToPath(import.meta.url);
124
+ const __dirname = dirname(__filename);
125
+ const pkg = readJSONFileSync(resolve(__dirname, '../../package.json'));
126
+ const program = new Command();
127
+ program.name(pkg.name).description(pkg.description).version(pkg.version || 'workspace:^').argument('[project name]', 'The project name is used to create the folder').option('-o, --override', 'Override existing definition file').option('--ext <ext>', 'Specify the extension mjs, ts, js').option('--pm <package manager>', 'Specify the package manager npm, yarn, pnpm, bun').option('--example <folder name>', 'Specify the example folder name', 'blank').action(async function(appName, options) {
128
+ if (!options.pm) {
129
+ // Detect the package manager
130
+ options.pm = await detect({
131
+ cwd: process.cwd()
132
+ });
133
+ }
134
+ const appPkg = readJSONFileSync('package.json');
135
+ // Create a new app with the example
136
+ if (appName) {
137
+ log.i(`Detected **${options.pm}**`);
138
+ const spinner = ora(`Initializing Master CSS`).start();
139
+ const examplePath = `github:master-co/css/examples/${options.example}#rc`;
140
+ spinner.start(`Cloning example from "${examplePath}"`);
141
+ try {
142
+ await downloadTemplate(examplePath, {
143
+ dir: appName
144
+ });
145
+ } catch (error) {
146
+ spinner.fail(error.message);
147
+ return;
148
+ }
149
+ process.chdir(appName);
150
+ if (!appPkg) {
151
+ spinner.fail(`Cannot found "${examplePath}"`);
152
+ log.i`View all available examples at **https://github.com/master-co/css/tree/rc/examples**`;
153
+ return;
154
+ }
155
+ appPkg.name = appName;
156
+ const targetPackages = [];
157
+ for(const key in appPkg.dependencies){
158
+ if (pkg.version && appPkg.dependencies[key] === 'workspace:^') {
159
+ appPkg.dependencies[key] = `^${pkg.version}`;
160
+ }
161
+ targetPackages.push(key);
162
+ }
163
+ for(const key in appPkg.devDependencies){
164
+ if (pkg.version && appPkg.devDependencies[key] === 'workspace:^') {
165
+ appPkg.devDependencies[key] = `^${pkg.version}`;
166
+ }
167
+ targetPackages.push(key);
168
+ }
169
+ writeFileSync('package.json', JSON.stringify(appPkg, null, 4), {
170
+ flag: 'w'
171
+ });
172
+ spinner.stop();
173
+ log.ok`Cloned example from "${examplePath}"`;
174
+ log.i`Start "${options.pm} install" for dependencies: ${targetPackages}`;
175
+ log``;
176
+ try {
177
+ execSync(`${options.pm} install`, {
178
+ stdio: 'inherit'
179
+ });
180
+ log``;
181
+ log.ok`Created **${appName}**`;
182
+ log.i`Commands in this app:`;
183
+ console.table(appPkg.scripts);
184
+ log.i`Start by running "cd ${appName} && ${options.pm} run ${appPkg.scripts?.dev ? 'dev' : 'start'}"`;
185
+ } catch (error) {
186
+ spinner.fail();
187
+ throw error;
188
+ }
189
+ } else {
190
+ options.ext = options.ext || detectAppExt();
191
+ const create = (fileName, text)=>{
192
+ const configExists = existsSync$1(fileName);
193
+ if (!configExists) {
194
+ writeFileSync(fileName, text);
195
+ log.ok`Created **${fileName}**`;
196
+ } else if (configExists && options.override) {
197
+ writeFileSync(fileName, text);
198
+ log.ok`**${fileName}** is overridden`;
199
+ } else {
200
+ log.x`**${fileName}** already exists`;
201
+ }
202
+ };
203
+ // create master.css.* file
204
+ switch(options.ext){
205
+ case 'js':
206
+ create('master.css.js', CONFIG_TEXT);
207
+ break;
208
+ case 'mjs':
209
+ create('master.css.mjs', CONFIG_ESM_TEXT);
210
+ break;
211
+ case 'ts':
212
+ create('master.css.ts', CONFIG_TS_TEXT);
213
+ break;
214
+ }
215
+ if (!appPkg?.dependencies?.['@master/css']) {
216
+ log.i(`Detected **${options.pm}**`);
217
+ log.i`Start "${options.pm} add @master/css@rc"`;
218
+ log``;
219
+ execSync(`${options.pm} add @master/css@rc`, {
220
+ stdio: 'inherit'
221
+ });
222
+ log``;
223
+ }
224
+ const tech = detectAppTech();
225
+ if (tech) {
226
+ log.i(`Detected **${tech}** (https://rc.css.master.co/docs/installation/${tech})`);
227
+ } else {
228
+ log.i(`To integrate with your framework, check out the guides at **https://rc.css.master.co/docs/installation**`);
229
+ }
230
+ }
231
+ });
232
+ program.parse(process.argv);
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@master/create-css","scripts":{"build":"techor pack --platform node","dev":"pnpm run build --watch","lint":"eslint ./src","type-check":"tsc --noEmit","test":"jest"},"license":"MIT","description":"Initialize a new Master CSS project","author":"Aoyue Design LLC.","funding":"https://css.master.co/docs/donate","homepage":"https://css.master.co","bugs":{"url":"https://github.com/master-co/css/issues"},"repository":{"type":"git","url":"https://github.com/master-co/css.git","directory":"packages/create"},"keywords":["cli","create","init","css","mastercss"],"bin":"./dist/bin/index.bundle.js","files":["dist"],"publishConfig":{"access":"public"},"dependencies":{"@master/css":"2.0.0-rc.13","@techor/fs":"^2.6.5","@techor/log":"^2.6.5","commander":"^12.0.0","detect-package-manager":"^3.0.1","giget":"^1.2.1","ora":"^8.0.1"},"devDependencies":{"css-shared":"^2.0.0-rc.15"},"version":"2.0.0-rc.15"}
1
+ {"name":"@master/create-css","type":"module","scripts":{"build":"techor build","dev":"pnpm build --watch","lint":"eslint ./src","type-check":"tsc --noEmit","test":"jest"},"license":"MIT","description":"Initialize a new Master CSS project","author":"Aoyue Design LLC.","funding":"https://css.master.co/docs/donate","homepage":"https://css.master.co","bugs":{"url":"https://github.com/master-co/css/issues"},"repository":{"type":"git","url":"https://github.com/master-co/css.git","directory":"packages/create"},"keywords":["cli","create","init","css","mastercss"],"bin":"./dist/bin/index.mjs","files":["dist"],"publishConfig":{"access":"public"},"dependencies":{"@master/css":"2.0.0-rc.13","@techor/fs":"^3.0.11","@techor/log":"^3.0.11","commander":"^12.0.0","detect-package-manager":"^3.0.1","giget":"^1.2.1","ora":"^8.0.1"},"devDependencies":{"css-shared":"^2.0.0-rc.16"},"version":"2.0.0-rc.16"}
@@ -1,33 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";var Q=Object.create;var j=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,V=Object.prototype.hasOwnProperty;var f=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var q=(e,t,n,c)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of A(t))!V.call(e,i)&&i!==n&&j(e,i,{get:()=>t[i],enumerable:!(c=X(t,i))||c.enumerable});return e};var p=(e,t,n)=>(n=e!=null?Q(z(e)):{},q(t||!e||!e.__esModule?j(n,"default",{value:e,enumerable:!0}):n,e));var $=f((L,S)=>{"use strict";S.exports=`/** @type {import('@master/css').Config} */
3
- export default {
4
- styles: {},
5
- rules: {},
6
- variables: {},
7
- semantics: {},
8
- mediaQueries: {},
9
- animations: {},
10
- selectors: {},
11
- functions: {}
12
- }`});var C=f((R,b)=>{"use strict";b.exports=`import type { Config } from '@master/css'
13
-
14
- export default {
15
- styles: {},
16
- rules: {},
17
- variables: {},
18
- semantics: {},
19
- mediaQueries: {},
20
- animations: {},
21
- selectors: {},
22
- functions: {}
23
- } as Config`});var T=f((U,D)=>{"use strict";D.exports=`/** @type {import('@master/css').Config} */
24
- module.exports = {
25
- styles: {},
26
- rules: {},
27
- variables: {},
28
- semantics: {},
29
- mediaQueries: {},
30
- animations: {},
31
- selectors: {},
32
- functions: {}
33
- }`});var O=require("node:path"),F=require("commander"),u=require("@techor/fs"),r=p(require("@techor/log")),_=require("detect-package-manager");var v=require("@techor/fs"),k=require("fs"),l=p(require("@techor/log")),y=()=>{if((0,k.existsSync)("tsconfig.json"))return l.default.i`Detected **tsconfig.json**`,"ts";{let{type:e}=(0,v.readJSONFileSync)("./package.json")||{};return e==="module"?(l.default.i`package.json has **type="module"** set`,"mjs"):"js"}};var h=require("@techor/fs"),s=require("fs"),w=()=>{if((0,s.existsSync)("next.config.js")||(0,s.existsSync)("next.config.cjs")||(0,s.existsSync)("next.config.mjs")||(0,s.existsSync)("next.config.ts"))return"nextjs";if((0,s.existsSync)("nuxt.config.js")||(0,s.existsSync)("nuxt.config.cjs")||(0,s.existsSync)("nuxt.config.mjs")||(0,s.existsSync)("nuxt.config.ts"))return"nuxtjs";if((0,s.existsSync)("remix.config.js")||(0,s.existsSync)("remix.config.cjs")||(0,s.existsSync)("remix.config.mjs")||(0,s.existsSync)("remix.config.ts"))return"remix";if((0,s.existsSync)("svelte.config.js")||(0,s.existsSync)("svelte.config.cjs")||(0,s.existsSync)("svelte.config.mjs")||(0,s.existsSync)("svelte.config.ts"))return"svelte";if((0,s.existsSync)("astro.config.js")||(0,s.existsSync)("astro.config.cjs")||(0,s.existsSync)("astro.config.mjs")||(0,s.existsSync)("astro.config.ts"))return"astro";if((0,s.existsSync)("composer.json"))return"laravel";if((0,s.existsSync)("angular.json"))return"angular";let e=(0,h.readJSONFileSync)("package.json");if(e?.dependencies?.["@remix-run/react"]||e?.devDependencies?.["@remix-run/react"])return"remix";if(e?.dependencies?.["@sveltejs/kit"]||e?.devDependencies?.["@sveltejs/kit"])return"svelte";if(e?.dependencies?.astro||e?.devDependencies?.astro)return"astro";if(e?.dependencies?.next||e?.devDependencies?.next)return"nextjs";if(e?.dependencies?.nuxt||e?.devDependencies?.nuxt)return"nuxtjs";if(e?.dependencies?.["@angular/core"]||e?.devDependencies?.["@angular/core"])return"angular";if(e?.dependencies?.react||e?.devDependencies?.react)return"react";if(e?.dependencies?.vue||e?.devDependencies?.vue)return"vuejs";if((0,s.existsSync)("vite.config.js")||(0,s.existsSync)("vite.config.cjs")||(0,s.existsSync)("vite.config.mjs")||(0,s.existsSync)("vite.config.ts"))return"vite";if((0,s.existsSync)("webpack.config.js")||(0,s.existsSync)("webpack.config.cjs")||(0,s.existsSync)("webpack.config.mjs")||(0,s.existsSync)("webpack.config.ts"))return"webpack"};var E=require("giget"),g=require("node:child_process"),d=require("node:fs"),I=p(require("ora")),J=p($()),P=p(C()),G=p(T()),m=(0,u.readJSONFileSync)((0,O.resolve)(__dirname,"../../package.json")),M=new F.Command;M.name(m.name).description(m.description).version(m.version||"workspace:^").argument("[project name]","The project name is used to create the folder").option("-o, --override","Override existing definition file").option("--ext <ext>","Specify the extension mjs, ts, js").option("--pm <package manager>","Specify the package manager npm, yarn, pnpm, bun").option("--example <folder name>","Specify the example folder name","blank").action(async function(e,t){t.pm||(t.pm=await(0,_.detect)({cwd:process.cwd()}));let n=(0,u.readJSONFileSync)("package.json");if(e){r.default.i(`Detected **${t.pm}**`);let c=(0,I.default)("Initializing Master CSS").start(),i=`github:master-co/css/examples/${t.example}#rc`;c.start(`Cloning example from "${i}"`);try{await(0,E.downloadTemplate)(i,{dir:e})}catch(o){c.fail(o.message);return}if(process.chdir(e),!n){c.fail(`Cannot found "${i}"`),r.default.i`View all available examples at **https://github.com/master-co/css/tree/rc/examples**`;return}n.name=e;let a=[];for(let o in n.dependencies)m.version&&n.dependencies[o]==="workspace:^"&&(n.dependencies[o]=`^${m.version}`),a.push(o);for(let o in n.devDependencies)m.version&&n.devDependencies[o]==="workspace:^"&&(n.devDependencies[o]=`^${m.version}`),a.push(o);(0,d.writeFileSync)("package.json",JSON.stringify(n,null,4),{flag:"w"}),c.stop(),r.default.ok`Cloned example from "${i}"`,r.default.i`Start "${t.pm} install" for dependencies: ${a}`,r.default``;try{(0,g.execSync)(`${t.pm} install`,{stdio:"inherit"}),r.default``,r.default.ok`Created **${e}**`,r.default.i`Commands in this app:`,console.table(n.scripts),r.default.i`Start by running "cd ${e} && ${t.pm} run ${n.scripts?.dev?"dev":"start"}"`}catch(o){throw c.fail(),o}}else{t.ext=t.ext||y();let c=(a,o)=>{let x=(0,d.existsSync)(a);x?x&&t.override?((0,d.writeFileSync)(a,o),r.default.ok`**${a}** is overridden`):r.default.x`**${a}** already exists`:((0,d.writeFileSync)(a,o),r.default.ok`Created **${a}**`)};switch(t.ext){case"js":c("master.css.js",G.default);break;case"mjs":c("master.css.mjs",J.default);break;case"ts":c("master.css.ts",P.default);break}n?.dependencies?.["@master/css"]||(r.default.i(`Detected **${t.pm}**`),r.default.i`Start "${t.pm} add @master/css@rc"`,r.default``,(0,g.execSync)(`${t.pm} add @master/css@rc`,{stdio:"inherit"}),r.default``);let i=w();i?r.default.i(`Detected **${i}** (https://rc.css.master.co/docs/installation/${i})`):r.default.i("To integrate with your framework, check out the guides at **https://rc.css.master.co/docs/installation**")}});M.parse(process.argv);