@peterhauge/apiops-cli 0.1.6-alpha.0 → 0.2.0-alpha.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/LICENSE.md +22 -22
- package/README.md +169 -169
- package/dist/cli/extract-command.d.ts +0 -0
- package/dist/cli/extract-command.d.ts.map +0 -0
- package/dist/cli/extract-command.js +3 -3
- package/dist/cli/extract-command.js.map +1 -1
- package/dist/cli/index.d.ts +0 -0
- package/dist/cli/index.d.ts.map +0 -0
- package/dist/cli/index.js +0 -0
- package/dist/cli/index.js.map +0 -0
- package/dist/cli/init-command.d.ts +0 -0
- package/dist/cli/init-command.d.ts.map +1 -1
- package/dist/cli/init-command.js +2 -1
- package/dist/cli/init-command.js.map +1 -1
- package/dist/cli/publish-command.d.ts +0 -0
- package/dist/cli/publish-command.d.ts.map +0 -0
- package/dist/cli/publish-command.js +3 -3
- package/dist/cli/publish-command.js.map +1 -1
- package/dist/clients/apim-client.d.ts +25 -1
- package/dist/clients/apim-client.d.ts.map +1 -1
- package/dist/clients/apim-client.js +173 -9
- package/dist/clients/apim-client.js.map +1 -1
- package/dist/clients/artifact-store.d.ts +0 -0
- package/dist/clients/artifact-store.d.ts.map +0 -0
- package/dist/clients/artifact-store.js +0 -0
- package/dist/clients/artifact-store.js.map +0 -0
- package/dist/clients/iapim-client.d.ts +6 -0
- package/dist/clients/iapim-client.d.ts.map +1 -1
- package/dist/clients/iapim-client.js +0 -0
- package/dist/clients/iapim-client.js.map +0 -0
- package/dist/clients/iartifact-store.d.ts +0 -0
- package/dist/clients/iartifact-store.d.ts.map +0 -0
- package/dist/clients/iartifact-store.js +0 -0
- package/dist/clients/iartifact-store.js.map +0 -0
- package/dist/lib/auto-generated.d.ts +0 -0
- package/dist/lib/auto-generated.d.ts.map +0 -0
- package/dist/lib/auto-generated.js +0 -0
- package/dist/lib/auto-generated.js.map +0 -0
- package/dist/lib/cloud-config.d.ts +0 -0
- package/dist/lib/cloud-config.d.ts.map +0 -0
- package/dist/lib/cloud-config.js +0 -0
- package/dist/lib/cloud-config.js.map +0 -0
- package/dist/lib/config-loader.d.ts +0 -4
- package/dist/lib/config-loader.d.ts.map +1 -1
- package/dist/lib/config-loader.js +290 -51
- package/dist/lib/config-loader.js.map +1 -1
- package/dist/lib/dependency-graph.d.ts +0 -0
- package/dist/lib/dependency-graph.d.ts.map +1 -1
- package/dist/lib/dependency-graph.js +4 -1
- package/dist/lib/dependency-graph.js.map +1 -1
- package/dist/lib/exit-codes.d.ts +0 -0
- package/dist/lib/exit-codes.d.ts.map +0 -0
- package/dist/lib/exit-codes.js +0 -0
- package/dist/lib/exit-codes.js.map +0 -0
- package/dist/lib/logger.d.ts +0 -0
- package/dist/lib/logger.d.ts.map +0 -0
- package/dist/lib/logger.js +0 -0
- package/dist/lib/logger.js.map +0 -0
- package/dist/lib/parallel-runner.d.ts +0 -0
- package/dist/lib/parallel-runner.d.ts.map +0 -0
- package/dist/lib/parallel-runner.js +0 -0
- package/dist/lib/parallel-runner.js.map +0 -0
- package/dist/lib/resource-path.d.ts +0 -0
- package/dist/lib/resource-path.d.ts.map +1 -1
- package/dist/lib/resource-path.js +49 -10
- package/dist/lib/resource-path.js.map +1 -1
- package/dist/lib/resource-uri.d.ts +0 -0
- package/dist/lib/resource-uri.d.ts.map +1 -1
- package/dist/lib/resource-uri.js +24 -4
- package/dist/lib/resource-uri.js.map +1 -1
- package/dist/lib/user-agent.d.ts +0 -0
- package/dist/lib/user-agent.d.ts.map +0 -0
- package/dist/lib/user-agent.js +0 -0
- package/dist/lib/user-agent.js.map +0 -0
- package/dist/lib/workspace-link.d.ts +46 -0
- package/dist/lib/workspace-link.d.ts.map +1 -0
- package/dist/lib/workspace-link.js +93 -0
- package/dist/lib/workspace-link.js.map +1 -0
- package/dist/models/config.d.ts +80 -44
- package/dist/models/config.d.ts.map +1 -1
- package/dist/models/config.js +0 -0
- package/dist/models/config.js.map +0 -0
- package/dist/models/resource-types.d.ts +22 -1
- package/dist/models/resource-types.d.ts.map +1 -1
- package/dist/models/resource-types.js +29 -1
- package/dist/models/resource-types.js.map +1 -1
- package/dist/models/types.d.ts +0 -0
- package/dist/models/types.d.ts.map +0 -0
- package/dist/models/types.js +0 -0
- package/dist/models/types.js.map +0 -0
- package/dist/services/api-extractor.d.ts +19 -0
- package/dist/services/api-extractor.d.ts.map +1 -1
- package/dist/services/api-extractor.js +87 -6
- package/dist/services/api-extractor.js.map +1 -1
- package/dist/services/api-publisher.d.ts +0 -0
- package/dist/services/api-publisher.d.ts.map +1 -1
- package/dist/services/api-publisher.js +270 -65
- package/dist/services/api-publisher.js.map +1 -1
- package/dist/services/delete-unmatched-service.d.ts +0 -0
- package/dist/services/delete-unmatched-service.d.ts.map +0 -0
- package/dist/services/delete-unmatched-service.js +0 -0
- package/dist/services/delete-unmatched-service.js.map +0 -0
- package/dist/services/dry-run-reporter.d.ts +0 -0
- package/dist/services/dry-run-reporter.d.ts.map +0 -0
- package/dist/services/dry-run-reporter.js +0 -0
- package/dist/services/dry-run-reporter.js.map +0 -0
- package/dist/services/extract-service.d.ts +0 -0
- package/dist/services/extract-service.d.ts.map +0 -0
- package/dist/services/extract-service.js +5 -10
- package/dist/services/extract-service.js.map +1 -1
- package/dist/services/filter-service.d.ts +1 -0
- package/dist/services/filter-service.d.ts.map +1 -1
- package/dist/services/filter-service.js +101 -40
- package/dist/services/filter-service.js.map +1 -1
- package/dist/services/git-diff-service.d.ts +0 -0
- package/dist/services/git-diff-service.d.ts.map +0 -0
- package/dist/services/git-diff-service.js +0 -0
- package/dist/services/git-diff-service.js.map +0 -0
- package/dist/services/identity-guide-service.d.ts +1 -1
- package/dist/services/identity-guide-service.d.ts.map +1 -1
- package/dist/services/identity-guide-service.js +37 -518
- package/dist/services/identity-guide-service.js.map +1 -1
- package/dist/services/init-service.d.ts +0 -0
- package/dist/services/init-service.d.ts.map +1 -1
- package/dist/services/init-service.js +51 -19
- package/dist/services/init-service.js.map +1 -1
- package/dist/services/keyvault-checker.d.ts +0 -0
- package/dist/services/keyvault-checker.d.ts.map +0 -0
- package/dist/services/keyvault-checker.js +0 -0
- package/dist/services/keyvault-checker.js.map +0 -0
- package/dist/services/override-merger.d.ts +3 -7
- package/dist/services/override-merger.d.ts.map +1 -1
- package/dist/services/override-merger.js +198 -47
- package/dist/services/override-merger.js.map +1 -1
- package/dist/services/product-extractor.d.ts +20 -0
- package/dist/services/product-extractor.d.ts.map +1 -1
- package/dist/services/product-extractor.js +101 -5
- package/dist/services/product-extractor.js.map +1 -1
- package/dist/services/product-publisher.d.ts +0 -0
- package/dist/services/product-publisher.d.ts.map +1 -1
- package/dist/services/product-publisher.js +62 -6
- package/dist/services/product-publisher.js.map +1 -1
- package/dist/services/prompt-service.d.ts +0 -0
- package/dist/services/prompt-service.d.ts.map +0 -0
- package/dist/services/prompt-service.js +0 -0
- package/dist/services/prompt-service.js.map +0 -0
- package/dist/services/publish-service.d.ts +0 -0
- package/dist/services/publish-service.d.ts.map +0 -0
- package/dist/services/publish-service.js +81 -2
- package/dist/services/publish-service.js.map +1 -1
- package/dist/services/resource-extractor.d.ts +0 -0
- package/dist/services/resource-extractor.d.ts.map +1 -1
- package/dist/services/resource-extractor.js +52 -1
- package/dist/services/resource-extractor.js.map +1 -1
- package/dist/services/resource-publisher.d.ts +0 -0
- package/dist/services/resource-publisher.d.ts.map +1 -1
- package/dist/services/resource-publisher.js +127 -2
- package/dist/services/resource-publisher.js.map +1 -1
- package/dist/services/secret-redactor.d.ts +0 -0
- package/dist/services/secret-redactor.d.ts.map +0 -0
- package/dist/services/secret-redactor.js +0 -0
- package/dist/services/secret-redactor.js.map +0 -0
- package/dist/services/transitive-resolver.d.ts +0 -0
- package/dist/services/transitive-resolver.d.ts.map +1 -1
- package/dist/services/transitive-resolver.js +4 -4
- package/dist/services/transitive-resolver.js.map +1 -1
- package/dist/services/workspace-extractor.d.ts +1 -9
- package/dist/services/workspace-extractor.d.ts.map +1 -1
- package/dist/services/workspace-extractor.js +80 -44
- package/dist/services/workspace-extractor.js.map +1 -1
- package/dist/templates/azure-devops/extract-pipeline.d.ts +2 -1
- package/dist/templates/azure-devops/extract-pipeline.d.ts.map +1 -1
- package/dist/templates/azure-devops/extract-pipeline.js +147 -88
- package/dist/templates/azure-devops/extract-pipeline.js.map +1 -1
- package/dist/templates/azure-devops/publish-pipeline.d.ts +0 -0
- package/dist/templates/azure-devops/publish-pipeline.d.ts.map +1 -1
- package/dist/templates/azure-devops/publish-pipeline.js +116 -89
- package/dist/templates/azure-devops/publish-pipeline.js.map +1 -1
- package/dist/templates/configs/filter-config.d.ts +1 -1
- package/dist/templates/configs/filter-config.d.ts.map +1 -1
- package/dist/templates/configs/filter-config.js +109 -44
- package/dist/templates/configs/filter-config.js.map +1 -1
- package/dist/templates/configs/override-config.d.ts +0 -0
- package/dist/templates/configs/override-config.d.ts.map +1 -1
- package/dist/templates/configs/override-config.js +88 -37
- package/dist/templates/configs/override-config.js.map +1 -1
- package/dist/templates/configs/package-json.d.ts +0 -0
- package/dist/templates/configs/package-json.d.ts.map +0 -0
- package/dist/templates/configs/package-json.js +0 -0
- package/dist/templates/configs/package-json.js.map +0 -0
- package/dist/templates/copilot/identity-setup-prompt.d.ts +4 -3
- package/dist/templates/copilot/identity-setup-prompt.d.ts.map +1 -1
- package/dist/templates/copilot/identity-setup-prompt.js +59 -269
- package/dist/templates/copilot/identity-setup-prompt.js.map +1 -1
- package/dist/templates/generated/embedded-markdown.d.ts +12 -0
- package/dist/templates/generated/embedded-markdown.d.ts.map +1 -0
- package/dist/templates/generated/embedded-markdown.js +14 -0
- package/dist/templates/generated/embedded-markdown.js.map +1 -0
- package/dist/templates/github-actions/extract-workflow.d.ts +0 -0
- package/dist/templates/github-actions/extract-workflow.d.ts.map +0 -0
- package/dist/templates/github-actions/extract-workflow.js +118 -118
- package/dist/templates/github-actions/extract-workflow.js.map +0 -0
- package/dist/templates/github-actions/publish-workflow.d.ts +0 -0
- package/dist/templates/github-actions/publish-workflow.d.ts.map +1 -1
- package/dist/templates/github-actions/publish-workflow.js +104 -90
- package/dist/templates/github-actions/publish-workflow.js.map +1 -1
- package/package.json +69 -66
|
@@ -22,62 +22,157 @@ function assertStringArray(value, fieldName) {
|
|
|
22
22
|
return value;
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
25
|
+
* Parse a filter array that may contain both string entries and nested object entries.
|
|
26
|
+
* - String entries: resource name to include (all sub-resources included)
|
|
27
|
+
* - Object entries: `{ name: { subResource: [...] } }` format (Toolkit nested filtering)
|
|
28
|
+
*
|
|
29
|
+
* Returns extracted names (string[]) and sub-filter map.
|
|
27
30
|
*/
|
|
31
|
+
function parseFilterArrayWithNested(value, fieldName) {
|
|
32
|
+
if (!Array.isArray(value)) {
|
|
33
|
+
throw new Error(`${fieldName} must be an array, got ${typeof value}`);
|
|
34
|
+
}
|
|
35
|
+
const names = [];
|
|
36
|
+
const subFilters = {};
|
|
37
|
+
for (let i = 0; i < value.length; i++) {
|
|
38
|
+
const item = value[i];
|
|
39
|
+
if (typeof item === 'string') {
|
|
40
|
+
names.push(item);
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (isPlainObject(item)) {
|
|
44
|
+
// Object entry: key is the resource name, value is sub-filter config
|
|
45
|
+
const keys = Object.keys(item);
|
|
46
|
+
if (keys.length !== 1) {
|
|
47
|
+
throw new Error(`${fieldName}[${i}] object entry must have exactly one key (the resource name), ` +
|
|
48
|
+
`got ${keys.length} keys: ${keys.join(', ')}`);
|
|
49
|
+
}
|
|
50
|
+
const name = keys[0];
|
|
51
|
+
names.push(name);
|
|
52
|
+
const subConfig = item[name];
|
|
53
|
+
if (isPlainObject(subConfig)) {
|
|
54
|
+
const subFilter = {};
|
|
55
|
+
for (const [subKey, subValue] of Object.entries(subConfig)) {
|
|
56
|
+
if (subValue === undefined || subValue === null)
|
|
57
|
+
continue;
|
|
58
|
+
subFilter[subKey] = assertStringArray(subValue, `${fieldName}[${i}].${name}.${subKey}`);
|
|
59
|
+
}
|
|
60
|
+
if (Object.keys(subFilter).length > 0) {
|
|
61
|
+
subFilters[name] = subFilter;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else if (subConfig !== undefined && subConfig !== null) {
|
|
65
|
+
logger.warn(`${fieldName}[${i}]: nested value for '${name}' should be an object with sub-resource arrays; ignoring.`);
|
|
66
|
+
}
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
throw new Error(`${fieldName}[${i}] must be a string or object, got ${typeof item}`);
|
|
70
|
+
}
|
|
71
|
+
return { names, subFilters };
|
|
72
|
+
}
|
|
73
|
+
const FILTER_KEY_ALIASES = {
|
|
74
|
+
apis: 'apiNames',
|
|
75
|
+
backends: 'backendNames',
|
|
76
|
+
products: 'productNames',
|
|
77
|
+
namedValues: 'namedValueNames',
|
|
78
|
+
loggers: 'loggerNames',
|
|
79
|
+
diagnostics: 'diagnosticNames',
|
|
80
|
+
tags: 'tagNames',
|
|
81
|
+
policyFragments: 'policyFragmentNames',
|
|
82
|
+
gateways: 'gatewayNames',
|
|
83
|
+
versionSets: 'versionSetNames',
|
|
84
|
+
groups: 'groupNames',
|
|
85
|
+
subscriptions: 'subscriptionNames',
|
|
86
|
+
schemas: 'schemaNames',
|
|
87
|
+
policies: 'policyNames',
|
|
88
|
+
policyRestrictions: 'policyRestrictionNames',
|
|
89
|
+
documentations: 'documentationNames',
|
|
90
|
+
workspaces: 'workspaceNames',
|
|
91
|
+
};
|
|
92
|
+
/** Fields that support nested sub-resource filtering (object entries) */
|
|
93
|
+
const NESTED_FILTER_FIELDS = new Set(['apis', 'workspaces']);
|
|
28
94
|
export async function loadFilterConfig(filePath) {
|
|
29
95
|
try {
|
|
30
96
|
const content = await fs.readFile(filePath, 'utf-8');
|
|
31
97
|
const parsed = (yaml.load(content) ?? {});
|
|
32
|
-
// Validate structure — each field must be an array of strings
|
|
98
|
+
// Validate structure — each field must be an array of strings (or nested objects for apis/workspaces).
|
|
99
|
+
// Accept both Toolkit-style keys (e.g. "apis") and legacy aliases (e.g. "apiNames").
|
|
33
100
|
const config = {};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
101
|
+
for (const [field, legacyAlias] of Object.entries(FILTER_KEY_ALIASES)) {
|
|
102
|
+
const key = field;
|
|
103
|
+
const toolkitValue = parsed[field];
|
|
104
|
+
const legacyValue = parsed[legacyAlias];
|
|
105
|
+
if (toolkitValue !== undefined && legacyValue !== undefined) {
|
|
106
|
+
throw new Error(`Filter config contains both '${field}' and '${legacyAlias}'. ` +
|
|
107
|
+
`Use '${field}' (the APIOps Toolkit format).`);
|
|
108
|
+
}
|
|
109
|
+
const rawValue = toolkitValue ?? legacyValue;
|
|
110
|
+
const sourceKey = toolkitValue !== undefined ? field : legacyAlias;
|
|
111
|
+
if (rawValue === undefined)
|
|
112
|
+
continue;
|
|
113
|
+
if (legacyValue !== undefined) {
|
|
114
|
+
logger.warn(`Filter key '${legacyAlias}' is deprecated; use '${field}' instead ` +
|
|
115
|
+
`(APIOps Toolkit format).`);
|
|
116
|
+
}
|
|
117
|
+
if (NESTED_FILTER_FIELDS.has(key) && key === 'apis') {
|
|
118
|
+
const { names, subFilters } = parseFilterArrayWithNested(rawValue, sourceKey);
|
|
119
|
+
config.apis = names;
|
|
120
|
+
if (Object.keys(subFilters).length > 0) {
|
|
121
|
+
config.apiSubFilters = {};
|
|
122
|
+
const validApiSubKeys = ['operations', 'diagnostics', 'schemas', 'releases'];
|
|
123
|
+
for (const [apiName, sf] of Object.entries(subFilters)) {
|
|
124
|
+
const apiSub = {};
|
|
125
|
+
for (const subKey of validApiSubKeys) {
|
|
126
|
+
if (subKey in sf) {
|
|
127
|
+
apiSub[subKey] = sf[subKey];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Warn about unsupported sub-filter keys
|
|
131
|
+
for (const k of Object.keys(sf)) {
|
|
132
|
+
if (!validApiSubKeys.includes(k)) {
|
|
133
|
+
logger.warn(`Unknown API sub-filter key '${k}' for API '${apiName}'; ignoring.`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
config.apiSubFilters[apiName] = apiSub;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else if (NESTED_FILTER_FIELDS.has(key) && key === 'workspaces') {
|
|
141
|
+
const { names, subFilters } = parseFilterArrayWithNested(rawValue, sourceKey);
|
|
142
|
+
config.workspaces = names;
|
|
143
|
+
if (Object.keys(subFilters).length > 0) {
|
|
144
|
+
config.workspaceSubFilters = {};
|
|
145
|
+
const validWsSubKeys = ['apis', 'backends', 'diagnostics', 'groups', 'loggers',
|
|
146
|
+
'namedValues', 'policyFragments', 'products', 'subscriptions', 'tags', 'versionSets'];
|
|
147
|
+
for (const [wsName, sf] of Object.entries(subFilters)) {
|
|
148
|
+
const wsSub = {};
|
|
149
|
+
for (const wsField of validWsSubKeys) {
|
|
150
|
+
if (wsField in sf) {
|
|
151
|
+
wsSub[wsField] = sf[wsField];
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
for (const k of Object.keys(sf)) {
|
|
155
|
+
if (!validWsSubKeys.includes(k)) {
|
|
156
|
+
logger.warn(`Unknown workspace sub-filter key '${k}' for workspace '${wsName}'; ignoring.`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
config.workspaceSubFilters[wsName] = wsSub;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
config[key] = assertStringArray(rawValue, sourceKey);
|
|
165
|
+
}
|
|
48
166
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (parsed.gatewayNames !== undefined) {
|
|
59
|
-
config.gatewayNames = assertStringArray(parsed.gatewayNames, 'gatewayNames');
|
|
60
|
-
}
|
|
61
|
-
if (parsed.versionSetNames !== undefined) {
|
|
62
|
-
config.versionSetNames = assertStringArray(parsed.versionSetNames, 'versionSetNames');
|
|
63
|
-
}
|
|
64
|
-
if (parsed.groupNames !== undefined) {
|
|
65
|
-
config.groupNames = assertStringArray(parsed.groupNames, 'groupNames');
|
|
66
|
-
}
|
|
67
|
-
if (parsed.subscriptionNames !== undefined) {
|
|
68
|
-
config.subscriptionNames = assertStringArray(parsed.subscriptionNames, 'subscriptionNames');
|
|
69
|
-
}
|
|
70
|
-
if (parsed.schemaNames !== undefined) {
|
|
71
|
-
config.schemaNames = assertStringArray(parsed.schemaNames, 'schemaNames');
|
|
72
|
-
}
|
|
73
|
-
if (parsed.policyRestrictionNames !== undefined) {
|
|
74
|
-
config.policyRestrictionNames = assertStringArray(parsed.policyRestrictionNames, 'policyRestrictionNames');
|
|
75
|
-
}
|
|
76
|
-
if (parsed.documentationNames !== undefined) {
|
|
77
|
-
config.documentationNames = assertStringArray(parsed.documentationNames, 'documentationNames');
|
|
78
|
-
}
|
|
79
|
-
if (parsed.workspaceNames !== undefined) {
|
|
80
|
-
config.workspaceNames = assertStringArray(parsed.workspaceNames, 'workspaceNames');
|
|
167
|
+
// Warn about unknown top-level keys
|
|
168
|
+
const knownKeys = new Set([
|
|
169
|
+
...Object.keys(FILTER_KEY_ALIASES),
|
|
170
|
+
...Object.values(FILTER_KEY_ALIASES),
|
|
171
|
+
]);
|
|
172
|
+
for (const key of Object.keys(parsed)) {
|
|
173
|
+
if (!knownKeys.has(key)) {
|
|
174
|
+
logger.warn(`Unknown filter config key '${key}'; ignoring. Did you mean one of: ${Object.keys(FILTER_KEY_ALIASES).join(', ')}?`);
|
|
175
|
+
}
|
|
81
176
|
}
|
|
82
177
|
logger.debug(`Loaded filter config from ${filePath}`);
|
|
83
178
|
return config;
|
|
@@ -97,9 +192,15 @@ export async function loadFilterConfig(filePath) {
|
|
|
97
192
|
export async function loadOverrideConfig(filePath) {
|
|
98
193
|
try {
|
|
99
194
|
const content = await fs.readFile(filePath, 'utf-8');
|
|
100
|
-
const
|
|
195
|
+
const loaded = yaml.load(content);
|
|
196
|
+
if (loaded !== null && loaded !== undefined && !isPlainObject(loaded)) {
|
|
197
|
+
throw new Error(`Override file at ${filePath} must be a YAML mapping (key: value pairs) at the top level, ` +
|
|
198
|
+
`but got ${Array.isArray(loaded) ? 'an array' : typeof loaded}.`);
|
|
199
|
+
}
|
|
200
|
+
const parsed = isPlainObject(loaded) ? loaded : {};
|
|
201
|
+
const normalized = normalizeOverrideConfig(parsed);
|
|
101
202
|
logger.debug(`Loaded override config from ${filePath}`);
|
|
102
|
-
return
|
|
203
|
+
return normalized;
|
|
103
204
|
}
|
|
104
205
|
catch (error) {
|
|
105
206
|
if (error.code === 'ENOENT') {
|
|
@@ -109,6 +210,144 @@ export async function loadOverrideConfig(filePath) {
|
|
|
109
210
|
throw new Error(`Failed to load override config from ${filePath}: ${error.message}`, { cause: error });
|
|
110
211
|
}
|
|
111
212
|
}
|
|
213
|
+
/**
|
|
214
|
+
* Normalize toolkit-format override sections into the internal keyed-map shape.
|
|
215
|
+
* Supports all Toolkit override sections with nested sub-resource overrides.
|
|
216
|
+
* Ignores `apimServiceName` (Toolkit uses it for target APIM instance; CLI uses --service-name flag instead).
|
|
217
|
+
*/
|
|
218
|
+
function normalizeOverrideConfig(parsed) {
|
|
219
|
+
const normalized = {};
|
|
220
|
+
// Log and ignore apimServiceName — Toolkit uses this for target APIM instance,
|
|
221
|
+
// but CLI uses --service-name flag instead.
|
|
222
|
+
if (parsed.apimServiceName !== undefined) {
|
|
223
|
+
const serviceName = typeof parsed.apimServiceName === 'string'
|
|
224
|
+
? parsed.apimServiceName
|
|
225
|
+
: JSON.stringify(parsed.apimServiceName);
|
|
226
|
+
logger.info(`Override config contains 'apimServiceName' ("${serviceName}"). ` +
|
|
227
|
+
`The CLI uses --service-name instead; this field will be ignored.`);
|
|
228
|
+
}
|
|
229
|
+
// All supported Toolkit override sections
|
|
230
|
+
const ALL_OVERRIDE_SECTIONS = [
|
|
231
|
+
'namedValues', 'backends', 'apis', 'diagnostics', 'loggers',
|
|
232
|
+
'policies', 'gateways', 'versionSets', 'groups', 'subscriptions',
|
|
233
|
+
'products', 'tags', 'policyFragments', 'workspaces',
|
|
234
|
+
];
|
|
235
|
+
for (const sectionName of ALL_OVERRIDE_SECTIONS) {
|
|
236
|
+
const rawSection = parsed[sectionName];
|
|
237
|
+
const section = normalizeOverrideSectionRecursive(rawSection, sectionName);
|
|
238
|
+
if (section !== undefined) {
|
|
239
|
+
normalized[sectionName] = section;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// Warn about unknown top-level keys
|
|
243
|
+
const knownKeys = new Set([...ALL_OVERRIDE_SECTIONS, 'apimServiceName']);
|
|
244
|
+
for (const key of Object.keys(parsed)) {
|
|
245
|
+
if (!knownKeys.has(key)) {
|
|
246
|
+
logger.warn(`Unknown override config key '${key}'; ignoring.`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return normalized;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Known child section keys for each parent override type.
|
|
253
|
+
* Used to distinguish nested sub-resource overrides from regular properties.
|
|
254
|
+
*/
|
|
255
|
+
const OVERRIDE_CHILD_SECTIONS = {
|
|
256
|
+
apis: new Set(['diagnostics', 'operations', 'policies', 'releases']),
|
|
257
|
+
workspaces: new Set([
|
|
258
|
+
'apis', 'backends', 'diagnostics', 'groups', 'loggers',
|
|
259
|
+
'namedValues', 'policyFragments', 'products', 'subscriptions', 'tags', 'versionSets',
|
|
260
|
+
]),
|
|
261
|
+
products: new Set(['policies']),
|
|
262
|
+
operations: new Set(['policies']),
|
|
263
|
+
};
|
|
264
|
+
/**
|
|
265
|
+
* Normalize one override section into OverrideSection format.
|
|
266
|
+
* Supports Toolkit list format: `[{ name, properties, ...childSections }]`
|
|
267
|
+
* Recursively parses nested child sections.
|
|
268
|
+
*
|
|
269
|
+
* @param section - The raw YAML value for this section
|
|
270
|
+
* @param displayPath - Full dotted path for error messages (e.g., "apis.my-api.operations")
|
|
271
|
+
* @param sectionKind - Bare section key for child lookup (e.g., "operations")
|
|
272
|
+
*/
|
|
273
|
+
function normalizeOverrideSectionRecursive(section, displayPath, sectionKind) {
|
|
274
|
+
// Use sectionKind for child lookup; fall back to displayPath for top-level calls
|
|
275
|
+
const lookupKey = sectionKind ?? displayPath;
|
|
276
|
+
if (section === undefined || section === null) {
|
|
277
|
+
return undefined;
|
|
278
|
+
}
|
|
279
|
+
if (!Array.isArray(section)) {
|
|
280
|
+
throw new Error(`Invalid overrides.${displayPath}: expected an array in toolkit format ` +
|
|
281
|
+
`([ { name, properties } ]), got ${typeof section}.`);
|
|
282
|
+
}
|
|
283
|
+
const normalized = {};
|
|
284
|
+
const childKeys = OVERRIDE_CHILD_SECTIONS[lookupKey] ?? new Set();
|
|
285
|
+
for (const item of section) {
|
|
286
|
+
if (!isPlainObject(item)) {
|
|
287
|
+
logger.warn(`Ignoring invalid item in overrides.${displayPath}; expected object.`);
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
const name = item.name;
|
|
291
|
+
if (typeof name !== 'string' || name.trim().length === 0) {
|
|
292
|
+
logger.warn(`Ignoring item in overrides.${displayPath}; "name" is required.`);
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
// Extract properties
|
|
296
|
+
let properties;
|
|
297
|
+
if (item.properties !== undefined && item.properties !== null) {
|
|
298
|
+
if (!isPlainObject(item.properties)) {
|
|
299
|
+
logger.warn(`Ignoring item '${name}' in overrides.${displayPath}; ` +
|
|
300
|
+
`"properties" must be an object, got ${typeof item.properties}.`);
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
properties = item.properties;
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
// Fallback: use fields directly (excluding 'name' and known child sections)
|
|
307
|
+
const fallbackFields = Object.fromEntries(Object.entries(item).filter(([key]) => key !== 'name' && key !== 'properties' && !childKeys.has(key)));
|
|
308
|
+
if (Object.keys(fallbackFields).length > 0) {
|
|
309
|
+
logger.debug(`Item '${name}' in overrides.${displayPath} is missing 'properties'; using fields directly.`);
|
|
310
|
+
properties = fallbackFields;
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
properties = {};
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
// Parse nested child sections
|
|
317
|
+
let children;
|
|
318
|
+
for (const childKey of childKeys) {
|
|
319
|
+
const childValue = item[childKey];
|
|
320
|
+
if (childValue !== undefined) {
|
|
321
|
+
const childSection = normalizeOverrideSectionRecursive(childValue, `${displayPath}.${name}.${childKey}`, childKey);
|
|
322
|
+
if (childSection !== undefined) {
|
|
323
|
+
if (!children)
|
|
324
|
+
children = {};
|
|
325
|
+
children[childKey] = childSection;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
const entry = { properties };
|
|
330
|
+
if (children)
|
|
331
|
+
entry.children = children;
|
|
332
|
+
// Only add entry if it has properties or children
|
|
333
|
+
if (Object.keys(properties).length > 0 || children) {
|
|
334
|
+
if (normalized[name] !== undefined) {
|
|
335
|
+
logger.warn(`Duplicate name '${name}' in overrides.${displayPath}; later entry overwrites earlier one.`);
|
|
336
|
+
}
|
|
337
|
+
normalized[name] = entry;
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
logger.warn(`Ignoring item '${name}' in overrides.${displayPath}; no override properties or child sections.`);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
return Object.keys(normalized).length > 0 ? normalized : undefined;
|
|
344
|
+
}
|
|
345
|
+
function isPlainObject(value) {
|
|
346
|
+
return (typeof value === 'object' &&
|
|
347
|
+
value !== null &&
|
|
348
|
+
!Array.isArray(value) &&
|
|
349
|
+
Object.prototype.toString.call(value) === '[object Object]');
|
|
350
|
+
}
|
|
112
351
|
/**
|
|
113
352
|
* Load and parse an OpenTelemetry configuration YAML file.
|
|
114
353
|
* Returns undefined if file doesn't exist.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/lib/config-loader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/lib/config-loader.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-graph.d.ts","sourceRoot":"","sources":["../../src/lib/dependency-graph.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"dependency-graph.d.ts","sourceRoot":"","sources":["../../src/lib/dependency-graph.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,EA2C5C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,YAAY,EAY1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,YAAY,EAK1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,YAAY,EAmB1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,YAAY,EAG1C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,YAAY,EAAE,CAOpD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAM1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,EAAE,CAEpE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,EAAE,CAIhE;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,IAAI,CA8BpC"}
|
|
@@ -17,9 +17,11 @@ import { ResourceType } from '../models/resource-types.js';
|
|
|
17
17
|
export const DEPENDENCY_EDGES = [
|
|
18
18
|
// Tier 1 -> Tier 2 dependencies
|
|
19
19
|
{ from: ResourceType.Diagnostic, to: ResourceType.Logger, required: false },
|
|
20
|
+
{ from: ResourceType.Diagnostic, to: ResourceType.Workspace, required: false },
|
|
20
21
|
{ from: ResourceType.ServicePolicy, to: ResourceType.NamedValue, required: false },
|
|
21
22
|
{ from: ResourceType.ServicePolicy, to: ResourceType.PolicyFragment, required: false },
|
|
22
23
|
{ from: ResourceType.Api, to: ResourceType.VersionSet, required: false },
|
|
24
|
+
{ from: ResourceType.PolicyRestriction, to: ResourceType.Product, required: false },
|
|
23
25
|
// Tier 2 -> Tier 3 dependencies
|
|
24
26
|
{ from: ResourceType.ProductPolicy, to: ResourceType.Product, required: true },
|
|
25
27
|
{ from: ResourceType.ProductGroup, to: ResourceType.Product, required: true },
|
|
@@ -51,6 +53,7 @@ export const DEPENDENCY_EDGES = [
|
|
|
51
53
|
{ from: ResourceType.GraphQLResolverPolicy, to: ResourceType.GraphQLResolver, required: true },
|
|
52
54
|
];
|
|
53
55
|
export const TIER_1_RESOURCES = [
|
|
56
|
+
ResourceType.Workspace,
|
|
54
57
|
ResourceType.NamedValue,
|
|
55
58
|
ResourceType.Tag,
|
|
56
59
|
ResourceType.Gateway,
|
|
@@ -60,7 +63,6 @@ export const TIER_1_RESOURCES = [
|
|
|
60
63
|
ResourceType.Group,
|
|
61
64
|
ResourceType.PolicyFragment,
|
|
62
65
|
ResourceType.GlobalSchema,
|
|
63
|
-
ResourceType.PolicyRestriction,
|
|
64
66
|
ResourceType.Documentation,
|
|
65
67
|
];
|
|
66
68
|
export const TIER_2_RESOURCES = [
|
|
@@ -70,6 +72,7 @@ export const TIER_2_RESOURCES = [
|
|
|
70
72
|
ResourceType.Api,
|
|
71
73
|
];
|
|
72
74
|
export const TIER_3_RESOURCES = [
|
|
75
|
+
ResourceType.PolicyRestriction,
|
|
73
76
|
ResourceType.ProductPolicy,
|
|
74
77
|
ResourceType.ProductGroup,
|
|
75
78
|
ResourceType.ProductTag,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-graph.js","sourceRoot":"","sources":["../../src/lib/dependency-graph.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAChD,gCAAgC;IAChC,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE,EAAE,EAAE,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC3E,EAAE,IAAI,EAAE,YAAY,CAAC,aAAa,EAAE,EAAE,EAAE,YAAY,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;IAClF,EAAE,IAAI,EAAE,YAAY,CAAC,aAAa,EAAE,EAAE,EAAE,YAAY,CAAC,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE;IACtF,EAAE,IAAI,EAAE,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,YAAY,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"dependency-graph.js","sourceRoot":"","sources":["../../src/lib/dependency-graph.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/exit-codes.d.ts
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/lib/exit-codes.js
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/lib/logger.d.ts
CHANGED
|
File without changes
|
package/dist/lib/logger.d.ts.map
CHANGED
|
File without changes
|
package/dist/lib/logger.js
CHANGED
|
File without changes
|
package/dist/lib/logger.js.map
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-path.d.ts","sourceRoot":"","sources":["../../src/lib/resource-path.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAA0B,YAAY,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"resource-path.d.ts","sourceRoot":"","sources":["../../src/lib/resource-path.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,16 +7,20 @@
|
|
|
7
7
|
import * as path from 'node:path';
|
|
8
8
|
import { RESOURCE_TYPE_METADATA, ResourceType } from '../models/resource-types.js';
|
|
9
9
|
/**
|
|
10
|
-
* Association resource types that
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
10
|
+
* Association resource types that are published by specialized parent publishers.
|
|
11
|
+
*
|
|
12
|
+
* Product associations are handled by product-publisher using the parent
|
|
13
|
+
* product descriptor, so their association files should not be discovered as
|
|
14
|
+
* independent resources.
|
|
15
|
+
*
|
|
16
|
+
* Gateway associations are intentionally excluded from this set because they
|
|
17
|
+
* are published via the generic association path in resource-publisher and
|
|
18
|
+
* must therefore be discovered from gateways/{gateway}/apis.json.
|
|
14
19
|
*/
|
|
15
|
-
const
|
|
20
|
+
const PARENT_PUBLISHED_ASSOCIATION_TYPES = new Set([
|
|
16
21
|
ResourceType.ProductApi,
|
|
17
22
|
ResourceType.ProductGroup,
|
|
18
23
|
ResourceType.ProductTag,
|
|
19
|
-
ResourceType.GatewayApi,
|
|
20
24
|
]);
|
|
21
25
|
const SUPPORTED_SPECIFICATION_EXTENSIONS = new Set([
|
|
22
26
|
'yaml',
|
|
@@ -162,8 +166,26 @@ export function parseTemplatePath(template, path) {
|
|
|
162
166
|
const match = templateToRegex(template).exec(path);
|
|
163
167
|
if (!match)
|
|
164
168
|
return undefined;
|
|
165
|
-
|
|
166
|
-
|
|
169
|
+
const captures = match.slice(1);
|
|
170
|
+
// Extract placeholder indices in left-to-right appearance order.
|
|
171
|
+
// For `tags/{1}/apiLinks/{0}` this yields [1, 0].
|
|
172
|
+
const placeholderIndices = [];
|
|
173
|
+
const placeholderPattern = /\{(\d+)\}/g;
|
|
174
|
+
let m;
|
|
175
|
+
while ((m = placeholderPattern.exec(template)) !== null) {
|
|
176
|
+
placeholderIndices.push(Number(m[1]));
|
|
177
|
+
}
|
|
178
|
+
// Re-sort captures so result[i] corresponds to placeholder {i}.
|
|
179
|
+
// When indices are sequential (the common case), this is a no-op.
|
|
180
|
+
const sorted = new Array(captures.length);
|
|
181
|
+
for (let i = 0; i < captures.length; i++) {
|
|
182
|
+
const idx = placeholderIndices[i];
|
|
183
|
+
const val = captures[i];
|
|
184
|
+
if (idx !== undefined && val !== undefined) {
|
|
185
|
+
sorted[idx] = val;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return sorted;
|
|
167
189
|
}
|
|
168
190
|
/**
|
|
169
191
|
* Builds the artifact directory path for a given descriptor.
|
|
@@ -306,6 +328,10 @@ export function parseArtifactPath(baseDir, filePath) {
|
|
|
306
328
|
if (!fileName) {
|
|
307
329
|
return undefined;
|
|
308
330
|
}
|
|
331
|
+
const workspaceContainer = parseWorkspaceContainerDescriptor(fileName, workspace);
|
|
332
|
+
if (workspaceContainer) {
|
|
333
|
+
return workspaceContainer;
|
|
334
|
+
}
|
|
309
335
|
// Try to match against each resource type's pattern
|
|
310
336
|
for (const [typeKey, metadata] of Object.entries(RESOURCE_TYPE_METADATA)) {
|
|
311
337
|
const type = typeKey;
|
|
@@ -314,8 +340,8 @@ export function parseArtifactPath(baseDir, filePath) {
|
|
|
314
340
|
}
|
|
315
341
|
// Skip association resource types — these are handled specially during publishing
|
|
316
342
|
// via their parent's association files (apis.json, groups.json)
|
|
317
|
-
if (
|
|
318
|
-
|
|
343
|
+
if (PARENT_PUBLISHED_ASSOCIATION_TYPES.has(type)) {
|
|
344
|
+
continue;
|
|
319
345
|
}
|
|
320
346
|
const nameParts = parseTemplatePath(metadata.artifactDirectory, parts.slice(startIndex, -1).join('/'));
|
|
321
347
|
if (nameParts !== undefined) {
|
|
@@ -324,6 +350,19 @@ export function parseArtifactPath(baseDir, filePath) {
|
|
|
324
350
|
}
|
|
325
351
|
return undefined;
|
|
326
352
|
}
|
|
353
|
+
function parseWorkspaceContainerDescriptor(fileName, workspace) {
|
|
354
|
+
// Workspace container descriptors are stored at:
|
|
355
|
+
// workspaces/{workspace}/workspaceInformation.json
|
|
356
|
+
// and are not workspace-scoped children. Return a top-level Workspace
|
|
357
|
+
// descriptor so publish can create the container before workspace children.
|
|
358
|
+
if (fileName === 'workspaceInformation.json' && workspace) {
|
|
359
|
+
return {
|
|
360
|
+
type: ResourceType.Workspace,
|
|
361
|
+
nameParts: [workspace],
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
return undefined;
|
|
365
|
+
}
|
|
327
366
|
/**
|
|
328
367
|
* Parse a changed artifact file path into a ResourceDescriptor.
|
|
329
368
|
*
|