@twotaps/site-utils-base 0.1.20 → 0.1.22

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,69 @@
1
+ import type { CommandModule } from 'yargs';
2
+ interface BootstrapArgs {
3
+ ttGraphqlUrl?: string;
4
+ twoTapsHost?: string;
5
+ schemaWrapperId?: string;
6
+ orgName?: string;
7
+ schemaWrapperName?: string;
8
+ sitePublicHost?: string;
9
+ siteBasePath?: string;
10
+ destinationPath?: string;
11
+ boilerplateRepo?: string;
12
+ }
13
+ export declare class BootstrapSite implements CommandModule<object, BootstrapArgs> {
14
+ command: string;
15
+ describe: string;
16
+ builder: {
17
+ ttGraphqlUrl: {
18
+ type: "string";
19
+ demandOption: boolean;
20
+ describe: string;
21
+ };
22
+ twoTapsHost: {
23
+ type: "string";
24
+ demandOption: boolean;
25
+ describe: string;
26
+ };
27
+ schemaWrapperId: {
28
+ type: "string";
29
+ demandOption: boolean;
30
+ describe: string;
31
+ };
32
+ orgName: {
33
+ type: "string";
34
+ demandOption: boolean;
35
+ describe: string;
36
+ };
37
+ schemaWrapperName: {
38
+ type: "string";
39
+ demandOption: boolean;
40
+ describe: string;
41
+ };
42
+ sitePublicHost: {
43
+ type: "string";
44
+ demandOption: boolean;
45
+ describe: string;
46
+ };
47
+ siteBasePath: {
48
+ type: "string";
49
+ demandOption: boolean;
50
+ describe: string;
51
+ };
52
+ destinationPath: {
53
+ type: "string";
54
+ demandOption: boolean;
55
+ describe: string;
56
+ };
57
+ boilerplateRepo: {
58
+ type: "string";
59
+ demandOption: boolean;
60
+ describe: string;
61
+ };
62
+ };
63
+ handler(args: {
64
+ [argName: string]: unknown;
65
+ _: (string | number)[];
66
+ $0: string;
67
+ }): Promise<void>;
68
+ }
69
+ export default BootstrapSite;
@@ -0,0 +1,423 @@
1
+ import { access, constants, copyFile, mkdir, readdir, readFile, rm, stat, unlink, writeFile, } from 'node:fs/promises';
2
+ import { resolve } from 'node:path';
3
+ import { execFile } from 'node:child_process';
4
+ import { promisify } from 'node:util';
5
+ import { createInterface } from 'node:readline/promises';
6
+ import { generateSDLFile } from './sdl-generator.js';
7
+ const execFileAsync = promisify(execFile);
8
+ const DEFAULT_BOILERPLATE_REPO = 'https://github.com/ltnetwork/twotaps-boilerplate-nextjs.git';
9
+ const CUSTOM_SCHEMA_TYPES = new Set([
10
+ 'TTImage',
11
+ 'TTInstagramMediaItem',
12
+ 'TTInstagram',
13
+ 'TTGMBLocationReview',
14
+ 'TTGMBLocation',
15
+ 'TTLink',
16
+ 'TTFormFieldConfig',
17
+ 'TTFormField',
18
+ 'TTForm',
19
+ 'TTBotProtectionType',
20
+ 'TTFormFieldType',
21
+ ]);
22
+ function toPascalCase(value) {
23
+ return value
24
+ .split(/[^a-zA-Z0-9]+/)
25
+ .filter((part) => part.length > 0)
26
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
27
+ .join('');
28
+ }
29
+ function deriveTwoTapsHostFromGraphqlUrl(graphqlUrl) {
30
+ const parsed = new URL(graphqlUrl);
31
+ const pathname = parsed.pathname.replace(/\/+$/, '');
32
+ if (pathname.endsWith('/graphql')) {
33
+ parsed.pathname = pathname.slice(0, -'/graphql'.length);
34
+ if (parsed.pathname === '') {
35
+ parsed.pathname = '/';
36
+ }
37
+ return parsed.toString().replace(/\/$/, '');
38
+ }
39
+ return graphqlUrl.replace(/\/$/, '');
40
+ }
41
+ async function pathExists(path) {
42
+ try {
43
+ await access(path, constants.F_OK);
44
+ return true;
45
+ }
46
+ catch (error) {
47
+ if (error.code === 'ENOENT') {
48
+ return false;
49
+ }
50
+ throw error;
51
+ }
52
+ }
53
+ async function ensureDestinationIsAvailable(destinationPath) {
54
+ const exists = await pathExists(destinationPath);
55
+ if (!exists) {
56
+ return;
57
+ }
58
+ const destinationStats = await stat(destinationPath);
59
+ if (!destinationStats.isDirectory()) {
60
+ throw new Error(`Destination exists and is not a directory: ${destinationPath}`);
61
+ }
62
+ const destinationContents = await readdir(destinationPath);
63
+ if (destinationContents.length > 0) {
64
+ throw new Error(`Destination directory is not empty: ${destinationPath}`);
65
+ }
66
+ throw new Error(`Destination directory already exists and git clone requires a non-existent path: ${destinationPath}`);
67
+ }
68
+ async function removeSampleComponents(destinationPath) {
69
+ const navigationPath = resolve(destinationPath, 'src/components/Navigation.tsx');
70
+ try {
71
+ await unlink(navigationPath);
72
+ }
73
+ catch (error) {
74
+ if (error.code !== 'ENOENT') {
75
+ throw error;
76
+ }
77
+ }
78
+ }
79
+ async function cloneBoilerplate(boilerplateRepo, destinationPath) {
80
+ await execFileAsync('git', [
81
+ 'clone',
82
+ '--depth',
83
+ '1',
84
+ '--quiet',
85
+ boilerplateRepo,
86
+ destinationPath,
87
+ ]);
88
+ // Remove git bindings from clone
89
+ await rm(resolve(destinationPath, '.git'), { recursive: true, force: true });
90
+ }
91
+ async function updateEnvFile(destinationPath, ttGraphqlUrl, sitePublicHost, siteBasePath) {
92
+ const envExamplePath = resolve(destinationPath, '.env-example');
93
+ const envPath = resolve(destinationPath, '.env');
94
+ await copyFile(envExamplePath, envPath);
95
+ const envContent = await readFile(envPath, 'utf-8');
96
+ const nextBasePath = siteBasePath?.trim() || '';
97
+ const updated = envContent
98
+ .replace(/^NEXT_PUBLIC_GRAPHQL_URL=.*$/m, `NEXT_PUBLIC_GRAPHQL_URL="${ttGraphqlUrl}"`)
99
+ .replace(/^NEXT_PUBLIC_HOST=.*$/m, `NEXT_PUBLIC_HOST="${sitePublicHost}"`)
100
+ .replace(/^#?NEXT_PUBLIC_BASE_PATH=.*$/m, `NEXT_PUBLIC_BASE_PATH="${nextBasePath}"`);
101
+ await writeFile(envPath, updated, 'utf-8');
102
+ }
103
+ async function depInstall(destinationPath) {
104
+ await execFileAsync('yarn', [], { cwd: destinationPath });
105
+ }
106
+ async function graphqlRequest(graphqlUrl, token, query, variables) {
107
+ const response = await fetch(graphqlUrl, {
108
+ method: 'POST',
109
+ headers: {
110
+ 'Content-Type': 'application/json',
111
+ Authorization: `Bearer ${token}`,
112
+ },
113
+ body: JSON.stringify({ query, variables }),
114
+ });
115
+ if (!response.ok) {
116
+ throw new Error(`GraphQL request failed: ${response.status} ${response.statusText}`);
117
+ }
118
+ const payload = (await response.json());
119
+ if (payload.errors && payload.errors.length > 0) {
120
+ const messages = payload.errors.map((error) => error.message || 'Unknown GraphQL error');
121
+ throw new Error(`GraphQL errors: ${messages.join('; ')}`);
122
+ }
123
+ if (!payload.data) {
124
+ throw new Error('GraphQL response did not include data');
125
+ }
126
+ return payload.data;
127
+ }
128
+ async function resolveSchemaWrapperId(graphqlUrl, token, schemaWrapperId, orgName, schemaWrapperName) {
129
+ if (schemaWrapperId) {
130
+ const parsed = Number(schemaWrapperId);
131
+ if (Number.isNaN(parsed)) {
132
+ throw new Error(`Invalid schemaWrapperId: ${schemaWrapperId}`);
133
+ }
134
+ return parsed;
135
+ }
136
+ if (!orgName || !schemaWrapperName) {
137
+ throw new Error('Either schemaWrapperId OR both orgName and schemaWrapperName are required for wrapper resolution');
138
+ }
139
+ const organisationsQuery = `
140
+ query GetOrganisations($query: String, $limit: Int) {
141
+ organisations(query: $query, limit: $limit) {
142
+ items {
143
+ id
144
+ name
145
+ }
146
+ }
147
+ }
148
+ `;
149
+ const organisationsData = await graphqlRequest(graphqlUrl, token, organisationsQuery, { query: orgName, limit: 100 });
150
+ const organisation = organisationsData?.organisations.items.find((item) => item.name.toLowerCase() === orgName.toLowerCase());
151
+ if (!organisation) {
152
+ throw new Error(`Organisation not found by name: ${orgName}`);
153
+ }
154
+ const wrappersQuery = `
155
+ query GetSchemaSets($organisationId: Int!, $query: String, $limit: Int) {
156
+ ttSchemaWrappers(organisationId: $organisationId, query: $query, limit: $limit) {
157
+ items {
158
+ id
159
+ name
160
+ }
161
+ }
162
+ }
163
+ `;
164
+ const wrappersData = await graphqlRequest(graphqlUrl, token, wrappersQuery, {
165
+ organisationId: organisation.id,
166
+ query: schemaWrapperName,
167
+ limit: 100,
168
+ });
169
+ const wrapper = wrappersData.ttSchemaWrappers.items.find((item) => item.name.toLowerCase() === schemaWrapperName.toLowerCase());
170
+ if (!wrapper) {
171
+ throw new Error(`Schema wrapper not found by name "${schemaWrapperName}" in organisation "${orgName}"`);
172
+ }
173
+ return wrapper.id;
174
+ }
175
+ async function getBlockSchemaNames(graphqlUrl, token, wrapperId) {
176
+ const schemasQuery = `
177
+ query GetSchemas($ttSchemaWrapperId: Int, $type: TTSchemaType, $offset: Int, $limit: Int) {
178
+ ttSchemas(ttSchemaWrapperId: $ttSchemaWrapperId, type: $type, offset: $offset, limit: $limit) {
179
+ items {
180
+ name
181
+ type
182
+ }
183
+ }
184
+ }
185
+ `;
186
+ const schemasData = await graphqlRequest(graphqlUrl, token, schemasQuery, {
187
+ ttSchemaWrapperId: wrapperId,
188
+ type: 'Block',
189
+ offset: 0,
190
+ limit: 1000,
191
+ });
192
+ const names = schemasData.ttSchemas.items
193
+ .filter((item) => item.type === 'Block')
194
+ .map((item) => item.name);
195
+ return [...new Set(names)];
196
+ }
197
+ function extractInterfaceNames(schemaContent) {
198
+ const names = new Set();
199
+ const regex = /^export interface\s+([A-Za-z0-9_]+)\s*\{/gm;
200
+ let match = regex.exec(schemaContent);
201
+ while (match !== null) {
202
+ const interfaceName = match[1];
203
+ if (!CUSTOM_SCHEMA_TYPES.has(interfaceName)) {
204
+ names.add(interfaceName);
205
+ }
206
+ match = regex.exec(schemaContent);
207
+ }
208
+ return names;
209
+ }
210
+ async function scaffoldComponents(destinationPath, blockNames, availableInterfaces) {
211
+ const componentsDir = resolve(destinationPath, 'src/components');
212
+ await mkdir(componentsDir, { recursive: true });
213
+ const created = [];
214
+ const skippedExisting = [];
215
+ const skippedMissingInterface = [];
216
+ const wiringEntries = [];
217
+ for (const blockName of blockNames) {
218
+ const componentName = toPascalCase(blockName);
219
+ if (!availableInterfaces.has(componentName)) {
220
+ skippedMissingInterface.push(`${blockName} -> ${componentName}`);
221
+ continue;
222
+ }
223
+ const componentPath = resolve(componentsDir, `${componentName}.tsx`);
224
+ const exists = await pathExists(componentPath);
225
+ if (exists) {
226
+ skippedExisting.push(componentName);
227
+ }
228
+ else {
229
+ const componentSource = `import type { ${componentName} } from '../../types';
230
+
231
+ interface ${componentName}Props extends ${componentName} {}
232
+
233
+ export default function ${componentName}(props: ${componentName}Props) {
234
+ return <div></div>;
235
+ }
236
+ `;
237
+ await writeFile(componentPath, componentSource, 'utf-8');
238
+ created.push(componentName);
239
+ }
240
+ wiringEntries.push({ blockName, componentName });
241
+ }
242
+ wiringEntries.sort((a, b) => a.componentName.localeCompare(b.componentName));
243
+ const uniqueEntries = wiringEntries.filter((entry, index, source) => source.findIndex((candidate) => candidate.componentName === entry.componentName) === index);
244
+ const importLines = uniqueEntries.map((entry) => `import ${entry.componentName} from './${entry.componentName}';`);
245
+ const mappingLines = uniqueEntries.map((entry) => ` ${entry.blockName}: ${entry.componentName},`);
246
+ const indexSource = `'use client';
247
+
248
+ ${importLines.join('\n')}
249
+
250
+ export const NEXT_COMPONENTS = {
251
+ ${mappingLines.join('\n')}
252
+ };
253
+ `;
254
+ await writeFile(resolve(componentsDir, 'index.ts'), indexSource, 'utf-8');
255
+ return { created, skippedExisting, skippedMissingInterface };
256
+ }
257
+ async function promptValue(question, options = {}) {
258
+ const rl = createInterface({
259
+ input: process.stdin,
260
+ output: process.stdout,
261
+ });
262
+ try {
263
+ const required = options.required ?? true;
264
+ const defaultSuffix = options.defaultValue ? ` [${options.defaultValue}]` : '';
265
+ const value = await rl.question(`${question}${defaultSuffix}: `);
266
+ const trimmed = value.trim();
267
+ if (trimmed.length > 0) {
268
+ return trimmed;
269
+ }
270
+ if (options.defaultValue) {
271
+ return options.defaultValue;
272
+ }
273
+ if (required) {
274
+ throw new Error(`Missing required value for: ${question}`);
275
+ }
276
+ return '';
277
+ }
278
+ finally {
279
+ rl.close();
280
+ }
281
+ }
282
+ export class BootstrapSite {
283
+ constructor() {
284
+ this.command = 'bootstrap:site';
285
+ this.describe = 'TwoTaps: Bootstrap a full site from boilerplate, generate SDL, and scaffold block components.';
286
+ this.builder = {
287
+ ttGraphqlUrl: {
288
+ type: 'string',
289
+ demandOption: false,
290
+ describe: 'TwoTaps GraphQL URL (e.g. https://api-lb-prod.twotaps.io/graphql)',
291
+ },
292
+ twoTapsHost: {
293
+ type: 'string',
294
+ demandOption: false,
295
+ describe: 'TwoTaps API host for schema-builder endpoint (optional if ttGraphqlUrl is provided)',
296
+ },
297
+ schemaWrapperId: {
298
+ type: 'string',
299
+ demandOption: false,
300
+ describe: 'TT Schema Wrapper ID',
301
+ },
302
+ orgName: {
303
+ type: 'string',
304
+ demandOption: false,
305
+ describe: 'Organisation name (required if schemaWrapperId is not provided)',
306
+ },
307
+ schemaWrapperName: {
308
+ type: 'string',
309
+ demandOption: false,
310
+ describe: 'Schema wrapper name (required if schemaWrapperId is not provided)',
311
+ },
312
+ sitePublicHost: {
313
+ type: 'string',
314
+ demandOption: false,
315
+ describe: 'Public host for NEXT_PUBLIC_HOST (e.g. example.com)',
316
+ },
317
+ siteBasePath: {
318
+ type: 'string',
319
+ demandOption: false,
320
+ describe: 'Optional site base path (e.g. /franchise)',
321
+ },
322
+ destinationPath: {
323
+ type: 'string',
324
+ demandOption: false,
325
+ describe: 'Destination directory where the site will be created',
326
+ },
327
+ boilerplateRepo: {
328
+ type: 'string',
329
+ demandOption: false,
330
+ describe: 'Boilerplate git repo URL or local git repository path',
331
+ },
332
+ };
333
+ }
334
+ async handler(args) {
335
+ try {
336
+ const apiToken = process.env.TWO_TAPS_API_TOKEN;
337
+ if (!apiToken) {
338
+ throw new Error('TWO_TAPS_API_TOKEN environment variable is not set');
339
+ }
340
+ const ttGraphqlUrl = typeof args.ttGraphqlUrl === 'string'
341
+ ? args.ttGraphqlUrl
342
+ : await promptValue('TwoTaps GraphQL URL');
343
+ const twoTapsHost = typeof args.twoTapsHost === 'string'
344
+ ? args.twoTapsHost
345
+ : deriveTwoTapsHostFromGraphqlUrl(ttGraphqlUrl);
346
+ const schemaWrapperId = typeof args.schemaWrapperId === 'string'
347
+ ? args.schemaWrapperId
348
+ : await promptValue('Schema wrapper ID (optional)', { required: false });
349
+ const orgName = typeof args.orgName === 'string'
350
+ ? args.orgName
351
+ : await promptValue('Organisation name (required if wrapper ID not provided)', {
352
+ required: false,
353
+ });
354
+ const schemaWrapperName = typeof args.schemaWrapperName === 'string'
355
+ ? args.schemaWrapperName
356
+ : await promptValue('Schema wrapper name (required if wrapper ID not provided)', {
357
+ required: false,
358
+ });
359
+ const sitePublicHost = typeof args.sitePublicHost === 'string'
360
+ ? args.sitePublicHost
361
+ : await promptValue('Site public host');
362
+ const siteBasePath = typeof args.siteBasePath === 'string'
363
+ ? args.siteBasePath
364
+ : await promptValue('Site base path (optional)', { required: false });
365
+ const destinationPathInput = typeof args.destinationPath === 'string'
366
+ ? args.destinationPath
367
+ : await promptValue('Destination path');
368
+ const boilerplateRepo = typeof args.boilerplateRepo === 'string'
369
+ ? args.boilerplateRepo
370
+ : await promptValue('Boilerplate repository', {
371
+ defaultValue: DEFAULT_BOILERPLATE_REPO,
372
+ });
373
+ const hasSchemaWrapperId = schemaWrapperId.trim().length > 0;
374
+ const hasOrgAndWrapper = orgName.trim().length > 0 && schemaWrapperName.trim().length > 0;
375
+ if (!hasSchemaWrapperId && !hasOrgAndWrapper) {
376
+ throw new Error('Either schemaWrapperId OR both orgName and schemaWrapperName are required');
377
+ }
378
+ if (hasSchemaWrapperId && hasOrgAndWrapper) {
379
+ throw new Error('Provide either schemaWrapperId OR orgName/schemaWrapperName, not both');
380
+ }
381
+ const destinationPath = resolve(process.cwd(), destinationPathInput);
382
+ await ensureDestinationIsAvailable(destinationPath);
383
+ console.info(`Cloning boilerplate into ${destinationPath}...`);
384
+ await cloneBoilerplate(boilerplateRepo, destinationPath);
385
+ console.info('Removing sample boilerplate components...');
386
+ await removeSampleComponents(destinationPath);
387
+ console.info('Creating .env from .env-example...');
388
+ await updateEnvFile(destinationPath, ttGraphqlUrl, sitePublicHost, siteBasePath.trim().length > 0 ? siteBasePath : undefined);
389
+ console.info(`Running yarn install to setup dependencies...`);
390
+ await depInstall(destinationPath);
391
+ console.info('Generating schema types...');
392
+ const schemaPath = resolve(destinationPath, 'types.ts');
393
+ const schemaSource = await generateSDLFile({
394
+ twoTapsHost,
395
+ apiToken,
396
+ schemaWrapperId: hasSchemaWrapperId ? schemaWrapperId : undefined,
397
+ orgName: hasOrgAndWrapper ? orgName : undefined,
398
+ schemaWrapperName: hasOrgAndWrapper ? schemaWrapperName : undefined,
399
+ outputPath: schemaPath,
400
+ });
401
+ console.info(`SDL schema generated at ${schemaPath}, extracting interfaces...`);
402
+ const interfaceNames = extractInterfaceNames(schemaSource);
403
+ const resolvedWrapperId = await resolveSchemaWrapperId(ttGraphqlUrl, apiToken, hasSchemaWrapperId ? schemaWrapperId : undefined, hasOrgAndWrapper ? orgName : undefined, hasOrgAndWrapper ? schemaWrapperName : undefined);
404
+ const blockNames = await getBlockSchemaNames(ttGraphqlUrl, apiToken, resolvedWrapperId);
405
+ console.info(`Retrieved ${blockNames.length} block schemas from GraphQL API, scaffolding components...`);
406
+ const scaffoldResult = await scaffoldComponents(destinationPath, blockNames, interfaceNames);
407
+ console.info(`Bootstrap complete at ${destinationPath}`);
408
+ console.info(`Created ${scaffoldResult.created.length} components`);
409
+ if (scaffoldResult.skippedExisting.length > 0) {
410
+ console.info(`Skipped existing components: ${scaffoldResult.skippedExisting.length} [${scaffoldResult.skippedExisting.map((name) => name).join(', ')}]`);
411
+ }
412
+ if (scaffoldResult.skippedMissingInterface.length > 0) {
413
+ console.warn(`Missing interface mappings: ${scaffoldResult.skippedMissingInterface.join(', ')}`);
414
+ }
415
+ }
416
+ catch (err) {
417
+ console.error('Unable to bootstrap site: ', err.message);
418
+ process.exit(1);
419
+ }
420
+ }
421
+ }
422
+ export default BootstrapSite;
423
+ //# sourceMappingURL=bootstrap-site.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-site.js","sourceRoot":"","sources":["../../src/cli/bootstrap-site.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import * as fs from 'fs';
1
+ import { generateSDLFile } from './sdl-generator.js';
2
2
  export class GenerateSDL {
3
3
  constructor() {
4
4
  this.command = 'generate:sdl';
@@ -50,30 +50,15 @@ export class GenerateSDL {
50
50
  if (typeof twoTapsHost !== 'string') {
51
51
  throw new Error('Invalid twoTapsHost argument');
52
52
  }
53
- // Build query parameters based on what was provided
54
- let queryParams;
55
- if (hasSchemaWrapperId) {
56
- queryParams = `ttschemaWrapperId=${ttSchemaWrapperId}`;
57
- }
58
- else {
59
- queryParams = `orgName=${orgName}&schemaWrapperName=${schemaWrapperName}`;
60
- }
61
- const response = await fetch(`${twoTapsHost}/product-api/schema-builder?${queryParams}`, {
62
- method: 'GET',
63
- headers: {
64
- Authorization: `Bearer ${apiToken}`,
65
- },
66
- });
67
- if (!response.ok) {
68
- throw new Error(`Failed to fetch schema: ${response.status} ${response.statusText}`);
69
- }
70
- const data = await response.text();
71
- fs.writeFile('schema.ts', data, (err) => {
72
- if (err) {
73
- throw err;
74
- }
75
- console.info('Successfully wrote schema to schema.ts in the current directory');
53
+ await generateSDLFile({
54
+ twoTapsHost,
55
+ apiToken,
56
+ schemaWrapperId: hasSchemaWrapperId ? ttSchemaWrapperId : undefined,
57
+ orgName: hasOrgAndWrapper ? orgName : undefined,
58
+ schemaWrapperName: hasOrgAndWrapper ? schemaWrapperName : undefined,
59
+ outputPath: 'schema.ts',
76
60
  });
61
+ console.info('Successfully wrote schema to schema.ts in the current directory');
77
62
  }
78
63
  catch (err) {
79
64
  console.error('Unable to retrieve schema: ', err.message);
@@ -1 +1 @@
1
- {"version":3,"file":"generate-sdl.js","sourceRoot":"","sources":["../../src/cli/generate-sdl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-sdl.js","sourceRoot":"","sources":["../../src/cli/generate-sdl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AASrD,MAAM,OAAO,WAAW;IAAxB;QACE,YAAO,GAAG,cAAc,CAAC;QACzB,aAAQ,GACN,sEAAsE;YACtE,mGAAmG;YACnG,mHAAmH,CAAC;QAEtH,YAAO,GAAG;YACR,eAAe,EAAE;gBACf,IAAI,EAAE,QAAiB;gBACvB,YAAY,EAAE,KAAK;gBACnB,QAAQ,EAAE,sBAAsB;aACjC;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAiB;gBACvB,YAAY,EAAE,KAAK;gBACnB,QAAQ,EAAE,mBAAmB;aAC9B;YACD,iBAAiB,EAAE;gBACjB,IAAI,EAAE,QAAiB;gBACvB,YAAY,EAAE,KAAK;gBACnB,QAAQ,EAAE,qBAAqB;aAChC;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAiB;gBACvB,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,oBAAoB;aAC/B;SACF,CAAC;IA8CJ,CAAC;IA5CC,KAAK,CAAC,OAAO,CAAC,IAAwE;QACpF,IAAI,CAAC;YACH,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACjD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAEhD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACxE,CAAC;YAED,4FAA4F;YAC5F,MAAM,kBAAkB,GAAG,OAAO,iBAAiB,KAAK,QAAQ,CAAC;YACjE,MAAM,gBAAgB,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,iBAAiB,KAAK,QAAQ,CAAC;YAE9F,IAAI,CAAC,kBAAkB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;YACJ,CAAC;YAED,IAAI,kBAAkB,IAAI,gBAAgB,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC7F,CAAC;YAED,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YAED,MAAM,eAAe,CAAC;gBACpB,WAAW;gBACX,QAAQ;gBACR,eAAe,EAAE,kBAAkB,CAAC,CAAC,CAAE,iBAA4B,CAAC,CAAC,CAAC,SAAS;gBAC/E,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAE,OAAkB,CAAC,CAAC,CAAC,SAAS;gBAC3D,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAE,iBAA4B,CAAC,CAAC,CAAC,SAAS;gBAC/E,UAAU,EAAE,WAAW;aACxB,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAClF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,yDAAyD;QAC5E,CAAC;IACH,CAAC;CACF;AAED,eAAe,WAAW,CAAC"}
package/dist/cli/index.js CHANGED
@@ -1,12 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import yargs from 'yargs';
3
3
  import { GenerateSDL } from './generate-sdl.js';
4
+ import { BootstrapSite } from './bootstrap-site.js';
4
5
  import { hideBin } from 'yargs/helpers';
5
6
  const cli = yargs(hideBin(process.argv))
6
7
  .scriptName('twotaps')
7
8
  .usage('usage: twotaps generate:sdl --twoTapsHost https://api-lb-prod.twotaps.io --schemaWrapperId <id>\n' +
8
- 'OR: twotaps generate:sdl --twoTapsHost https://api-lb-prod.twotaps.io --orgName <name> --schemaWrapperName <name>')
9
+ 'OR: twotaps generate:sdl --twoTapsHost https://api-lb-prod.twotaps.io --orgName <name> --schemaWrapperName <name>\n' +
10
+ 'OR: twotaps bootstrap:site --ttGraphqlUrl https://api-lb-prod.twotaps.io/graphql --destinationPath ./my-site')
9
11
  .command(new GenerateSDL())
12
+ .command(new BootstrapSite())
10
13
  .demandCommand(1, 'You need to specify a command. ex: generate:sdl')
11
14
  .strict()
12
15
  .help()
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACrC,UAAU,CAAC,SAAS,CAAC;KACrB,KAAK,CACJ,mGAAmG;IACjG,mHAAmH,CACtH;KACA,OAAO,CAAC,IAAI,WAAW,EAAE,CAAC;KAC1B,aAAa,CAAC,CAAC,EAAE,iDAAiD,CAAC;KACnE,MAAM,EAAE;KACR,IAAI,EAAE;KACN,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEtB,GAAG,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACrC,UAAU,CAAC,SAAS,CAAC;KACrB,KAAK,CACJ,mGAAmG;IACjG,qHAAqH;IACrH,8GAA8G,CACjH;KACA,OAAO,CAAC,IAAI,WAAW,EAAE,CAAC;KAC1B,OAAO,CAAC,IAAI,aAAa,EAAE,CAAC;KAC5B,aAAa,CAAC,CAAC,EAAE,iDAAiD,CAAC;KACnE,MAAM,EAAE;KACR,IAAI,EAAE;KACN,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEtB,GAAG,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface SDLGeneratorInput {
2
+ twoTapsHost: string;
3
+ apiToken: string;
4
+ schemaWrapperId?: string;
5
+ orgName?: string;
6
+ schemaWrapperName?: string;
7
+ outputPath: string;
8
+ }
9
+ export declare function fetchSDL(input: SDLGeneratorInput): Promise<string>;
10
+ export declare function generateSDLFile(input: SDLGeneratorInput): Promise<string>;
@@ -0,0 +1,40 @@
1
+ import { writeFile } from 'node:fs/promises';
2
+ function buildSchemaBuilderQuery(input) {
3
+ const hasSchemaWrapperId = typeof input.schemaWrapperId === 'string';
4
+ const hasOrgAndWrapper = typeof input.orgName === 'string' && typeof input.schemaWrapperName === 'string';
5
+ if (!hasSchemaWrapperId && !hasOrgAndWrapper) {
6
+ throw new Error('Either schemaWrapperId OR both orgName and schemaWrapperName must be provided');
7
+ }
8
+ if (hasSchemaWrapperId && hasOrgAndWrapper) {
9
+ throw new Error('Provide either schemaWrapperId OR orgName/schemaWrapperName, not both');
10
+ }
11
+ const query = new URLSearchParams();
12
+ if (hasSchemaWrapperId) {
13
+ query.set('ttschemaWrapperId', input.schemaWrapperId);
14
+ }
15
+ if (hasOrgAndWrapper) {
16
+ query.set('orgName', input.orgName);
17
+ query.set('schemaWrapperName', input.schemaWrapperName);
18
+ }
19
+ return query.toString();
20
+ }
21
+ export async function fetchSDL(input) {
22
+ const query = buildSchemaBuilderQuery(input);
23
+ const host = input.twoTapsHost.replace(/\/$/, '');
24
+ const response = await fetch(`${host}/product-api/schema-builder?${query}`, {
25
+ method: 'GET',
26
+ headers: {
27
+ Authorization: `Bearer ${input.apiToken}`,
28
+ },
29
+ });
30
+ if (!response.ok) {
31
+ throw new Error(`Failed to fetch schema: ${response.status} ${response.statusText}`);
32
+ }
33
+ return response.text();
34
+ }
35
+ export async function generateSDLFile(input) {
36
+ const sdl = await fetchSDL(input);
37
+ await writeFile(input.outputPath, sdl, 'utf-8');
38
+ return sdl;
39
+ }
40
+ //# sourceMappingURL=sdl-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdl-generator.js","sourceRoot":"","sources":["../../src/cli/sdl-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAW7C,SAAS,uBAAuB,CAAC,KAAwB;IACvD,MAAM,kBAAkB,GAAG,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,CAAC;IACrE,MAAM,gBAAgB,GACpB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,iBAAiB,KAAK,QAAQ,CAAC;IAEnF,IAAI,CAAC,kBAAkB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;IACJ,CAAC;IAED,IAAI,kBAAkB,IAAI,gBAAgB,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,IAAI,kBAAkB,EAAE,CAAC;QACvB,KAAK,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,eAAyB,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,gBAAgB,EAAE,CAAC;QACrB,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,OAAiB,CAAC,CAAC;QAC9C,KAAK,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,iBAA2B,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAwB;IACrD,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,+BAA+B,KAAK,EAAE,EAAE;QAC1E,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,KAAK,CAAC,QAAQ,EAAE;SAC1C;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAwB;IAC5D,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC;AACb,CAAC"}