swallowkit 1.0.0-beta.3 → 1.0.0-beta.31
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/LICENSE +21 -21
- package/README.ja.md +353 -215
- package/README.md +406 -216
- package/dist/__tests__/fixtures.d.ts +22 -0
- package/dist/__tests__/fixtures.d.ts.map +1 -0
- package/dist/__tests__/fixtures.js +146 -0
- package/dist/__tests__/fixtures.js.map +1 -0
- package/dist/cli/commands/add-auth.d.ts +10 -0
- package/dist/cli/commands/add-auth.d.ts.map +1 -0
- package/dist/cli/commands/add-auth.js +444 -0
- package/dist/cli/commands/add-auth.js.map +1 -0
- package/dist/cli/commands/add-connector.d.ts +20 -0
- package/dist/cli/commands/add-connector.d.ts.map +1 -0
- package/dist/cli/commands/add-connector.js +163 -0
- package/dist/cli/commands/add-connector.js.map +1 -0
- package/dist/cli/commands/create-model.d.ts +1 -4
- package/dist/cli/commands/create-model.d.ts.map +1 -1
- package/dist/cli/commands/create-model.js +21 -82
- package/dist/cli/commands/create-model.js.map +1 -1
- package/dist/cli/commands/dev-seeds.d.ts +57 -0
- package/dist/cli/commands/dev-seeds.d.ts.map +1 -0
- package/dist/cli/commands/dev-seeds.js +470 -0
- package/dist/cli/commands/dev-seeds.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +33 -0
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +628 -146
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +3 -1
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +15 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +2696 -1706
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/scaffold.d.ts.map +1 -1
- package/dist/cli/commands/scaffold.js +448 -129
- package/dist/cli/commands/scaffold.js.map +1 -1
- package/dist/cli/index.d.ts +5 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +200 -42
- package/dist/cli/index.js.map +1 -1
- package/dist/core/config.d.ts +8 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +94 -5
- package/dist/core/config.js.map +1 -1
- package/dist/core/mock/connector-mock-server.d.ts +101 -0
- package/dist/core/mock/connector-mock-server.d.ts.map +1 -0
- package/dist/core/mock/connector-mock-server.js +480 -0
- package/dist/core/mock/connector-mock-server.js.map +1 -0
- package/dist/core/mock/zod-mock-generator.d.ts +14 -0
- package/dist/core/mock/zod-mock-generator.d.ts.map +1 -0
- package/dist/core/mock/zod-mock-generator.js +163 -0
- package/dist/core/mock/zod-mock-generator.js.map +1 -0
- package/dist/core/operations/create-model.d.ts +15 -0
- package/dist/core/operations/create-model.d.ts.map +1 -0
- package/dist/core/operations/create-model.js +171 -0
- package/dist/core/operations/create-model.js.map +1 -0
- package/dist/core/operations/runtime.d.ts +32 -0
- package/dist/core/operations/runtime.d.ts.map +1 -0
- package/dist/core/operations/runtime.js +225 -0
- package/dist/core/operations/runtime.js.map +1 -0
- package/dist/core/operations/scaffold-machine.d.ts +16 -0
- package/dist/core/operations/scaffold-machine.d.ts.map +1 -0
- package/dist/core/operations/scaffold-machine.js +63 -0
- package/dist/core/operations/scaffold-machine.js.map +1 -0
- package/dist/core/project/manifest.d.ts +92 -0
- package/dist/core/project/manifest.d.ts.map +1 -0
- package/dist/core/project/manifest.js +321 -0
- package/dist/core/project/manifest.js.map +1 -0
- package/dist/core/project/validation.d.ts +20 -0
- package/dist/core/project/validation.d.ts.map +1 -0
- package/dist/core/project/validation.js +209 -0
- package/dist/core/project/validation.js.map +1 -0
- package/dist/core/scaffold/auth-generator.d.ts +38 -0
- package/dist/core/scaffold/auth-generator.d.ts.map +1 -0
- package/dist/core/scaffold/auth-generator.js +1244 -0
- package/dist/core/scaffold/auth-generator.js.map +1 -0
- package/dist/core/scaffold/connector-functions-generator.d.ts +41 -0
- package/dist/core/scaffold/connector-functions-generator.d.ts.map +1 -0
- package/dist/core/scaffold/connector-functions-generator.js +1027 -0
- package/dist/core/scaffold/connector-functions-generator.js.map +1 -0
- package/dist/core/scaffold/functions-generator.d.ts +7 -1
- package/dist/core/scaffold/functions-generator.d.ts.map +1 -1
- package/dist/core/scaffold/functions-generator.js +920 -213
- package/dist/core/scaffold/functions-generator.js.map +1 -1
- package/dist/core/scaffold/model-parser.d.ts +20 -1
- package/dist/core/scaffold/model-parser.d.ts.map +1 -1
- package/dist/core/scaffold/model-parser.js +328 -135
- package/dist/core/scaffold/model-parser.js.map +1 -1
- package/dist/core/scaffold/native-schema-generator.d.ts +13 -0
- package/dist/core/scaffold/native-schema-generator.d.ts.map +1 -0
- package/dist/core/scaffold/native-schema-generator.js +677 -0
- package/dist/core/scaffold/native-schema-generator.js.map +1 -0
- package/dist/core/scaffold/nextjs-generator.d.ts +8 -0
- package/dist/core/scaffold/nextjs-generator.d.ts.map +1 -1
- package/dist/core/scaffold/nextjs-generator.js +314 -182
- package/dist/core/scaffold/nextjs-generator.js.map +1 -1
- package/dist/core/scaffold/openapi-generator.d.ts +3 -0
- package/dist/core/scaffold/openapi-generator.d.ts.map +1 -0
- package/dist/core/scaffold/openapi-generator.js +190 -0
- package/dist/core/scaffold/openapi-generator.js.map +1 -0
- package/dist/core/scaffold/ui-generator.d.ts +10 -4
- package/dist/core/scaffold/ui-generator.d.ts.map +1 -1
- package/dist/core/scaffold/ui-generator.js +768 -663
- package/dist/core/scaffold/ui-generator.js.map +1 -1
- package/dist/database/base-model.d.ts +3 -3
- package/dist/database/base-model.js +3 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/machine/contracts.d.ts +16 -0
- package/dist/machine/contracts.d.ts.map +1 -0
- package/dist/machine/contracts.js +3 -0
- package/dist/machine/contracts.js.map +1 -0
- package/dist/machine/errors.d.ts +11 -0
- package/dist/machine/errors.d.ts.map +1 -0
- package/dist/machine/errors.js +34 -0
- package/dist/machine/errors.js.map +1 -0
- package/dist/machine/index.d.ts +3 -0
- package/dist/machine/index.d.ts.map +1 -0
- package/dist/machine/index.js +156 -0
- package/dist/machine/index.js.map +1 -0
- package/dist/mcp/index.d.ts +25 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +184 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/types/index.d.ts +65 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/package-manager.d.ts +109 -0
- package/dist/utils/package-manager.d.ts.map +1 -0
- package/dist/utils/package-manager.js +215 -0
- package/dist/utils/package-manager.js.map +1 -0
- package/dist/utils/python-uv.d.ts +21 -0
- package/dist/utils/python-uv.d.ts.map +1 -0
- package/dist/utils/python-uv.js +111 -0
- package/dist/utils/python-uv.js.map +1 -0
- package/package.json +85 -73
- package/src/__tests__/__snapshots__/functions-generator.test.ts.snap +1139 -0
- package/src/__tests__/__snapshots__/nextjs-generator.test.ts.snap +194 -0
- package/src/__tests__/__snapshots__/ui-generator.test.ts.snap +532 -0
- package/src/__tests__/auth.test.ts +654 -0
- package/src/__tests__/config.test.ts +274 -0
- package/src/__tests__/connector-functions-generator.test.ts +288 -0
- package/src/__tests__/connector-mock-server.test.ts +439 -0
- package/src/__tests__/connector-model-bff.test.ts +162 -0
- package/src/__tests__/dev-seeds.test.ts +173 -0
- package/src/__tests__/dev.test.ts +252 -0
- package/src/__tests__/fixtures.ts +144 -0
- package/src/__tests__/functions-generator.test.ts +237 -0
- package/src/__tests__/init.test.ts +115 -0
- package/src/__tests__/machine.test.ts +251 -0
- package/src/__tests__/mcp.test.ts +117 -0
- package/src/__tests__/model-parser.test.ts +52 -0
- package/src/__tests__/nextjs-generator.test.ts +97 -0
- package/src/__tests__/openapi-generator.test.ts +43 -0
- package/src/__tests__/package-manager.test.ts +189 -0
- package/src/__tests__/python-uv.test.ts +48 -0
- package/src/__tests__/scaffold.test.ts +67 -0
- package/src/__tests__/string-utils.test.ts +75 -0
- package/src/__tests__/ui-generator.test.ts +144 -0
- package/src/__tests__/zod-mock-generator.test.ts +132 -0
- package/src/cli/commands/add-auth.ts +500 -0
- package/src/cli/commands/add-connector.ts +158 -0
- package/src/cli/commands/create-model.ts +62 -0
- package/src/cli/commands/dev-seeds.ts +614 -0
- package/src/cli/commands/dev.ts +1134 -0
- package/src/cli/commands/index.ts +9 -0
- package/src/cli/commands/init.ts +3480 -0
- package/src/cli/commands/provision.ts +193 -0
- package/src/cli/commands/scaffold.ts +1001 -0
- package/src/cli/index.ts +196 -0
- package/src/core/config.ts +312 -0
- package/src/core/mock/connector-mock-server.ts +555 -0
- package/src/core/mock/zod-mock-generator.ts +205 -0
- package/src/core/operations/create-model.ts +174 -0
- package/src/core/operations/runtime.ts +235 -0
- package/src/core/operations/scaffold-machine.ts +91 -0
- package/src/core/project/manifest.ts +402 -0
- package/src/core/project/validation.ts +229 -0
- package/src/core/scaffold/auth-generator.ts +1284 -0
- package/src/core/scaffold/connector-functions-generator.ts +1128 -0
- package/src/core/scaffold/functions-generator.ts +970 -0
- package/src/core/scaffold/model-parser.ts +841 -0
- package/src/core/scaffold/native-schema-generator.ts +798 -0
- package/src/core/scaffold/nextjs-generator.ts +370 -0
- package/src/core/scaffold/openapi-generator.ts +212 -0
- package/src/core/scaffold/ui-generator.ts +1061 -0
- package/src/database/base-model.ts +184 -0
- package/src/database/client.ts +140 -0
- package/src/database/repository.ts +104 -0
- package/src/database/runtime-check.ts +25 -0
- package/src/index.ts +27 -0
- package/src/machine/contracts.ts +17 -0
- package/src/machine/errors.ts +34 -0
- package/src/machine/index.ts +173 -0
- package/src/mcp/index.ts +185 -0
- package/src/types/index.ts +134 -0
- package/src/utils/package-manager.ts +229 -0
- package/src/utils/python-uv.ts +96 -0
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.devSeedsCommand = void 0;
|
|
37
|
+
exports.getContainerNameForModel = getContainerNameForModel;
|
|
38
|
+
exports.getSeedEnvironmentDir = getSeedEnvironmentDir;
|
|
39
|
+
exports.normalizeSeedIdentifier = normalizeSeedIdentifier;
|
|
40
|
+
exports.parseSeedDocuments = parseSeedDocuments;
|
|
41
|
+
exports.loadProjectModels = loadProjectModels;
|
|
42
|
+
exports.buildDefaultCosmosDatabaseName = buildDefaultCosmosDatabaseName;
|
|
43
|
+
exports.getDefaultCosmosDatabaseName = getDefaultCosmosDatabaseName;
|
|
44
|
+
exports.parseCosmosConnectionString = parseCosmosConnectionString;
|
|
45
|
+
exports.resolveLocalCosmosConnectionInfo = resolveLocalCosmosConnectionInfo;
|
|
46
|
+
exports.buildSeedTemplateDocument = buildSeedTemplateDocument;
|
|
47
|
+
exports.loadDevSeedFiles = loadDevSeedFiles;
|
|
48
|
+
exports.applyDevSeedEnvironment = applyDevSeedEnvironment;
|
|
49
|
+
exports.generateDevSeedTemplates = generateDevSeedTemplates;
|
|
50
|
+
exports.stripCosmosSystemProperties = stripCosmosSystemProperties;
|
|
51
|
+
exports.prepareSeedDocumentsForExport = prepareSeedDocumentsForExport;
|
|
52
|
+
exports.exportDevSeedsFromEmulator = exportDevSeedsFromEmulator;
|
|
53
|
+
const commander_1 = require("commander");
|
|
54
|
+
const cosmos_1 = require("@azure/cosmos");
|
|
55
|
+
const fs = __importStar(require("fs"));
|
|
56
|
+
const path = __importStar(require("path"));
|
|
57
|
+
const config_1 = require("../../core/config");
|
|
58
|
+
const model_parser_1 = require("../../core/scaffold/model-parser");
|
|
59
|
+
const COSMOS_SYSTEM_PROPERTIES = new Set(["_rid", "_self", "_etag", "_attachments", "_ts"]);
|
|
60
|
+
function getContainerNameForModel(model) {
|
|
61
|
+
return model.name.endsWith('s') ? model.name : `${model.name}s`;
|
|
62
|
+
}
|
|
63
|
+
function getSeedEnvironmentDir(environment, seedsDir = "dev-seeds") {
|
|
64
|
+
return path.join(process.cwd(), seedsDir, environment);
|
|
65
|
+
}
|
|
66
|
+
function normalizeSeedIdentifier(value) {
|
|
67
|
+
return value.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
68
|
+
}
|
|
69
|
+
function parseSeedDocuments(content, filePath) {
|
|
70
|
+
const parsed = JSON.parse(content);
|
|
71
|
+
if (Array.isArray(parsed)) {
|
|
72
|
+
return parsed.map((item, index) => {
|
|
73
|
+
if (!isSeedDocument(item)) {
|
|
74
|
+
throw new Error(`${filePath} must contain only JSON objects. Invalid item at index ${index}.`);
|
|
75
|
+
}
|
|
76
|
+
return item;
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
if (isSeedDocument(parsed)) {
|
|
80
|
+
return [parsed];
|
|
81
|
+
}
|
|
82
|
+
throw new Error(`${filePath} must contain a JSON object or an array of JSON objects.`);
|
|
83
|
+
}
|
|
84
|
+
async function loadProjectModels(modelsDir = "shared/models") {
|
|
85
|
+
return (0, model_parser_1.getAllModels)(modelsDir);
|
|
86
|
+
}
|
|
87
|
+
function buildDefaultCosmosDatabaseName(packageName) {
|
|
88
|
+
const normalizedName = packageName.trim();
|
|
89
|
+
const baseName = normalizedName.length > 0 ? normalizedName : "App";
|
|
90
|
+
return `${baseName.charAt(0).toUpperCase()}${baseName.slice(1)}Database`;
|
|
91
|
+
}
|
|
92
|
+
function getDefaultCosmosDatabaseName(projectDir = process.cwd()) {
|
|
93
|
+
const packageJsonPath = path.join(projectDir, "package.json");
|
|
94
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
|
|
95
|
+
return buildDefaultCosmosDatabaseName(packageJson.name || "App");
|
|
96
|
+
}
|
|
97
|
+
function parseCosmosConnectionString(connectionString) {
|
|
98
|
+
const endpointMatch = connectionString.match(/AccountEndpoint=([^;]+)/);
|
|
99
|
+
const keyMatch = connectionString.match(/AccountKey=([^;]+)/);
|
|
100
|
+
if (!endpointMatch || !keyMatch) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
endpoint: endpointMatch[1],
|
|
105
|
+
key: keyMatch[1],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function resolveLocalCosmosConnectionInfo(defaultDatabaseName, functionsDir = path.join(process.cwd(), "functions")) {
|
|
109
|
+
const localSettingsPath = path.join(functionsDir, "local.settings.json");
|
|
110
|
+
if (!fs.existsSync(localSettingsPath)) {
|
|
111
|
+
return { ok: false, reason: "missing-local-settings", localSettingsPath };
|
|
112
|
+
}
|
|
113
|
+
const localSettings = JSON.parse(fs.readFileSync(localSettingsPath, "utf-8"));
|
|
114
|
+
const connectionString = localSettings.Values?.CosmosDBConnection;
|
|
115
|
+
if (!connectionString) {
|
|
116
|
+
return { ok: false, reason: "missing-connection-string", localSettingsPath };
|
|
117
|
+
}
|
|
118
|
+
const parsedConnection = parseCosmosConnectionString(connectionString);
|
|
119
|
+
if (!parsedConnection) {
|
|
120
|
+
return { ok: false, reason: "invalid-connection-string", localSettingsPath };
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
ok: true,
|
|
124
|
+
value: {
|
|
125
|
+
...parsedConnection,
|
|
126
|
+
databaseName: localSettings.Values?.COSMOS_DB_DATABASE_NAME || defaultDatabaseName,
|
|
127
|
+
localSettingsPath,
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
function buildSeedTemplateDocument(model, allModels = [model], seenModels = new Set()) {
|
|
132
|
+
const modelLookup = new Map(allModels.map((candidate) => [candidate.name, candidate]));
|
|
133
|
+
return buildSeedTemplateDocumentInternal(model, modelLookup, seenModels);
|
|
134
|
+
}
|
|
135
|
+
async function loadDevSeedFiles(environment, models, seedsDir = "dev-seeds") {
|
|
136
|
+
const environmentDir = getSeedEnvironmentDir(environment, seedsDir);
|
|
137
|
+
if (!fs.existsSync(environmentDir)) {
|
|
138
|
+
return [];
|
|
139
|
+
}
|
|
140
|
+
const modelAliases = buildModelAliasMap(models);
|
|
141
|
+
const seedFiles = fs.readdirSync(environmentDir).filter((entry) => entry.endsWith(".json"));
|
|
142
|
+
const loaded = [];
|
|
143
|
+
for (const fileName of seedFiles) {
|
|
144
|
+
const filePath = path.join(environmentDir, fileName);
|
|
145
|
+
const fileStem = path.basename(fileName, ".json");
|
|
146
|
+
const model = modelAliases.get(normalizeSeedIdentifier(fileStem));
|
|
147
|
+
if (!model) {
|
|
148
|
+
console.warn(`⚠️ Skipping seed file without matching schema: ${filePath}`);
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
const documents = parseSeedDocuments(fs.readFileSync(filePath, "utf-8"), filePath);
|
|
152
|
+
validateSeedDocuments(documents, filePath);
|
|
153
|
+
loaded.push({
|
|
154
|
+
model,
|
|
155
|
+
containerName: getContainerNameForModel(model),
|
|
156
|
+
documents,
|
|
157
|
+
filePath,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
return loaded;
|
|
161
|
+
}
|
|
162
|
+
async function applyDevSeedEnvironment({ client, databaseName, environment, models, seedsDir = "dev-seeds", }) {
|
|
163
|
+
const environmentDir = getSeedEnvironmentDir(environment, seedsDir);
|
|
164
|
+
if (!fs.existsSync(environmentDir)) {
|
|
165
|
+
console.log(`ℹ️ Seed environment "${environment}" not found at ${environmentDir}. Keeping existing Cosmos DB data.`);
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
const seedFiles = await loadDevSeedFiles(environment, models, seedsDir);
|
|
169
|
+
if (seedFiles.length === 0) {
|
|
170
|
+
console.log(`ℹ️ No seed files found for environment "${environment}". Keeping existing Cosmos DB data.`);
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
const database = client.database(databaseName);
|
|
174
|
+
console.log(`🧪 Applying Cosmos DB seed data for environment "${environment}"...`);
|
|
175
|
+
for (const seedFile of seedFiles) {
|
|
176
|
+
await recreateContainer(database, seedFile.containerName, seedFile.model.partitionKey);
|
|
177
|
+
const container = database.container(seedFile.containerName);
|
|
178
|
+
for (const document of seedFile.documents) {
|
|
179
|
+
await container.items.create(document);
|
|
180
|
+
}
|
|
181
|
+
console.log(`✅ Seeded "${seedFile.containerName}" with ${seedFile.documents.length} item(s) from ${path.basename(seedFile.filePath)}`);
|
|
182
|
+
}
|
|
183
|
+
console.log("✅ Cosmos DB seed replacement complete\n");
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
async function generateDevSeedTemplates({ environment, modelsDir = "shared/models", seedsDir = "dev-seeds", force = false, }) {
|
|
187
|
+
(0, config_1.ensureSwallowKitProject)("create-dev-seeds");
|
|
188
|
+
console.log(`🧪 Generating dev seed templates for environment "${environment}"...\n`);
|
|
189
|
+
const models = await loadProjectModels(modelsDir);
|
|
190
|
+
if (models.length === 0) {
|
|
191
|
+
console.log("⚠️ No schemas found under shared/models. Nothing was generated.");
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const environmentDir = getSeedEnvironmentDir(environment, seedsDir);
|
|
195
|
+
fs.mkdirSync(environmentDir, { recursive: true });
|
|
196
|
+
const writtenFiles = [];
|
|
197
|
+
const skippedFiles = [];
|
|
198
|
+
for (const model of models) {
|
|
199
|
+
const filePath = path.join(environmentDir, `${(0, model_parser_1.toKebabCase)(model.name)}.json`);
|
|
200
|
+
if (!force && fs.existsSync(filePath)) {
|
|
201
|
+
skippedFiles.push(filePath);
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
const content = JSON.stringify([buildSeedTemplateDocument(model, models)], null, 2) + "\n";
|
|
205
|
+
fs.writeFileSync(filePath, content, "utf-8");
|
|
206
|
+
writtenFiles.push(filePath);
|
|
207
|
+
console.log(`✅ Created: ${filePath}`);
|
|
208
|
+
}
|
|
209
|
+
if (skippedFiles.length > 0) {
|
|
210
|
+
console.log("");
|
|
211
|
+
console.log(`⏭️ Skipped ${skippedFiles.length} existing file(s). Use --force to overwrite them.`);
|
|
212
|
+
}
|
|
213
|
+
console.log("");
|
|
214
|
+
console.log("📝 Next steps:");
|
|
215
|
+
console.log(` 1. Edit JSON files under ${environmentDir}`);
|
|
216
|
+
console.log(` 2. Run 'swallowkit dev --seed-env ${environment}' to replace emulator data before startup`);
|
|
217
|
+
}
|
|
218
|
+
function stripCosmosSystemProperties(document) {
|
|
219
|
+
const sanitized = {};
|
|
220
|
+
for (const [key, value] of Object.entries(document)) {
|
|
221
|
+
if (!COSMOS_SYSTEM_PROPERTIES.has(key)) {
|
|
222
|
+
sanitized[key] = value;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return sanitized;
|
|
226
|
+
}
|
|
227
|
+
function prepareSeedDocumentsForExport(documents, filePath) {
|
|
228
|
+
const preparedDocuments = documents
|
|
229
|
+
.map((document) => stripCosmosSystemProperties(document))
|
|
230
|
+
.sort(compareSeedDocumentsForExport);
|
|
231
|
+
validateSeedDocuments(preparedDocuments, filePath);
|
|
232
|
+
return preparedDocuments;
|
|
233
|
+
}
|
|
234
|
+
async function exportDevSeedsFromEmulator({ environment, modelsDir = "shared/models", seedsDir = "dev-seeds", force = false, }) {
|
|
235
|
+
(0, config_1.ensureSwallowKitProject)("create-dev-seeds");
|
|
236
|
+
console.log(`🧪 Exporting dev seeds from local Cosmos DB Emulator for environment "${environment}"...\n`);
|
|
237
|
+
const models = await loadProjectModels(modelsDir);
|
|
238
|
+
if (models.length === 0) {
|
|
239
|
+
console.log("⚠️ No schemas found under shared/models. Nothing was exported.");
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
const connectionInfoResult = resolveLocalCosmosConnectionInfo(getDefaultCosmosDatabaseName());
|
|
243
|
+
if (!connectionInfoResult.ok) {
|
|
244
|
+
throw new Error(buildLocalCosmosConnectionError(connectionInfoResult));
|
|
245
|
+
}
|
|
246
|
+
const { endpoint, key, databaseName, localSettingsPath } = connectionInfoResult.value;
|
|
247
|
+
console.log(`🗄️ Using local Cosmos DB settings from ${localSettingsPath}`);
|
|
248
|
+
console.log(`📦 Export source database: "${databaseName}"\n`);
|
|
249
|
+
const client = new cosmos_1.CosmosClient({ endpoint, key });
|
|
250
|
+
const database = client.database(databaseName);
|
|
251
|
+
try {
|
|
252
|
+
await database.read();
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
if (isCosmosNotFoundError(error)) {
|
|
256
|
+
throw new Error(`Cosmos DB database "${databaseName}" was not found in the local emulator.`);
|
|
257
|
+
}
|
|
258
|
+
throw error;
|
|
259
|
+
}
|
|
260
|
+
const environmentDir = getSeedEnvironmentDir(environment, seedsDir);
|
|
261
|
+
fs.mkdirSync(environmentDir, { recursive: true });
|
|
262
|
+
let writtenFiles = 0;
|
|
263
|
+
let skippedFiles = 0;
|
|
264
|
+
let totalDocuments = 0;
|
|
265
|
+
for (const model of models) {
|
|
266
|
+
const containerName = getContainerNameForModel(model);
|
|
267
|
+
const filePath = path.join(environmentDir, `${(0, model_parser_1.toKebabCase)(model.name)}.json`);
|
|
268
|
+
if (!force && fs.existsSync(filePath)) {
|
|
269
|
+
skippedFiles += 1;
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
const exported = await readContainerSeedDocuments(database, containerName, filePath);
|
|
273
|
+
fs.writeFileSync(filePath, JSON.stringify(exported.documents, null, 2) + "\n", "utf-8");
|
|
274
|
+
writtenFiles += 1;
|
|
275
|
+
totalDocuments += exported.documents.length;
|
|
276
|
+
const detail = exported.containerExists
|
|
277
|
+
? `${exported.documents.length} item(s)`
|
|
278
|
+
: "container not found; wrote empty seed";
|
|
279
|
+
console.log(`✅ Exported "${containerName}" to ${filePath} (${detail})`);
|
|
280
|
+
}
|
|
281
|
+
if (skippedFiles > 0) {
|
|
282
|
+
console.log("");
|
|
283
|
+
console.log(`⏭️ Skipped ${skippedFiles} existing file(s). Use --force to overwrite them.`);
|
|
284
|
+
}
|
|
285
|
+
console.log("");
|
|
286
|
+
console.log(`🧾 Export complete: ${writtenFiles} file(s), ${totalDocuments} item(s).`);
|
|
287
|
+
console.log(`📝 Next step: Run 'swallowkit dev --seed-env ${environment}' to replay the exported data.`);
|
|
288
|
+
}
|
|
289
|
+
exports.devSeedsCommand = new commander_1.Command()
|
|
290
|
+
.name("create-dev-seeds")
|
|
291
|
+
.description("Generate dev seed JSON files from shared/models schemas or export current local Cosmos DB Emulator data")
|
|
292
|
+
.argument("<environment>", "Seed environment name")
|
|
293
|
+
.option("--models-dir <dir>", "Models directory", "shared/models")
|
|
294
|
+
.option("--seeds-dir <dir>", "Dev seeds directory", "dev-seeds")
|
|
295
|
+
.option("--force", "Overwrite existing seed JSON files", false)
|
|
296
|
+
.option("--from-emulator", "Export current data from the local Cosmos DB Emulator instead of generating templates", false)
|
|
297
|
+
.action(async (environment, options) => {
|
|
298
|
+
if (options.fromEmulator) {
|
|
299
|
+
await exportDevSeedsFromEmulator({
|
|
300
|
+
environment,
|
|
301
|
+
modelsDir: options.modelsDir,
|
|
302
|
+
seedsDir: options.seedsDir,
|
|
303
|
+
force: options.force,
|
|
304
|
+
});
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
await generateDevSeedTemplates({
|
|
308
|
+
environment,
|
|
309
|
+
modelsDir: options.modelsDir,
|
|
310
|
+
seedsDir: options.seedsDir,
|
|
311
|
+
force: options.force,
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
function buildSeedTemplateDocumentInternal(model, modelLookup, seenModels) {
|
|
315
|
+
const nextSeen = new Set(seenModels);
|
|
316
|
+
nextSeen.add(model.name);
|
|
317
|
+
const document = {};
|
|
318
|
+
for (const field of model.fields) {
|
|
319
|
+
document[field.name] = buildTemplateValueForField(model, field, modelLookup, nextSeen);
|
|
320
|
+
}
|
|
321
|
+
return document;
|
|
322
|
+
}
|
|
323
|
+
function buildTemplateValueForField(model, field, modelLookup, seenModels) {
|
|
324
|
+
if (field.isNestedSchema && field.nestedModelName) {
|
|
325
|
+
const nestedModel = modelLookup.get(field.nestedModelName);
|
|
326
|
+
if (nestedModel) {
|
|
327
|
+
if (seenModels.has(nestedModel.name)) {
|
|
328
|
+
const fallback = { id: `${(0, model_parser_1.toKebabCase)(nestedModel.name)}-001` };
|
|
329
|
+
return field.isArray ? [fallback] : fallback;
|
|
330
|
+
}
|
|
331
|
+
const nestedDocument = buildSeedTemplateDocumentInternal(nestedModel, modelLookup, seenModels);
|
|
332
|
+
return field.isArray ? [nestedDocument] : nestedDocument;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
if (field.isArray) {
|
|
336
|
+
return [buildScalarTemplateValue(model, field)];
|
|
337
|
+
}
|
|
338
|
+
return buildScalarTemplateValue(model, field);
|
|
339
|
+
}
|
|
340
|
+
function buildScalarTemplateValue(model, field) {
|
|
341
|
+
if (field.name === "id") {
|
|
342
|
+
return `${(0, model_parser_1.toKebabCase)(model.name)}-001`;
|
|
343
|
+
}
|
|
344
|
+
if (field.enumValues && field.enumValues.length > 0) {
|
|
345
|
+
return field.enumValues[0];
|
|
346
|
+
}
|
|
347
|
+
if (field.type === "number") {
|
|
348
|
+
return 0;
|
|
349
|
+
}
|
|
350
|
+
if (field.type === "boolean") {
|
|
351
|
+
return false;
|
|
352
|
+
}
|
|
353
|
+
if (field.type === "date" || field.name.endsWith("At")) {
|
|
354
|
+
return "2026-01-01T00:00:00.000Z";
|
|
355
|
+
}
|
|
356
|
+
if (field.type === "object") {
|
|
357
|
+
return {};
|
|
358
|
+
}
|
|
359
|
+
return `${(0, model_parser_1.toKebabCase)(model.name)}-${(0, model_parser_1.toKebabCase)(field.name)}-sample`;
|
|
360
|
+
}
|
|
361
|
+
function buildModelAliasMap(models) {
|
|
362
|
+
const aliases = new Map();
|
|
363
|
+
for (const model of models) {
|
|
364
|
+
const candidates = [
|
|
365
|
+
model.name,
|
|
366
|
+
model.schemaName,
|
|
367
|
+
(0, model_parser_1.toKebabCase)(model.name),
|
|
368
|
+
path.basename(model.filePath, path.extname(model.filePath)),
|
|
369
|
+
];
|
|
370
|
+
for (const candidate of candidates) {
|
|
371
|
+
const normalized = normalizeSeedIdentifier(candidate);
|
|
372
|
+
if (!aliases.has(normalized)) {
|
|
373
|
+
aliases.set(normalized, model);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
return aliases;
|
|
378
|
+
}
|
|
379
|
+
function isSeedDocument(value) {
|
|
380
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
381
|
+
}
|
|
382
|
+
function validateSeedDocuments(documents, filePath) {
|
|
383
|
+
const ids = new Set();
|
|
384
|
+
documents.forEach((document, index) => {
|
|
385
|
+
if (typeof document.id !== "string" || document.id.trim().length === 0) {
|
|
386
|
+
throw new Error(`${filePath} item at index ${index} must contain a non-empty string id.`);
|
|
387
|
+
}
|
|
388
|
+
if (ids.has(document.id)) {
|
|
389
|
+
throw new Error(`${filePath} contains duplicate id "${document.id}".`);
|
|
390
|
+
}
|
|
391
|
+
ids.add(document.id);
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
function compareSeedDocumentsForExport(left, right) {
|
|
395
|
+
const leftId = typeof left.id === "string" ? left.id : "";
|
|
396
|
+
const rightId = typeof right.id === "string" ? right.id : "";
|
|
397
|
+
if (leftId.length === 0 && rightId.length === 0) {
|
|
398
|
+
return 0;
|
|
399
|
+
}
|
|
400
|
+
if (leftId.length === 0) {
|
|
401
|
+
return 1;
|
|
402
|
+
}
|
|
403
|
+
if (rightId.length === 0) {
|
|
404
|
+
return -1;
|
|
405
|
+
}
|
|
406
|
+
return leftId.localeCompare(rightId);
|
|
407
|
+
}
|
|
408
|
+
function buildLocalCosmosConnectionError(result) {
|
|
409
|
+
switch (result.reason) {
|
|
410
|
+
case "missing-local-settings":
|
|
411
|
+
return `local.settings.json not found at ${result.localSettingsPath}. Start from a SwallowKit app with Azure Functions configured.`;
|
|
412
|
+
case "missing-connection-string":
|
|
413
|
+
return `CosmosDBConnection not found in ${result.localSettingsPath}.`;
|
|
414
|
+
case "invalid-connection-string":
|
|
415
|
+
return `Invalid CosmosDBConnection format in ${result.localSettingsPath}.`;
|
|
416
|
+
}
|
|
417
|
+
throw new Error(`Unhandled local Cosmos connection error: ${JSON.stringify(result)}`);
|
|
418
|
+
}
|
|
419
|
+
async function readContainerSeedDocuments(database, containerName, filePath) {
|
|
420
|
+
const container = database.container(containerName);
|
|
421
|
+
try {
|
|
422
|
+
await container.read();
|
|
423
|
+
}
|
|
424
|
+
catch (error) {
|
|
425
|
+
if (isCosmosNotFoundError(error)) {
|
|
426
|
+
return { documents: [], containerExists: false };
|
|
427
|
+
}
|
|
428
|
+
throw error;
|
|
429
|
+
}
|
|
430
|
+
const { resources } = await container.items.query("SELECT * FROM c").fetchAll();
|
|
431
|
+
return {
|
|
432
|
+
documents: prepareSeedDocumentsForExport(resources, filePath),
|
|
433
|
+
containerExists: true,
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
function isCosmosNotFoundError(error) {
|
|
437
|
+
return typeof error === "object" && error !== null && "code" in error && error.code === 404;
|
|
438
|
+
}
|
|
439
|
+
async function recreateContainer(database, containerName, partitionKeyPath = '/id') {
|
|
440
|
+
try {
|
|
441
|
+
await database.container(containerName).delete();
|
|
442
|
+
}
|
|
443
|
+
catch (error) {
|
|
444
|
+
if (error?.code !== 404) {
|
|
445
|
+
throw error;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
try {
|
|
449
|
+
await database.containers.createIfNotExists({
|
|
450
|
+
id: containerName,
|
|
451
|
+
partitionKey: {
|
|
452
|
+
paths: [partitionKeyPath],
|
|
453
|
+
kind: cosmos_1.PartitionKeyKind.Hash,
|
|
454
|
+
version: 2,
|
|
455
|
+
},
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
catch (error) {
|
|
459
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
460
|
+
console.log(`⚠️ Failed to recreate "${containerName}" with full partition key definition: ${message}`);
|
|
461
|
+
console.log("🔄 Retrying with simple partition key...");
|
|
462
|
+
await database.containers.createIfNotExists({
|
|
463
|
+
id: containerName,
|
|
464
|
+
partitionKey: {
|
|
465
|
+
paths: [partitionKeyPath],
|
|
466
|
+
},
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
//# sourceMappingURL=dev-seeds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-seeds.js","sourceRoot":"","sources":["../../../src/cli/commands/dev-seeds.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,36 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import { BackendLanguage } from '../../types';
|
|
3
|
+
export interface DevOptions {
|
|
4
|
+
port?: string;
|
|
5
|
+
functionsPort?: string;
|
|
6
|
+
host?: string;
|
|
7
|
+
open?: boolean;
|
|
8
|
+
verbose?: boolean;
|
|
9
|
+
noFunctions?: boolean;
|
|
10
|
+
seedEnv?: string;
|
|
11
|
+
mockConnectors?: boolean;
|
|
12
|
+
}
|
|
13
|
+
interface FunctionsCoreToolsCommand {
|
|
14
|
+
command: string;
|
|
15
|
+
argsPrefix: string[];
|
|
16
|
+
label: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function buildFunctionsStartArgs(functionsPort: string): string[];
|
|
19
|
+
export declare function parseCoreToolsVersion(output: string): string | null;
|
|
20
|
+
export declare function compareVersionNumbers(left: string, right: string): number;
|
|
21
|
+
export declare function buildFunctionsCoreToolsCommand(backendLanguage: BackendLanguage, installedVersion: string | null): FunctionsCoreToolsCommand;
|
|
22
|
+
export declare function buildNextDevArgs(pm: string, port: string): string[];
|
|
23
|
+
export declare function buildFunctionsBaseUrl(host: string | undefined, functionsPort: string): string;
|
|
24
|
+
export declare function getFunctionsReadinessTimeoutMs(backendLanguage: BackendLanguage): number;
|
|
25
|
+
export declare function waitForHttpServerReady(url: string, timeoutMs?: number, intervalMs?: number): Promise<boolean>;
|
|
26
|
+
export declare function getPythonVirtualEnvPaths(functionsDir: string): {
|
|
27
|
+
venvDir: string;
|
|
28
|
+
binDir: string;
|
|
29
|
+
pythonExecutable: string;
|
|
30
|
+
};
|
|
31
|
+
export declare function getCSharpFunctionsBuildArtifactPaths(functionsDir: string): string[];
|
|
32
|
+
export declare function buildPythonFunctionsEnv(baseEnv: NodeJS.ProcessEnv, functionsDir: string): NodeJS.ProcessEnv;
|
|
33
|
+
export declare function buildDevCommand(runDevEnvironment?: (options: DevOptions) => Promise<void>, verifyProject?: (commandName: string, projectRoot?: string) => void): Command;
|
|
2
34
|
export declare const devCommand: Command;
|
|
35
|
+
export {};
|
|
3
36
|
//# sourceMappingURL=dev.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAa9C,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAMD,UAAU,yBAAyB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAYD,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGnE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAezE;AAED,wBAAgB,8BAA8B,CAC5C,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAC9B,yBAAyB,CAqB3B;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAGnE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAE7F;AAED,wBAAgB,8BAA8B,CAAC,eAAe,EAAE,eAAe,GAAG,MAAM,CAEvF;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,EACX,SAAS,SAAS,EAClB,UAAU,SAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAgBlB;AAED,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAUA;AAED,wBAAgB,oCAAoC,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAKnF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC,UAAU,CAW3G;AAsTD,wBAAgB,eAAe,CAC7B,iBAAiB,GAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAuB,EAC/E,aAAa,GAAE,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,IAA8B,GAC3F,OAAO,CAyBT;AAED,eAAO,MAAM,UAAU,SAAoB,CAAC"}
|