@pmate/cli 0.15.0 → 0.16.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.
package/dist/index.d.ts CHANGED
@@ -51,6 +51,8 @@ type BucketCommandArgs = {
51
51
  type: Command.Bucket;
52
52
  bucketCreate: boolean;
53
53
  bucketName: string;
54
+ bucketSubdomain?: string;
55
+ bucketDomain?: string;
54
56
  };
55
57
  type DeployCommandArgs = {
56
58
  type: Command.Deploy;
package/dist/index.js CHANGED
@@ -13827,12 +13827,107 @@ var StsCommandHandler = class {
13827
13827
  }
13828
13828
  };
13829
13829
 
13830
+ // src/staticSiteSetup.ts
13831
+ async function setupStaticSiteBucket(input) {
13832
+ const bucketName = input.bucketName.trim();
13833
+ const domainName = input.domainName.trim();
13834
+ const subdomain = input.subdomain?.trim();
13835
+ const dnsRr = subdomain || "@";
13836
+ const cdnDomain = subdomain ? `${subdomain}.${domainName}` : domainName;
13837
+ await AliyunService.ensureBucket(bucketName);
13838
+ await sleep(2e3);
13839
+ await AliyunService.ensureCdnDomain(cdnDomain, bucketName);
13840
+ await sleep(2e3);
13841
+ await AliyunService.enableOssPrivateBucketOrigin(cdnDomain);
13842
+ await sleep(2e3);
13843
+ ui.success(`Enabled OSS private bucket origin for ${cdnDomain}`);
13844
+ await AliyunService.setDefaultCacheRules(cdnDomain);
13845
+ await sleep(2e3);
13846
+ ui.success(`Set default cache rules for ${cdnDomain}`);
13847
+ const cname = await AliyunService.getCdnCname(cdnDomain);
13848
+ if (!cname) {
13849
+ throw new Error(`No CNAME found for ${cdnDomain}. Try again in a minute.`);
13850
+ }
13851
+ ui.info(`CNAME for ${cdnDomain}:`, cname);
13852
+ const existingCname = await AliyunService.getCnameRecordValue(domainName, dnsRr);
13853
+ if (existingCname) {
13854
+ if (existingCname !== cname) {
13855
+ throw new Error(
13856
+ `Existing CNAME record for ${cdnDomain} points to ${existingCname}, not ${cname}.`
13857
+ );
13858
+ }
13859
+ ui.success(`CNAME record already exists for ${cdnDomain}`);
13860
+ } else {
13861
+ await AliyunService.addRecord({
13862
+ domainName,
13863
+ rr: dnsRr,
13864
+ type: "CNAME",
13865
+ value: cname,
13866
+ ttl: 600
13867
+ });
13868
+ await sleep(2e3);
13869
+ ui.success(`Added CNAME record ${cdnDomain} -> ${cname}`);
13870
+ }
13871
+ if (!subdomain) {
13872
+ const wwwCname = await AliyunService.getCnameRecordValue(domainName, "www");
13873
+ if (wwwCname) {
13874
+ if (wwwCname !== domainName) {
13875
+ throw new Error(
13876
+ `Existing CNAME record for www.${domainName} points to ${wwwCname}, not ${domainName}.`
13877
+ );
13878
+ }
13879
+ ui.success(`CNAME record already exists for www.${domainName}`);
13880
+ } else {
13881
+ await AliyunService.addRecord({
13882
+ domainName,
13883
+ rr: "www",
13884
+ type: "CNAME",
13885
+ value: domainName,
13886
+ ttl: 600
13887
+ });
13888
+ await sleep(2e3);
13889
+ ui.success(`Added CNAME record www.${domainName} -> ${domainName}`);
13890
+ }
13891
+ }
13892
+ await AliyunService.enableHttpsCertificate(cdnDomain);
13893
+ await sleep(2e3);
13894
+ ui.success(`Enabled HTTPS certificate for ${cdnDomain}`);
13895
+ if (input.routeType === "ssg") {
13896
+ await AliyunService.enableSsgRewriteRule(cdnDomain);
13897
+ await sleep(2e3);
13898
+ ui.success(`Enabled SSG rewrite rule for ${cdnDomain}`);
13899
+ return;
13900
+ }
13901
+ await AliyunService.enableSpaRewriteRule(cdnDomain);
13902
+ await sleep(2e3);
13903
+ ui.success(`Enabled SPA rewrite rule for ${cdnDomain}`);
13904
+ }
13905
+ function sleep(ms) {
13906
+ return new Promise((resolve) => {
13907
+ setTimeout(resolve, ms);
13908
+ });
13909
+ }
13910
+
13830
13911
  // src/commands/BucketCommandHandler.ts
