zile 0.0.0 → 0.0.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.
@@ -0,0 +1,422 @@
1
+ import * as cp from 'node:child_process';
2
+ import * as fsSync from 'node:fs';
3
+ import * as fs from 'node:fs/promises';
4
+ import * as path from 'node:path';
5
+ import * as Tsconfig from 'tsconfck';
6
+ /**
7
+ * Builds a package.
8
+ *
9
+ * @param options - Options for building a package
10
+ * @returns Build artifacts.
11
+ */
12
+ export async function build(options) {
13
+ const { cwd = process.cwd(), link = false, project = './tsconfig.json', tsgo } = options;
14
+ let [pkgJson, tsConfig] = await Promise.all([
15
+ readPackageJson({ cwd }),
16
+ readTsconfigJson({ cwd, project }),
17
+ ]);
18
+ const outDir = tsConfig.compilerOptions?.outDir ?? path.resolve(cwd, 'dist');
19
+ await checkInput({ cwd, outDir });
20
+ const entries = getEntries({ cwd, pkgJson });
21
+ if (!link) {
22
+ const result = await transpile({ cwd, entries, tsgo });
23
+ tsConfig = result.tsConfig;
24
+ }
25
+ if (link) {
26
+ await fs.rm(outDir, { recursive: true }).catch(() => { });
27
+ await fs.mkdir(outDir, { recursive: true });
28
+ }
29
+ const sourceDir = getSourceDir({ cwd, entries });
30
+ const packageJson = await decoratePackageJson(pkgJson, { cwd, link, outDir, sourceDir });
31
+ await writePackageJson(cwd, packageJson);
32
+ return { packageJson, tsConfig };
33
+ }
34
+ /**
35
+ * Checks the inputs of the package.
36
+ *
37
+ * @param options - Options for checking the input.
38
+ * @returns Input check results.
39
+ */
40
+ export async function checkInput(options) {
41
+ return await checkPackageJson(options);
42
+ }
43
+ /**
44
+ * Determines if the package.json file is valid for transpiling.
45
+ *
46
+ * @param options - Options for checking the package.json file.
47
+ * @returns Whether the package.json file is valid for transpiling.
48
+ */
49
+ export async function checkPackageJson(options) {
50
+ const { cwd = process.cwd(), outDir = path.resolve(cwd, 'dist') } = options;
51
+ const pkgJson = await readPackageJson({ cwd });
52
+ function exists(value) {
53
+ if (value.includes(path.relative(cwd, outDir)))
54
+ return true;
55
+ return fsSync.existsSync(path.resolve(cwd, value));
56
+ }
57
+ if (!pkgJson.exports && !pkgJson.main && !pkgJson.bin)
58
+ throw new Error('package.json must have an `exports`, `main`, or `bin` field');
59
+ if (pkgJson.bin)
60
+ if (typeof pkgJson.bin === 'string') {
61
+ if (!exists(pkgJson.bin))
62
+ throw new Error(`\`${pkgJson.bin}\` does not exist on \`package.json#bin\``);
63
+ }
64
+ else {
65
+ for (const [key, value] of Object.entries(pkgJson.bin)) {
66
+ if (!value)
67
+ throw new Error(`\`bin.${key}\` value must be a string`);
68
+ if (typeof value === 'string' && !exists(value))
69
+ throw new Error(`\`${value}\` does not exist on \`package.json#bin.${key}\``);
70
+ }
71
+ }
72
+ if (pkgJson.main)
73
+ if (!exists(pkgJson.main))
74
+ throw new Error(`\`${pkgJson.main}\` does not exist on \`package.json#main\``);
75
+ if (pkgJson.exports) {
76
+ for (const [key, entry] of Object.entries(pkgJson.exports)) {
77
+ if (typeof entry === 'string' && !exists(entry))
78
+ throw new Error(`\`${entry}\` does not exist on \`package.json#exports["${key}"]\``);
79
+ if (typeof entry === 'object' &&
80
+ entry &&
81
+ 'src' in entry &&
82
+ typeof entry.src === 'string' &&
83
+ !exists(entry.src))
84
+ throw new Error(`\`${entry.src}\` does not exist on \`package.json#exports["${key}"].src\``);
85
+ }
86
+ }
87
+ return undefined;
88
+ }
89
+ /**
90
+ * Decorates the package.json file to include publish-specific fields.
91
+ *
92
+ * @param pkgJson - Package.json file to transform.
93
+ * @param options - Options.
94
+ * @returns Transformed package.json file as an object.
95
+ */
96
+ export async function decoratePackageJson(pkgJson, options) {
97
+ const { cwd, link, outDir, sourceDir } = options;
98
+ const relativeOutDir = `./${path.relative(cwd, outDir)}`;
99
+ const relativeSourceDir = `./${path.relative(cwd, sourceDir)}`;
100
+ const outFile = (name, ext = '') => './' +
101
+ path.join(relativeOutDir, name.replace(relativeSourceDir, '').replace(path.extname(name), '') + ext);
102
+ let bin = pkgJson.bin;
103
+ if (bin) {
104
+ if (typeof bin === 'string') {
105
+ if (!bin.startsWith(relativeOutDir))
106
+ bin = {
107
+ // biome-ignore lint/style/noNonNullAssertion: _
108
+ [pkgJson.name]: outFile(bin, '.js'),
109
+ // biome-ignore lint/style/useTemplate: _
110
+ // biome-ignore lint/style/noNonNullAssertion: _
111
+ [pkgJson.name + '.src']: bin,
112
+ };
113
+ }
114
+ else {
115
+ bin = Object.fromEntries(Object.entries(bin).flatMap((entry) => {
116
+ const [key, value] = entry;
117
+ if (!value)
118
+ throw new Error(`\`bin.${key}\` field must have a value`);
119
+ return [
120
+ [key.replace('.src', ''), outFile(value, '.js')],
121
+ [key, value],
122
+ ];
123
+ }));
124
+ }
125
+ }
126
+ let exps = pkgJson.exports;
127
+ // Support single entrypoint via `main` field
128
+ if (pkgJson.main) {
129
+ // Transform single `package.json#main` field. They
130
+ // must point to the source file. Otherwise, an error is thrown.
131
+ //
132
+ // main: "./src/index.ts"
133
+ // ↓ ↓ ↓
134
+ // main: "./src/index.ts"
135
+ // exports: {
136
+ // ".": {
137
+ // "src": "./src/index.ts",
138
+ // "types": "./dist/index.d.ts",
139
+ // "default": "./dist/index.js",
140
+ // },
141
+ // }
142
+ exps = {
143
+ '.': pkgJson.main,
144
+ ...(typeof exps === 'object' ? exps : {}),
145
+ };
146
+ }
147
+ const exports = Object.fromEntries(exps
148
+ ? Object.entries(exps).map(([key, value]) => {
149
+ function linkExports(entry) {
150
+ try {
151
+ const destJsAbsolute = path.resolve(cwd, outFile(entry, '.js'));
152
+ const destDtsAbsolute = path.resolve(cwd, outFile(entry, '.d.ts'));
153
+ const dir = path.dirname(destJsAbsolute);
154
+ if (!fsSync.existsSync(dir))
155
+ fsSync.mkdirSync(dir, { recursive: true });
156
+ const srcAbsolute = path.resolve(cwd, entry);
157
+ const srcRelativeJs = path.relative(path.dirname(destJsAbsolute), srcAbsolute);
158
+ const srcRelativeDts = path.relative(path.dirname(destDtsAbsolute), srcAbsolute);
159
+ fsSync.symlinkSync(srcRelativeJs, destJsAbsolute, 'file');
160
+ fsSync.symlinkSync(srcRelativeDts, destDtsAbsolute, 'file');
161
+ }
162
+ catch { }
163
+ }
164
+ // Transform single `package.json#exports` entrypoints. They
165
+ // must point to the source file. Otherwise, an error is thrown.
166
+ //
167
+ // "./utils": "./src/utils.ts"
168
+ // ↓ ↓ ↓
169
+ // "./utils": {
170
+ // "src": "./src/utils.ts",
171
+ // "types": "./dist/utils.js",
172
+ // "default": "./dist/utils.d.ts"
173
+ // }
174
+ if (typeof value === 'string') {
175
+ if (value.startsWith(relativeOutDir))
176
+ return [key, value];
177
+ if (!/\.(m|c)?[jt]sx?$/.test(value))
178
+ return [key, value];
179
+ if (link)
180
+ linkExports(value);
181
+ return [
182
+ key,
183
+ {
184
+ src: value,
185
+ types: outFile(value, '.d.ts'),
186
+ default: outFile(value, '.js'),
187
+ },
188
+ ];
189
+ }
190
+ // Transform object-like `package.json#exports` entrypoints. They
191
+ // must include a `src` field pointing to the source file, otherwise
192
+ // an error is thrown.
193
+ //
194
+ // "./utils": "./src/utils.ts"
195
+ // ↓ ↓ ↓
196
+ // "./utils": {
197
+ // "src": "./src/utils.ts",
198
+ // "types": "./dist/utils.js",
199
+ // "default": "./dist/utils.d.ts"
200
+ // }
201
+ if (typeof value === 'object' &&
202
+ value &&
203
+ 'src' in value &&
204
+ typeof value.src === 'string') {
205
+ if (value.src.startsWith(relativeOutDir))
206
+ return [key, value];
207
+ if (!/\.(m|c)?[jt]sx?$/.test(value.src))
208
+ return [key, value];
209
+ if (link)
210
+ linkExports(value.src);
211
+ return [
212
+ key,
213
+ {
214
+ ...value,
215
+ types: outFile(value.src, '.d.ts'),
216
+ default: outFile(value.src, '.js'),
217
+ },
218
+ ];
219
+ }
220
+ throw new Error('`exports` field in package.json must be an object with a `src` field');
221
+ })
222
+ : []);
223
+ const root = exports['.'];
224
+ return {
225
+ ...pkgJson,
226
+ type: pkgJson.type ?? 'module',
227
+ sideEffects: pkgJson.sideEffects ?? false,
228
+ ...(bin ? { bin } : {}),
229
+ ...(root
230
+ ? {
231
+ main: root.default,
232
+ module: root.default,
233
+ types: root.types,
234
+ }
235
+ : {}),
236
+ exports,
237
+ };
238
+ }
239
+ /**
240
+ * Gets entry files from package.json exports field or main field.
241
+ *
242
+ * @param options - Options for getting entry files.
243
+ * @returns Array of absolute paths to entry files.
244
+ */
245
+ export function getEntries(options) {
246
+ const { cwd, pkgJson } = options;
247
+ const entries = [];
248
+ if (pkgJson.bin) {
249
+ if (typeof pkgJson.bin === 'string')
250
+ entries.push(path.resolve(cwd, pkgJson.bin));
251
+ else
252
+ entries.push(...Object.entries(pkgJson.bin)
253
+ .map(([key, value]) =>
254
+ // biome-ignore lint/style/noNonNullAssertion: _
255
+ key.endsWith('.src') ? path.resolve(cwd, value) : undefined)
256
+ .filter(Boolean));
257
+ }
258
+ if (pkgJson.exports)
259
+ entries.push(...Object.values(pkgJson.exports)
260
+ .map((entry) => {
261
+ if (typeof entry === 'string')
262
+ return entry;
263
+ if (typeof entry === 'object' && entry && 'src' in entry && typeof entry.src === 'string')
264
+ return entry.src;
265
+ throw new Error('`exports` field in package.json must have a `src` field');
266
+ })
267
+ .map((entry) => path.resolve(cwd, entry))
268
+ .filter((entry) => /\.(m|c)?[jt]sx?$/.test(entry)));
269
+ else if (pkgJson.main)
270
+ entries.push(path.resolve(cwd, pkgJson.main));
271
+ return entries;
272
+ }
273
+ /**
274
+ * Gets the source directory from the entry files.
275
+ *
276
+ * @param options - Options for getting the source directory.
277
+ * @returns Source directory.
278
+ */
279
+ export function getSourceDir(options) {
280
+ const { cwd = process.cwd(), entries } = options;
281
+ if (entries.length === 0)
282
+ return path.resolve(cwd, 'src');
283
+ // Get directories of all entries
284
+ const dirs = entries.map((entry) => path.dirname(entry));
285
+ // Split each directory into segments
286
+ const segments = dirs.map((dir) => dir.split(path.sep));
287
+ // Find common segments
288
+ const commonSegments = [];
289
+ const minLength = Math.min(...segments.map((s) => s.length));
290
+ for (let i = 0; i < minLength; i++) {
291
+ const segment = segments[0][i];
292
+ if (segments.every((s) => s[i] === segment))
293
+ commonSegments.push(segment);
294
+ else
295
+ break;
296
+ }
297
+ const commonPath = commonSegments.join(path.sep);
298
+ return path.resolve(cwd, path.relative(cwd, commonPath).split(path.sep)[0]);
299
+ }
300
+ /**
301
+ * Reads the package.json file from the given working directory.
302
+ *
303
+ * @param cwd - Working directory to read the package.json file from.
304
+ * @returns Parsed package.json file as an object.
305
+ */
306
+ const packageJsonCache = new Map();
307
+ export async function readPackageJson(options) {
308
+ const { cwd } = options;
309
+ if (packageJsonCache.has(cwd))
310
+ return packageJsonCache.get(cwd);
311
+ const packageJson = await fs.readFile(path.resolve(cwd, 'package.json'), 'utf-8').then(JSON.parse);
312
+ packageJsonCache.set(cwd, packageJson);
313
+ return packageJson;
314
+ }
315
+ /**
316
+ * Reads the tsconfig.json file from the given working directory.
317
+ *
318
+ * @param cwd - Working directory to read the tsconfig.json file from.
319
+ * @param project - Path to tsconfig.json file, relative to the working directory. @default './tsconfig.json'
320
+ * @returns Parsed tsconfig.json file as an object.
321
+ */
322
+ const tsconfigJsonCache = new Map();
323
+ export async function readTsconfigJson(options) {
324
+ const { cwd, project = './tsconfig.json' } = options;
325
+ if (tsconfigJsonCache.has(cwd))
326
+ return tsconfigJsonCache.get(cwd);
327
+ const result = await Tsconfig.parse(path.resolve(cwd, project));
328
+ tsconfigJsonCache.set(cwd, result.tsconfig);
329
+ return result.tsconfig;
330
+ }
331
+ /**
332
+ * Transpiles a package.
333
+ *
334
+ * @param options - Options for transpiling a package.
335
+ * @returns Transpilation artifacts.
336
+ */
337
+ export async function transpile(options) {
338
+ const { cwd = process.cwd(), entries, project = './tsconfig.json', tsgo } = options;
339
+ const tsConfigJson = await readTsconfigJson({ cwd, project });
340
+ const tsconfigPath = path.resolve(cwd, project);
341
+ const { module: mod, moduleResolution: modRes } = tsConfigJson.compilerOptions ?? {};
342
+ // TODO: CLI `zile check --fix` command to add these and rewrite extensions in project (if needed).
343
+ // TODO: extract to Package.checkTsconfig()
344
+ const isNodeNext = (val) => val === 'nodenext' || val === 'NodeNext';
345
+ const errors = [];
346
+ if (!isNodeNext(mod))
347
+ errors.push(` - "module" must be "nodenext". Found: ${mod ? `"${mod}"` : 'undefined'}`);
348
+ if (!isNodeNext(modRes))
349
+ errors.push(` - "moduleResolution" must be "nodenext". Found: ${modRes ? `"${modRes}"` : 'undefined'}`);
350
+ if (errors.length > 0)
351
+ throw new Error(`${tsconfigPath} has invalid configuration:\n${errors.join('\n')}`);
352
+ const compilerOptions = {
353
+ ...tsConfigJson.compilerOptions,
354
+ composite: false,
355
+ declaration: true,
356
+ declarationDir: tsConfigJson.compilerOptions?.declarationDir,
357
+ declarationMap: true,
358
+ emitDeclarationOnly: false,
359
+ esModuleInterop: true,
360
+ noEmit: false,
361
+ outDir: tsConfigJson.compilerOptions?.outDir ?? path.resolve(cwd, 'dist'),
362
+ skipLibCheck: true,
363
+ sourceMap: true,
364
+ target: tsConfigJson.compilerOptions?.target ?? 'es2021',
365
+ };
366
+ const tsConfig = {
367
+ compilerOptions,
368
+ exclude: tsConfigJson.exclude ?? [],
369
+ include: [...(tsConfigJson.include ?? []), ...entries],
370
+ };
371
+ const tmpProject = path.resolve(cwd, 'tsconfig.tmp.json');
372
+ await fs.writeFile(tmpProject, JSON.stringify(tsConfig, null, 2));
373
+ await fs.rm(compilerOptions.outDir, { recursive: true }).catch(() => { });
374
+ const tsc = findTsc({ bin: tsgo ? 'tsgo' : 'tsc', cwd });
375
+ const child = cp.spawn(tsc, ['--project', tmpProject], {
376
+ cwd,
377
+ stdio: 'inherit',
378
+ });
379
+ const promise = Promise.withResolvers();
380
+ child.on('close', (code) => {
381
+ if (code === 0)
382
+ promise.resolve(null);
383
+ else
384
+ promise.reject(new Error(`tsgo exited with code ${code}`));
385
+ });
386
+ child.on('error', promise.reject);
387
+ await promise.promise.finally(() => fs.rm(tmpProject));
388
+ return { tsConfig };
389
+ }
390
+ /**
391
+ * Writes the package.json file to the given working directory.
392
+ *
393
+ * @param cwd - Working directory to write the package.json file to.
394
+ * @param pkgJson - Package.json file to write.
395
+ */
396
+ export async function writePackageJson(cwd, pkgJson) {
397
+ await fs.writeFile(path.resolve(cwd, 'package.json'), JSON.stringify(pkgJson, null, 2), 'utf-8');
398
+ }
399
+ /**
400
+ * Finds the nearest node_modules/.bin binary by traversing up the directory tree.
401
+ *
402
+ * @param options - Options for finding the binary.
403
+ * @returns Absolute path to the binary.
404
+ * @internal
405
+ */
406
+ // biome-ignore lint/correctness/noUnusedVariables: _
407
+ function findTsc(options) {
408
+ const { bin, cwd = import.meta.dirname } = options;
409
+ let currentDir = path.resolve(cwd);
410
+ const root = path.parse(currentDir).root;
411
+ while (currentDir !== root) {
412
+ const binPath = path.join(currentDir, 'node_modules', '.bin', bin);
413
+ if (fsSync.existsSync(binPath))
414
+ return binPath;
415
+ const parentDir = path.dirname(currentDir);
416
+ if (parentDir === currentDir)
417
+ break;
418
+ currentDir = parentDir;
419
+ }
420
+ throw new Error(`node_modules/.bin/${bin} not found`);
421
+ }
422
+ //# sourceMappingURL=Package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Package.js","sourceRoot":"","sources":["../src/Package.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import * as Package from './Package.js';
2
+ /**
3
+ * Builds all packages in the given working directory.
4
+ *
5
+ * @param options - Options for building packages
6
+ */
7
+ export declare function build(options: build.Options): Promise<Package.build.ReturnType[]>;
8
+ export declare namespace build {
9
+ type Options = find.Options;
10
+ }
11
+ /**
12
+ * Finds all packages (containing a `package.json`) matching
13
+ * the given working directory.
14
+ *
15
+ * @param options - Options for finding packages
16
+ * @returns Array of absolute paths to package directories
17
+ */
18
+ export declare function find(options?: find.Options): Promise<string[]>;
19
+ export declare namespace find {
20
+ type Options = {
21
+ /** Working directory to start searching from. @default process.cwd() */
22
+ cwd?: string | undefined;
23
+ /** Glob patterns to include. @default ['**'] */
24
+ includes?: string[] | undefined;
25
+ };
26
+ }
27
+ //# sourceMappingURL=Packages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Packages.d.ts","sourceRoot":"","sources":["../src/Packages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,uCAGjD;AAED,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,KAAK,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;CAC5B;AAED;;;;;;GAMG;AACH,wBAAsB,IAAI,CAAC,OAAO,GAAE,IAAI,CAAC,OAAY,qBA8BpD;AAED,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,KAAK,OAAO,GAAG;QACb,wEAAwE;QACxE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACxB,gDAAgD;QAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;KAChC,CAAA;CACF"}
@@ -0,0 +1,48 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import * as Package from './Package.js';
4
+ /**
5
+ * Builds all packages in the given working directory.
6
+ *
7
+ * @param options - Options for building packages
8
+ */
9
+ export async function build(options) {
10
+ const packages = await find(options);
11
+ return await Promise.all(packages.map((cwd) => Package.build({ cwd })));
12
+ }
13
+ /**
14
+ * Finds all packages (containing a `package.json`) matching
15
+ * the given working directory.
16
+ *
17
+ * @param options - Options for finding packages
18
+ * @returns Array of absolute paths to package directories
19
+ */
20
+ export async function find(options = {}) {
21
+ const cwd = options.cwd ?? process.cwd();
22
+ const patterns = options.includes ?? ['**', '!**/node_modules/**'];
23
+ // Separate includes and excludes from patterns
24
+ const includes = [];
25
+ const excludes = [];
26
+ for (const pattern of patterns) {
27
+ if (pattern.startsWith('!'))
28
+ excludes.push(pattern.slice(1));
29
+ else
30
+ includes.push(pattern);
31
+ }
32
+ const packageSet = new Set();
33
+ for (const pattern of includes) {
34
+ // Find all package.json files matching the pattern
35
+ const globPattern = (() => {
36
+ if (path.basename(pattern) === 'package.json')
37
+ return pattern;
38
+ return path.join(pattern, 'package.json');
39
+ })();
40
+ for await (const file of fs.glob(globPattern, { cwd, exclude: excludes })) {
41
+ const dir = path.dirname(file);
42
+ const absolutePath = path.resolve(cwd, dir);
43
+ packageSet.add(absolutePath);
44
+ }
45
+ }
46
+ return Array.from(packageSet);
47
+ }
48
+ //# sourceMappingURL=Packages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Packages.js","sourceRoot":"","sources":["../src/Packages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAsB;IAChD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAA;IACpC,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;AACzE,CAAC;AAMD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,UAAwB,EAAE;IACnD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAA;IAElE,+CAA+C;IAC/C,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;;YACvD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAA;IAEpC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,mDAAmD;QACnD,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE;YACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,cAAc;gBAAE,OAAO,OAAO,CAAA;YAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;QAC3C,CAAC,CAAC,EAAE,CAAA;QAEJ,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YAC3C,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;AAC/B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * as Cli from './Cli.js';
2
+ export * as Package from './Package.js';
3
+ export * as Packages from './Packages.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export * as Cli from './Cli.js';
2
+ export * as Package from './Package.js';
3
+ export * as Packages from './Packages.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA"}
@@ -0,0 +1,17 @@
1
+ import type { Command } from 'cac';
2
+ export declare function build(command: Command, options?: build.Options): Promise<Command>;
3
+ export declare namespace build {
4
+ type Options = {
5
+ /** Whether to link output files to source files for development */
6
+ link?: boolean | undefined;
7
+ };
8
+ type CommandOptions = {
9
+ /** Working directory to build */
10
+ cwd?: string | undefined;
11
+ /** Path to tsconfig.json file, relative to the working directory. @default './tsconfig.json' */
12
+ project?: string | undefined;
13
+ /** Use tsgo for transpilation */
14
+ tsgo?: boolean | undefined;
15
+ };
16
+ }
17
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/internal/cli/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAGlC,wBAAsB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,KAAK,CAAC,OAAY,oBAiBxE;AAED,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,KAAK,OAAO,GAAG;QACb,mEAAmE;QACnE,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAC3B,CAAA;IAED,KAAK,cAAc,GAAG;QACpB,iCAAiC;QACjC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACxB,gGAAgG;QAChG,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B,iCAAiC;QACjC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAC3B,CAAA;CACF"}
@@ -0,0 +1,16 @@
1
+ import * as Package from '../../Package.js';
2
+ export async function build(command, options = {}) {
3
+ const { link = false } = options;
4
+ return command
5
+ .option('--cwd <directory>', 'Working directory to build')
6
+ .option('--includes <patterns...>', 'Glob patterns to include')
7
+ .option('--project <path>', 'Path to tsconfig.json file, relative to the working directory.')
8
+ .option('--tsgo', 'Use tsgo for transpilation')
9
+ .action(async (options1, options2) => {
10
+ const { cwd = process.cwd(), project = './tsconfig.json', tsgo = false, } = typeof options1 === 'object' ? options1 : options2;
11
+ console.log(`→ ${link ? 'Linking' : 'Building'} package at ${cwd}`);
12
+ await Package.build({ cwd, link, project, tsgo });
13
+ console.log(`✔︎ ${link ? 'Linking' : 'Building'} completed successfully`);
14
+ });
15
+ }
16
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/internal/cli/commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAE3C,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAgB,EAAE,UAAyB,EAAE;IACvE,MAAM,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAChC,OAAO,OAAO;SACX,MAAM,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;SACzD,MAAM,CAAC,0BAA0B,EAAE,0BAA0B,CAAC;SAC9D,MAAM,CAAC,kBAAkB,EAAE,gEAAgE,CAAC;SAC5F,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,QAA8B,EAAE,QAA8B,EAAE,EAAE;QAC/E,MAAM,EACJ,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EACnB,OAAO,GAAG,iBAAiB,EAC3B,IAAI,GAAG,KAAK,GACb,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAA;QACtD,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,eAAe,GAAG,EAAE,CAAC,CAAA;QACnE,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QACjD,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,yBAAyB,CAAC,CAAA;IAC3E,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "zile",
3
+ "type": "module",
4
+ "version": "0.0.2",
5
+ "license": "MIT",
6
+ "bin": {
7
+ "zile": "./dist/Cli.js"
8
+ },
9
+ "scripts": {
10
+ "build": "bun src/Cli.ts",
11
+ "changeset:publish": "bun run build && changeset publish",
12
+ "changeset:version": "changeset version",
13
+ "check": "biome check --fix --unsafe",
14
+ "check:types": "tsc -b",
15
+ "test": "vitest --watch=false"
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "src"
20
+ ],
21
+ "main": "./dist/index.js",
22
+ "packageManager": "bun@1.3",
23
+ "dependencies": {
24
+ "cac": "6.7.14",
25
+ "tsconfck": "3.1.6"
26
+ },
27
+ "peerDependencies": {
28
+ "@typescript/native-preview": ">=7.0.0",
29
+ "typescript": ">=5"
30
+ },
31
+ "peerDependenciesMeta": {
32
+ "@typescript/native-preview": {
33
+ "optional": true
34
+ },
35
+ "typescript": {
36
+ "optional": true
37
+ }
38
+ },
39
+ "devDependencies": {
40
+ "@arethetypeswrong/cli": "0.18.2",
41
+ "@biomejs/biome": "^2.2.5",
42
+ "@changesets/changelog-github": "^0.5.0",
43
+ "@changesets/cli": "^2.27.7",
44
+ "@types/node": "^24.7.1",
45
+ "publint": "0.3.14",
46
+ "type-fest": "^5.0.1",
47
+ "vitest": "^3.2.4"
48
+ },
49
+ "repository": "wevm/zile",
50
+ "sideEffects": false,
51
+ "module": "./dist/index.js",
52
+ "types": "./dist/index.d.ts",
53
+ "exports": {
54
+ ".": {
55
+ "src": "./src/index.ts",
56
+ "types": "./dist/index.d.ts",
57
+ "default": "./dist/index.js"
58
+ }
59
+ }
60
+ }