vyriy 0.3.8 → 0.3.9
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/README.md +7 -0
- package/cli/args/args.js +2 -0
- package/cli/args/types.d.ts +1 -1
- package/cli/cli.js +5 -0
- package/commands/publish/index.d.ts +2 -0
- package/commands/publish/index.js +1 -0
- package/commands/publish/publish.d.ts +2 -0
- package/commands/publish/publish.js +274 -0
- package/commands/publish/types.d.ts +31 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +149 -1
- package/presets/base/createBaseFiles.d.ts +3 -0
- package/presets/base/createBaseFiles.js +307 -0
- package/presets/config.d.ts +28 -0
- package/presets/config.js +7 -0
- package/presets/createProjectFiles.js +4 -404
- package/presets/library/createLibraryUiFiles.d.ts +3 -0
- package/presets/library/createLibraryUiFiles.js +127 -0
- package/presets/packages/createPackageFiles.d.ts +3 -0
- package/presets/packages/createPackageFiles.js +39 -0
- package/presets/packages/createPackageManifest.d.ts +7 -0
- package/presets/packages/createPackageManifest.js +13 -0
- package/presets/workspaces/createWorkspaceFiles.d.ts +3 -0
- package/presets/workspaces/createWorkspaceFiles.js +98 -0
- package/prompts/project-plan/project-plan.js +10 -6
package/README.md
CHANGED
|
@@ -34,6 +34,7 @@ vyriy new my-app
|
|
|
34
34
|
vyriy .
|
|
35
35
|
vyriy init
|
|
36
36
|
vyriy doctor
|
|
37
|
+
vyriy publish
|
|
37
38
|
vyriy --dry-run
|
|
38
39
|
vyriy --yes
|
|
39
40
|
vyriy --no-install
|
|
@@ -79,6 +80,12 @@ Current checks:
|
|
|
79
80
|
|
|
80
81
|
Node.js is fatal when unsupported. Yarn and Git are warnings so generation can continue without silently installing tools or initializing Git.
|
|
81
82
|
|
|
83
|
+
### `vyriy publish`
|
|
84
|
+
|
|
85
|
+
Prepares compiled `dist` package metadata for publishing without running `npm publish`.
|
|
86
|
+
|
|
87
|
+
Use it after TypeScript emits package files into `dist`, for example from a `build:dist` script.
|
|
88
|
+
|
|
82
89
|
## Flags
|
|
83
90
|
|
|
84
91
|
### `--dry-run`
|
package/cli/args/args.js
CHANGED
package/cli/args/types.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export type VyriyCliCommand = {
|
|
|
16
16
|
readonly verify: boolean;
|
|
17
17
|
readonly skipExisting: boolean;
|
|
18
18
|
} | {
|
|
19
|
-
readonly type: 'doctor' | 'help' | 'version';
|
|
19
|
+
readonly type: 'doctor' | 'help' | 'publish' | 'version';
|
|
20
20
|
} | {
|
|
21
21
|
readonly type: 'unknown';
|
|
22
22
|
readonly command: string;
|
package/cli/cli.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { runDoctorCommand } from '../commands/doctor/index.js';
|
|
2
2
|
import { runInitCommand } from '../commands/init/index.js';
|
|
3
3
|
import { runNewCommand } from '../commands/new/index.js';
|
|
4
|
+
import { runPublishCommand } from '../commands/publish/index.js';
|
|
4
5
|
import packageJson from '../package.json' with { type: 'json' };
|
|
5
6
|
import { parseArgs } from './args/index.js';
|
|
6
7
|
const helpText = `Vyriy Project Master
|
|
@@ -10,6 +11,7 @@ Usage:
|
|
|
10
11
|
vyriy init Initialize the current directory
|
|
11
12
|
vyriy . Initialize the current directory
|
|
12
13
|
vyriy doctor Check local environment
|
|
14
|
+
vyriy publish Prepare dist package metadata without publishing to npm
|
|
13
15
|
vyriy --yes, -y Use defaults where possible (empty preset)
|
|
14
16
|
vyriy --dry-run Print checks and file plan without writing
|
|
15
17
|
vyriy --overwrite Overwrite existing generated paths
|
|
@@ -57,6 +59,9 @@ export const runVyriyCli = async (args = [], { output = console } = {}) => {
|
|
|
57
59
|
code = result.code;
|
|
58
60
|
break;
|
|
59
61
|
}
|
|
62
|
+
case 'publish':
|
|
63
|
+
code = await runPublishCommand();
|
|
64
|
+
break;
|
|
60
65
|
case 'help':
|
|
61
66
|
output.log(helpText);
|
|
62
67
|
break;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './publish.js';
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { chmod, copyFile, readdir, readFile, stat, unlink, writeFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
const DIST_DIR = 'dist';
|
|
4
|
+
const AGENTS_FILE = 'AGENTS.md';
|
|
5
|
+
const LICENSE_FILE = 'LICENSE';
|
|
6
|
+
const PACKAGE_JSON_FILE = 'package.json';
|
|
7
|
+
const PACKAGES_DIR = 'packages';
|
|
8
|
+
const README_FILE = 'README.md';
|
|
9
|
+
const toPosixPath = (value) => value.split(path.sep).join('/');
|
|
10
|
+
const toPackagePath = (value) => {
|
|
11
|
+
const normalizedValue = toPosixPath(value);
|
|
12
|
+
return `./${normalizedValue.replace(/^\.\//, '')}`;
|
|
13
|
+
};
|
|
14
|
+
const hasFile = async (filePath) => {
|
|
15
|
+
try {
|
|
16
|
+
return (await stat(filePath)).isFile();
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const readJson = async (filePath) => {
|
|
23
|
+
const content = await readFile(filePath, 'utf8');
|
|
24
|
+
return JSON.parse(content);
|
|
25
|
+
};
|
|
26
|
+
const writeJson = async (filePath, value) => {
|
|
27
|
+
await writeFile(filePath, `${JSON.stringify(value, null, 2)}\n`);
|
|
28
|
+
};
|
|
29
|
+
const isEmptyJavaScriptContent = (content) => {
|
|
30
|
+
const normalizedContent = content.trim();
|
|
31
|
+
return normalizedContent.length === 0 || normalizedContent === 'export {};';
|
|
32
|
+
};
|
|
33
|
+
const exportTargetPattern = /^\s*export(?:\s+\*|\s+\{[^}]*\})\s+from\s+['"](\..+\.js)['"];?\s*$/;
|
|
34
|
+
const getMissingExportTarget = async (file, line) => {
|
|
35
|
+
const exportTarget = exportTargetPattern.exec(line)?.[1];
|
|
36
|
+
if (!exportTarget) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
const exportTargetPath = path.resolve(path.dirname(file), exportTarget);
|
|
40
|
+
return (await hasFile(exportTargetPath)) ? undefined : exportTargetPath;
|
|
41
|
+
};
|
|
42
|
+
const readFiles = async (directory) => {
|
|
43
|
+
const entries = await readdir(directory, { withFileTypes: true });
|
|
44
|
+
const files = await Promise.all(entries.map(async (entry) => {
|
|
45
|
+
const entryPath = path.join(directory, entry.name);
|
|
46
|
+
if (entry.isDirectory()) {
|
|
47
|
+
return readFiles(entryPath);
|
|
48
|
+
}
|
|
49
|
+
return entry.isFile() ? [entryPath] : [];
|
|
50
|
+
}));
|
|
51
|
+
return files.flat();
|
|
52
|
+
};
|
|
53
|
+
const getPackageMain = async (packageDirectory, packageJson, javaScriptFiles) => {
|
|
54
|
+
if (packageJson.main?.endsWith('.js')) {
|
|
55
|
+
const mainPath = packageJson.main.replace(/^\.\//, '');
|
|
56
|
+
if (await hasFile(path.join(packageDirectory, mainPath))) {
|
|
57
|
+
return toPosixPath(mainPath);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (javaScriptFiles.includes('index.js')) {
|
|
61
|
+
return 'index.js';
|
|
62
|
+
}
|
|
63
|
+
return javaScriptFiles[0];
|
|
64
|
+
};
|
|
65
|
+
const createExportTarget = (javaScriptFile) => {
|
|
66
|
+
const packagePath = toPackagePath(javaScriptFile);
|
|
67
|
+
return {
|
|
68
|
+
types: packagePath.replace(/\.js$/, '.d.ts'),
|
|
69
|
+
import: packagePath,
|
|
70
|
+
default: packagePath,
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
const createExports = (mainFile, javaScriptFiles) => {
|
|
74
|
+
const exports = {
|
|
75
|
+
'.': createExportTarget(mainFile),
|
|
76
|
+
};
|
|
77
|
+
for (const javaScriptFile of javaScriptFiles) {
|
|
78
|
+
const packagePath = toPackagePath(javaScriptFile);
|
|
79
|
+
const extensionlessPackagePath = packagePath.replace(/\.js$/, '');
|
|
80
|
+
const target = createExportTarget(javaScriptFile);
|
|
81
|
+
exports[extensionlessPackagePath] = target;
|
|
82
|
+
exports[packagePath] = target;
|
|
83
|
+
}
|
|
84
|
+
return exports;
|
|
85
|
+
};
|
|
86
|
+
const createPackageRepository = (rootPackageJson, packageDirectory) => {
|
|
87
|
+
const rootRepository = rootPackageJson.repository;
|
|
88
|
+
if (!rootRepository) {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
...rootRepository,
|
|
93
|
+
directory: toPosixPath(path.join(PACKAGES_DIR, path.basename(packageDirectory))),
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
const getJavaScriptFiles = async (packageDirectory) => {
|
|
97
|
+
const files = await readFiles(packageDirectory);
|
|
98
|
+
const javaScriptFiles = [];
|
|
99
|
+
for (const file of files) {
|
|
100
|
+
const relativeFile = toPosixPath(path.relative(packageDirectory, file));
|
|
101
|
+
const declarationFile = path.join(packageDirectory, relativeFile.replace(/\.js$/, '.d.ts'));
|
|
102
|
+
if (relativeFile.endsWith('.js') && !relativeFile.endsWith('.test.js') && (await hasFile(declarationFile))) {
|
|
103
|
+
javaScriptFiles.push(relativeFile);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return javaScriptFiles.sort((left, right) => left.localeCompare(right));
|
|
107
|
+
};
|
|
108
|
+
const removeEmptyJavaScriptFiles = async (packageDirectory) => {
|
|
109
|
+
const files = await readFiles(packageDirectory);
|
|
110
|
+
for (const file of files) {
|
|
111
|
+
if (file.endsWith('.js') && isEmptyJavaScriptContent(await readFile(file, 'utf8'))) {
|
|
112
|
+
await unlink(file);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
const removeMissingJavaScriptExports = async (packageDirectory) => {
|
|
117
|
+
const files = await readFiles(packageDirectory);
|
|
118
|
+
for (const file of files) {
|
|
119
|
+
if (!file.endsWith('.js')) {
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const content = await readFile(file, 'utf8');
|
|
123
|
+
const lines = content.split('\n');
|
|
124
|
+
const retainedLines = [];
|
|
125
|
+
for (const line of lines) {
|
|
126
|
+
if (!(await getMissingExportTarget(file, line))) {
|
|
127
|
+
retainedLines.push(line);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (retainedLines.length !== lines.length) {
|
|
131
|
+
await writeFile(file, retainedLines.join('\n'));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
const copyReadme = async (packageDirectory) => {
|
|
136
|
+
const packageName = path.basename(packageDirectory);
|
|
137
|
+
const sourceReadmePath = path.join(PACKAGES_DIR, packageName, README_FILE);
|
|
138
|
+
if (await hasFile(sourceReadmePath)) {
|
|
139
|
+
await copyFile(sourceReadmePath, path.join(packageDirectory, README_FILE));
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
const resolveSourceAgentsPath = async (packageAgentsPath, sharedAgentsPath, rootAgentsPath) => {
|
|
143
|
+
if (await hasFile(packageAgentsPath)) {
|
|
144
|
+
return packageAgentsPath;
|
|
145
|
+
}
|
|
146
|
+
if (await hasFile(sharedAgentsPath)) {
|
|
147
|
+
return sharedAgentsPath;
|
|
148
|
+
}
|
|
149
|
+
return rootAgentsPath;
|
|
150
|
+
};
|
|
151
|
+
const copyAgents = async (packageDirectory, rootPackageJson) => {
|
|
152
|
+
const packageName = path.basename(packageDirectory);
|
|
153
|
+
const packageAgentsPath = path.join(PACKAGES_DIR, packageName, AGENTS_FILE);
|
|
154
|
+
const sharedAgentsPath = path.join(PACKAGES_DIR, AGENTS_FILE);
|
|
155
|
+
const rootAgentsPath = typeof rootPackageJson.agents === 'string' ? rootPackageJson.agents.replace(/^\.\//, '') : '';
|
|
156
|
+
const sourceAgentsPath = await resolveSourceAgentsPath(packageAgentsPath, sharedAgentsPath, rootAgentsPath);
|
|
157
|
+
if (await hasFile(sourceAgentsPath)) {
|
|
158
|
+
await copyFile(sourceAgentsPath, path.join(packageDirectory, AGENTS_FILE));
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
return false;
|
|
162
|
+
};
|
|
163
|
+
const copyLicense = async (packageDirectory) => {
|
|
164
|
+
if (await hasFile(LICENSE_FILE)) {
|
|
165
|
+
await copyFile(LICENSE_FILE, path.join(packageDirectory, LICENSE_FILE));
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
const getPackageBinFiles = (packageJson) => {
|
|
169
|
+
if (typeof packageJson.bin === 'string') {
|
|
170
|
+
return [packageJson.bin];
|
|
171
|
+
}
|
|
172
|
+
if (packageJson.bin && typeof packageJson.bin === 'object') {
|
|
173
|
+
return Object.values(packageJson.bin);
|
|
174
|
+
}
|
|
175
|
+
return [];
|
|
176
|
+
};
|
|
177
|
+
const makePackageBinsExecutable = async (packageDirectory, packageJson) => {
|
|
178
|
+
for (const binFile of getPackageBinFiles(packageJson)) {
|
|
179
|
+
const binFilePath = path.join(packageDirectory, binFile.replace(/^\.\//, ''));
|
|
180
|
+
if (await hasFile(binFilePath)) {
|
|
181
|
+
await chmod(binFilePath, 0o755);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
const copyRootFile = async (fileName) => {
|
|
186
|
+
if (await hasFile(fileName)) {
|
|
187
|
+
await copyFile(fileName, path.join(DIST_DIR, fileName));
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
const publishRootPackageJson = async () => {
|
|
191
|
+
const packageJson = await readJson(PACKAGE_JSON_FILE);
|
|
192
|
+
delete packageJson.agents;
|
|
193
|
+
delete packageJson.dependencies;
|
|
194
|
+
delete packageJson.packageManager;
|
|
195
|
+
delete packageJson.scripts;
|
|
196
|
+
delete packageJson.devDependencies;
|
|
197
|
+
await writeJson(path.join(DIST_DIR, PACKAGE_JSON_FILE), packageJson);
|
|
198
|
+
};
|
|
199
|
+
const publishRoot = async () => {
|
|
200
|
+
await copyRootFile(README_FILE);
|
|
201
|
+
await copyRootFile(LICENSE_FILE);
|
|
202
|
+
await publishRootPackageJson();
|
|
203
|
+
};
|
|
204
|
+
const syncPackageRuntimeMetadata = (packageJson, rootPackageJson) => {
|
|
205
|
+
if (packageJson.name !== 'vyriy') {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
packageJson.packageManager = rootPackageJson.packageManager;
|
|
209
|
+
packageJson.engines = rootPackageJson.engines;
|
|
210
|
+
};
|
|
211
|
+
const publishPackage = async (packageJsonPath, rootPackageJson) => {
|
|
212
|
+
const packageDirectory = path.dirname(packageJsonPath);
|
|
213
|
+
const packageJson = await readJson(packageJsonPath);
|
|
214
|
+
await removeEmptyJavaScriptFiles(packageDirectory);
|
|
215
|
+
await removeMissingJavaScriptExports(packageDirectory);
|
|
216
|
+
await removeEmptyJavaScriptFiles(packageDirectory);
|
|
217
|
+
const javaScriptFiles = await getJavaScriptFiles(packageDirectory);
|
|
218
|
+
await copyLicense(packageDirectory);
|
|
219
|
+
await copyReadme(packageDirectory);
|
|
220
|
+
const hasAgents = await copyAgents(packageDirectory, rootPackageJson);
|
|
221
|
+
delete packageJson.private;
|
|
222
|
+
if (hasAgents && rootPackageJson.agents) {
|
|
223
|
+
packageJson.agents = toPackagePath(AGENTS_FILE);
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
delete packageJson.agents;
|
|
227
|
+
}
|
|
228
|
+
if (rootPackageJson.license) {
|
|
229
|
+
packageJson.license = rootPackageJson.license;
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
delete packageJson.license;
|
|
233
|
+
}
|
|
234
|
+
const repository = createPackageRepository(rootPackageJson, packageDirectory);
|
|
235
|
+
if (repository) {
|
|
236
|
+
packageJson.repository = repository;
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
delete packageJson.repository;
|
|
240
|
+
}
|
|
241
|
+
syncPackageRuntimeMetadata(packageJson, rootPackageJson);
|
|
242
|
+
if (javaScriptFiles.length > 0) {
|
|
243
|
+
const mainFile = await getPackageMain(packageDirectory, packageJson, javaScriptFiles);
|
|
244
|
+
if (mainFile) {
|
|
245
|
+
packageJson.main = toPackagePath(mainFile);
|
|
246
|
+
packageJson.types = toPackagePath(mainFile).replace(/\.js$/, '.d.ts');
|
|
247
|
+
packageJson.exports = createExports(mainFile, javaScriptFiles);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
await makePackageBinsExecutable(packageDirectory, packageJson);
|
|
251
|
+
await writeJson(packageJsonPath, packageJson);
|
|
252
|
+
};
|
|
253
|
+
export const runPublishCommand = async ({ cwd = process.cwd() } = {}) => {
|
|
254
|
+
const previousCwd = process.cwd();
|
|
255
|
+
try {
|
|
256
|
+
process.chdir(cwd);
|
|
257
|
+
const rootPackageJson = await readJson(PACKAGE_JSON_FILE);
|
|
258
|
+
await publishRoot();
|
|
259
|
+
const entries = await readdir(DIST_DIR, { withFileTypes: true });
|
|
260
|
+
const packageJsonPaths = entries
|
|
261
|
+
.filter((entry) => entry.isDirectory())
|
|
262
|
+
.map((entry) => path.join(DIST_DIR, entry.name, 'package.json'))
|
|
263
|
+
.sort((left, right) => left.localeCompare(right));
|
|
264
|
+
for (const packageJsonPath of packageJsonPaths) {
|
|
265
|
+
if (await hasFile(packageJsonPath)) {
|
|
266
|
+
await publishPackage(packageJsonPath, rootPackageJson);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return 0;
|
|
270
|
+
}
|
|
271
|
+
finally {
|
|
272
|
+
process.chdir(previousCwd);
|
|
273
|
+
}
|
|
274
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type ExportTarget = {
|
|
2
|
+
readonly default: string;
|
|
3
|
+
readonly import: string;
|
|
4
|
+
readonly types: string;
|
|
5
|
+
};
|
|
6
|
+
export type Repository = {
|
|
7
|
+
readonly directory?: string;
|
|
8
|
+
readonly type: string;
|
|
9
|
+
readonly url: string;
|
|
10
|
+
};
|
|
11
|
+
export type PackageJson = {
|
|
12
|
+
agents?: string;
|
|
13
|
+
bin?: string | Record<string, string>;
|
|
14
|
+
dependencies?: unknown;
|
|
15
|
+
engines?: unknown;
|
|
16
|
+
exports?: Record<string, ExportTarget>;
|
|
17
|
+
license?: string;
|
|
18
|
+
main?: string;
|
|
19
|
+
name?: string;
|
|
20
|
+
packageManager?: unknown;
|
|
21
|
+
private?: boolean;
|
|
22
|
+
repository?: Repository;
|
|
23
|
+
scripts?: unknown;
|
|
24
|
+
types?: string;
|
|
25
|
+
workspaces?: unknown;
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
};
|
|
28
|
+
export type RunPublishCommandOptions = {
|
|
29
|
+
readonly cwd?: string;
|
|
30
|
+
};
|
|
31
|
+
export type RunPublishCommand = (options?: RunPublishCommandOptions) => Promise<number>;
|
package/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export * from './cli/index.js';
|
|
|
2
2
|
export * from './commands/doctor/index.js';
|
|
3
3
|
export * from './commands/init/index.js';
|
|
4
4
|
export * from './commands/new/index.js';
|
|
5
|
+
export * from './commands/publish/index.js';
|
|
5
6
|
export * from './checks/yarn/index.js';
|
|
6
7
|
export * from './doctor/index.js';
|
|
7
8
|
export * from './file-plan/index.js';
|
package/index.js
CHANGED
|
@@ -2,6 +2,7 @@ export * from './cli/index.js';
|
|
|
2
2
|
export * from './commands/doctor/index.js';
|
|
3
3
|
export * from './commands/init/index.js';
|
|
4
4
|
export * from './commands/new/index.js';
|
|
5
|
+
export * from './commands/publish/index.js';
|
|
5
6
|
export * from './checks/yarn/index.js';
|
|
6
7
|
export * from './doctor/index.js';
|
|
7
8
|
export * from './file-plan/index.js';
|
package/package.json
CHANGED
|
@@ -1,10 +1,74 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vyriy",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.9",
|
|
4
4
|
"description": "Interactive project master for calm cloud-ready applications.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./index.js",
|
|
7
7
|
"bin": "./bin/vyriy.js",
|
|
8
|
+
"peerDependencies": {
|
|
9
|
+
"@storybook/react-webpack5": "^10.4.0",
|
|
10
|
+
"@types/react": "^19.2.15",
|
|
11
|
+
"@types/react-dom": "^19.2.3",
|
|
12
|
+
"cross-env": "^10.1.0",
|
|
13
|
+
"eslint": "^10.4.0",
|
|
14
|
+
"husky": "^9.1.7",
|
|
15
|
+
"jest": "^30.4.2",
|
|
16
|
+
"npm-run-all2": "^9.0.0",
|
|
17
|
+
"prettier": "^3.8.3",
|
|
18
|
+
"react": "^19.2.6",
|
|
19
|
+
"react-dom": "^19.2.6",
|
|
20
|
+
"rimraf": "^6.1.3",
|
|
21
|
+
"storybook": "^10.4.0",
|
|
22
|
+
"stylelint": "^17.12.0",
|
|
23
|
+
"typescript": "^6.0.3"
|
|
24
|
+
},
|
|
25
|
+
"peerDependenciesMeta": {
|
|
26
|
+
"@storybook/react-webpack5": {
|
|
27
|
+
"optional": true
|
|
28
|
+
},
|
|
29
|
+
"@types/react": {
|
|
30
|
+
"optional": true
|
|
31
|
+
},
|
|
32
|
+
"@types/react-dom": {
|
|
33
|
+
"optional": true
|
|
34
|
+
},
|
|
35
|
+
"cross-env": {
|
|
36
|
+
"optional": true
|
|
37
|
+
},
|
|
38
|
+
"eslint": {
|
|
39
|
+
"optional": true
|
|
40
|
+
},
|
|
41
|
+
"husky": {
|
|
42
|
+
"optional": true
|
|
43
|
+
},
|
|
44
|
+
"jest": {
|
|
45
|
+
"optional": true
|
|
46
|
+
},
|
|
47
|
+
"npm-run-all2": {
|
|
48
|
+
"optional": true
|
|
49
|
+
},
|
|
50
|
+
"prettier": {
|
|
51
|
+
"optional": true
|
|
52
|
+
},
|
|
53
|
+
"react": {
|
|
54
|
+
"optional": true
|
|
55
|
+
},
|
|
56
|
+
"react-dom": {
|
|
57
|
+
"optional": true
|
|
58
|
+
},
|
|
59
|
+
"rimraf": {
|
|
60
|
+
"optional": true
|
|
61
|
+
},
|
|
62
|
+
"storybook": {
|
|
63
|
+
"optional": true
|
|
64
|
+
},
|
|
65
|
+
"stylelint": {
|
|
66
|
+
"optional": true
|
|
67
|
+
},
|
|
68
|
+
"typescript": {
|
|
69
|
+
"optional": true
|
|
70
|
+
}
|
|
71
|
+
},
|
|
8
72
|
"agents": "./AGENTS.md",
|
|
9
73
|
"license": "MIT",
|
|
10
74
|
"repository": {
|
|
@@ -12,6 +76,10 @@
|
|
|
12
76
|
"url": "https://github.com/evheniy/vyriy",
|
|
13
77
|
"directory": "packages/vyriy"
|
|
14
78
|
},
|
|
79
|
+
"packageManager": "yarn@4.15.0",
|
|
80
|
+
"engines": {
|
|
81
|
+
"node": ">=24.0.0"
|
|
82
|
+
},
|
|
15
83
|
"types": "./index.d.ts",
|
|
16
84
|
"exports": {
|
|
17
85
|
".": {
|
|
@@ -169,6 +237,26 @@
|
|
|
169
237
|
"import": "./commands/new/new.js",
|
|
170
238
|
"default": "./commands/new/new.js"
|
|
171
239
|
},
|
|
240
|
+
"./commands/publish/index": {
|
|
241
|
+
"types": "./commands/publish/index.d.ts",
|
|
242
|
+
"import": "./commands/publish/index.js",
|
|
243
|
+
"default": "./commands/publish/index.js"
|
|
244
|
+
},
|
|
245
|
+
"./commands/publish/index.js": {
|
|
246
|
+
"types": "./commands/publish/index.d.ts",
|
|
247
|
+
"import": "./commands/publish/index.js",
|
|
248
|
+
"default": "./commands/publish/index.js"
|
|
249
|
+
},
|
|
250
|
+
"./commands/publish/publish": {
|
|
251
|
+
"types": "./commands/publish/publish.d.ts",
|
|
252
|
+
"import": "./commands/publish/publish.js",
|
|
253
|
+
"default": "./commands/publish/publish.js"
|
|
254
|
+
},
|
|
255
|
+
"./commands/publish/publish.js": {
|
|
256
|
+
"types": "./commands/publish/publish.d.ts",
|
|
257
|
+
"import": "./commands/publish/publish.js",
|
|
258
|
+
"default": "./commands/publish/publish.js"
|
|
259
|
+
},
|
|
172
260
|
"./doctor/checkCorepack": {
|
|
173
261
|
"types": "./doctor/checkCorepack.d.ts",
|
|
174
262
|
"import": "./doctor/checkCorepack.js",
|
|
@@ -299,6 +387,26 @@
|
|
|
299
387
|
"import": "./presets/agentsTemplate.js",
|
|
300
388
|
"default": "./presets/agentsTemplate.js"
|
|
301
389
|
},
|
|
390
|
+
"./presets/base/createBaseFiles": {
|
|
391
|
+
"types": "./presets/base/createBaseFiles.d.ts",
|
|
392
|
+
"import": "./presets/base/createBaseFiles.js",
|
|
393
|
+
"default": "./presets/base/createBaseFiles.js"
|
|
394
|
+
},
|
|
395
|
+
"./presets/base/createBaseFiles.js": {
|
|
396
|
+
"types": "./presets/base/createBaseFiles.d.ts",
|
|
397
|
+
"import": "./presets/base/createBaseFiles.js",
|
|
398
|
+
"default": "./presets/base/createBaseFiles.js"
|
|
399
|
+
},
|
|
400
|
+
"./presets/config": {
|
|
401
|
+
"types": "./presets/config.d.ts",
|
|
402
|
+
"import": "./presets/config.js",
|
|
403
|
+
"default": "./presets/config.js"
|
|
404
|
+
},
|
|
405
|
+
"./presets/config.js": {
|
|
406
|
+
"types": "./presets/config.d.ts",
|
|
407
|
+
"import": "./presets/config.js",
|
|
408
|
+
"default": "./presets/config.js"
|
|
409
|
+
},
|
|
302
410
|
"./presets/createProjectFiles": {
|
|
303
411
|
"types": "./presets/createProjectFiles.d.ts",
|
|
304
412
|
"import": "./presets/createProjectFiles.js",
|
|
@@ -319,6 +427,46 @@
|
|
|
319
427
|
"import": "./presets/index.js",
|
|
320
428
|
"default": "./presets/index.js"
|
|
321
429
|
},
|
|
430
|
+
"./presets/library/createLibraryUiFiles": {
|
|
431
|
+
"types": "./presets/library/createLibraryUiFiles.d.ts",
|
|
432
|
+
"import": "./presets/library/createLibraryUiFiles.js",
|
|
433
|
+
"default": "./presets/library/createLibraryUiFiles.js"
|
|
434
|
+
},
|
|
435
|
+
"./presets/library/createLibraryUiFiles.js": {
|
|
436
|
+
"types": "./presets/library/createLibraryUiFiles.d.ts",
|
|
437
|
+
"import": "./presets/library/createLibraryUiFiles.js",
|
|
438
|
+
"default": "./presets/library/createLibraryUiFiles.js"
|
|
439
|
+
},
|
|
440
|
+
"./presets/packages/createPackageFiles": {
|
|
441
|
+
"types": "./presets/packages/createPackageFiles.d.ts",
|
|
442
|
+
"import": "./presets/packages/createPackageFiles.js",
|
|
443
|
+
"default": "./presets/packages/createPackageFiles.js"
|
|
444
|
+
},
|
|
445
|
+
"./presets/packages/createPackageFiles.js": {
|
|
446
|
+
"types": "./presets/packages/createPackageFiles.d.ts",
|
|
447
|
+
"import": "./presets/packages/createPackageFiles.js",
|
|
448
|
+
"default": "./presets/packages/createPackageFiles.js"
|
|
449
|
+
},
|
|
450
|
+
"./presets/packages/createPackageManifest": {
|
|
451
|
+
"types": "./presets/packages/createPackageManifest.d.ts",
|
|
452
|
+
"import": "./presets/packages/createPackageManifest.js",
|
|
453
|
+
"default": "./presets/packages/createPackageManifest.js"
|
|
454
|
+
},
|
|
455
|
+
"./presets/packages/createPackageManifest.js": {
|
|
456
|
+
"types": "./presets/packages/createPackageManifest.d.ts",
|
|
457
|
+
"import": "./presets/packages/createPackageManifest.js",
|
|
458
|
+
"default": "./presets/packages/createPackageManifest.js"
|
|
459
|
+
},
|
|
460
|
+
"./presets/workspaces/createWorkspaceFiles": {
|
|
461
|
+
"types": "./presets/workspaces/createWorkspaceFiles.d.ts",
|
|
462
|
+
"import": "./presets/workspaces/createWorkspaceFiles.js",
|
|
463
|
+
"default": "./presets/workspaces/createWorkspaceFiles.js"
|
|
464
|
+
},
|
|
465
|
+
"./presets/workspaces/createWorkspaceFiles.js": {
|
|
466
|
+
"types": "./presets/workspaces/createWorkspaceFiles.d.ts",
|
|
467
|
+
"import": "./presets/workspaces/createWorkspaceFiles.js",
|
|
468
|
+
"default": "./presets/workspaces/createWorkspaceFiles.js"
|
|
469
|
+
},
|
|
322
470
|
"./project-plan/api/api": {
|
|
323
471
|
"types": "./project-plan/api/api.d.ts",
|
|
324
472
|
"import": "./project-plan/api/api.js",
|