lpc-forge 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/CREDITS.csv +22985 -0
  2. package/LICENSE +674 -0
  3. package/README.md +281 -0
  4. package/assets/music/.gitkeep +0 -0
  5. package/dist/character/batch.d.ts +17 -0
  6. package/dist/character/batch.js +48 -0
  7. package/dist/character/batch.js.map +1 -0
  8. package/dist/character/composer.d.ts +3 -0
  9. package/dist/character/composer.js +164 -0
  10. package/dist/character/composer.js.map +1 -0
  11. package/dist/character/definitions.d.ts +16 -0
  12. package/dist/character/definitions.js +116 -0
  13. package/dist/character/definitions.js.map +1 -0
  14. package/dist/character/presets.d.ts +6 -0
  15. package/dist/character/presets.js +246 -0
  16. package/dist/character/presets.js.map +1 -0
  17. package/dist/character/slicer.d.ts +8 -0
  18. package/dist/character/slicer.js +66 -0
  19. package/dist/character/slicer.js.map +1 -0
  20. package/dist/character/types.d.ts +48 -0
  21. package/dist/character/types.js +32 -0
  22. package/dist/character/types.js.map +1 -0
  23. package/dist/cli.d.ts +2 -0
  24. package/dist/cli.js +938 -0
  25. package/dist/export/frames.d.ts +5 -0
  26. package/dist/export/frames.js +15 -0
  27. package/dist/export/frames.js.map +1 -0
  28. package/dist/export/godot.d.ts +17 -0
  29. package/dist/export/godot.js +464 -0
  30. package/dist/export/godot.js.map +1 -0
  31. package/dist/export/types.d.ts +11 -0
  32. package/dist/export/types.js +2 -0
  33. package/dist/export/types.js.map +1 -0
  34. package/dist/license.d.ts +49 -0
  35. package/dist/license.js +271 -0
  36. package/dist/map/cellular.d.ts +3 -0
  37. package/dist/map/cellular.js +191 -0
  38. package/dist/map/cellular.js.map +1 -0
  39. package/dist/map/dungeon.d.ts +3 -0
  40. package/dist/map/dungeon.js +238 -0
  41. package/dist/map/dungeon.js.map +1 -0
  42. package/dist/map/multifloor.d.ts +20 -0
  43. package/dist/map/multifloor.js +57 -0
  44. package/dist/map/multifloor.js.map +1 -0
  45. package/dist/map/overworld.d.ts +3 -0
  46. package/dist/map/overworld.js +205 -0
  47. package/dist/map/overworld.js.map +1 -0
  48. package/dist/map/town.d.ts +7 -0
  49. package/dist/map/town.js +181 -0
  50. package/dist/map/town.js.map +1 -0
  51. package/dist/map/types.d.ts +65 -0
  52. package/dist/map/types.js +16 -0
  53. package/dist/map/types.js.map +1 -0
  54. package/dist/map/wfc.d.ts +18 -0
  55. package/dist/map/wfc.js +192 -0
  56. package/dist/map/wfc.js.map +1 -0
  57. package/dist/tileset/atlas.d.ts +15 -0
  58. package/dist/tileset/atlas.js +55 -0
  59. package/dist/tileset/atlas.js.map +1 -0
  60. package/dist/tileset/registry.d.ts +12 -0
  61. package/dist/tileset/registry.js +71 -0
  62. package/dist/tileset/registry.js.map +1 -0
  63. package/dist/tileset/terrain.d.ts +3 -0
  64. package/dist/tileset/terrain.js +110 -0
  65. package/dist/tileset/terrain.js.map +1 -0
  66. package/dist/utils/credits.d.ts +11 -0
  67. package/dist/utils/credits.js +74 -0
  68. package/dist/utils/credits.js.map +1 -0
  69. package/dist/utils/image.d.ts +17 -0
  70. package/dist/utils/image.js +94 -0
  71. package/dist/utils/image.js.map +1 -0
  72. package/dist/utils/rng.d.ts +18 -0
  73. package/dist/utils/rng.js +48 -0
  74. package/dist/utils/rng.js.map +1 -0
  75. package/package.json +77 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/character/definitions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { CharacterPreset } from './types.js';
