@supacloud/cli 0.105.0 → 0.106.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.js CHANGED
@@ -21588,16 +21588,16 @@ var starter_metadata_default = {
21588
21588
  generatedBy: "supacloud/starter-metadata-v1",
21589
21589
  packages: {
21590
21590
  compiler: {
21591
- version: "0.49.0"
21591
+ version: "0.50.0"
21592
21592
  },
21593
21593
  app: {
21594
- version: "0.30.0",
21594
+ version: "0.31.0",
21595
21595
  dependencies: {
21596
21596
  rxjs: "7.8.2"
21597
21597
  }
21598
21598
  },
21599
21599
  elysia: {
21600
- version: "0.35.0"
21600
+ version: "0.35.1"
21601
21601
  },
21602
21602
  commands: {
21603
21603
  version: "0.11.0"
@@ -21615,7 +21615,7 @@ var starter_metadata_default = {
21615
21615
  }
21616
21616
  },
21617
21617
  sdk: {
21618
- version: "0.45.0",
21618
+ version: "0.45.1",
21619
21619
  peerDependencies: {
21620
21620
  "@supabase/supabase-js": "^2.117.3"
21621
21621
  }
@@ -26253,7 +26253,7 @@ test("${name} controller preserves an asynchronous read failure", async () => {
26253
26253
  // src/shared/tools/app-feature.ts
26254
26254
  function featureScaffold(name, className, governance) {
26255
26255
  const commandName = `${name}.approve`;
26256
- const { permission, rpc } = governance;
26256
+ const { permission, rpc, database } = governance;
26257
26257
  return {
26258
26258
  [`${name}.contracts.ts`]: `import { t } from "elysia";
26259
26259
 
@@ -26449,6 +26449,7 @@ import type {
26449
26449
  export const featureSpec = defineFeatureSpec({
26450
26450
  name: ${JSON.stringify(name)},
26451
26451
  states: ["draft", "approved"],
26452
+ database: ${JSON.stringify(database)},
26452
26453
  tenantField: "tenant_id",
26453
26454
  transitions: {
26454
26455
  approve: {
@@ -27415,6 +27416,12 @@ function requireFeatureCapability(value, flag) {
27415
27416
  }
27416
27417
  return value;
27417
27418
  }
27419
+ function requireFeatureDatabase(value, flag, pattern) {
27420
+ if (typeof value !== "string" || !pattern.test(value)) {
27421
+ throw new ScaffoldError("SCAFFOLD_OPTION_INVALID", `feature requires an explicit valid --${flag}`);
27422
+ }
27423
+ return value;
27424
+ }
27418
27425
  function moduleScaffold(name) {
27419
27426
  return `import { Module } from "@supacloud/app";
27420
27427
 
@@ -27513,7 +27520,12 @@ async function generateScaffold(args) {
27513
27520
  }
27514
27521
  const featureGovernance = kind === "feature" ? {
27515
27522
  permission: requireFeatureCapability(args.permission, "permission"),
27516
- rpc: requireFeatureCapability(args.rpc, "rpc")
27523
+ rpc: requireFeatureCapability(args.rpc, "rpc"),
27524
+ database: {
27525
+ source: requireFeatureDatabase(args.database_source, "database-source", /^(?!\/)(?!.*\\)(?!.*(?:^|\/)\.\.(?:\/|$))[A-Za-z0-9._/-]+$/),
27526
+ table: requireFeatureDatabase(args.database_table, "database-table", /^[A-Za-z_][A-Za-z0-9_]*\.[A-Za-z_][A-Za-z0-9_]*$/),
27527
+ rowType: requireFeatureDatabase(args.database_type, "database-type", /^[A-Za-z_$][A-Za-z0-9_$]*(?:\.[A-Za-z_$][A-Za-z0-9_$]*)*$/)
27528
+ }
27517
27529
  } : undefined;
27518
27530
  const writes = [];
27519
27531
  let modulePath;
@@ -28791,7 +28803,7 @@ Execution: skipped`);
28791
28803
  return format === "json" || json ? result : formatPromotionExecution(result);
28792
28804
  }
28793
28805
  async function runAppTool(request, options = {}) {
28794
- if (request.dry_run !== undefined && request["dry-run"] !== undefined || request.register_in !== undefined && request["register-in"] !== undefined || request.database_url !== undefined && request["database-url"] !== undefined || request.request_id !== undefined && request["request-id"] !== undefined) {
28806
+ if (request.dry_run !== undefined && request["dry-run"] !== undefined || request.register_in !== undefined && request["register-in"] !== undefined || request.database_url !== undefined && request["database-url"] !== undefined || request.database_source !== undefined && request["database-source"] !== undefined || request.database_table !== undefined && request["database-table"] !== undefined || request.database_type !== undefined && request["database-type"] !== undefined || request.request_id !== undefined && request["request-id"] !== undefined) {
28795
28807
  throw new ScaffoldError("SCAFFOLD_OPTION_INVALID", "Do not combine hyphenated and underscored aliases of the same flag");
28796
28808
  }
28797
28809
  request = {
@@ -28799,6 +28811,9 @@ async function runAppTool(request, options = {}) {
28799
28811
  ...request["dry-run"] === undefined ? {} : { dry_run: request["dry-run"] },
28800
28812
  ...request["register-in"] === undefined ? {} : { register_in: request["register-in"] },
28801
28813
  ...request["database-url"] === undefined ? {} : { database_url: request["database-url"] },
28814
+ ...request["database-source"] === undefined ? {} : { database_source: request["database-source"] },
28815
+ ...request["database-table"] === undefined ? {} : { database_table: request["database-table"] },
28816
+ ...request["database-type"] === undefined ? {} : { database_type: request["database-type"] },
28802
28817
  ...request["request-id"] === undefined ? {} : { request_id: request["request-id"] }
28803
28818
  };
28804
28819
  if (request.events !== undefined || request.request_id !== undefined) {
@@ -28974,6 +28989,12 @@ function registerAppTools(server, options = {}) {
28974
28989
  module: optional(String2(), "[generate] Target feature module (required for command/query/controller)"),
28975
28990
  permission: optional(String2(), "[generate feature] Explicit approval permission; not inferred from name"),
28976
28991
  rpc: optional(String2(), "[generate feature] Explicit durable RPC capability; must be registered by the host"),
28992
+ database_source: optional(String2(), "[generate feature] Project-relative database source path"),
28993
+ database_table: optional(String2(), "[generate feature] Schema-qualified table owned by the feature"),
28994
+ database_type: optional(String2(), "[generate feature] Exported row type derived from the database source"),
28995
+ "database-source": optional(String2(), "[generate feature] CLI alias of database_source"),
28996
+ "database-table": optional(String2(), "[generate feature] CLI alias of database_table"),
28997
+ "database-type": optional(String2(), "[generate feature] CLI alias of database_type"),
28977
28998
  dir: optional(String2(), "[generate] Feature root directory (default: src/features)"),
28978
28999
  force: optional(Boolean2(), "[generate] Overwrite a single regular file; resource/feature/controller never overwrite"),
28979
29000
  dry_run: optional(Boolean2(), "[generate] Validate and preview the complete change set without writing"),
@@ -29008,6 +29029,12 @@ function registerAppAliases(server) {
29008
29029
  module: optional(String2(), "[generate] Target feature module"),
29009
29030
  permission: optional(String2(), "[generate feature] Explicit approval permission; not inferred from name"),
29010
29031
  rpc: optional(String2(), "[generate feature] Explicit durable RPC capability; must be registered by the host"),
29032
+ database_source: optional(String2(), "[generate feature] Project-relative database source path"),
29033
+ database_table: optional(String2(), "[generate feature] Schema-qualified table owned by the feature"),
29034
+ database_type: optional(String2(), "[generate feature] Exported row type derived from the database source"),
29035
+ "database-source": optional(String2(), "[generate feature] CLI alias of database_source"),
29036
+ "database-table": optional(String2(), "[generate feature] CLI alias of database_table"),
29037
+ "database-type": optional(String2(), "[generate feature] CLI alias of database_type"),
29011
29038
  dir: optional(String2(), "[generate] Feature root directory (default: src/features)"),
29012
29039
  force: optional(Boolean2(), "[generate] Overwrite a single regular file; resource/feature/controller never overwrite"),
29013
29040
  dry_run: optional(Boolean2(), "[generate] Validate and preview the complete change set without writing"),
@@ -32726,7 +32753,7 @@ async function runProjectDeployment(http, args) {
32726
32753
  // package.json
32727
32754
  var package_default = {
32728
32755
  name: "@supacloud/cli",
32729
- version: "0.105.0",
32756
+ version: "0.106.0",
32730
32757
  description: "Project-scoped CLI for SupaCloud users",
32731
32758
  type: "module",
32732
32759
  main: "./dist/index.js",
@@ -32778,7 +32805,7 @@ var package_default = {
32778
32805
  directory: "packages/cli"
32779
32806
  },
32780
32807
  dependencies: {
32781
- "@supacloud/compiler": "^0.49.0",
32808
+ "@supacloud/compiler": "^0.50.0",
32782
32809
  "@supacloud/delivery": "0.21.0",
32783
32810
  "@supacloud/db": "0.20.0",
32784
32811
  typebox: "1.3.37"
@@ -32789,8 +32816,8 @@ var package_default = {
32789
32816
  "@graphql-tools/utils": "^12.0.4"
32790
32817
  },
32791
32818
  devDependencies: {
32792
- "@supabase/supabase-js": "2.117.3",
32793
- "@supacloud/elysia": "0.35.0",
32819
+ "@supabase/supabase-js": "2.118.0",
32820
+ "@supacloud/elysia": "0.35.1",
32794
32821
  "@types/bun": "^1.4.3",
32795
32822
  effect: "4.0.5",
32796
32823
  elysia: "2.0.0-beta.32",
@@ -5,4 +5,9 @@
5
5
  export declare function featureScaffold(name: string, className: string, governance: {
6
6
  permission: string;
7
7
  rpc: string;
8
+ database: {
9
+ source: string;
10
+ table: string;
11
+ rowType: string;
12
+ };
8
13
  }): Record<string, string>;
@@ -72,6 +72,12 @@ export interface AppToolArguments {
72
72
  module?: string;
73
73
  permission?: string;
74
74
  rpc?: string;
75
+ database_source?: string;
76
+ database_table?: string;
77
+ database_type?: string;
78
+ "database-source"?: string;
79
+ "database-table"?: string;
80
+ "database-type"?: string;
75
81
  dir?: string;
76
82
  force?: boolean;
77
83
  dry_run?: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@supacloud/cli",
3
- "version": "0.105.0",
3
+ "version": "0.106.0",
4
4
  "description": "Project-scoped CLI for SupaCloud users",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -52,7 +52,7 @@
52
52
  "directory": "packages/cli"
53
53
  },
54
54
  "dependencies": {
55
- "@supacloud/compiler": "^0.49.0",
55
+ "@supacloud/compiler": "^0.50.0",
56
56
  "@supacloud/delivery": "0.21.0",
57
57
  "@supacloud/db": "0.20.0",
58
58
  "typebox": "1.3.37"
@@ -63,8 +63,8 @@
63
63
  "@graphql-tools/utils": "^12.0.4"
64
64
  },
65
65
  "devDependencies": {
66
- "@supabase/supabase-js": "2.117.3",
67
- "@supacloud/elysia": "0.35.0",
66
+ "@supabase/supabase-js": "2.118.0",
67
+ "@supacloud/elysia": "0.35.1",
68
68
  "@types/bun": "^1.4.3",
69
69
  "effect": "4.0.5",
70
70
  "elysia": "2.0.0-beta.32",