13831
13912
  var BucketCommandHandler = class {
13832
13913
  async handle(args) {
13833
13914
  const bucketName = args.bucketName.trim();
13834
- await AliyunService.createBucket(bucketName);
13835
- ui.success(`Bucket created: ${bucketName}`);
13915
+ const subdomain = args.bucketSubdomain?.trim();
13916
+ if (!subdomain) {
13917
+ await AliyunService.createBucket(bucketName);
13918
+ ui.success(`Bucket created: ${bucketName}`);
13919
+ return;
13920
+ }
13921
+ const domainName = args.bucketDomain?.trim();
13922
+ if (!domainName) {
13923
+ throw new Error("Missing domain name. Use --domain <name> when --subdomain is set.");
13924
+ }
13925
+ await setupStaticSiteBucket({
13926
+ bucketName,
13927
+ domainName,
13928
+ subdomain,
13929
+ routeType: "spa"
13930
+ });
13836
13931
  }
13837
13932
  };
13838
13933
 
@@ -14301,82 +14396,12 @@ var InitCommandHandler = class {
14301
14396
  if (!baseDomain) {
14302
14397
  throw new Error(`Missing domain in ${import_node_path8.default.join(cwd, ".pmate.yaml")}`);
14303
14398
  }
14304
- const subdomain = appConfig.subdomain?.trim();
14305
- const dnsRr = subdomain || "@";
14306
- const cdnDomain = subdomain ? `${subdomain}.${baseDomain}` : baseDomain;
14307
- await AliyunService.ensureBucket(bucketName);
14308
- await this.sleep(2e3);
14309
- await AliyunService.ensureCdnDomain(cdnDomain, bucketName);
14310
- await this.sleep(2e3);
14311
- await AliyunService.enableOssPrivateBucketOrigin(cdnDomain);
14312
- await this.sleep(2e3);
14313
- ui.success(`Enabled OSS private bucket origin for ${cdnDomain}`);
14314
- await AliyunService.setDefaultCacheRules(cdnDomain);
14315
- await this.sleep(2e3);
14316
- ui.success(`Set default cache rules for ${cdnDomain}`);
14317
- const cname = await AliyunService.getCdnCname(cdnDomain);
14318
- if (!cname) {
14319
- throw new Error(`No CNAME found for ${cdnDomain}. Try again in a minute.`);
14320
- }
14321
- ui.info(`CNAME for ${cdnDomain}:`, cname);
14322
- const existingCname = await AliyunService.getCnameRecordValue(
14323
- baseDomain,
14324
- dnsRr
14325
- );
14326
- if (existingCname) {
14327
- if (existingCname !== cname) {
14328
- throw new Error(
14329
- `Existing CNAME record for ${cdnDomain} points to ${existingCname}, not ${cname}.`
14330
- );
14331
- }
14332
- ui.success(`CNAME record already exists for ${cdnDomain}`);
14333
- } else {
14334
- await AliyunService.addRecord({
14335
- domainName: baseDomain,
14336
- rr: dnsRr,
14337
- type: "CNAME",
14338
- value: cname,
14339
- ttl: 600
14340
- });
14341
- await this.sleep(2e3);
14342
- ui.success(`Added CNAME record ${cdnDomain} -> ${cname}`);
14343
- }
14344
- if (!subdomain) {
14345
- const wwwCname = await AliyunService.getCnameRecordValue(
14346
- baseDomain,
14347
- "www"
14348
- );
14349
- if (wwwCname) {
14350
- if (wwwCname !== baseDomain) {
14351
- throw new Error(
14352
- `Existing CNAME record for www.${baseDomain} points to ${wwwCname}, not ${baseDomain}.`
14353
- );
14354
- }
14355
- ui.success(`CNAME record already exists for www.${baseDomain}`);
14356
- } else {
14357
- await AliyunService.addRecord({
14358
- domainName: baseDomain,
14359
- rr: "www",
14360
- type: "CNAME",
14361
- value: baseDomain,
14362
- ttl: 600
14363
- });
14364
- await this.sleep(2e3);
14365
- ui.success(`Added CNAME record www.${baseDomain} -> ${baseDomain}`);
14366
- }
14367
- }
14368
- await AliyunService.enableHttpsCertificate(cdnDomain);
14369
- await this.sleep(2e3);
14370
- ui.success(`Enabled HTTPS certificate for ${cdnDomain}`);
14371
- if (appConfig.type === "vite" && appConfig.routeType === "ssg") {
14372
- await AliyunService.enableSsgRewriteRule(cdnDomain);
14373
- await this.sleep(2e3);
14374
- ui.success(`Enabled SSG rewrite rule for ${cdnDomain}`);
14375
- } else {
14376
- await AliyunService.enableSpaRewriteRule(cdnDomain);
14377
- await this.sleep(2e3);
14378
- ui.success(`Enabled SPA rewrite rule for ${cdnDomain}`);
14379
- }
14399
+ await setupStaticSiteBucket({
14400
+ bucketName,
14401
+ domainName: baseDomain,
14402
+ subdomain: appConfig.subdomain,
14403
+ routeType: appConfig.type === "vite" && appConfig.routeType === "ssg" ? "ssg" : "spa"
14404
+ });
14380
14405
  }