2
+ /**
3
+ * Pre-built character configurations.
4
+ * Layer paths verified against actual spritesheets/ and sheet_definitions/ contents.
5
+ */
6
+ export declare const PRESETS: Record<string, CharacterPreset>;
@@ -0,0 +1,246 @@
1
+ /**
2
+ * Pre-built character configurations.
3
+ * Layer paths verified against actual spritesheets/ and sheet_definitions/ contents.
4
+ */
5
+ export const PRESETS = {
6
+ warrior: {
7
+ name: 'Warrior',
8
+ description: 'Plate armor, longsword, chestnut hair',
9
+ spec: {
10
+ bodyType: 'male',
11
+ layers: [
12
+ { category: 'body', subcategory: 'body', variant: 'light' },
13
+ { category: 'hair', subcategory: 'hair_plain', variant: 'chestnut' },
14
+ { category: 'torso', subcategory: 'torso_armour_plate', variant: 'steel' },
15
+ { category: 'legs', subcategory: 'legs_armour', variant: 'steel' },
16
+ { category: 'feet', subcategory: 'feet_armour', variant: 'steel' },
17
+ ],
18
+ },
19
+ },
20
+ mage: {
21
+ name: 'Mage',
22
+ description: 'Blue longsleeve, white hair',
23
+ spec: {
24
+ bodyType: 'male',
25
+ layers: [
26
+ { category: 'body', subcategory: 'body', variant: 'light' },
27
+ { category: 'hair', subcategory: 'hair_plain', variant: 'white' },
28
+ { category: 'torso', subcategory: 'torso_clothes_longsleeve', variant: 'blue' },
29
+ ],
30
+ },
31
+ },
32
+ rogue: {
33
+ name: 'Rogue',
34
+ description: 'Leather armor, dark hair',
35
+ spec: {
36
+ bodyType: 'female',
37
+ layers: [
38
+ { category: 'body', subcategory: 'body', variant: 'olive' },
39
+ { category: 'hair', subcategory: 'hair_plain', variant: 'black' },
40
+ { category: 'torso', subcategory: 'torso_armour_leather', variant: 'brown' },
41
+ { category: 'legs', subcategory: 'legs_pants', variant: 'teal' },
42
+ { category: 'feet', subcategory: 'feet_shoes_basic', variant: 'brown' },
43
+ ],
44
+ },
45
+ },
46
+ ranger: {
47
+ name: 'Ranger',
48
+ description: 'Green tunic, bow, chestnut hair',
49
+ spec: {
50
+ bodyType: 'male',
51
+ layers: [
52
+ { category: 'body', subcategory: 'body', variant: 'bronze' },
53
+ { category: 'hair', subcategory: 'hair_plain', variant: 'chestnut' },
54
+ { category: 'torso', subcategory: 'torso_clothes_shortsleeve', variant: 'green' },
55
+ { category: 'legs', subcategory: 'legs_pants', variant: 'brown' },
56
+ { category: 'feet', subcategory: 'feet_boots_basic', variant: 'brown' },
57
+ ],
58
+ },
59
+ },
60
+ villager: {
61
+ name: 'Villager',
62
+ description: 'Simple clothes, no weapon',
63
+ spec: {
64
+ bodyType: 'female',
65
+ layers: [
66
+ { category: 'body', subcategory: 'body', variant: 'amber' },
67
+ { category: 'hair', subcategory: 'hair_plain', variant: 'blonde' },
68
+ { category: 'torso', subcategory: 'torso_clothes_shortsleeve', variant: 'white' },
69
+ { category: 'legs', subcategory: 'legs_pants', variant: 'brown' },
70
+ { category: 'feet', subcategory: 'feet_shoes_basic', variant: 'brown' },
71
+ ],
72
+ },
73
+ },
74
+ paladin: {
75
+ name: 'Paladin',
76
+ description: 'Plate armor, shield, divine protector',
77
+ spec: {
78
+ bodyType: 'female',
79
+ layers: [
80
+ { category: 'body', subcategory: 'body', variant: 'light' },
81
+ { category: 'hair', subcategory: 'hair_plain', variant: 'blonde' },
82
+ { category: 'torso', subcategory: 'torso_armour_plate', variant: 'gold' },
83
+ { category: 'legs', subcategory: 'legs_armour', variant: 'gold' },
84
+ { category: 'feet', subcategory: 'feet_armour', variant: 'gold' },
85
+ { category: 'weapons', subcategory: 'shield_crusader', variant: 'crusader' },
86
+ ],
87
+ },
88
+ },
89
+ necromancer: {
90
+ name: 'Necromancer',
91
+ description: 'Dark robes, white hair, staff',
92
+ spec: {
93
+ bodyType: 'male',
94
+ layers: [
95
+ { category: 'body', subcategory: 'body', variant: 'light' },
96
+ { category: 'hair', subcategory: 'hair_plain', variant: 'white' },
97
+ { category: 'torso', subcategory: 'torso_clothes_robe', variant: 'black' },
98
+ { category: 'weapons', subcategory: 'weapon_magic_gnarled', variant: 'dark' },
99
+ ],
100
+ },
101
+ },
102
+ knight: {
103
+ name: 'Knight',
104
+ description: 'Full plate, helm, sword',
105
+ spec: {
106
+ bodyType: 'male',
107
+ layers: [
108
+ { category: 'body', subcategory: 'body', variant: 'light' },
109
+ { category: 'torso', subcategory: 'torso_armour_plate', variant: 'steel' },
110
+ { category: 'legs', subcategory: 'legs_armour', variant: 'steel' },
111
+ { category: 'feet', subcategory: 'feet_armour', variant: 'steel' },
112
+ { category: 'arms', subcategory: 'arms_armour', variant: 'steel' },
113
+ { category: 'headwear', subcategory: 'hat_helmet_barbuta', variant: 'steel' },
114
+ { category: 'weapons', subcategory: 'weapon_sword_longsword', variant: 'longsword' },
115
+ ],
116
+ },
117
+ },
118
+ barbarian: {
119
+ name: 'Barbarian',
120
+ description: 'Muscular body, minimal armor, waraxe',
121
+ spec: {
122
+ bodyType: 'muscular',
123
+ layers: [
124
+ { category: 'body', subcategory: 'body', variant: 'bronze' },
125
+ { category: 'hair', subcategory: 'hair_plain', variant: 'redhead' },
126
+ { category: 'legs', subcategory: 'legs_fur', variant: 'base' },
127
+ { category: 'feet', subcategory: 'feet_boots_basic', variant: 'brown' },
128
+ { category: 'weapons', subcategory: 'weapon_blunt_waraxe', variant: 'waraxe' },
129
+ ],
130
+ },
131
+ },
132
+ monk: {
133
+ name: 'Monk',
134
+ description: 'Simple robes, bald, no weapon',
135
+ spec: {
136
+ bodyType: 'male',
137
+ layers: [
138
+ { category: 'body', subcategory: 'body', variant: 'olive' },
139
+ { category: 'hair', subcategory: 'hair_buzzcut', variant: 'black' },
140
+ { category: 'torso', subcategory: 'torso_clothes_robe', variant: 'brown' },
141
+ { category: 'feet', subcategory: 'feet_sandals', variant: 'brown' },
142
+ ],
143
+ },
144
+ },
145
+ thief: {
146
+ name: 'Thief',
147
+ description: 'Dark clothes, hood, dagger',
148
+ spec: {
149
+ bodyType: 'male',
150
+ layers: [
151
+ { category: 'body', subcategory: 'body', variant: 'olive' },
152
+ { category: 'torso', subcategory: 'torso_armour_leather', variant: 'black' },
153
+ { category: 'legs', subcategory: 'legs_pants', variant: 'charcoal' },
154
+ { category: 'feet', subcategory: 'feet_shoes_basic', variant: 'black' },
155
+ { category: 'headwear', subcategory: 'hat_hood_cloth', variant: 'hood_black' },
156
+ { category: 'weapons', subcategory: 'weapon_sword_dagger', variant: 'dagger' },
157
+ ],
158
+ },
159
+ },
160
+ healer: {
161
+ name: 'Healer',
162
+ description: 'White robes, staff',
163
+ spec: {
164
+ bodyType: 'female',
165
+ layers: [
166
+ { category: 'body', subcategory: 'body', variant: 'light' },
167
+ { category: 'hair', subcategory: 'hair_plain', variant: 'auburn' },
168
+ { category: 'torso', subcategory: 'torso_clothes_robe', variant: 'white' },
169
+ { category: 'weapons', subcategory: 'weapon_magic_loop', variant: 'light' },
170
+ ],
171
+ },
172
+ },
173
+ archer: {
174
+ name: 'Archer',
175
+ description: 'Leather armor, bow',
176
+ spec: {
177
+ bodyType: 'female',
178
+ layers: [
179
+ { category: 'body', subcategory: 'body', variant: 'bronze' },
180
+ { category: 'hair', subcategory: 'hair_ponytail', variant: 'brunette' },
181
+ { category: 'torso', subcategory: 'torso_armour_leather', variant: 'forest' },
182
+ { category: 'legs', subcategory: 'legs_pants', variant: 'brown' },
183
+ { category: 'feet', subcategory: 'feet_boots_basic', variant: 'brown' },
184
+ { category: 'weapons', subcategory: 'weapon_ranged_bow_normal', variant: 'medium' },
185
+ ],
186
+ },
187
+ },
188
+ merchant: {
189
+ name: 'Merchant',
190
+ description: 'Fancy clothes, no weapon, hat',
191
+ spec: {
192
+ bodyType: 'male',
193
+ layers: [
194
+ { category: 'body', subcategory: 'body', variant: 'light' },
195
+ { category: 'hair', subcategory: 'hair_plain', variant: 'brown' },
196
+ { category: 'torso', subcategory: 'torso_clothes_longsleeve', variant: 'maroon' },
197
+ { category: 'legs', subcategory: 'legs_formal', variant: 'base' },
198
+ { category: 'feet', subcategory: 'feet_shoes_basic', variant: 'brown' },
199
+ { category: 'headwear', subcategory: 'hat_formal_tophat', variant: 'base' },
200
+ ],
201
+ },
202
+ },
203
+ guard: {
204
+ name: 'Guard',
205
+ description: 'Chainmail, spear, helm',
206
+ spec: {
207
+ bodyType: 'male',
208
+ layers: [
209
+ { category: 'body', subcategory: 'body', variant: 'light' },
210
+ { category: 'hair', subcategory: 'hair_plain', variant: 'brown' },
211
+ { category: 'torso', subcategory: 'torso_chainmail', variant: 'gray' },
212
+ { category: 'legs', subcategory: 'legs_armour', variant: 'iron' },
213
+ { category: 'feet', subcategory: 'feet_armour', variant: 'iron' },
214
+ { category: 'headwear', subcategory: 'hat_helmet_mail', variant: 'iron' },
215
+ { category: 'weapons', subcategory: 'weapon_polearm_spear', variant: 'medium' },
216
+ ],
217
+ },
218
+ },
219
+ skeleton: {
220
+ name: 'Skeleton',
221
+ description: 'Undead skeleton body',
222
+ spec: {
223
+ bodyType: 'male',
224
+ layers: [
225
+ { category: 'body', subcategory: 'body_skeleton', variant: 'skeleton' },
226
+ { category: 'head', subcategory: 'heads_skeleton', variant: 'skeleton' },
227
+ ],
228
+ },
229
+ },
230
+ peasant: {
231
+ name: 'Peasant',
232
+ description: 'Ragged simple clothes, tool',
233
+ spec: {
234
+ bodyType: 'male',
235
+ layers: [
236
+ { category: 'body', subcategory: 'body', variant: 'amber' },
237
+ { category: 'hair', subcategory: 'hair_messy1', variant: 'brown' },
238
+ { category: 'torso', subcategory: 'torso_clothes_shortsleeve', variant: 'brown' },
239
+ { category: 'legs', subcategory: 'legs_pants', variant: 'brown' },
240
+ { category: 'feet', subcategory: 'feet_shoes_basic', variant: 'brown' },
241
+ { category: 'tools', subcategory: 'tool_thrust', variant: 'hoe' },
242
+ ],
243
+ },
244
+ },
245
+ };
246
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../src/character/presets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type SliceResult } from './types.js';
2
+ export interface SliceOptions {
3
+ animations?: string[];
4
+ directions?: string[];
5
+ format?: 'png' | 'webp';
6
+ }
7
+ /** Slice a universal spritesheet into individual frames */
8
+ export declare function sliceCharacter(sheetBuffer: Buffer, outputDir: string, options?: SliceOptions): Promise<SliceResult>;
@@ -0,0 +1,66 @@
1
+ import sharp from 'sharp';
2
+ import { mkdir, writeFile } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { ANIMATIONS, FRAME_SIZE, DIRECTIONS, } from './types.js';
5
+ /** Slice a universal spritesheet into individual frames */
6
+ export async function sliceCharacter(sheetBuffer, outputDir, options) {
7
+ const format = options?.format ?? 'png';
8
+ const animFilter = options?.animations;
9
+ const dirFilter = options?.directions;
10
+ let totalFrames = 0;
11
+ const animResults = {};
12
+ const meta = await sharp(sheetBuffer).metadata();
13
+ const sheetWidth = meta.width;
14
+ const sheetHeight = meta.height;
15
+ for (const [animName, animInfo] of Object.entries(ANIMATIONS)) {
16
+ if (animFilter && !animFilter.includes(animName))
17
+ continue;
18
+ const animDir = join(outputDir, animName);
19
+ await mkdir(animDir, { recursive: true });
20
+ const dirEntries = [];
21
+ for (let row = 0; row < animInfo.rows; row++) {
22
+ const direction = animInfo.rows === 1 ? 'down' : DIRECTIONS[row];
23
+ if (dirFilter && !dirFilter.includes(direction))
24
+ continue;
25
+ for (let frame = 0; frame < animInfo.frames; frame++) {
26
+ const left = frame * FRAME_SIZE;
27
+ const top = (animInfo.row + row) * FRAME_SIZE;
28
+ // Bounds check
29
+ if (left + FRAME_SIZE > sheetWidth || top + FRAME_SIZE > sheetHeight)
30
+ continue;
31
+ const frameBuffer = await sharp(sheetBuffer)
32
+ .extract({ left, top, width: FRAME_SIZE, height: FRAME_SIZE })
33
+ .toFormat(format)
34
+ .toBuffer();
35
+ const fileName = `${direction}_${frame}.${format}`;
36
+ await writeFile(join(animDir, fileName), frameBuffer);
37
+ totalFrames++;
38
+ }
39
+ dirEntries.push({ direction, frames: animInfo.frames });
40
+ }
41
+ animResults[animName] = dirEntries;
42
+ }
43
+ // Write metadata
44
+ const metadata = {
45
+ frameSize: FRAME_SIZE,
46
+ format,
47
+ animations: Object.fromEntries(Object.entries(ANIMATIONS)
48
+ .filter(([name]) => !animFilter || animFilter.includes(name))
49
+ .map(([name, info]) => [
50
+ name,
51
+ {
52
+ frames: info.frames,
53
+ rows: info.rows,
54
+ directions: info.rows === 1 ? ['down'] : [...DIRECTIONS],
55
+ },
56
+ ])),
57
+ totalFrames,
58
+ };
59
+ await writeFile(join(outputDir, 'metadata.json'), JSON.stringify(metadata, null, 2));
60
+ return {
61
+ framesDir: outputDir,
62
+ totalFrames,
63
+ animations: animResults,
64
+ };
65
+ }
66
+ //# sourceMappingURL=slicer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slicer.js","sourceRoot":"","sources":["../../src/character/slicer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ export interface LayerDefinition {
2
+ name: string;
3
+ priority: number;
4
+ layers: LayerEntry[];
5
+ variants: string[];
6
+ animations: string[];
7
+ matchBodyColor?: boolean;
8
+ typeName?: string;
9
+ }
10
+ export interface LayerEntry {
11
+ zPos: number;
12
+ paths: Record<string, string>;
13
+ customAnimation?: string;
14
+ }
15
+ export interface CharacterSpec {
16
+ bodyType: 'male' | 'female' | 'muscular' | 'teen' | 'child' | 'pregnant';
17
+ layers: CharacterLayer[];
18
+ animations?: string[];
19
+ }
20
+ export interface CharacterLayer {
21
+ category: string;
22
+ subcategory: string;
23
+ variant: string;
24
+ }
25
+ export interface CharacterPreset {
26
+ name: string;
27
+ description: string;
28
+ spec: CharacterSpec;
29
+ }
30
+ export interface SliceResult {
31
+ framesDir: string;
32
+ totalFrames: number;
33
+ animations: Record<string, {
34
+ direction: string;
35
+ frames: number;
36
+ }[]>;
37
+ }
38
+ export declare const FRAME_SIZE = 64;
39
+ export declare const SHEET_WIDTH = 832;
40
+ export declare const SHEET_HEIGHT = 3456;
41
+ export declare const ANIMATIONS: Record<string, {
42
+ frames: number;
43
+ rows: number;
44
+ row: number;
45
+ }>;
46
+ export declare const ANIMATION_FOLDER_MAP: Record<string, string>;
47
+ export declare const DIRECTIONS: readonly ["up", "left", "down", "right"];
48
+ export type Direction = typeof DIRECTIONS[number];
@@ -0,0 +1,32 @@
1
+ export const FRAME_SIZE = 64;
2
+ export const SHEET_WIDTH = 832; // 13 frames wide
3
+ export const SHEET_HEIGHT = 3456; // 54 rows
4
+ // Animation definitions derived from the existing constants.js
5
+ // row = starting row index, rows = number of direction rows, frames = frames per direction
6
+ export const ANIMATIONS = {
7
+ spellcast: { frames: 7, rows: 4, row: 0 },
8
+ thrust: { frames: 8, rows: 4, row: 4 },
9
+ walk: { frames: 9, rows: 4, row: 8 },
10
+ slash: { frames: 6, rows: 4, row: 12 },
11
+ shoot: { frames: 13, rows: 4, row: 16 },
12
+ hurt: { frames: 6, rows: 1, row: 20 },
13
+ climb: { frames: 6, rows: 1, row: 21 },
14
+ idle: { frames: 2, rows: 4, row: 22 },
15
+ jump: { frames: 5, rows: 4, row: 26 },
16
+ sit: { frames: 3, rows: 4, row: 30 },
17
+ emote: { frames: 3, rows: 4, row: 34 },
18
+ run: { frames: 8, rows: 4, row: 38 },
19
+ combat_idle: { frames: 2, rows: 4, row: 42 },
20
+ backslash: { frames: 13, rows: 4, row: 46 },
21
+ halfslash: { frames: 6, rows: 4, row: 50 },
22
+ };
23
+ // Folder name mapping (animation name → actual folder name in spritesheets)
24
+ export const ANIMATION_FOLDER_MAP = {
25
+ combat: 'combat_idle',
26
+ '1h_slash': 'backslash',
27
+ '1h_backslash': 'backslash',
28
+ '1h_halfslash': 'halfslash',
29
+ };
30
+ // Direction order (top to bottom rows in each animation)
31
+ export const DIRECTIONS = ['up', 'left', 'down', 'right'];
32
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/character/types.ts"],"names":[],"mappings":"AAwCA,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;AAE7B,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC,CAAC,iBAAiB;AACjD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,UAAU;AAE5C,+DAA+D;AAC/D,2FAA2F;AAC3F,MAAM,CAAC,MAAM,UAAU,GAAkE;IACvF,SAAS,EAAK,EAAE,MAAM,EAAE,CAAC,EAAG,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;IAC7C,MAAM,EAAQ,EAAE,MAAM,EAAE,CAAC,EAAG,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;IAC7C,IAAI,EAAU,EAAE,MAAM,EAAE,CAAC,EAAG,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;IAC7C,KAAK,EAAS,EAAE,MAAM,EAAE,CAAC,EAAG,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9C,KAAK,EAAS,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9C,IAAI,EAAU,EAAE,MAAM,EAAE,CAAC,EAAG,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9C,KAAK,EAAS,EAAE,MAAM,EAAE,CAAC,EAAG,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9C,IAAI,EAAU,EAAE,MAAM,EAAE,CAAC,EAAG,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9C,IAAI,EAAU,EAAE,MAAM,EAAE,CAAC,EAAG,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9C,GAAG,EAAW,EAAE,MAAM,EAAE,CAAC,EAAG,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9C,KAAK,EAAS,EAAE,MAAM,EAAE,CAAC,EAAG,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9C,GAAG,EAAW,EAAE,MAAM,EAAE,CAAC,EAAG,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9C,WAAW,EAAG,EAAE,MAAM,EAAE,CAAC,EAAG,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9C,SAAS,EAAK,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9C,SAAS,EAAK,EAAE,MAAM,EAAE,CAAC,EAAG,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;CAC/C,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,MAAM,EAAE,aAAa;IACrB,UAAU,EAAE,WAAW;IACvB,cAAc,EAAE,WAAW;IAC3B,cAAc,EAAE,WAAW;CAC5B,CAAC;AAEF,yDAAyD;AACzD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};