@glpkg/publisher 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 (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +215 -0
  3. package/dist/__tests__/cli.test.d.ts +2 -0
  4. package/dist/__tests__/cli.test.d.ts.map +1 -0
  5. package/dist/__tests__/cli.test.js +93 -0
  6. package/dist/__tests__/cli.test.js.map +1 -0
  7. package/dist/__tests__/generic/manifest-reader.test.d.ts +2 -0
  8. package/dist/__tests__/generic/manifest-reader.test.d.ts.map +1 -0
  9. package/dist/__tests__/generic/manifest-reader.test.js +170 -0
  10. package/dist/__tests__/generic/manifest-reader.test.js.map +1 -0
  11. package/dist/__tests__/generic/tarball-creator.test.d.ts +2 -0
  12. package/dist/__tests__/generic/tarball-creator.test.d.ts.map +1 -0
  13. package/dist/__tests__/generic/tarball-creator.test.js +188 -0
  14. package/dist/__tests__/generic/tarball-creator.test.js.map +1 -0
  15. package/dist/__tests__/helpers/git-helper.d.ts +24 -0
  16. package/dist/__tests__/helpers/git-helper.d.ts.map +1 -0
  17. package/dist/__tests__/helpers/git-helper.js +104 -0
  18. package/dist/__tests__/helpers/git-helper.js.map +1 -0
  19. package/dist/__tests__/package-deletion.test.d.ts +2 -0
  20. package/dist/__tests__/package-deletion.test.d.ts.map +1 -0
  21. package/dist/__tests__/package-deletion.test.js +148 -0
  22. package/dist/__tests__/package-deletion.test.js.map +1 -0
  23. package/dist/cli.d.ts +3 -0
  24. package/dist/cli.d.ts.map +1 -0
  25. package/dist/cli.js +61 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/core/generic-publisher.d.ts +7 -0
  28. package/dist/core/generic-publisher.d.ts.map +1 -0
  29. package/dist/core/generic-publisher.js +116 -0
  30. package/dist/core/generic-publisher.js.map +1 -0
  31. package/dist/core/npmrc-manager.d.ts +24 -0
  32. package/dist/core/npmrc-manager.d.ts.map +1 -0
  33. package/dist/core/npmrc-manager.js +148 -0
  34. package/dist/core/npmrc-manager.js.map +1 -0
  35. package/dist/core/project-detector.d.ts +27 -0
  36. package/dist/core/project-detector.d.ts.map +1 -0
  37. package/dist/core/project-detector.js +113 -0
  38. package/dist/core/project-detector.js.map +1 -0
  39. package/dist/core/publisher.d.ts +57 -0
  40. package/dist/core/publisher.d.ts.map +1 -0
  41. package/dist/core/publisher.js +350 -0
  42. package/dist/core/publisher.js.map +1 -0
  43. package/dist/core/version-manager.d.ts +49 -0
  44. package/dist/core/version-manager.d.ts.map +1 -0
  45. package/dist/core/version-manager.js +184 -0
  46. package/dist/core/version-manager.js.map +1 -0
  47. package/dist/generic/gitlab-api.d.ts +16 -0
  48. package/dist/generic/gitlab-api.d.ts.map +1 -0
  49. package/dist/generic/gitlab-api.js +79 -0
  50. package/dist/generic/gitlab-api.js.map +1 -0
  51. package/dist/generic/manifest-reader.d.ts +4 -0
  52. package/dist/generic/manifest-reader.d.ts.map +1 -0
  53. package/dist/generic/manifest-reader.js +60 -0
  54. package/dist/generic/manifest-reader.js.map +1 -0
  55. package/dist/generic/tarball-creator.d.ts +9 -0
  56. package/dist/generic/tarball-creator.d.ts.map +1 -0
  57. package/dist/generic/tarball-creator.js +92 -0
  58. package/dist/generic/tarball-creator.js.map +1 -0
  59. package/dist/index.d.ts +6 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +12 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/types/index.d.ts +46 -0
  64. package/dist/types/index.d.ts.map +1 -0
  65. package/dist/types/index.js +3 -0
  66. package/dist/types/index.js.map +1 -0
  67. package/dist/utils/git.d.ts +25 -0
  68. package/dist/utils/git.d.ts.map +1 -0
  69. package/dist/utils/git.js +115 -0
  70. package/dist/utils/git.js.map +1 -0
  71. package/dist/utils/package.d.ts +14 -0
  72. package/dist/utils/package.d.ts.map +1 -0
  73. package/dist/utils/package.js +86 -0
  74. package/dist/utils/package.js.map +1 -0
  75. package/dist/utils/token.d.ts +6 -0
  76. package/dist/utils/token.d.ts.map +1 -0
  77. package/dist/utils/token.js +43 -0
  78. package/dist/utils/token.js.map +1 -0
  79. package/dist/utils/version.d.ts +14 -0
  80. package/dist/utils/version.d.ts.map +1 -0
  81. package/dist/utils/version.js +143 -0
  82. package/dist/utils/version.js.map +1 -0
  83. package/package.json +64 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 microature
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,215 @@
1
+ # @microature/gitlab-publisher
2
+
3
+ A CLI tool for easily publishing npm packages to GitLab Package Registry.
4
+
5
+ ## Features
6
+
7
+ - 🚀 Publish npm packages to GitLab Package Registry with ease
8
+ - 🔄 Automatic project detection using `glab` CLI or git remote
9
+ - 📦 Support for both project-level and group-level registries
10
+ - 🏷️ Version management (latest, dev, beta tags)
11
+ - 🔒 Secure token management via environment variables
12
+ - 🎨 Beautiful CLI output with colors and spinners
13
+ - 🧪 Dry-run mode for testing
14
+
15
+ ## Installation
16
+
17
+ ```bash
18
+ # Install globally
19
+ npm install -g @microature/gitlab-publisher
20
+
21
+ # Or use as a dev dependency
22
+ npm install -D @microature/gitlab-publisher
23
+ ```
24
+
25
+ ## Prerequisites
26
+
27
+ 1. **GitLab Personal Access Token** with `api` and `write_registry` scopes
28
+ 2. Your package.json should have a `prepublishOnly` script for building (if needed)
29
+ 3. (Optional) `glab` CLI for automatic project detection
30
+
31
+ ## Quick Start
32
+
33
+ ### 1. Create a `.env` file in your project root:
34
+
35
+ ```env
36
+ GITLAB_AUTH_TOKEN=your-personal-access-token
37
+ ```
38
+
39
+ ### 2. Add to your package.json (optional):
40
+
41
+ ```json
42
+ {
43
+ "scripts": {
44
+ "prepublishOnly": "npm run build",
45
+ "publish:gitlab": "gitlab-publish",
46
+ "publish:dev": "gitlab-publish dev",
47
+ "publish:beta": "gitlab-publish beta --bump minor"
48
+ }
49
+ }
50
+ ```
51
+
52
+ ### 3. Publish your package:
53
+
54
+ ```bash
55
+ # Publish latest version
56
+ gitlab-publish
57
+
58
+ # Publish with version bump
59
+ gitlab-publish --bump patch
60
+
61
+ # Publish development version
62
+ gitlab-publish dev
63
+
64
+ # Publish beta version
65
+ gitlab-publish beta --bump minor
66
+
67
+ # Dry run (test without publishing)
68
+ gitlab-publish --dry-run
69
+ ```
70
+
71
+ ## Usage
72
+
73
+ ```bash
74
+ gitlab-publish [type] [options]
75
+ ```
76
+
77
+ ### Arguments
78
+
79
+ - `type` - Publish type: `latest` (default), `dev`, `beta`
80
+
81
+ ### Options
82
+
83
+ - `--bump <type>` - Version bump type: `patch`, `minor`, `major`
84
+ - `--dry-run` - Run without actually publishing
85
+ - `--registry-type <type>` - Registry type: `project` (default), `group`
86
+ - `--token <token>` - GitLab Personal Access Token (overrides .env)
87
+ - `--project-id <id>` - GitLab Project ID (auto-detected from current directory)
88
+ - `--no-build` - Skip prepublishOnly script
89
+ - `--git-tag` - Create git commit and tag when bumping version (uses npm version defaults)
90
+ - `--push` - Push commits and tags to remote after publish (requires --git-tag)
91
+ - `--verbose` - Show detailed output
92
+ - `-V, --version` - Output the version number
93
+ - `-h, --help` - Display help for command
94
+
95
+ ## Examples
96
+
97
+ ### Basic Publishing
98
+
99
+ ```bash
100
+ # Publish current version
101
+ gitlab-publish
102
+
103
+ # Publish with patch version bump (1.0.0 -> 1.0.1)
104
+ gitlab-publish --bump patch
105
+
106
+ # Publish with git commit/tag and push
107
+ gitlab-publish --bump patch --git-tag --push
108
+ ```
109
+
110
+ ### Development Versions
111
+
112
+ ```bash
113
+ # Publish dev version with git commit hash
114
+ # Example: 1.0.0 -> 1.0.1-dev.abc1234
115
+ gitlab-publish dev
116
+ ```
117
+
118
+ ### Beta Versions
119
+
120
+ ```bash
121
+ # Publish beta version
122
+ gitlab-publish beta
123
+
124
+ # Publish beta with minor bump (1.0.0 -> 1.1.0-beta.0)
125
+ gitlab-publish beta --bump minor
126
+ ```
127
+
128
+ ### Testing
129
+
130
+ ```bash
131
+ # Test configuration without publishing
132
+ gitlab-publish --dry-run
133
+
134
+ # Verbose output for debugging
135
+ gitlab-publish --verbose --dry-run
136
+ ```
137
+
138
+ ### Group-Level Registry
139
+
140
+ ```bash
141
+ # Use group-level registry instead of project-level
142
+ gitlab-publish --registry-type group
143
+ ```
144
+
145
+ ## Configuration
146
+
147
+ ### Environment Variables
148
+
149
+ - `GITLAB_AUTH_TOKEN` - Your GitLab Personal Access Token (required)
150
+
151
+ ### Package.json Requirements
152
+
153
+ Your package must have:
154
+ - A scoped name (e.g., `@yourscope/package-name`)
155
+ - A `prepublishOnly` script if building is required
156
+
157
+ Example:
158
+ ```json
159
+ {
160
+ "name": "@yourscope/your-package",
161
+ "version": "1.0.0",
162
+ "scripts": {
163
+ "build": "your-build-command",
164
+ "prepublishOnly": "npm run build"
165
+ }
166
+ }
167
+ ```
168
+
169
+ ## How It Works
170
+
171
+ 1. **Auto-detection**: Automatically detects project information from git remote or `glab` CLI
172
+ 2. **Configuration**: Creates a temporary `.npmrc` with GitLab registry settings
173
+ 3. **Publishing**: Runs `npm publish` with appropriate settings
174
+ 4. **Cleanup**: Removes temporary `.npmrc` file for security
175
+
176
+ ## Troubleshooting
177
+
178
+ ### Authentication Error (403 Forbidden)
179
+
180
+ Ensure your Personal Access Token has the correct scopes:
181
+ - `api`
182
+ - `write_registry`
183
+ - `read_registry` (optional but recommended)
184
+
185
+ ### Project ID Not Found
186
+
187
+ The tool auto-detects the project ID using `glab` CLI. Make sure:
188
+ 1. You have authenticated with `glab auth login`
189
+ 2. You are in a Git repository with GitLab remote
190
+ 3. The repository exists on GitLab
191
+
192
+ ### No prepublishOnly Script
193
+
194
+ Add a `prepublishOnly` script to your package.json:
195
+ ```json
196
+ {
197
+ "scripts": {
198
+ "prepublishOnly": "npm run build"
199
+ }
200
+ }
201
+ ```
202
+
203
+ Or use `--no-build` flag to skip the build step.
204
+
205
+ ## License
206
+
207
+ MIT
208
+
209
+ ## Contributing
210
+
211
+ Issues and pull requests are welcome at [GitLab](https://gitlab.com/microature/gitlab-publisher).
212
+
213
+ ## Author
214
+
215
+ microature
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cli.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const vitest_1 = require("vitest");
37
+ const execa_1 = require("execa");
38
+ const path = __importStar(require("path"));
39
+ const git_helper_1 = require("./helpers/git-helper");
40
+ const CLI_PATH = path.join(__dirname, '../../dist/cli.js');
41
+ const TEST_PACKAGE_DIR = path.join(__dirname, '../../test-package');
42
+ const gitHelper = new git_helper_1.GitTestHelper(TEST_PACKAGE_DIR);
43
+ (0, vitest_1.describe)('CLI', () => {
44
+ (0, vitest_1.it)('should show help when no arguments provided', async () => {
45
+ const { stdout } = await (0, execa_1.execa)('node', [CLI_PATH]);
46
+ (0, vitest_1.expect)(stdout).toContain('Usage: gitlab-publish');
47
+ (0, vitest_1.expect)(stdout).toContain('CLI tool for publishing npm packages');
48
+ });
49
+ (0, vitest_1.it)('should show version', async () => {
50
+ const { stdout } = await (0, execa_1.execa)('node', [CLI_PATH, '--version']);
51
+ (0, vitest_1.expect)(stdout).toMatch(/\d+\.\d+\.\d+/);
52
+ });
53
+ (0, vitest_1.it)('should show help with --help', async () => {
54
+ const { stdout } = await (0, execa_1.execa)('node', [CLI_PATH, '--help']);
55
+ (0, vitest_1.expect)(stdout).toContain('Arguments:');
56
+ (0, vitest_1.expect)(stdout).toContain('type');
57
+ (0, vitest_1.expect)(stdout).toContain('Publish type (latest, dev, beta)');
58
+ });
59
+ (0, vitest_1.it)('should show --force option in help', async () => {
60
+ const { stdout } = await (0, execa_1.execa)('node', [CLI_PATH, '--help']);
61
+ (0, vitest_1.expect)(stdout).toContain('--force');
62
+ (0, vitest_1.expect)(stdout).toContain('skip git clean check');
63
+ });
64
+ });
65
+ (0, vitest_1.describe)('CLI - dev publish (dry-run)', () => {
66
+ (0, vitest_1.beforeEach)(() => {
67
+ // Ensure test-package is in clean state before each test
68
+ gitHelper.ensureClean();
69
+ });
70
+ (0, vitest_1.it)('should run dev publish in dry-run mode', async () => {
71
+ const { stdout } = await (0, execa_1.execa)('node', [CLI_PATH, 'dev', '--dry-run', '--verbose'], {
72
+ cwd: TEST_PACKAGE_DIR,
73
+ });
74
+ (0, vitest_1.expect)(stdout).toContain('GitLab NPM Publisher');
75
+ (0, vitest_1.expect)(stdout).toContain('npm publish --dry-run');
76
+ (0, vitest_1.expect)(stdout).toContain('Cleaned up temporary .npmrc');
77
+ });
78
+ (0, vitest_1.it)('should detect project information', async () => {
79
+ const { stdout } = await (0, execa_1.execa)('node', [CLI_PATH, 'dev', '--dry-run', '--verbose'], {
80
+ cwd: TEST_PACKAGE_DIR,
81
+ });
82
+ (0, vitest_1.expect)(stdout).toContain('Registry URL');
83
+ (0, vitest_1.expect)(stdout).toContain('gitlab.com');
84
+ });
85
+ (0, vitest_1.it)('should verify package.json is clean after dry-run', async () => {
86
+ await (0, execa_1.execa)('node', [CLI_PATH, 'dev', '--dry-run'], {
87
+ cwd: TEST_PACKAGE_DIR,
88
+ });
89
+ // Verify package.json was reset (dry-run shouldn't persist changes)
90
+ (0, vitest_1.expect)(gitHelper.isClean()).toBe(true);
91
+ });
92
+ });
93
+ //# sourceMappingURL=cli.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../src/__tests__/cli.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=manifest-reader.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-reader.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/generic/manifest-reader.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const vitest_1 = require("vitest");
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const manifest_reader_1 = require("../../generic/manifest-reader");
41
+ (0, vitest_1.describe)('manifest-reader', () => {
42
+ let tempDir;
43
+ (0, vitest_1.beforeEach)(() => {
44
+ tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'manifest-test-'));
45
+ });
46
+ (0, vitest_1.afterEach)(() => {
47
+ fs.rmSync(tempDir, { recursive: true, force: true });
48
+ });
49
+ (0, vitest_1.describe)('readManifest', () => {
50
+ (0, vitest_1.it)('should read valid manifest with all required fields', () => {
51
+ const manifestPath = path.join(tempDir, 'skit.json');
52
+ fs.writeFileSync(manifestPath, JSON.stringify({
53
+ name: '@microature/tda-kit',
54
+ version: '0.1.0',
55
+ files: ['profiles/**', 'README.md']
56
+ }));
57
+ const manifest = (0, manifest_reader_1.readManifest)(manifestPath);
58
+ (0, vitest_1.expect)(manifest.name).toBe('@microature/tda-kit');
59
+ (0, vitest_1.expect)(manifest.version).toBe('0.1.0');
60
+ (0, vitest_1.expect)(manifest.files).toEqual(['profiles/**', 'README.md']);
61
+ });
62
+ (0, vitest_1.it)('should read manifest with optional fields', () => {
63
+ const manifestPath = path.join(tempDir, 'custom.json');
64
+ fs.writeFileSync(manifestPath, JSON.stringify({
65
+ name: 'my-package',
66
+ version: '1.0.0',
67
+ files: ['dist/**'],
68
+ exclude: ['**/*.test.js'],
69
+ scripts: { prepublish: 'npm run build' },
70
+ outputName: 'my-pkg-v1.tar.gz'
71
+ }));
72
+ const manifest = (0, manifest_reader_1.readManifest)(manifestPath);
73
+ (0, vitest_1.expect)(manifest.exclude).toEqual(['**/*.test.js']);
74
+ (0, vitest_1.expect)(manifest.scripts?.prepublish).toBe('npm run build');
75
+ (0, vitest_1.expect)(manifest.outputName).toBe('my-pkg-v1.tar.gz');
76
+ });
77
+ (0, vitest_1.it)('should throw error for non-existent file', () => {
78
+ (0, vitest_1.expect)(() => (0, manifest_reader_1.readManifest)('/non/existent/path.json'))
79
+ .toThrow('Manifest file not found');
80
+ });
81
+ (0, vitest_1.it)('should throw error for missing name field', () => {
82
+ const manifestPath = path.join(tempDir, 'invalid.json');
83
+ fs.writeFileSync(manifestPath, JSON.stringify({
84
+ version: '1.0.0',
85
+ files: ['dist/**']
86
+ }));
87
+ (0, vitest_1.expect)(() => (0, manifest_reader_1.readManifest)(manifestPath))
88
+ .toThrow('Manifest missing required field: name');
89
+ });
90
+ (0, vitest_1.it)('should throw error for missing version field', () => {
91
+ const manifestPath = path.join(tempDir, 'invalid.json');
92
+ fs.writeFileSync(manifestPath, JSON.stringify({
93
+ name: 'my-package',
94
+ files: ['dist/**']
95
+ }));
96
+ (0, vitest_1.expect)(() => (0, manifest_reader_1.readManifest)(manifestPath))
97
+ .toThrow('Manifest missing required field: version');
98
+ });
99
+ (0, vitest_1.it)('should throw error for missing files field', () => {
100
+ const manifestPath = path.join(tempDir, 'invalid.json');
101
+ fs.writeFileSync(manifestPath, JSON.stringify({
102
+ name: 'my-package',
103
+ version: '1.0.0'
104
+ }));
105
+ (0, vitest_1.expect)(() => (0, manifest_reader_1.readManifest)(manifestPath))
106
+ .toThrow('Manifest missing required field: files');
107
+ });
108
+ (0, vitest_1.it)('should throw error for empty files array', () => {
109
+ const manifestPath = path.join(tempDir, 'invalid.json');
110
+ fs.writeFileSync(manifestPath, JSON.stringify({
111
+ name: 'my-package',
112
+ version: '1.0.0',
113
+ files: []
114
+ }));
115
+ (0, vitest_1.expect)(() => (0, manifest_reader_1.readManifest)(manifestPath))
116
+ .toThrow('files (must be non-empty array)');
117
+ });
118
+ (0, vitest_1.it)('should handle @scope/name format', () => {
119
+ const manifestPath = path.join(tempDir, 'scoped.json');
120
+ fs.writeFileSync(manifestPath, JSON.stringify({
121
+ name: '@myorg/my-package',
122
+ version: '2.0.0',
123
+ files: ['src/**']
124
+ }));
125
+ const manifest = (0, manifest_reader_1.readManifest)(manifestPath);
126
+ (0, vitest_1.expect)(manifest.name).toBe('@myorg/my-package');
127
+ });
128
+ (0, vitest_1.it)('should handle scope-less name format', () => {
129
+ const manifestPath = path.join(tempDir, 'unscoped.json');
130
+ fs.writeFileSync(manifestPath, JSON.stringify({
131
+ name: 'simple-package',
132
+ version: '1.0.0',
133
+ files: ['index.js']
134
+ }));
135
+ const manifest = (0, manifest_reader_1.readManifest)(manifestPath);
136
+ (0, vitest_1.expect)(manifest.name).toBe('simple-package');
137
+ });
138
+ });
139
+ (0, vitest_1.describe)('getManifestDir', () => {
140
+ (0, vitest_1.it)('should return directory of manifest file', () => {
141
+ const manifestPath = path.join(tempDir, 'skit.json');
142
+ fs.writeFileSync(manifestPath, '{}');
143
+ const dir = (0, manifest_reader_1.getManifestDir)(manifestPath);
144
+ (0, vitest_1.expect)(dir).toBe(tempDir);
145
+ });
146
+ (0, vitest_1.it)('should handle nested paths', () => {
147
+ const nestedDir = path.join(tempDir, 'config', 'packages');
148
+ fs.mkdirSync(nestedDir, { recursive: true });
149
+ const manifestPath = path.join(nestedDir, 'manifest.json');
150
+ fs.writeFileSync(manifestPath, '{}');
151
+ const dir = (0, manifest_reader_1.getManifestDir)(manifestPath);
152
+ (0, vitest_1.expect)(dir).toBe(nestedDir);
153
+ });
154
+ (0, vitest_1.it)('should resolve relative paths', () => {
155
+ const manifestPath = path.join(tempDir, 'skit.json');
156
+ fs.writeFileSync(manifestPath, '{}');
157
+ // Use relative path
158
+ const originalCwd = process.cwd();
159
+ process.chdir(tempDir);
160
+ try {
161
+ const dir = (0, manifest_reader_1.getManifestDir)('./skit.json');
162
+ (0, vitest_1.expect)(dir).toBe(tempDir);
163
+ }
164
+ finally {
165
+ process.chdir(originalCwd);
166
+ }
167
+ });
168
+ });
169
+ });
170
+ //# sourceMappingURL=manifest-reader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-reader.test.js","sourceRoot":"","sources":["../../../src/__tests__/generic/manifest-reader.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tarball-creator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tarball-creator.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/generic/tarball-creator.test.ts"],"names":[],"mappings":""}