@feltdb/core 0.7.1 → 0.7.3
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/README.md +22 -0
- package/dist/cli/commands.js +163 -33
- package/dist/cli/index.js +1 -1
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +2 -1
- package/dist/create/package-versions.js +1 -1
- package/dist/create/server-source/crates/feltdb/src/authority_failover.rs +769 -0
- package/dist/create/server-source/crates/feltdb/src/bin/feltdb_node.rs +305 -0
- package/dist/create/server-source/crates/feltdb/src/lib.rs +9 -0
- package/dist/create/server-source/crates/feltdb/src/state_facade.rs +292 -0
- package/dist/create/server-source/crates/feltdb/src/state_model.rs +1856 -0
- package/dist/create/server-source/crates/feltdb/tests/feltdb_state_boundary_tests.rs +634 -0
- package/dist/create/server-source/crates/feltdb/tests/state_model_integration.rs +366 -0
- package/dist/create/server-source/crates/feltdb/tests/state_persistence_integration.rs +270 -0
- package/dist/create/server-source/crates/feltdb-server/src/app_state.rs +13 -0
- package/dist/create/server-source/crates/feltdb-server/src/main.rs +184 -1
- package/dist/db.d.ts +7 -0
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +12 -1
- package/dist/feltdb.d.ts +2 -0
- package/dist/feltdb.d.ts.map +1 -1
- package/dist/http-db.d.ts +24 -0
- package/dist/http-db.d.ts.map +1 -1
- package/dist/http-db.js +13 -0
- package/dist/index-core.d.ts +1 -0
- package/dist/index-core.d.ts.map +1 -1
- package/dist/studio/app.d.ts +3 -1
- package/dist/studio/app.d.ts.map +1 -1
- package/dist/studio/components/ApplicationDesigner.d.ts +9 -1
- package/dist/studio/components/ApplicationDesigner.d.ts.map +1 -1
- package/dist/studio/components/index.js +1 -1
- package/dist/studio/{components-C5p2TfIU.js → components-Dxuhrv8_.js} +196 -187
- package/dist/studio/index.js +66 -65
- package/dist/studio-app/assets/{feltdb_wasm-C9xpYtna.js → feltdb_wasm-DVKsw75S.js} +1 -1
- package/dist/studio-app/assets/feltdb_wasm_bg-DNyNf0yy.wasm +0 -0
- package/dist/studio-app/assets/index-B5tnmvSD.js +28 -0
- package/dist/studio-app/index.html +1 -1
- package/dist/wasm/feltdb_wasm_bg.wasm +0 -0
- package/package.json +1 -1
- package/dist/studio-app/assets/feltdb_wasm_bg-BsXHw7eX.wasm +0 -0
- package/dist/studio-app/assets/index-sQyf4Ewl.js +0 -28
package/README.md
CHANGED
|
@@ -111,6 +111,28 @@ A write with `requireAbsent: true` is an atomic create. The authority assigns
|
|
|
111
111
|
it `__version: 1`—overriding any caller-supplied version—so it can immediately
|
|
112
112
|
be updated with `ifVersion: 1`.
|
|
113
113
|
|
|
114
|
+
## Bounded authority queries
|
|
115
|
+
|
|
116
|
+
Remote databases can filter, order, and limit records inside the authority:
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
const page = await db.query({
|
|
120
|
+
collection: 'outbox',
|
|
121
|
+
where: [
|
|
122
|
+
{ field: 'status', eq: 'pending' },
|
|
123
|
+
{ field: 'nextAttemptAt', lte: Date.now() },
|
|
124
|
+
],
|
|
125
|
+
orderBy: [{ field: 'nextAttemptAt', direction: 'asc' }],
|
|
126
|
+
limit: 100,
|
|
127
|
+
cursor,
|
|
128
|
+
});
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
The server adds `recordId` as a deterministic final tie-breaker and returns an
|
|
132
|
+
opaque `nextCursor`. Page snapshots are stable across concurrent inserts and
|
|
133
|
+
deletes. This method is intentionally unavailable on embedded runtimes;
|
|
134
|
+
`Collection.where()` and `Collection.find()` retain their existing behavior.
|
|
135
|
+
|
|
114
136
|
## Durable Operation Management
|
|
115
137
|
|
|
116
138
|
FeltDB provides atomic operation admission and lifecycle management for systems that need to survive process crashes with guaranteed identity stability.
|
package/dist/cli/commands.js
CHANGED
|
@@ -8,7 +8,7 @@ import net from 'net';
|
|
|
8
8
|
import { createRequire } from 'module';
|
|
9
9
|
import { spawn, spawnSync } from 'child_process';
|
|
10
10
|
import { randomBytes } from 'crypto';
|
|
11
|
-
import { createFeltDB, diffFlowSpec, formatFlowSpec, InvestigationLifecycleManager, parseFlowSpec, planFlowSpecMigration, startLocalDevelopmentAuthority, validateFlowSpec } from '@feltdb/core';
|
|
11
|
+
import { createFeltDB, diffFlowSpec, emptyFlowSpec, formatFlowSpec, InvestigationLifecycleManager, parseFlowSpec, planFlowSpecMigration, startLocalDevelopmentAuthority, validateFlowSpec } from '@feltdb/core';
|
|
12
12
|
import { discoverWorkspace, ensureWorkspaceGitIgnored, generatePairingToken, persistPairingToken, displayWorkspaceStatus, initializeWorkspace, startPairingDiscoveryServer } from './workspace-integration.js';
|
|
13
13
|
import { applicationUrlCandidate, detectApplication, discoverApplicationUrl } from './application.js';
|
|
14
14
|
import { resolveApplicationLifecycle, startManagedApplication, waitForManagedApplication } from './application-lifecycle.js';
|
|
@@ -77,6 +77,8 @@ export async function handleCommand(command, args) {
|
|
|
77
77
|
return handleFlowDiff(args);
|
|
78
78
|
case 'deploy':
|
|
79
79
|
return handleFlowDeploy(args);
|
|
80
|
+
case 'publish':
|
|
81
|
+
return handleManagedPublish(args);
|
|
80
82
|
case 'help':
|
|
81
83
|
default:
|
|
82
84
|
return handleHelp();
|
|
@@ -231,36 +233,149 @@ async function handleFlowDeploy(args) {
|
|
|
231
233
|
await db.close();
|
|
232
234
|
}
|
|
233
235
|
}
|
|
236
|
+
async function handleManagedPublish(args) {
|
|
237
|
+
loadProjectEnvironment();
|
|
238
|
+
const configPath = path.resolve('feltdb.config.json');
|
|
239
|
+
if (!fs.existsSync(configPath))
|
|
240
|
+
throw new Error('feltdb.config.json is required for publish');
|
|
241
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
242
|
+
if (config.runtime !== 'managed')
|
|
243
|
+
throw new Error('feltdb publish requires a managed runtime in feltdb.config.json');
|
|
244
|
+
const url = process.env.VITE_FELTDB_MANAGED_URL;
|
|
245
|
+
const token = process.env.VITE_FELTDB_MANAGED_API_KEY;
|
|
246
|
+
const tenantId = process.env.VITE_FELTDB_MANAGED_TENANT_ID;
|
|
247
|
+
const applicationId = process.env.VITE_FELTDB_MANAGED_APPLICATION_ID;
|
|
248
|
+
const namespace = process.env.VITE_FELTDB_MANAGED_NAMESPACE || config.namespace;
|
|
249
|
+
const environment = process.env.VITE_FELTDB_MANAGED_ENVIRONMENT || 'production';
|
|
250
|
+
const missing = [
|
|
251
|
+
['VITE_FELTDB_MANAGED_URL', url],
|
|
252
|
+
['VITE_FELTDB_MANAGED_API_KEY', token],
|
|
253
|
+
['VITE_FELTDB_MANAGED_TENANT_ID', tenantId],
|
|
254
|
+
['VITE_FELTDB_MANAGED_APPLICATION_ID', applicationId],
|
|
255
|
+
['VITE_FELTDB_MANAGED_NAMESPACE', namespace],
|
|
256
|
+
].filter(([, value]) => !value).map(([name]) => name);
|
|
257
|
+
if (missing.length)
|
|
258
|
+
throw new Error(`Managed publish configuration is incomplete in .env.local: ${missing.join(', ')}`);
|
|
259
|
+
const file = flowFile(args);
|
|
260
|
+
const spec = readFlowSpec(file);
|
|
261
|
+
const diagnostics = validateFlowSpec(spec).filter(value => value.severity === 'error');
|
|
262
|
+
if (diagnostics.length)
|
|
263
|
+
throw new Error(diagnostics.map(value => value.message).join('; '));
|
|
264
|
+
console.log('FeltDB Publish');
|
|
265
|
+
console.log(`Application: ${spec.app}`);
|
|
266
|
+
console.log(`Environment: ${environment}`);
|
|
267
|
+
console.log(`Namespace: ${namespace}`);
|
|
268
|
+
console.log(`API: ${url}`);
|
|
269
|
+
console.log('✓ Configuration loaded');
|
|
270
|
+
if (!args.includes('--no-build')) {
|
|
271
|
+
const manifestPath = path.resolve('package.json');
|
|
272
|
+
if (!fs.existsSync(manifestPath))
|
|
273
|
+
throw new Error('package.json is required to build the application');
|
|
274
|
+
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
|
|
275
|
+
if (!manifest.scripts?.build)
|
|
276
|
+
throw new Error('package.json must define a build script for managed publish');
|
|
277
|
+
const build = spawnSync('npm', ['run', 'build'], { cwd: process.cwd(), stdio: 'inherit' });
|
|
278
|
+
if (build.error)
|
|
279
|
+
throw build.error;
|
|
280
|
+
if (build.status !== 0)
|
|
281
|
+
throw new Error(`Application build failed with exit code ${build.status}`);
|
|
282
|
+
}
|
|
283
|
+
console.log('✓ Build completed');
|
|
284
|
+
console.log('✓ Application validated');
|
|
285
|
+
const remote = createFeltDB({ namespace, server: { url: url, token: token } });
|
|
286
|
+
try {
|
|
287
|
+
const current = await remote.collection('_flow_apps').get(spec.app);
|
|
288
|
+
const migration = planFlowSpecMigration(current?.spec ?? emptyFlowSpec(spec.app), spec);
|
|
289
|
+
const destructive = migration.filter(value => value.safety === 'destructive');
|
|
290
|
+
if (destructive.length && !args.includes('--allow-destructive')) {
|
|
291
|
+
throw new Error(`Publish contains destructive changes (${destructive.map(value => value.target).join(', ')}); review them and rerun with --allow-destructive`);
|
|
292
|
+
}
|
|
293
|
+
const result = await remote.deployFlowSpec(spec, current?.version ?? 0, args.includes('--allow-destructive'));
|
|
294
|
+
const publishState = {
|
|
295
|
+
tenantId,
|
|
296
|
+
applicationId,
|
|
297
|
+
namespace,
|
|
298
|
+
environment,
|
|
299
|
+
deploymentId: `${applicationId}:${environment}:${result.version}`,
|
|
300
|
+
version: result.version,
|
|
301
|
+
publishedAt: new Date().toISOString(),
|
|
302
|
+
};
|
|
303
|
+
fs.mkdirSync(path.resolve('.feltdb'), { recursive: true });
|
|
304
|
+
fs.writeFileSync(path.resolve('.feltdb/last-published.json'), `${JSON.stringify(publishState, null, 2)}\n`, { mode: 0o600 });
|
|
305
|
+
fs.writeFileSync(path.resolve('.feltdb/last-deployed.flow'), formatFlowSpec(spec));
|
|
306
|
+
console.log('✓ Published');
|
|
307
|
+
console.log(`Deployment: ${publishState.deploymentId}`);
|
|
308
|
+
console.log(`Version: ${result.version}`);
|
|
309
|
+
console.log('Your app is live.');
|
|
310
|
+
}
|
|
311
|
+
finally {
|
|
312
|
+
await remote.close();
|
|
313
|
+
}
|
|
314
|
+
}
|
|
234
315
|
async function handleServer(args) {
|
|
235
|
-
|
|
236
|
-
const
|
|
237
|
-
const
|
|
238
|
-
const
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
316
|
+
const require = createRequire(import.meta.url);
|
|
317
|
+
const packageRoot = path.dirname(require.resolve('@feltdb/core/package.json'));
|
|
318
|
+
const executable = process.platform === 'win32' ? 'feltdb-server.exe' : 'feltdb-server';
|
|
319
|
+
const candidates = [
|
|
320
|
+
process.env.FELTDB_SERVER_BIN,
|
|
321
|
+
path.join(packageRoot, 'dist', 'server-bin', `${process.platform}-${process.arch}`, executable),
|
|
322
|
+
path.resolve(packageRoot, '..', '..', 'target', 'release', executable),
|
|
323
|
+
path.resolve(packageRoot, '..', '..', 'target', 'debug', executable),
|
|
324
|
+
].filter((value) => Boolean(value));
|
|
325
|
+
const binary = candidates.find(value => fs.existsSync(value));
|
|
326
|
+
const manifests = [
|
|
327
|
+
path.join(packageRoot, 'dist', 'server-source', 'Cargo.toml'),
|
|
328
|
+
path.join(packageRoot, 'dist', 'create', 'server-source', 'Cargo.toml'),
|
|
329
|
+
];
|
|
330
|
+
const manifest = manifests.find(value => fs.existsSync(value));
|
|
331
|
+
if (process.env.FELTDB_SERVER_BIN && !binary) {
|
|
332
|
+
throw new Error(`FELTDB_SERVER_BIN does not exist: ${process.env.FELTDB_SERVER_BIN}`);
|
|
333
|
+
}
|
|
334
|
+
if (!binary && !manifest) {
|
|
335
|
+
throw new Error('No FeltDB authority is available. Reinstall @feltdb/core or set FELTDB_SERVER_BIN to a feltdb-server executable.');
|
|
336
|
+
}
|
|
337
|
+
const forwarded = [...args];
|
|
338
|
+
if (!forwarded.includes('--host'))
|
|
339
|
+
forwarded.unshift('--host', '0.0.0.0');
|
|
340
|
+
if (!forwarded.includes('--data'))
|
|
341
|
+
forwarded.push('--data', path.resolve('data', 'feltdb.log'));
|
|
342
|
+
const dataIndex = forwarded.indexOf('--data');
|
|
343
|
+
if (dataIndex >= 0 && forwarded[dataIndex + 1]) {
|
|
344
|
+
const data = path.resolve(forwarded[dataIndex + 1]);
|
|
345
|
+
const directoryStyle = data.endsWith(path.sep)
|
|
346
|
+
|| (fs.existsSync(data) && fs.statSync(data).isDirectory())
|
|
347
|
+
|| path.extname(data) === '';
|
|
348
|
+
if (directoryStyle) {
|
|
349
|
+
fs.mkdirSync(data, { recursive: true });
|
|
350
|
+
forwarded[dataIndex + 1] = path.join(data, 'feltdb.log');
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
fs.mkdirSync(path.dirname(data), { recursive: true });
|
|
354
|
+
forwarded[dataIndex + 1] = data;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
const command = binary || 'cargo';
|
|
358
|
+
const commandArgs = binary
|
|
359
|
+
? forwarded
|
|
360
|
+
: ['run', '--quiet', '--locked', '--manifest-path', manifest, '--package', 'feltdb-server', '--', ...forwarded];
|
|
361
|
+
console.log(`Starting FeltDB authority (${binary ? binary : 'packaged Rust source'})`);
|
|
362
|
+
const child = spawn(command, commandArgs, { stdio: 'inherit', env: process.env });
|
|
363
|
+
const forwardSignal = (signal) => {
|
|
364
|
+
if (child.exitCode === null)
|
|
365
|
+
child.kill(signal);
|
|
254
366
|
};
|
|
255
|
-
const
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
367
|
+
const onSigint = () => forwardSignal('SIGINT');
|
|
368
|
+
const onSigterm = () => forwardSignal('SIGTERM');
|
|
369
|
+
process.once('SIGINT', onSigint);
|
|
370
|
+
process.once('SIGTERM', onSigterm);
|
|
371
|
+
const exitCode = await new Promise((resolve, reject) => {
|
|
372
|
+
child.once('error', reject);
|
|
373
|
+
child.once('exit', (code, signal) => resolve(code ?? (signal ? 1 : 0)));
|
|
374
|
+
});
|
|
375
|
+
process.off('SIGINT', onSigint);
|
|
376
|
+
process.off('SIGTERM', onSigterm);
|
|
377
|
+
if (exitCode !== 0)
|
|
378
|
+
throw new Error(`FeltDB authority exited with code ${exitCode}`);
|
|
264
379
|
}
|
|
265
380
|
async function handleKeys(args) {
|
|
266
381
|
const subcommand = args[0];
|
|
@@ -1121,9 +1236,13 @@ async function handleDoctor() {
|
|
|
1121
1236
|
console.log('\n✅ System healthy\n');
|
|
1122
1237
|
}
|
|
1123
1238
|
async function handleStudio(args, onReady) {
|
|
1239
|
+
loadProjectEnvironment();
|
|
1240
|
+
const projectConfigPath = path.resolve('feltdb.config.json');
|
|
1241
|
+
const projectConfig = fs.existsSync(projectConfigPath) ? JSON.parse(fs.readFileSync(projectConfigPath, 'utf8')) : {};
|
|
1242
|
+
const projectIsManaged = projectConfig.runtime === 'managed';
|
|
1124
1243
|
const connectUrl = args.includes('--connect')
|
|
1125
1244
|
? args[args.indexOf('--connect') + 1]
|
|
1126
|
-
: undefined;
|
|
1245
|
+
: projectIsManaged ? process.env.VITE_FELTDB_MANAGED_URL : undefined;
|
|
1127
1246
|
const port = args.includes('--port')
|
|
1128
1247
|
? args[args.indexOf('--port') + 1] || '7701'
|
|
1129
1248
|
: '7701';
|
|
@@ -1133,10 +1252,10 @@ async function handleStudio(args, onReady) {
|
|
|
1133
1252
|
const open = !args.includes('--no-open');
|
|
1134
1253
|
const namespace = args.includes('--namespace')
|
|
1135
1254
|
? args[args.indexOf('--namespace') + 1] || 'default'
|
|
1136
|
-
: 'default';
|
|
1255
|
+
: projectIsManaged ? process.env.VITE_FELTDB_MANAGED_NAMESPACE || projectConfig.namespace || 'default' : 'default';
|
|
1137
1256
|
const runtime = args.includes('--runtime')
|
|
1138
1257
|
? args[args.indexOf('--runtime') + 1] || 'browser'
|
|
1139
|
-
: connectUrl ? 'remote' : 'browser';
|
|
1258
|
+
: projectIsManaged ? 'managed' : connectUrl ? 'remote' : 'browser';
|
|
1140
1259
|
const appUrl = args.includes('--app-url')
|
|
1141
1260
|
? args[args.indexOf('--app-url') + 1]
|
|
1142
1261
|
: undefined;
|
|
@@ -1177,7 +1296,15 @@ async function handleStudio(args, onReady) {
|
|
|
1177
1296
|
response.setHeader('Content-Type', 'application/json; charset=utf-8');
|
|
1178
1297
|
response.setHeader('Cache-Control', 'no-store');
|
|
1179
1298
|
response.setHeader('Pragma', 'no-cache');
|
|
1180
|
-
|
|
1299
|
+
const managedPublish = runtime === 'managed' ? {
|
|
1300
|
+
url: process.env.VITE_FELTDB_MANAGED_URL || connectUrl || '',
|
|
1301
|
+
namespace: process.env.VITE_FELTDB_MANAGED_NAMESPACE || namespace,
|
|
1302
|
+
token: process.env.VITE_FELTDB_MANAGED_API_KEY || process.env.VITE_FELTDB_API_KEY || '',
|
|
1303
|
+
tenantId: process.env.VITE_FELTDB_MANAGED_TENANT_ID || '',
|
|
1304
|
+
applicationId: process.env.VITE_FELTDB_MANAGED_APPLICATION_ID || '',
|
|
1305
|
+
environment: process.env.VITE_FELTDB_MANAGED_ENVIRONMENT || 'production',
|
|
1306
|
+
} : undefined;
|
|
1307
|
+
response.end(JSON.stringify({ token: connectUrl ? process.env.VITE_FELTDB_API_KEY || process.env.VITE_FELTDB_MANAGED_API_KEY || '' : '', managedPublish, session }));
|
|
1181
1308
|
return;
|
|
1182
1309
|
}
|
|
1183
1310
|
if (pathname === '/_feltdb/project') {
|
|
@@ -1278,6 +1405,7 @@ Commands:
|
|
|
1278
1405
|
validate [file] Validate an entire FlowSpec application model
|
|
1279
1406
|
diff [file] Diff FlowSpec against the last deployed model
|
|
1280
1407
|
deploy [file] Validate, version, and deploy FlowSpec
|
|
1408
|
+
publish [file] Build and publish/update a managed application
|
|
1281
1409
|
studio Launch FeltDB Studio (developer interface)
|
|
1282
1410
|
server Start self-hosted FeltDB server
|
|
1283
1411
|
keys Manage API keys
|
|
@@ -1299,6 +1427,8 @@ Studio:
|
|
|
1299
1427
|
|
|
1300
1428
|
Server Options:
|
|
1301
1429
|
feltdb server [--port 7700] [--data ./data] [--auth]
|
|
1430
|
+
Starts the real Rust HTTP authority. Set FELTDB_MASTER_KEY; Cargo builds the
|
|
1431
|
+
version-matched bundled source when no FELTDB_SERVER_BIN override is set.
|
|
1302
1432
|
|
|
1303
1433
|
API Key Commands:
|
|
1304
1434
|
feltdb keys create [--name dev] [--scope '*']
|
package/dist/cli/index.js
CHANGED
|
@@ -23,7 +23,7 @@ import * as path from 'path';
|
|
|
23
23
|
import * as readline from 'readline';
|
|
24
24
|
import { getClient } from './api-client.js';
|
|
25
25
|
import { loadFeltDBConfig, createDefaultConfig, validateModel, } from './config.js';
|
|
26
|
-
const VERSION = '0.
|
|
26
|
+
const VERSION = '0.7.3';
|
|
27
27
|
function prompt(question) {
|
|
28
28
|
const rl = readline.createInterface({
|
|
29
29
|
input: process.stdin,
|
package/dist/collection.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
|
package/dist/collection.js
CHANGED
|
@@ -333,7 +333,8 @@ export class Collection {
|
|
|
333
333
|
if (!current) {
|
|
334
334
|
throw new Error(`Record ${id} not found`);
|
|
335
335
|
}
|
|
336
|
-
const
|
|
336
|
+
const nextVersion = (current.__version || 1) + 1;
|
|
337
|
+
const updated = { ...current, ...changes, __version: nextVersion };
|
|
337
338
|
const key = `${this.name}:${id}`;
|
|
338
339
|
const result = await (this.db.update
|
|
339
340
|
? this.db.update(key, JSON.stringify(updated))
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// One release train keeps generated applications installable. The repository
|
|
2
2
|
// validation script checks these values against every workspace manifest.
|
|
3
|
-
export const FELTDB_PACKAGE_VERSION = '0.7.
|
|
3
|
+
export const FELTDB_PACKAGE_VERSION = '0.7.3';
|
|
4
4
|
export const feltdbPackageRange = `^${FELTDB_PACKAGE_VERSION}`;
|