@fabrika/builder 0.9.0-dev.4 → 0.9.0-dev.6

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.
@@ -237,8 +237,8 @@ function tomlString(value: string): string {
237
237
  }
238
238
 
239
239
  function tomlMultiline(value: string): string {
240
- const escaped = value.replace(/\\/g, '\\\\').replace(/\"\"\"/g, '\\"\\"\\"')
241
- return `\"\"\"\n${escaped}\"\"\"`
240
+ const escaped = value.replace(/\\/g, '\\\\').replace(/"""/g, '\\"\\"\\"')
241
+ return `"""\n${escaped}"""`
242
242
  }
243
243
 
244
244
  function installManagedFile(
@@ -15,7 +15,7 @@ export function readSkeletons(testsBrowserDir: string): Skeleton[] {
15
15
  if (!existsSync(testsBrowserDir) || !statSync(testsBrowserDir).isDirectory()) return []
16
16
  const out: Skeleton[] = []
17
17
  for (const entry of readdirSync(testsBrowserDir).sort()) {
18
- if (!/\.test\.ts$/.test(entry)) continue
18
+ if (!entry.endsWith('.test.ts')) continue
19
19
  const file = join(testsBrowserDir, entry)
20
20
  if (!statSync(file).isFile() || statSync(file).size === 0) continue
21
21
  out.push(...parseSkeletons(file))
@@ -51,7 +51,7 @@ export function parseSkeletons(file: string): Skeleton[] {
51
51
  }
52
52
 
53
53
  function strField(meta: string, key: string): string | undefined {
54
- const re = new RegExp(`\\b${key}\\s*:\\s*([\`'\"])([\\s\\S]*?)\\1`)
54
+ const re = new RegExp(`\\b${key}\\s*:\\s*([\`'"])([\\s\\S]*?)\\1`)
55
55
  const m = meta.match(re)
56
56
  return m ? m[2] : undefined
57
57
  }
@@ -298,7 +298,7 @@ export function createHandlers(ctx: HandlerContext): Route[] {
298
298
 
299
299
  const skeletons: unknown[] = []
300
300
  for (const entry of readdirSync(dir).sort()) {
301
- if (!/\.test\.ts$/.test(entry)) continue
301
+ if (!entry.endsWith('.test.ts')) continue
302
302
  try {
303
303
  platform.storage.artifact(session.projectRoot, join('tests', 'browser', entry))
304
304
  platform.storage.assertPublicFile(join(dir, entry))
@@ -101,7 +101,7 @@ export async function boundedJson(response: Response): Promise<unknown> {
101
101
  }
102
102
 
103
103
  export class PlatformRemote {
104
- constructor(private readonly fetcher: RpcFetch = fetch, readonly signal: AbortSignal) {}
104
+ constructor(private readonly fetcher: RpcFetch = (input, init) => fetch(input, init), readonly signal: AbortSignal) {}
105
105
 
106
106
  async json(url: string, body?: unknown): Promise<unknown> {
107
107
  try {
@@ -7,7 +7,7 @@ provides: [authentication, authorization, proxy-enforcement]
7
7
  requires: [zerops-platform]
8
8
  recommends: []
9
9
  conflicts: [propustka, cloudflare-access, auth-password-kv]
10
- npm: ["@fabrika/app@0.9.0-dev.4", "@fabrika/db@0.9.0-dev.4", "zod@^3.25.76"]
10
+ npm: ["@fabrika/app@0.9.0-dev.6", "@fabrika/db@0.9.0-dev.6", "zod@^3.25.76"]
11
11
  status: wip
12
12
  sources:
13
13
  - where: "packages/app/skill/SKILL.md in fabrika-platform (the `fabrika-app` skill)"
@@ -7,7 +7,7 @@ provides: [platform, private-services, managed-deploy]
7
7
  requires: [bun, postgres]
8
8
  recommends: []
9
9
  conflicts: [cloudflare]
10
- npm: ["@fabrika/provider-zerops@0.9.0-dev.4", "@fabrika/app@0.9.0-dev.4", "@fabrika/cli@0.9.0-dev.4"]
10
+ npm: ["@fabrika/provider-zerops@0.9.0-dev.6", "@fabrika/app@0.9.0-dev.6", "@fabrika/cli@0.9.0-dev.6"]
11
11
  status: wip
12
12
  sources:
13
13
  - where: "examples/zerops-app/fabrika.config.ts + zerops.yaml in fabrika-platform"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fabrika/builder",
3
- "version": "0.9.0-dev.4",
3
+ "version": "0.9.0-dev.6",
4
4
  "type": "module",
5
5
  "description": "Local-first guided application design and agent-assisted implementation.",
6
6
  "license": "MIT",
@@ -48,13 +48,13 @@
48
48
  },
49
49
  "dependencies": {
50
50
  "zod": "^3.25.76",
51
- "@fabrika/annotations": "0.9.0-dev.4",
52
- "@fabrika/app": "0.9.0-dev.4",
53
- "@fabrika/auth-core": "0.9.0-dev.4",
54
- "@fabrika/canvas-kernel": "0.9.0-dev.4",
55
- "@fabrika/control-contract": "0.9.0-dev.4",
56
- "@fabrika/daemon-kit": "0.9.0-dev.4",
57
- "@fabrika/provider-zerops": "0.9.0-dev.4",
51
+ "@fabrika/annotations": "0.9.0-dev.6",
52
+ "@fabrika/app": "0.9.0-dev.6",
53
+ "@fabrika/auth-core": "0.9.0-dev.6",
54
+ "@fabrika/canvas-kernel": "0.9.0-dev.6",
55
+ "@fabrika/control-contract": "0.9.0-dev.6",
56
+ "@fabrika/daemon-kit": "0.9.0-dev.6",
57
+ "@fabrika/provider-zerops": "0.9.0-dev.6",
58
58
  "preact": "^10.25.0"
59
59
  }
60
60
  }
@@ -72,6 +72,8 @@ export declare class PlatformRemote {
72
72
  reconcile: (input: import("@fabrika/control-contract").NamespaceIdInput) => Promise<import("@fabrika/control-contract").DeploymentNamespaceDetailDto>;
73
73
  update: (input: import("@fabrika/control-contract").UpdateNamespaceInput) => Promise<import("@fabrika/control-contract").DeploymentNamespaceDetailDto>;
74
74
  remove: (input: import("@fabrika/control-contract").NamespaceIdInput) => Promise<import("@fabrika/control-contract").RemoveDeploymentNamespaceResponse>;
75
+ republishAll: (input: void) => Promise<import("@fabrika/control-contract").RepublishAllNamespacesResponse>;
76
+ releaseClaims: (input: import("@fabrika/control-contract").ReleaseNamespaceClaimsInput) => Promise<import("@fabrika/control-contract").ReleaseNamespaceClaimsResponse>;
75
77
  };
76
78
  runs: {
77
79
  list: (input: import("@fabrika/control-contract").RunListInput) => Promise<import("@fabrika/control-contract").CursorList<import("@fabrika/control-contract").RunDto>>;
@@ -105,6 +107,52 @@ export declare class PlatformRemote {
105
107
  remove: (input: import("@fabrika/control-contract").MailRuleIdInput) => Promise<import("@fabrika/control-contract").OkResponse>;
106
108
  };
107
109
  };
110
+ data: {
111
+ operations: {
112
+ list: (input: {
113
+ env: string;
114
+ appId: string;
115
+ before?: string | undefined;
116
+ limit?: number | undefined;
117
+ }) => Promise<import("@fabrika/control-contract").CursorList<import("@fabrika/control-contract").DataOperationDto>>;
118
+ get: (input: {
119
+ operationId: string;
120
+ }) => Promise<import("@fabrika/control-contract").DataOperationDto>;
121
+ };
122
+ view: (input: import("@fabrika/control-contract").AppEnvironmentInput) => Promise<import("@fabrika/auth-core").OpsView>;
123
+ content: (input: import("@fabrika/control-contract").AppEnvironmentInput) => Promise<import("@fabrika/auth-core").OpsContentView>;
124
+ start: (input: {
125
+ env: string;
126
+ kind: "maintenance";
127
+ mode: "open" | "inspect" | "read-only" | "closed";
128
+ appId: string;
129
+ } | {
130
+ env: string;
131
+ kind: "backup";
132
+ appId: string;
133
+ } | {
134
+ env: string;
135
+ at: string;
136
+ kind: "restore";
137
+ appId: string;
138
+ }) => Promise<import("@fabrika/control-contract").DataOperationDto>;
139
+ recover: (input: {
140
+ env: string;
141
+ appId: string;
142
+ operationId: string;
143
+ resolution: "open" | "resume";
144
+ }) => Promise<import("@fabrika/control-contract").DataOperationDto>;
145
+ backups: {
146
+ list: (input: {
147
+ env: string;
148
+ appId: string;
149
+ before?: string | undefined;
150
+ limit?: number | undefined;
151
+ }) => Promise<import("@fabrika/control-contract").CursorList<import("@fabrika/control-contract").DataBackupDto>>;
152
+ schedule: (input: import("@fabrika/control-contract").AppEnvironmentInput) => Promise<import("@fabrika/control-contract").DataBackupScheduleDto>;
153
+ setSchedule: (input: import("@fabrika/control-contract").SetDataBackupScheduleInput) => Promise<import("@fabrika/control-contract").DataBackupScheduleDto>;
154
+ };
155
+ };
108
156
  };
109
157
  controlForReceipt(controlOrigin: string, token: string): {
110
158
  installation: (input: void) => Promise<import("@fabrika/control-contract").InstallationDto>;
@@ -167,6 +215,8 @@ export declare class PlatformRemote {
167
215
  reconcile: (input: import("@fabrika/control-contract").NamespaceIdInput) => Promise<import("@fabrika/control-contract").DeploymentNamespaceDetailDto>;
168
216
  update: (input: import("@fabrika/control-contract").UpdateNamespaceInput) => Promise<import("@fabrika/control-contract").DeploymentNamespaceDetailDto>;
169
217
  remove: (input: import("@fabrika/control-contract").NamespaceIdInput) => Promise<import("@fabrika/control-contract").RemoveDeploymentNamespaceResponse>;
218
+ republishAll: (input: void) => Promise<import("@fabrika/control-contract").RepublishAllNamespacesResponse>;
219
+ releaseClaims: (input: import("@fabrika/control-contract").ReleaseNamespaceClaimsInput) => Promise<import("@fabrika/control-contract").ReleaseNamespaceClaimsResponse>;
170
220
  };
171
221
  runs: {
172
222
  list: (input: import("@fabrika/control-contract").RunListInput) => Promise<import("@fabrika/control-contract").CursorList<import("@fabrika/control-contract").RunDto>>;
@@ -200,6 +250,52 @@ export declare class PlatformRemote {
200
250
  remove: (input: import("@fabrika/control-contract").MailRuleIdInput) => Promise<import("@fabrika/control-contract").OkResponse>;
201
251
  };
202
252
  };
253
+ data: {
254
+ operations: {
255
+ list: (input: {
256
+ env: string;
257
+ appId: string;
258
+ before?: string | undefined;
259
+ limit?: number | undefined;
260
+ }) => Promise<import("@fabrika/control-contract").CursorList<import("@fabrika/control-contract").DataOperationDto>>;
261
+ get: (input: {
262
+ operationId: string;
263
+ }) => Promise<import("@fabrika/control-contract").DataOperationDto>;
264
+ };
265
+ view: (input: import("@fabrika/control-contract").AppEnvironmentInput) => Promise<import("@fabrika/auth-core").OpsView>;
266
+ content: (input: import("@fabrika/control-contract").AppEnvironmentInput) => Promise<import("@fabrika/auth-core").OpsContentView>;
267
+ start: (input: {
268
+ env: string;
269
+ kind: "maintenance";
270
+ mode: "open" | "inspect" | "read-only" | "closed";
271
+ appId: string;
272
+ } | {
273
+ env: string;
274
+ kind: "backup";
275
+ appId: string;
276
+ } | {
277
+ env: string;
278
+ at: string;
279
+ kind: "restore";
280
+ appId: string;
281
+ }) => Promise<import("@fabrika/control-contract").DataOperationDto>;
282
+ recover: (input: {
283
+ env: string;
284
+ appId: string;
285
+ operationId: string;
286
+ resolution: "open" | "resume";
287
+ }) => Promise<import("@fabrika/control-contract").DataOperationDto>;
288
+ backups: {
289
+ list: (input: {
290
+ env: string;
291
+ appId: string;
292
+ before?: string | undefined;
293
+ limit?: number | undefined;
294
+ }) => Promise<import("@fabrika/control-contract").CursorList<import("@fabrika/control-contract").DataBackupDto>>;
295
+ schedule: (input: import("@fabrika/control-contract").AppEnvironmentInput) => Promise<import("@fabrika/control-contract").DataBackupScheduleDto>;
296
+ setSchedule: (input: import("@fabrika/control-contract").SetDataBackupScheduleInput) => Promise<import("@fabrika/control-contract").DataBackupScheduleDto>;
297
+ };
298
+ };
203
299
  };
204
300
  }
205
301
  export declare function parseEnvironments(value: unknown): AppEnvDto[];