@doxbrix/doxloop 0.1.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 (152) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/LICENSE +93 -0
  3. package/README.md +576 -0
  4. package/SECURITY.md +15 -0
  5. package/assets/brand/README.md +8 -0
  6. package/assets/brand/doxloop-favicon.png +0 -0
  7. package/assets/brand/doxloop-logo-dark.png +0 -0
  8. package/assets/brand/doxloop-logo-light.png +0 -0
  9. package/assets/doxbrix-preview.css +6672 -0
  10. package/dist/agents.d.ts +26 -0
  11. package/dist/agents.d.ts.map +1 -0
  12. package/dist/agents.js +258 -0
  13. package/dist/agents.js.map +1 -0
  14. package/dist/args.d.ts +8 -0
  15. package/dist/args.d.ts.map +1 -0
  16. package/dist/args.js +95 -0
  17. package/dist/args.js.map +1 -0
  18. package/dist/artifact-deploy.d.ts +8 -0
  19. package/dist/artifact-deploy.d.ts.map +1 -0
  20. package/dist/artifact-deploy.js +240 -0
  21. package/dist/artifact-deploy.js.map +1 -0
  22. package/dist/auth.d.ts +17 -0
  23. package/dist/auth.d.ts.map +1 -0
  24. package/dist/auth.js +245 -0
  25. package/dist/auth.js.map +1 -0
  26. package/dist/author.d.ts +30 -0
  27. package/dist/author.d.ts.map +1 -0
  28. package/dist/author.js +195 -0
  29. package/dist/author.js.map +1 -0
  30. package/dist/capture.d.ts +10 -0
  31. package/dist/capture.d.ts.map +1 -0
  32. package/dist/capture.js +299 -0
  33. package/dist/capture.js.map +1 -0
  34. package/dist/cli.d.ts +3 -0
  35. package/dist/cli.d.ts.map +1 -0
  36. package/dist/cli.js +558 -0
  37. package/dist/cli.js.map +1 -0
  38. package/dist/deploy.d.ts +22 -0
  39. package/dist/deploy.d.ts.map +1 -0
  40. package/dist/deploy.js +136 -0
  41. package/dist/deploy.js.map +1 -0
  42. package/dist/doctor.d.ts +18 -0
  43. package/dist/doctor.d.ts.map +1 -0
  44. package/dist/doctor.js +222 -0
  45. package/dist/doctor.js.map +1 -0
  46. package/dist/doxbrix-markdown.d.ts +20 -0
  47. package/dist/doxbrix-markdown.d.ts.map +1 -0
  48. package/dist/doxbrix-markdown.js +873 -0
  49. package/dist/doxbrix-markdown.js.map +1 -0
  50. package/dist/errors.d.ts +8 -0
  51. package/dist/errors.d.ts.map +1 -0
  52. package/dist/errors.js +15 -0
  53. package/dist/errors.js.map +1 -0
  54. package/dist/fs.d.ts +6 -0
  55. package/dist/fs.d.ts.map +1 -0
  56. package/dist/fs.js +77 -0
  57. package/dist/fs.js.map +1 -0
  58. package/dist/generator-api.d.ts +69 -0
  59. package/dist/generator-api.d.ts.map +1 -0
  60. package/dist/generator-api.js +6 -0
  61. package/dist/generator-api.js.map +1 -0
  62. package/dist/generator-manager.d.ts +13 -0
  63. package/dist/generator-manager.d.ts.map +1 -0
  64. package/dist/generator-manager.js +155 -0
  65. package/dist/generator-manager.js.map +1 -0
  66. package/dist/generator-runtime.d.ts +24 -0
  67. package/dist/generator-runtime.d.ts.map +1 -0
  68. package/dist/generator-runtime.js +265 -0
  69. package/dist/generator-runtime.js.map +1 -0
  70. package/dist/generators.d.ts +21 -0
  71. package/dist/generators.d.ts.map +1 -0
  72. package/dist/generators.js +202 -0
  73. package/dist/generators.js.map +1 -0
  74. package/dist/preview.d.ts +21 -0
  75. package/dist/preview.d.ts.map +1 -0
  76. package/dist/preview.js +691 -0
  77. package/dist/preview.js.map +1 -0
  78. package/dist/progress.d.ts +19 -0
  79. package/dist/progress.d.ts.map +1 -0
  80. package/dist/progress.js +70 -0
  81. package/dist/progress.js.map +1 -0
  82. package/dist/project.d.ts +37 -0
  83. package/dist/project.d.ts.map +1 -0
  84. package/dist/project.js +499 -0
  85. package/dist/project.js.map +1 -0
  86. package/dist/sync.d.ts +7 -0
  87. package/dist/sync.d.ts.map +1 -0
  88. package/dist/sync.js +221 -0
  89. package/dist/sync.js.map +1 -0
  90. package/dist/types.d.ts +141 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +2 -0
  93. package/dist/types.js.map +1 -0
  94. package/dist/validation.d.ts +4 -0
  95. package/dist/validation.d.ts.map +1 -0
  96. package/dist/validation.js +478 -0
  97. package/dist/validation.js.map +1 -0
  98. package/dist/version.d.ts +3 -0
  99. package/dist/version.d.ts.map +1 -0
  100. package/dist/version.js +5 -0
  101. package/dist/version.js.map +1 -0
  102. package/docs/agent-compatibility.md +41 -0
  103. package/docs/ci-and-automation.md +56 -0
  104. package/docs/doxbrix-http-api.md +182 -0
  105. package/docs/generator-authoring.md +59 -0
  106. package/docs/generator-selection.md +25 -0
  107. package/docs/project-format.md +97 -0
  108. package/docs/security-model.md +90 -0
  109. package/docs/troubleshooting.md +103 -0
  110. package/package.json +87 -0
  111. package/skills/doxloop-authoring/SKILL.md +381 -0
  112. package/skills/doxloop-authoring/agents/openai.yaml +4 -0
  113. package/skills/doxloop-authoring/assets/screenshot-highlight.js +83 -0
  114. package/skills/doxloop-authoring/references/accessibility.md +54 -0
  115. package/skills/doxloop-authoring/references/audience-flavors.md +93 -0
  116. package/skills/doxloop-authoring/references/branding.md +50 -0
  117. package/skills/doxloop-authoring/references/documentation-types.md +236 -0
  118. package/skills/doxloop-authoring/references/domain-ai-ml.md +67 -0
  119. package/skills/doxloop-authoring/references/domain-api-platform.md +68 -0
  120. package/skills/doxloop-authoring/references/domain-cli-tool.md +65 -0
  121. package/skills/doxloop-authoring/references/domain-data-platform.md +65 -0
  122. package/skills/doxloop-authoring/references/domain-developer-library.md +63 -0
  123. package/skills/doxloop-authoring/references/domain-ecommerce.md +63 -0
  124. package/skills/doxloop-authoring/references/domain-infrastructure-devops.md +67 -0
  125. package/skills/doxloop-authoring/references/domain-payments-fintech.md +69 -0
  126. package/skills/doxloop-authoring/references/domain-saas.md +71 -0
  127. package/skills/doxloop-authoring/references/domain-security-identity.md +65 -0
  128. package/skills/doxloop-authoring/references/editorial-style.md +105 -0
  129. package/skills/doxloop-authoring/references/examples-and-evidence.md +71 -0
  130. package/skills/doxloop-authoring/references/navigation-architecture.md +152 -0
  131. package/skills/doxloop-authoring/references/project-format.md +119 -0
  132. package/skills/doxloop-authoring/references/quality.md +122 -0
  133. package/skills/doxloop-authoring/references/reference-sites.md +207 -0
  134. package/skills/doxloop-authoring/references/screenshots.md +251 -0
  135. package/skills/doxloop-authoring/references/template-routing.md +94 -0
  136. package/skills/doxloop-authoring/references/type-administrator-guide.md +59 -0
  137. package/skills/doxloop-authoring/references/type-api-reference.md +66 -0
  138. package/skills/doxloop-authoring/references/type-architecture-concepts.md +61 -0
  139. package/skills/doxloop-authoring/references/type-cli-manual.md +61 -0
  140. package/skills/doxloop-authoring/references/type-deployment-operations.md +64 -0
  141. package/skills/doxloop-authoring/references/type-developer-portal.md +69 -0
  142. package/skills/doxloop-authoring/references/type-getting-started.md +59 -0
  143. package/skills/doxloop-authoring/references/type-integration-guide.md +59 -0
  144. package/skills/doxloop-authoring/references/type-migration-release.md +66 -0
  145. package/skills/doxloop-authoring/references/type-sdk-guide.md +63 -0
  146. package/skills/doxloop-authoring/references/type-troubleshooting-kb.md +63 -0
  147. package/skills/doxloop-authoring/references/type-user-guide.md +59 -0
  148. package/skills/doxloop-doxbrix/SKILL.md +83 -0
  149. package/skills/doxloop-doxbrix/agents/openai.yaml +4 -0
  150. package/skills/doxloop-doxbrix/references/api-endpoints.md +128 -0
  151. package/skills/doxloop-doxbrix/references/components.md +137 -0
  152. package/skills/doxloop-doxbrix/references/manifest.md +117 -0