14381
14406
  async initNode(appConfig, cwd) {
14382
14407
  console.log("Initializing node app...");
@@ -17194,7 +17219,7 @@ var LinearCommandHandler = class {
17194
17219
  for (let attempt = 0; attempt < 12; attempt++) {
17195
17220
  buffer = await this.captureClipboardImageAsPng();
17196
17221
  if (buffer.length > 0) break;
17197
- await sleep(150);
17222
+ await sleep2(150);
17198
17223
  }
17199
17224
  if (buffer.length === 0) {
17200
17225
  const info = await this.getClipboardDebugInfo();
@@ -17645,7 +17670,7 @@ function parseJson(raw) {
17645
17670
  return JSON.parse(match[0]);
17646
17671
  }
17647
17672
  }
17648
- function sleep(ms) {
17673
+ function sleep2(ms) {
17649
17674
  return new Promise((resolve) => setTimeout(resolve, ms));
17650
17675
  }
17651
17676
 
@@ -20063,7 +20088,7 @@ var HELP_TEXT = [
20063
20088
  ` ${import_chalk3.default.gray(" --type <t> --value <v> --rr <rr> [--ttl <n>] [--domain <name>]")}`,
20064
20089
  ` ${import_chalk3.default.cyan("sts")} Request an OSS STS token from the CI server`,
20065
20090
  ` ${import_chalk3.default.cyan("bucket")} Manage OSS buckets`,
20066
- ` ${import_chalk3.default.gray(" --create --name <bucket>")}`,
20091
+ ` ${import_chalk3.default.gray(" --create --name <bucket> [--subdomain <name> --domain <name>]")}`,
20067
20092
  ` ${import_chalk3.default.cyan("deploy")} Deploy or view logs for app dir from .pmate.yaml`,
20068
20093
  ` ${import_chalk3.default.gray(" <app-name> [deploy|logs] [--cwd <dir>]")}`,
20069
20094
  ` ${import_chalk3.default.cyan("log")} Query app logs from the log indexer API`,
@@ -20379,7 +20404,9 @@ function parseAddDnsArgs(tokens) {
20379
20404
  function parseBucketArgs(tokens) {
20380
20405
  const options = {
20381
20406
  bucketCreate: false,
20382
- bucketName: ""
20407
+ bucketName: "",
20408
+ bucketSubdomain: void 0,
20409
+ bucketDomain: void 0
20383
20410
  };
20384
20411
  const rest = [...tokens];
20385
20412
  while (rest.length > 0) {
@@ -20391,6 +20418,12 @@ function parseBucketArgs(tokens) {
20391
20418
  case "--name":
20392
20419
  options.bucketName = requireValue4(rest, token);
20393
20420
  break;
20421
+ case "--subdomain":
20422
+ options.bucketSubdomain = requireValue4(rest, token);
20423
+ break;
20424
+ case "--domain":
20425
+ options.bucketDomain = requireValue4(rest, token);
20426
+ break;
20394
20427
  default:
20395
20428
  throw new Error(`Unknown bucket option: ${token}`);
20396
20429
  }
@@ -20401,6 +20434,9 @@ function parseBucketArgs(tokens) {
20401
20434
  if (!options.bucketName.trim()) {
20402
20435
  throw new Error("Missing bucket name. Use --name <bucket>.");
20403
20436
  }
20437
+ if (options.bucketSubdomain && !options.bucketDomain?.trim()) {
20438
+ throw new Error("Missing domain name. Use --domain <name> when --subdomain is set.");
20439
+ }
20404
20440
  return { type: "bucket" /* Bucket */, ...options };
20405
20441
  }
20406
20442
  function parseDeployArgs(tokens) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pmate/cli",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "description": "CLI utilities for the pMate project",
5
5
  "license": "MIT",
6
6
  "bin": {