@eide/foir-cli 0.1.2 → 0.1.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/dist/cli.js +3 -0
- package/dist/codegen/fetch-models.d.ts +40 -0
- package/dist/codegen/fetch-models.d.ts.map +1 -0
- package/dist/codegen/fetch-models.js +45 -0
- package/dist/codegen/field-mapping.d.ts +28 -0
- package/dist/codegen/field-mapping.d.ts.map +1 -0
- package/dist/codegen/field-mapping.js +194 -0
- package/dist/codegen/generators/config.d.ts +5 -0
- package/dist/codegen/generators/config.d.ts.map +1 -0
- package/dist/codegen/generators/config.js +82 -0
- package/dist/codegen/generators/documents.d.ts +6 -0
- package/dist/codegen/generators/documents.d.ts.map +1 -0
- package/dist/codegen/generators/documents.js +91 -0
- package/dist/codegen/generators/field-types.d.ts +5 -0
- package/dist/codegen/generators/field-types.d.ts.map +1 -0
- package/dist/codegen/generators/field-types.js +339 -0
- package/dist/codegen/generators/model-index.d.ts +6 -0
- package/dist/codegen/generators/model-index.d.ts.map +1 -0
- package/dist/codegen/generators/model-index.js +26 -0
- package/dist/codegen/generators/model-types.d.ts +12 -0
- package/dist/codegen/generators/model-types.d.ts.map +1 -0
- package/dist/codegen/generators/model-types.js +150 -0
- package/dist/codegen/write-files.d.ts +15 -0
- package/dist/codegen/write-files.d.ts.map +1 -0
- package/dist/codegen/write-files.js +35 -0
- package/dist/commands/models.d.ts.map +1 -1
- package/dist/commands/models.js +0 -6
- package/dist/commands/pull.d.ts +4 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/pull.js +118 -0
- package/dist/config/pull-config.d.ts +25 -0
- package/dist/config/pull-config.d.ts.map +1 -0
- package/dist/config/pull-config.js +65 -0
- package/dist/config/types.d.ts +31 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +15 -0
- package/dist/graphql/queries.d.ts +1 -0
- package/dist/graphql/queries.d.ts.map +1 -1
- package/dist/graphql/queries.js +8 -0
- package/package.json +19 -13
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { resolve } from 'path';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { withErrorHandler } from '../lib/errors.js';
|
|
4
|
+
import { createClient } from '../lib/client.js';
|
|
5
|
+
import { loadPullConfig } from '../config/pull-config.js';
|
|
6
|
+
import { fetchModelsForCodegen, filterModels } from '../codegen/fetch-models.js';
|
|
7
|
+
import { generateFieldTypesFile } from '../codegen/generators/field-types.js';
|
|
8
|
+
import { generateConfigFile } from '../codegen/generators/config.js';
|
|
9
|
+
import { generateModelTypes } from '../codegen/generators/model-types.js';
|
|
10
|
+
import { generateModelIndex } from '../codegen/generators/model-index.js';
|
|
11
|
+
import { generateModelDocuments } from '../codegen/generators/documents.js';
|
|
12
|
+
import { writeFiles } from '../codegen/write-files.js';
|
|
13
|
+
export function registerPullCommand(program, globalOpts) {
|
|
14
|
+
program
|
|
15
|
+
.command('pull')
|
|
16
|
+
.description('Generate TypeScript types and GraphQL documents from platform models')
|
|
17
|
+
.option('--config <path>', 'Path to config file')
|
|
18
|
+
.option('--only <models>', 'Comma-separated model keys to generate')
|
|
19
|
+
.option('--no-prettier', 'Skip Prettier formatting')
|
|
20
|
+
.option('--dry-run', 'Show what would be generated without writing')
|
|
21
|
+
.option('--out <dir>', 'Override output directory for types')
|
|
22
|
+
.action(withErrorHandler(globalOpts, async (cmdOpts) => {
|
|
23
|
+
const opts = globalOpts();
|
|
24
|
+
const flags = {
|
|
25
|
+
config: cmdOpts.config,
|
|
26
|
+
only: cmdOpts.only,
|
|
27
|
+
noPrettier: cmdOpts.prettier === false,
|
|
28
|
+
dryRun: !!cmdOpts.dryRun,
|
|
29
|
+
out: cmdOpts.out,
|
|
30
|
+
};
|
|
31
|
+
const config = await loadPullConfig(flags);
|
|
32
|
+
// Fetch models
|
|
33
|
+
const client = await createClient(opts);
|
|
34
|
+
console.log(chalk.dim('Fetching models…'));
|
|
35
|
+
const allModels = await fetchModelsForCodegen(client);
|
|
36
|
+
if (allModels.length === 0) {
|
|
37
|
+
console.log(chalk.yellow('No models found. Nothing to generate.'));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const models = filterModels(allModels, {
|
|
41
|
+
only: config.only.length > 0 ? config.only : undefined,
|
|
42
|
+
includeInline: config.includeInline,
|
|
43
|
+
});
|
|
44
|
+
console.log(chalk.dim(`Found ${allModels.length} model(s), generating for ${models.length}.`));
|
|
45
|
+
// Collect files to write
|
|
46
|
+
const cwd = process.cwd();
|
|
47
|
+
const typesDir = resolve(cwd, config.output.types);
|
|
48
|
+
const docsDir = resolve(cwd, config.output.documents);
|
|
49
|
+
const files = [];
|
|
50
|
+
// 1. Static files
|
|
51
|
+
files.push({
|
|
52
|
+
path: resolve(typesDir, 'field-types.ts'),
|
|
53
|
+
content: generateFieldTypesFile(),
|
|
54
|
+
});
|
|
55
|
+
files.push({
|
|
56
|
+
path: resolve(typesDir, 'config.ts'),
|
|
57
|
+
content: generateConfigFile(),
|
|
58
|
+
});
|
|
59
|
+
// 2. Per-model type files
|
|
60
|
+
for (const model of models) {
|
|
61
|
+
files.push({
|
|
62
|
+
path: resolve(typesDir, 'models', `${model.key}.ts`),
|
|
63
|
+
content: generateModelTypes(model, models),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// 3. Model index
|
|
67
|
+
files.push({
|
|
68
|
+
path: resolve(typesDir, 'models', 'index.ts'),
|
|
69
|
+
content: generateModelIndex(models),
|
|
70
|
+
});
|
|
71
|
+
// 4. Per-model GraphQL documents (only for publicApi models with records)
|
|
72
|
+
const publicModels = models.filter((m) => m.config.publicApi && m.config.records);
|
|
73
|
+
for (const model of publicModels) {
|
|
74
|
+
files.push({
|
|
75
|
+
path: resolve(docsDir, `${model.key}.graphql`),
|
|
76
|
+
content: generateModelDocuments(model),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
// 5. Main index
|
|
80
|
+
files.push({
|
|
81
|
+
path: resolve(typesDir, 'index.ts'),
|
|
82
|
+
content: generateMainIndex(),
|
|
83
|
+
});
|
|
84
|
+
// Dry run: list files
|
|
85
|
+
if (config.dryRun) {
|
|
86
|
+
console.log(chalk.bold('\nDry run — files that would be generated:\n'));
|
|
87
|
+
for (const file of files) {
|
|
88
|
+
const rel = file.path.replace(cwd + '/', '');
|
|
89
|
+
console.log(` ${chalk.green('+')} ${rel}`);
|
|
90
|
+
}
|
|
91
|
+
console.log(`\n${chalk.dim(`${files.length} file(s) total`)}`);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
// Write files
|
|
95
|
+
await writeFiles(files, config.prettier);
|
|
96
|
+
// Summary
|
|
97
|
+
const modelCount = models.length;
|
|
98
|
+
const docCount = publicModels.length;
|
|
99
|
+
console.log(chalk.green(`\nGenerated ${files.length} file(s)`) +
|
|
100
|
+
chalk.dim(` (${modelCount} model type(s), ${docCount} document(s))`));
|
|
101
|
+
console.log(chalk.dim(` Types: ${typesDir}`));
|
|
102
|
+
if (docCount > 0) {
|
|
103
|
+
console.log(chalk.dim(` Documents: ${docsDir}`));
|
|
104
|
+
}
|
|
105
|
+
}));
|
|
106
|
+
}
|
|
107
|
+
function generateMainIndex() {
|
|
108
|
+
return `/**
|
|
109
|
+
* Generated types and configs
|
|
110
|
+
*
|
|
111
|
+
* @generated by foir — DO NOT EDIT MANUALLY
|
|
112
|
+
*/
|
|
113
|
+
|
|
114
|
+
export * from './field-types.js';
|
|
115
|
+
export * from './config.js';
|
|
116
|
+
export * from './models/index.js';
|
|
117
|
+
`;
|
|
118
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pull config loader — searches for foir.config.ts / .foirrc.ts and merges with CLI flags.
|
|
3
|
+
*/
|
|
4
|
+
export interface PullCliFlags {
|
|
5
|
+
config?: string;
|
|
6
|
+
only?: string;
|
|
7
|
+
noPrettier?: boolean;
|
|
8
|
+
dryRun?: boolean;
|
|
9
|
+
out?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ResolvedPullConfig {
|
|
12
|
+
output: {
|
|
13
|
+
types: string;
|
|
14
|
+
documents: string;
|
|
15
|
+
};
|
|
16
|
+
only: string[];
|
|
17
|
+
includeInline: boolean;
|
|
18
|
+
prettier: boolean;
|
|
19
|
+
dryRun: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Load and merge config from file + CLI flags.
|
|
23
|
+
*/
|
|
24
|
+
export declare function loadPullConfig(flags: PullCliFlags): Promise<ResolvedPullConfig>;
|
|
25
|
+
//# sourceMappingURL=pull-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull-config.d.ts","sourceRoot":"","sources":["../../src/config/pull-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+CH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAuB7B"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pull config loader — searches for foir.config.ts / .foirrc.ts and merges with CLI flags.
|
|
3
|
+
*/
|
|
4
|
+
import { resolve } from 'path';
|
|
5
|
+
import { pathToFileURL } from 'url';
|
|
6
|
+
import { existsSync } from 'fs';
|
|
7
|
+
const CONFIG_FILE_NAMES = [
|
|
8
|
+
'foir.config.ts',
|
|
9
|
+
'foir.config.js',
|
|
10
|
+
'foir.config.mjs',
|
|
11
|
+
'.foirrc.ts',
|
|
12
|
+
'.foirrc.js',
|
|
13
|
+
'.foirrc.mjs',
|
|
14
|
+
];
|
|
15
|
+
const DEFAULT_TYPES_DIR = './src/generated/types';
|
|
16
|
+
const DEFAULT_DOCS_DIR = './src/generated/documents';
|
|
17
|
+
/**
|
|
18
|
+
* Resolve a config file from the given directory (or cwd).
|
|
19
|
+
*/
|
|
20
|
+
function findConfigFile(explicitPath) {
|
|
21
|
+
if (explicitPath) {
|
|
22
|
+
const abs = resolve(explicitPath);
|
|
23
|
+
if (existsSync(abs))
|
|
24
|
+
return abs;
|
|
25
|
+
throw new Error(`Config file not found: ${explicitPath}`);
|
|
26
|
+
}
|
|
27
|
+
const cwd = process.cwd();
|
|
28
|
+
for (const name of CONFIG_FILE_NAMES) {
|
|
29
|
+
const candidate = resolve(cwd, name);
|
|
30
|
+
if (existsSync(candidate))
|
|
31
|
+
return candidate;
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Dynamically import a config file (supports .ts via tsx loader, .js, .mjs).
|
|
37
|
+
*/
|
|
38
|
+
async function loadConfigFile(filePath) {
|
|
39
|
+
const url = pathToFileURL(filePath).href;
|
|
40
|
+
const mod = await import(url);
|
|
41
|
+
const config = mod.default ?? mod;
|
|
42
|
+
return config;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Load and merge config from file + CLI flags.
|
|
46
|
+
*/
|
|
47
|
+
export async function loadPullConfig(flags) {
|
|
48
|
+
let fileConfig = {};
|
|
49
|
+
const configPath = findConfigFile(flags.config);
|
|
50
|
+
if (configPath) {
|
|
51
|
+
const full = await loadConfigFile(configPath);
|
|
52
|
+
fileConfig = full.pull ?? {};
|
|
53
|
+
}
|
|
54
|
+
// Merge: defaults ← file config ← CLI flags
|
|
55
|
+
const types = flags.out ?? fileConfig.output?.types ?? DEFAULT_TYPES_DIR;
|
|
56
|
+
const documents = fileConfig.output?.documents ?? DEFAULT_DOCS_DIR;
|
|
57
|
+
const output = { types, documents };
|
|
58
|
+
const only = flags.only
|
|
59
|
+
? flags.only.split(',').map((s) => s.trim())
|
|
60
|
+
: fileConfig.only ?? [];
|
|
61
|
+
const includeInline = fileConfig.includeInline ?? true;
|
|
62
|
+
const prettier = flags.noPrettier ? false : (fileConfig.prettier ?? true);
|
|
63
|
+
const dryRun = flags.dryRun ?? false;
|
|
64
|
+
return { output, only, includeInline, prettier, dryRun };
|
|
65
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration types for foir-cli
|
|
3
|
+
*/
|
|
4
|
+
export interface FoirPullConfig {
|
|
5
|
+
output?: {
|
|
6
|
+
/** Directory for generated TypeScript types (default: './src/generated/types') */
|
|
7
|
+
types?: string;
|
|
8
|
+
/** Directory for generated GraphQL documents (default: './src/generated/documents') */
|
|
9
|
+
documents?: string;
|
|
10
|
+
};
|
|
11
|
+
/** Filter to specific model keys */
|
|
12
|
+
only?: string[];
|
|
13
|
+
/** Include inline-only models for type resolution (default: true) */
|
|
14
|
+
includeInline?: boolean;
|
|
15
|
+
/** Format output with Prettier (default: true) */
|
|
16
|
+
prettier?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface FoirConfig {
|
|
19
|
+
pull?: FoirPullConfig;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Helper to create a type-safe foir config.
|
|
23
|
+
* Used in foir.config.ts files:
|
|
24
|
+
*
|
|
25
|
+
* ```ts
|
|
26
|
+
* import { defineConfig } from '@eide/foir-cli/config';
|
|
27
|
+
* export default defineConfig({ pull: { output: { types: './src/generated' } } });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function defineConfig(config: FoirConfig): FoirConfig;
|
|
31
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE;QACP,kFAAkF;QAClF,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,uFAAuF;QACvF,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,qEAAqE;IACrE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAE3D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration types for foir-cli
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Helper to create a type-safe foir config.
|
|
6
|
+
* Used in foir.config.ts files:
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { defineConfig } from '@eide/foir-cli/config';
|
|
10
|
+
* export default defineConfig({ pull: { output: { types: './src/generated' } } });
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export function defineConfig(config) {
|
|
14
|
+
return config;
|
|
15
|
+
}
|
|
@@ -15,6 +15,7 @@ export declare const UNPUBLISH_RECORD = "\n mutation($id: ID!) { unpublishRecor
|
|
|
15
15
|
export declare const DUPLICATE_RECORD = "\n mutation($input: DuplicateRecordInput!) { duplicateRecord(input: $input) { record { id modelKey naturalKey } variant { id variantKey } version { id versionNumber } } }\n";
|
|
16
16
|
export declare const RECORD_VERSIONS = "\n query($parentId: ID!, $limit: Int, $offset: Int) { recordVersions(parentId: $parentId, limit: $limit, offset: $offset) { items { id versionNumber publishStatus data contentHash changeDescription createdAt createdBy } } }\n";
|
|
17
17
|
export declare const RECORD_VARIANTS = "\n query($recordId: ID!, $limit: Int, $offset: Int) { recordVariants(recordId: $recordId, limit: $limit, offset: $offset) { items { id variantKey variantName isDefault priority createdAt } } }\n";
|
|
18
|
+
export declare const MODELS_FOR_CODEGEN = "\n query($limit: Int) {\n models(limit: $limit) {\n items { id key name pluralName description category fields config hooks }\n total\n }\n }\n";
|
|
18
19
|
export declare const MODEL_BY_KEY = "\n query($key: String!) { modelByKey(key: $key) { id key name pluralName description category icon fields config hooks displayField extensionId systemEntity deletable editable currentVersionId publishedVersionNumber createdAt updatedAt } }\n";
|
|
19
20
|
export declare const MODELS = "\n query($search: String, $category: String, $limit: Int, $offset: Int) {\n models(search: $search, category: $category, limit: $limit, offset: $offset) {\n items { id key name category config systemEntity createdAt updatedAt }\n total\n }\n }\n";
|
|
20
21
|
export declare const CREATE_MODEL = "\n mutation($input: CreateModelInput!) { createModel(input: $input) { id key name fields config createdAt } }\n";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/graphql/queries.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/graphql/queries.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,mBAAmB,8HAE/B,CAAC;AAIF,eAAO,MAAM,aAAa,oVAOzB,CAAC;AAEF,eAAO,MAAM,WAAW,oOAEvB,CAAC;AAEF,eAAO,MAAM,cAAc,2JAE1B,CAAC;AAEF,eAAO,MAAM,cAAc,mHAE1B,CAAC;AAEF,eAAO,MAAM,cAAc,sFAE1B,CAAC;AAIF,eAAO,MAAM,MAAM,6QAElB,CAAC;AAEF,eAAO,MAAM,aAAa,uVAEzB,CAAC;AAEF,eAAO,MAAM,OAAO,wVAOnB,CAAC;AAEF,eAAO,MAAM,aAAa,+MAEzB,CAAC;AAEF,eAAO,MAAM,aAAa,qJAEzB,CAAC;AAEF,eAAO,MAAM,aAAa,kFAEzB,CAAC;AAEF,eAAO,MAAM,eAAe,8EAE3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,0DAE5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,kLAE5B,CAAC;AAEF,eAAO,MAAM,eAAe,uOAE3B,CAAC;AAEF,eAAO,MAAM,eAAe,wMAE3B,CAAC;AAIF,eAAO,MAAM,kBAAkB,sKAO9B,CAAC;AAEF,eAAO,MAAM,YAAY,uPAExB,CAAC;AAEF,eAAO,MAAM,MAAM,4QAOlB,CAAC;AAEF,eAAO,MAAM,YAAY,qHAExB,CAAC;AAEF,eAAO,MAAM,YAAY,qHAExB,CAAC;AAEF,eAAO,MAAM,YAAY,sDAExB,CAAC;AAEF,eAAO,MAAM,cAAc,wNAE1B,CAAC;AAIF,eAAO,MAAM,aAAa,2UAOzB,CAAC;AAIF,eAAO,MAAM,SAAS,qTAOrB,CAAC;AAEF,eAAO,MAAM,QAAQ,oGAEpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,wHAE7B,CAAC;AAEF,eAAO,MAAM,eAAe,iHAE3B,CAAC;AAEF,eAAO,MAAM,eAAe,+EAE3B,CAAC;AAIF,eAAO,MAAM,QAAQ,qNAEpB,CAAC;AAEF,eAAO,MAAM,OAAO,+LAEnB,CAAC;AAEF,eAAO,MAAM,cAAc,2MAE1B,CAAC;AAEF,eAAO,MAAM,cAAc,oHAE1B,CAAC;AAEF,eAAO,MAAM,cAAc,uIAE1B,CAAC;AAEF,eAAO,MAAM,cAAc,wDAE1B,CAAC;AAEF,eAAO,MAAM,qBAAqB,iKAEjC,CAAC;AAEF,eAAO,MAAM,uBAAuB,8JAEnC,CAAC;AAIF,eAAO,MAAM,WAAW,uQAEvB,CAAC;AAEF,eAAO,MAAM,UAAU,4SAEtB,CAAC;AAEF,eAAO,MAAM,iBAAiB,wTAE7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,iIAE7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,oJAE7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,2DAE7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,+GAE5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,+GAE5B,CAAC;AAEF,eAAO,MAAM,iBAAiB,gHAE7B,CAAC;AAEF,eAAO,MAAM,cAAc,6GAE1B,CAAC;AAEF,eAAO,MAAM,gBAAgB,mLAE5B,CAAC;AAIF,eAAO,MAAM,YAAY,oIAExB,CAAC;AAEF,eAAO,MAAM,oBAAoB,oLAEhC,CAAC;AAEF,eAAO,MAAM,OAAO,0JAEnB,CAAC;AAEF,eAAO,MAAM,WAAW,wHAEvB,CAAC;AAEF,eAAO,MAAM,cAAc,+DAE1B,CAAC;AAIF,eAAO,MAAM,UAAU,kRAEtB,CAAC;AAEF,eAAO,MAAM,SAAS,4NAErB,CAAC;AAEF,eAAO,MAAM,gBAAgB,wOAE5B,CAAC;AAEF,eAAO,MAAM,kBAAkB,yIAE9B,CAAC;AAEF,eAAO,MAAM,sBAAsB,oHAElC,CAAC;AAIF,eAAO,MAAM,UAAU,sQAEtB,CAAC;AAEF,eAAO,MAAM,SAAS,+SAErB,CAAC;AAEF,eAAO,MAAM,iBAAiB,iKAE7B,CAAC;AAEF,eAAO,MAAM,yBAAyB,4KAErC,CAAC;AAEF,eAAO,MAAM,sBAAsB,sUAOlC,CAAC;AAEF,eAAO,MAAM,iBAAiB,oIAE7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,+FAE/B,CAAC;AAIF,eAAO,MAAM,SAAS,sSAOrB,CAAC;AAEF,eAAO,MAAM,QAAQ,wQAEpB,CAAC;AAEF,eAAO,MAAM,eAAe,2HAE3B,CAAC;AAEF,eAAO,MAAM,eAAe,qJAE3B,CAAC;AAEF,eAAO,MAAM,eAAe,gEAE3B,CAAC;AAEF,eAAO,MAAM,cAAc,4FAE1B,CAAC;AAEF,eAAO,MAAM,eAAe,oFAE3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,yFAE5B,CAAC;AAIF,eAAO,MAAM,aAAa,8QASzB,CAAC;AAEF,eAAO,MAAM,sBAAsB,oFAElC,CAAC;AAEF,eAAO,MAAM,2BAA2B,gDAEvC,CAAC;AAIF,eAAO,MAAM,OAAO,mPAEnB,CAAC;AAEF,eAAO,MAAM,MAAM,4IAElB,CAAC;AAEF,eAAO,MAAM,cAAc,4JAE1B,CAAC;AAEF,eAAO,MAAM,cAAc,qGAE1B,CAAC;AAEF,eAAO,MAAM,aAAa,6HAEzB,CAAC;AAEF,eAAO,MAAM,aAAa,gJAEzB,CAAC;AAEF,eAAO,MAAM,aAAa,uDAEzB,CAAC;AAIF,eAAO,MAAM,KAAK,+VAOjB,CAAC;AAEF,eAAO,MAAM,IAAI,yKAEhB,CAAC;AAEF,eAAO,MAAM,kBAAkB,uFAE9B,CAAC;AAEF,eAAO,MAAM,WAAW,uRAEvB,CAAC;AAEF,eAAO,MAAM,oBAAoB,qOAEhC,CAAC;AAEF,eAAO,MAAM,WAAW,qDAEvB,CAAC;AAIF,eAAO,MAAM,KAAK,6XAOjB,CAAC;AAEF,eAAO,MAAM,IAAI,qLAEhB,CAAC;AAEF,eAAO,MAAM,WAAW,8HAEvB,CAAC;AAEF,eAAO,MAAM,YAAY,qHAExB,CAAC;AAEF,eAAO,MAAM,WAAW,iEAEvB,CAAC;AAIF,eAAO,MAAM,eAAe,qNAE3B,CAAC;AAEF,eAAO,MAAM,qBAAqB,yIAEjC,CAAC;AAEF,eAAO,MAAM,4BAA4B,qJAExC,CAAC;AAEF,eAAO,MAAM,4BAA4B,iJAExC,CAAC;AAEF,eAAO,MAAM,4BAA4B,oKAExC,CAAC;AAEF,eAAO,MAAM,4BAA4B,oEAExC,CAAC"}
|
package/dist/graphql/queries.js
CHANGED
|
@@ -67,6 +67,14 @@ export const RECORD_VARIANTS = `
|
|
|
67
67
|
query($recordId: ID!, $limit: Int, $offset: Int) { recordVariants(recordId: $recordId, limit: $limit, offset: $offset) { items { id variantKey variantName isDefault priority createdAt } } }
|
|
68
68
|
`;
|
|
69
69
|
// --- Models ---
|
|
70
|
+
export const MODELS_FOR_CODEGEN = `
|
|
71
|
+
query($limit: Int) {
|
|
72
|
+
models(limit: $limit) {
|
|
73
|
+
items { id key name pluralName description category fields config hooks }
|
|
74
|
+
total
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
`;
|
|
70
78
|
export const MODEL_BY_KEY = `
|
|
71
79
|
query($key: String!) { modelByKey(key: $key) { id key name pluralName description category icon fields config hooks displayField extensionId systemEntity deletable editable currentVersionId publishedVersionNumber createdAt updatedAt } }
|
|
72
80
|
`;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eide/foir-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Universal platform CLI for EIDE — scriptable, composable resource management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -13,26 +13,24 @@
|
|
|
13
13
|
".": {
|
|
14
14
|
"types": "./dist/cli.js",
|
|
15
15
|
"import": "./dist/cli.js"
|
|
16
|
+
},
|
|
17
|
+
"./config": {
|
|
18
|
+
"types": "./dist/config/types.js",
|
|
19
|
+
"import": "./dist/config/types.js"
|
|
16
20
|
}
|
|
17
21
|
},
|
|
18
22
|
"files": [
|
|
19
23
|
"dist",
|
|
20
24
|
"README.md"
|
|
21
25
|
],
|
|
22
|
-
"scripts": {
|
|
23
|
-
"build": "tsc",
|
|
24
|
-
"dev:cli": "tsx src/cli.ts",
|
|
25
|
-
"check-types": "tsc --noEmit",
|
|
26
|
-
"test": "vitest run",
|
|
27
|
-
"test:watch": "vitest watch"
|
|
28
|
-
},
|
|
29
26
|
"keywords": [
|
|
30
27
|
"foir",
|
|
31
28
|
"eide",
|
|
32
29
|
"cms",
|
|
33
30
|
"cli",
|
|
34
31
|
"graphql",
|
|
35
|
-
"platform"
|
|
32
|
+
"platform",
|
|
33
|
+
"codegen"
|
|
36
34
|
],
|
|
37
35
|
"author": "EIDE Team",
|
|
38
36
|
"license": "UNLICENSED",
|
|
@@ -43,17 +41,25 @@
|
|
|
43
41
|
"graphql-request": "^7.1.2",
|
|
44
42
|
"inquirer": "^9.2.12",
|
|
45
43
|
"open": "^10.1.0",
|
|
46
|
-
"ora": "^8.1.1"
|
|
44
|
+
"ora": "^8.1.1",
|
|
45
|
+
"prettier": "^3.4.2"
|
|
47
46
|
},
|
|
48
47
|
"devDependencies": {
|
|
49
|
-
"@foir/config": "workspace:*",
|
|
50
48
|
"@types/inquirer": "^9.0.7",
|
|
51
49
|
"@types/node": "^22.5.0",
|
|
52
50
|
"tsx": "^4.20.0",
|
|
53
51
|
"typescript": "5.9.2",
|
|
54
|
-
"vitest": "^3.2.4"
|
|
52
|
+
"vitest": "^3.2.4",
|
|
53
|
+
"@foir/config": "0.0.1"
|
|
55
54
|
},
|
|
56
55
|
"engines": {
|
|
57
56
|
"node": ">=18.0.0"
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": "tsc",
|
|
60
|
+
"dev:cli": "tsx src/cli.ts",
|
|
61
|
+
"check-types": "tsc --noEmit",
|
|
62
|
+
"test": "vitest run",
|
|
63
|
+
"test:watch": "vitest watch"
|
|
58
64
|
}
|
|
59
|
-
}
|
|
65
|
+
}
|