@@ -0,0 +1,26 @@
1
+ import type { AgentName } from './types.js';
2
+ export declare function parseAgent(value: string | undefined): AgentName | undefined;
3
+ export declare function installSkill(options: {
4
+ root: string;
5
+ agent?: AgentName;
6
+ replace?: boolean;
7
+ }): Promise<Array<{
8
+ path: string;
9
+ action: 'installed' | 'updated' | 'unchanged';
10
+ }>>;
11
+ export declare function skillStatus(root: string, agent?: AgentName): Promise<Array<{
12
+ path: string;
13
+ status: 'missing' | 'current' | 'modified';
14
+ }>>;
15
+ export declare function chooseAgent(preferred?: AgentName): Promise<{
16
+ name: AgentName;
17
+ executable: string;
18
+ }>;
19
+ export declare function agentAuthenticationStatus(agent: {
20
+ name: AgentName;
21
+ executable: string;
22
+ }): Promise<{
23
+ status: 'authenticated' | 'unauthenticated' | 'unknown';
24
+ detail: string;
25
+ }>;
26
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAI3C,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAI3E;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,GAAG,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,CAAA;CAAE,CAAC,CAAC,CAoClF;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,SAAS,GAChB,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAA;CAAE,CAAC,CAAC,CAmB9E;AA4CD,wBAAsB,WAAW,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAChE,IAAI,EAAE,SAAS,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB,CAAC,CAUD;AAED,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,IAAI,EAAE,SAAS,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC;IACV,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,SAAS,CAAA;IACvD,MAAM,EAAE,MAAM,CAAA;CACf,CAAC,CAgDD"}
package/dist/agents.js ADDED
@@ -0,0 +1,258 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { createHash } from 'node:crypto';
3
+ import { constants } from 'node:fs';
4
+ import { access, cp, lstat, mkdir, readFile, readdir, rm, stat, } from 'node:fs/promises';
5
+ import { delimiter, dirname, join, resolve } from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { DoxloopError, UsageError } from './errors.js';
8
+ import { pathExists } from './fs.js';
9
+ import { loadGeneratorAdapter } from './generators.js';
10
+ import { loadProject } from './project.js';
11
+ const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');
12
+ export function parseAgent(value) {
13
+ if (value === undefined)
14
+ return undefined;
15
+ if (value === 'codex' || value === 'claude' || value === 'gemini')
16
+ return value;
17
+ throw new UsageError('--agent must be codex, claude, or gemini');
18
+ }
19
+ export async function installSkill(options) {
20
+ const results = [];
21
+ for (const { skillName, source } of await packagedSkills(options.root)) {
22
+ if (!(await pathExists(source))) {
23
+ throw new DoxloopError(`The packaged ${skillName} skill is missing.`);
24
+ }
25
+ const expected = await directoryDigest(source);
26
+ for (const destination of skillDestinationsFor(options.root, skillName, options.agent)) {
27
+ await assertSafeDestination(options.root, destination);
28
+ if (await pathExists(destination)) {
29
+ const actual = await directoryDigest(destination);
30
+ if (actual === expected) {
31
+ results.push({ path: destination, action: 'unchanged' });
32
+ continue;
33
+ }
34
+ if (!options.replace) {
35
+ throw new DoxloopError(`The installed skill has local changes: ${destination}\nRun \`doxloop agent update\` to replace it explicitly.`);
36
+ }
37
+ await rm(destination, { recursive: true });
38
+ }
39
+ await mkdir(dirname(destination), { recursive: true });
40
+ await cp(source, destination, { recursive: true, errorOnExist: true });
41
+ results.push({
42
+ path: destination,
43
+ action: options.replace ? 'updated' : 'installed',
44
+ });
45
+ }
46
+ }
47
+ return results;
48
+ }
49
+ export async function skillStatus(root, agent) {
50
+ const results = [];
51
+ for (const { skillName, source } of await packagedSkills(root)) {
52
+ if (!(await pathExists(source))) {
53
+ throw new DoxloopError(`The packaged ${skillName} skill is missing.`);
54
+ }
55
+ const expected = await directoryDigest(source);
56
+ for (const destination of skillDestinationsFor(root, skillName, agent)) {
57
+ if (!(await pathExists(destination))) {
58
+ results.push({ path: destination, status: 'missing' });
59
+ continue;
60
+ }
61
+ results.push({
62
+ path: destination,
63
+ status: (await directoryDigest(destination)) === expected ? 'current' : 'modified',
64
+ });
65
+ }
66
+ }
67
+ return results;
68
+ }
69
+ async function packagedSkills(root) {
70
+ const project = await loadProject(root);
71
+ const shared = {
72
+ skillName: 'doxloop-authoring',
73
+ source: join(packageRoot, 'skills', 'doxloop-authoring'),
74
+ };
75
+ if (project.generator === 'doxbrix') {
76
+ return [
77
+ shared,
78
+ {
79
+ skillName: 'doxloop-doxbrix',
80
+ source: join(packageRoot, 'skills', 'doxloop-doxbrix'),
81
+ },
82
+ ];
83
+ }
84
+ const adapter = await loadGeneratorAdapter(root, project);
85
+ return [
86
+ shared,
87
+ {
88
+ skillName: adapter.authoring.skillName,
89
+ source: adapter.authoring.skillDirectory,
90
+ },
91
+ ];
92
+ }
93
+ function skillDestinationsFor(root, skillName, agent) {
94
+ const destinations = [];
95
+ if (agent === undefined || agent === 'codex' || agent === 'gemini') {
96
+ destinations.push(join(root, '.agents', 'skills', skillName));
97
+ }
98
+ if (agent === undefined || agent === 'claude') {
99
+ destinations.push(join(root, '.claude', 'skills', skillName));
100
+ }
101
+ return destinations;
102
+ }
103
+ export async function chooseAgent(preferred) {
104
+ const candidates = preferred ? [preferred] : ['codex', 'claude', 'gemini'];
105
+ for (const name of candidates) {
106
+ const executable = await findExecutable(name);
107
+ if (executable)
108
+ return { name, executable };
109
+ }
110
+ const expected = preferred ?? 'Codex, Claude Code, or Gemini';
111
+ throw new DoxloopError(`${expected} is not available on PATH. Install an agent or use --print to copy the prompt.`);
112
+ }
113
+ export async function agentAuthenticationStatus(agent) {
114
+ if (agent.name === 'gemini') {
115
+ return {
116
+ status: 'unknown',
117
+ detail: 'Gemini authentication cannot be verified automatically; it will be checked when Gemini starts.',
118
+ };
119
+ }
120
+ const args = agent.name === 'codex'
121
+ ? ['login', 'status']
122
+ : ['auth', 'status', '--json'];
123
+ const result = await runAgentStatus(agent.executable, args);
124
+ if (result.timedOut) {
125
+ return {
126
+ status: 'unknown',
127
+ detail: `${agent.name} authentication check timed out.`,
128
+ };
129
+ }
130
+ if (agent.name === 'claude' && result.stdout.trim()) {
131
+ try {
132
+ const parsed = JSON.parse(result.stdout);
133
+ if (parsed.loggedIn === true) {
134
+ return { status: 'authenticated', detail: 'Claude Code is signed in.' };
135
+ }
136
+ if (parsed.loggedIn === false) {
137
+ return {
138
+ status: 'unauthenticated',
139
+ detail: 'Claude Code is not signed in. Run `claude auth login`.',
140
+ };
141
+ }
142
+ }
143
+ catch {
144
+ // Fall through to the command exit code without exposing command output.
145
+ }
146
+ }
147
+ if (result.exitCode === 0) {
148
+ return {
149
+ status: 'authenticated',
150
+ detail: `${agent.name === 'codex' ? 'Codex' : 'Claude Code'} is signed in.`,
151
+ };
152
+ }
153
+ return {
154
+ status: 'unauthenticated',
155
+ detail: agent.name === 'codex'
156
+ ? 'Codex is not signed in. Run `codex login`.'
157
+ : 'Claude Code is not signed in. Run `claude auth login`.',
158
+ };
159
+ }
160
+ async function runAgentStatus(executable, args) {
161
+ return new Promise((resolveStatus) => {
162
+ const child = spawn(executable, args, {
163
+ stdio: ['ignore', 'pipe', 'ignore'],
164
+ });
165
+ let stdout = '';
166
+ let settled = false;
167
+ const finish = (value) => {
168
+ if (settled)
169
+ return;
170
+ settled = true;
171
+ clearTimeout(timer);
172
+ resolveStatus(value);
173
+ };
174
+ child.stdout?.setEncoding('utf8');
175
+ child.stdout?.on('data', (chunk) => {
176
+ if (stdout.length < 16_384)
177
+ stdout += chunk.slice(0, 16_384 - stdout.length);
178
+ });
179
+ child.once('error', () => finish({ exitCode: 1, stdout, timedOut: false }));
180
+ child.once('exit', (code) => finish({ exitCode: code ?? 1, stdout, timedOut: false }));
181
+ const timer = setTimeout(() => {
182
+ child.kill();
183
+ finish({ exitCode: 1, stdout, timedOut: true });
184
+ }, 5_000);
185
+ });
186
+ }
187
+ async function findExecutable(name) {
188
+ const path = process.env.PATH;
189
+ if (!path)
190
+ return undefined;
191
+ const suffixes = process.platform === 'win32'
192
+ ? (process.env.PATHEXT ?? '.EXE;.CMD;.BAT').split(';')
193
+ : [''];
194
+ for (const directory of path.split(delimiter)) {
195
+ for (const suffix of suffixes) {
196
+ const candidate = join(directory, `${name}${suffix.toLowerCase()}`);
197
+ try {
198
+ const stats = await stat(candidate);
199
+ if (!stats.isFile())
200
+ continue;
201
+ if (process.platform !== 'win32') {
202
+ await access(candidate, constants.X_OK);
203
+ }
204
+ return candidate;
205
+ }
206
+ catch {
207
+ // Continue searching PATH.
208
+ }
209
+ }
210
+ }
211
+ return undefined;
212
+ }
213
+ async function assertSafeDestination(root, destination) {
214
+ const relation = destination.slice(resolve(root).length);
215
+ if (!relation.startsWith('/') && !relation.startsWith('\\')) {
216
+ throw new DoxloopError(`Unsafe skill destination: ${destination}`);
217
+ }
218
+ let current = destination;
219
+ while (current.startsWith(resolve(root)) && current !== resolve(root)) {
220
+ if (await pathExists(current)) {
221
+ const stats = await lstat(current);
222
+ if (stats.isSymbolicLink()) {
223
+ throw new DoxloopError(`Refusing to write through symbolic link: ${current}`);
224
+ }
225
+ }
226
+ current = dirname(current);
227
+ }
228
+ }
229
+ async function directoryDigest(root) {
230
+ const hash = createHash('sha256');
231
+ for (const file of await treeFiles(root, root)) {
232
+ hash.update(file.relative);
233
+ hash.update('\0');
234
+ hash.update(await readFile(file.absolute));
235
+ hash.update('\0');
236
+ }
237
+ return hash.digest('hex');
238
+ }
239
+ async function treeFiles(root, directory) {
240
+ const output = [];
241
+ const entries = await readdir(directory, { withFileTypes: true });
242
+ for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
243
+ const absolute = join(directory, entry.name);
244
+ if (entry.isSymbolicLink()) {
245
+ throw new DoxloopError(`Symbolic links are not allowed in the packaged skill: ${absolute}`);
246
+ }
247
+ if (entry.isDirectory())
248
+ output.push(...(await treeFiles(root, absolute)));
249
+ else if (entry.isFile()) {
250
+ output.push({
251
+ absolute,
252
+ relative: absolute.slice(root.length + 1).split('\\').join('/'),
253
+ });
254
+ }
255
+ }
256
+ return output;
257
+ }
258
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"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"}
package/dist/args.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import type { ParsedArgs } from './types.js';
2
+ export declare function parseArgs(argv: string[]): ParsedArgs;
3
+ export declare function assertAllowedFlags(args: ParsedArgs, allowed: ReadonlySet<string>): void;
4
+ export declare function flag(args: ParsedArgs, name: string, short?: string): string | undefined;
5
+ export declare function flags(args: ParsedArgs, name: string): string[];
6
+ export declare function booleanFlag(args: ParsedArgs, name: string, short?: string, fallback?: boolean): boolean;
7
+ export declare function numberFlag(args: ParsedArgs, name: string, fallback: number): number;
8
+ //# sourceMappingURL=args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAc5C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAyCpD;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAC3B,IAAI,CASN;AAQD,wBAAgB,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEvF;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9D;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,QAAQ,UAAQ,GACf,OAAO,CAMT;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,MAAM,CAQR"}
package/dist/args.js ADDED
@@ -0,0 +1,95 @@
1
+ import { UsageError } from './errors.js';
2
+ const BOOLEAN_FLAGS = new Set([
3
+ 'dry-run',
4
+ 'h',
5
+ 'help',
6
+ 'open',
7
+ 'print',
8
+ 'screenshots',
9
+ 'no-screenshots',
10
+ 'v',
11
+ 'version',
12
+ ]);
13
+ export function parseArgs(argv) {
14
+ const flags = new Map();
15
+ const positionals = [];
16
+ let command;
17
+ for (let index = 0; index < argv.length; index += 1) {
18
+ const token = argv[index];
19
+ if (token === undefined)
20
+ continue;
21
+ if (token === '--') {
22
+ positionals.push(...argv.slice(index + 1));
23
+ break;
24
+ }
25
+ if (token.startsWith('--')) {
26
+ const equals = token.indexOf('=');
27
+ if (equals > 2) {
28
+ addFlag(flags, token.slice(2, equals), token.slice(equals + 1));
29
+ continue;
30
+ }
31
+ const name = token.slice(2);
32
+ const next = argv[index + 1];
33
+ if (!BOOLEAN_FLAGS.has(name) &&
34
+ next !== undefined &&
35
+ !next.startsWith('-')) {
36
+ addFlag(flags, name, next);
37
+ index += 1;
38
+ }
39
+ else {
40
+ addFlag(flags, name, 'true');
41
+ }
42
+ continue;
43
+ }
44
+ if (token.startsWith('-') && token.length > 1) {
45
+ for (const name of token.slice(1))
46
+ addFlag(flags, name, 'true');
47
+ continue;
48
+ }
49
+ if (command === undefined)
50
+ command = token;
51
+ else
52
+ positionals.push(token);
53
+ }
54
+ return command === undefined ? { positionals, flags } : { command, positionals, flags };
55
+ }
56
+ export function assertAllowedFlags(args, allowed) {
57
+ const common = new Set(['cwd', 'h', 'help', 'v', 'version']);
58
+ for (const name of args.flags.keys()) {
59
+ if (!common.has(name) && !allowed.has(name)) {
60
+ throw new UsageError(`Unknown option --${name}${args.command ? ` for doxloop ${args.command}` : ''}.`);
61
+ }
62
+ }
63
+ }
64
+ function addFlag(flags, name, value) {
65
+ const values = flags.get(name) ?? [];
66
+ values.push(value);
67
+ flags.set(name, values);
68
+ }
69
+ export function flag(args, name, short) {
70
+ return (args.flags.get(name) ?? (short ? args.flags.get(short) : undefined))?.at(-1);
71
+ }
72
+ export function flags(args, name) {
73
+ return args.flags.get(name) ?? [];
74
+ }
75
+ export function booleanFlag(args, name, short, fallback = false) {
76
+ const value = flag(args, name, short);
77
+ if (value === undefined)
78
+ return fallback;
79
+ if (value === 'true')
80
+ return true;
81
+ if (value === 'false')
82
+ return false;
83
+ throw new UsageError(`--${name} must be true or false`);
84
+ }
85
+ export function numberFlag(args, name, fallback) {
86
+ const raw = flag(args, name);
87
+ if (raw === undefined)
88
+ return fallback;
89
+ const value = Number(raw);
90
+ if (!Number.isInteger(value) || value < 1 || value > 65535) {
91
+ throw new UsageError(`--${name} must be an integer between 1 and 65535`);
92
+ }
93
+ return value;
94
+ }
95
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function deployGeneratedSite(options: {
2
+ root: string;
3
+ name: string;
4
+ slug: string;
5
+ dryRun?: boolean;
6
+ apiUrl?: string;
7
+ }): Promise<void>;
8
+ //# sourceMappingURL=artifact-deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-deploy.d.ts","sourceRoot":"","sources":["../src/artifact-deploy.ts"],"names":[],"mappings":"AA4CA,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkGhB"}