@toolproof-core/lib 1.0.3 → 1.0.4
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/artifacts/artifacts.d.ts +4 -3
- package/dist/artifacts/artifacts.d.ts.map +1 -1
- package/dist/firebase/firebaseAdminHelpers.d.ts +2 -2
- package/dist/firebase/firebaseAdminHelpers.d.ts.map +1 -1
- package/dist/firebase/firebaseAdminHelpers.js.map +1 -1
- package/dist/types/types.d.ts +2 -5
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js.map +1 -1
- package/dist/utils/extractFrom.d.ts +5 -0
- package/dist/utils/extractFrom.d.ts.map +1 -0
- package/dist/utils/extractFrom.js +72 -0
- package/dist/utils/extractFrom.js.map +1 -0
- package/dist/utils/extractFromCosmosData.d.ts +9 -0
- package/dist/utils/extractFromCosmosData.d.ts.map +1 -0
- package/dist/utils/extractFromCosmosData.js +20 -0
- package/dist/utils/extractFromCosmosData.js.map +1 -0
- package/dist/utils/extractFromResourceDict.d.ts +12 -0
- package/dist/utils/extractFromResourceDict.d.ts.map +1 -0
- package/dist/utils/extractFromResourceDict.js +23 -0
- package/dist/utils/extractFromResourceDict.js.map +1 -0
- package/dist/utils/extractFromResourceMap.d.ts +12 -0
- package/dist/utils/extractFromResourceMap.d.ts.map +1 -0
- package/dist/utils/extractFromResourceMap.js +23 -0
- package/dist/utils/extractFromResourceMap.js.map +1 -0
- package/dist/utils/extractFromResourcesByResourceTypeHandle.d.ts +8 -0
- package/dist/utils/extractFromResourcesByResourceTypeHandle.d.ts.map +1 -0
- package/dist/utils/extractFromResourcesByResourceTypeHandle.js +31 -0
- package/dist/utils/extractFromResourcesByResourceTypeHandle.js.map +1 -0
- package/dist/utils/extractFromStrategy.d.ts +5 -0
- package/dist/utils/extractFromStrategy.d.ts.map +1 -0
- package/dist/utils/extractFromStrategy.js +72 -0
- package/dist/utils/extractFromStrategy.js.map +1 -0
- package/dist/utils/extraction.d.ts +12 -0
- package/dist/utils/extraction.d.ts.map +1 -0
- package/dist/utils/extraction.js +27 -0
- package/dist/utils/extraction.js.map +1 -0
- package/dist/utils/generateFrom.d.ts +4 -0
- package/dist/utils/generateFrom.d.ts.map +1 -0
- package/dist/utils/generateFrom.js +18 -0
- package/dist/utils/generateFrom.js.map +1 -0
- package/dist/utils/generateFromTo.d.ts +4 -0
- package/dist/utils/generateFromTo.d.ts.map +1 -0
- package/dist/utils/generateFromTo.js +18 -0
- package/dist/utils/generateFromTo.js.map +1 -0
- package/package.json +44 -41
- package/src/_lib/setup/firebaseAdminInit.ts +38 -38
- package/src/artifacts/artifacts.ts +40 -40
- package/src/firebase/firebaseAdminHelpers.ts +157 -157
- package/src/types/types.ts +20 -24
- package/src/utils/extractFrom.ts +93 -0
- package/src/utils/extractFromResourcesByResourceTypeHandle.ts +55 -0
- package/src/utils/{creation.ts → generateFrom.ts} +26 -26
- package/tsconfig.json +14 -14
- package/tsconfig.tsbuildinfo +1 -1
- package/src/utils/resourceMapExtraction.ts +0 -47
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
RawStrategyJson,
|
|
3
|
+
JobIdentityJson,
|
|
4
|
+
JobJson,
|
|
5
|
+
JobStepIdentityJson,
|
|
6
|
+
JobStepJson,
|
|
7
|
+
StepJson,
|
|
8
|
+
ResourceRoleIdentityJson,
|
|
9
|
+
ResourceRoleJson,
|
|
10
|
+
ErrorJson
|
|
11
|
+
} from '@toolproof-core/schema';
|
|
12
|
+
import { CONSTANTS } from '../artifacts/artifacts.js';
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
export function extractJobHandlesFromRawStrategy(rawStrategy: RawStrategyJson): JobIdentityJson[] {
|
|
16
|
+
const jobSteps = extractJobStepsFromRawStrategy(rawStrategy);
|
|
17
|
+
const ids = new Set<JobIdentityJson>();
|
|
18
|
+
for (const jStep of jobSteps) {
|
|
19
|
+
ids.add(jStep.jobHandle);
|
|
20
|
+
}
|
|
21
|
+
return Array.from(ids);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function extractJobStepsFromRawStrategy(rawStrategy: RawStrategyJson): JobStepJson[] {
|
|
25
|
+
const jobSteps: JobStepJson[] = [];
|
|
26
|
+
const seen = new Set<JobStepIdentityJson>();
|
|
27
|
+
|
|
28
|
+
const addJobStep = (jobStep: JobStepJson) => {
|
|
29
|
+
if (seen.has(jobStep.identity)) {
|
|
30
|
+
throw new Error(`Duplicate job step identity encountered: ${jobStep.identity}`);
|
|
31
|
+
}
|
|
32
|
+
seen.add(jobStep.identity);
|
|
33
|
+
jobSteps.push(jobStep);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const visitStep = (step: StepJson) => {
|
|
37
|
+
switch (step.stepKind) {
|
|
38
|
+
case CONSTANTS.Enums.StepKind.job: {
|
|
39
|
+
addJobStep(step);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
case CONSTANTS.Enums.StepKind.branch: {
|
|
43
|
+
for (const conditional of step.cases) {
|
|
44
|
+
addJobStep(conditional.when);
|
|
45
|
+
addJobStep(conditional.what);
|
|
46
|
+
}
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
case CONSTANTS.Enums.StepKind.while:
|
|
50
|
+
case CONSTANTS.Enums.StepKind.for: {
|
|
51
|
+
addJobStep(step.case.when);
|
|
52
|
+
addJobStep(step.case.what);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
default: {
|
|
56
|
+
const _exhaustive: never = step;
|
|
57
|
+
return _exhaustive;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
for (const step of rawStrategy.steps) {
|
|
63
|
+
visitStep(step);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return jobSteps;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
export function extractResourceRolesFromRawStrategy(rawStrategy: RawStrategyJson, jobMap: Map<JobIdentityJson, JobJson>): ResourceRoleJson[] {
|
|
71
|
+
const map = new Map<ResourceRoleIdentityJson, ResourceRoleJson>();
|
|
72
|
+
const jobHandles = extractJobHandlesFromRawStrategy(rawStrategy);
|
|
73
|
+
|
|
74
|
+
for (const jobHandle of jobHandles) {
|
|
75
|
+
const job = jobMap.get(jobHandle);
|
|
76
|
+
if (!job) continue;
|
|
77
|
+
|
|
78
|
+
for (const [rid, role] of Object.entries(job.roles.inputDict)) {
|
|
79
|
+
map.set(rid as ResourceRoleIdentityJson, {
|
|
80
|
+
identity: rid as ResourceRoleIdentityJson,
|
|
81
|
+
...role,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
for (const [rid, role] of Object.entries(job.roles.outputDict)) {
|
|
85
|
+
map.set(rid as ResourceRoleIdentityJson, {
|
|
86
|
+
identity: rid as ResourceRoleIdentityJson,
|
|
87
|
+
...role,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return Array.from(map.values());
|
|
93
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ResourceIdentityJson,
|
|
3
|
+
ResourceTypeIdentityJson,
|
|
4
|
+
ResourceJson,
|
|
5
|
+
} from '@toolproof-core/schema';
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
export function extractResourceMapForResourceType<TResource extends ResourceJson = ResourceJson>(
|
|
9
|
+
resourcesByResourceTypeHandle: Partial<Record<ResourceTypeIdentityJson, TResource[]>>,
|
|
10
|
+
resourceTypeHandle: ResourceTypeIdentityJson
|
|
11
|
+
): Map<ResourceIdentityJson, TResource> {
|
|
12
|
+
const resources = resourcesByResourceTypeHandle[resourceTypeHandle] ?? [];
|
|
13
|
+
const map = new Map<ResourceIdentityJson, TResource>();
|
|
14
|
+
|
|
15
|
+
for (const resource of resources) {
|
|
16
|
+
map.set(resource.identity, resource);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return map;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// ATTENTION: should only need standalone type as type parameter, then we could extract the nuclueus type and identity type
|
|
23
|
+
export function extractNucleusMapForResourceType<
|
|
24
|
+
TKey extends string = string,
|
|
25
|
+
TNucleus extends { identity: string | number | boolean } = { identity: string | number | boolean },
|
|
26
|
+
TResource extends ResourceJson = ResourceJson
|
|
27
|
+
>(
|
|
28
|
+
resourcesByResourceTypeHandle: Partial<Record<ResourceTypeIdentityJson, TResource[]>>,
|
|
29
|
+
resourceTypeHandle: ResourceTypeIdentityJson,
|
|
30
|
+
): Map<TKey, TNucleus> {
|
|
31
|
+
const resourceMap = extractResourceMapForResourceType<TResource>(resourcesByResourceTypeHandle, resourceTypeHandle);
|
|
32
|
+
const out = new Map<TKey, TNucleus>();
|
|
33
|
+
|
|
34
|
+
for (const resource of resourceMap.values()) {
|
|
35
|
+
const data = (resource as any).nucleus as unknown;
|
|
36
|
+
if (data === null || data === undefined) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (typeof data !== 'object') {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const maybeIdentity = (data as any).identity as unknown;
|
|
44
|
+
if (maybeIdentity === null || maybeIdentity === undefined) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const value = data as TNucleus;
|
|
49
|
+
const key = String(maybeIdentity) as TKey;
|
|
50
|
+
|
|
51
|
+
out.set(key, value);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import type { ResourceIdentityJson, ResourceTypeIdentityJson, ResourceJson, ResourceOutputPotentialJson } from '@toolproof-core/schema';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export function generatePath(resourceTypeHandle: ResourceTypeIdentityJson, identity: ResourceIdentityJson): string {
|
|
5
|
-
return `${resourceTypeHandle}/${identity}.json`;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export function
|
|
9
|
-
outputPotential: ResourceOutputPotentialJson,
|
|
10
|
-
nucleus: unknown,
|
|
11
|
-
timestamp?: string
|
|
12
|
-
): ResourceJson {
|
|
13
|
-
const { identity, resourceTypeHandle, creationContext } = outputPotential;
|
|
14
|
-
|
|
15
|
-
const path = generatePath(resourceTypeHandle, identity);
|
|
16
|
-
|
|
17
|
-
return {
|
|
18
|
-
identity,
|
|
19
|
-
resourceTypeHandle,
|
|
20
|
-
creationContext,
|
|
21
|
-
resourceShellKind: 'materialized',
|
|
22
|
-
version: 1,
|
|
23
|
-
timestamp: timestamp ?? new Date().toISOString(), // Preserve original timestamp when copying
|
|
24
|
-
path,
|
|
25
|
-
nucleus,
|
|
26
|
-
};
|
|
1
|
+
import type { ResourceIdentityJson, ResourceTypeIdentityJson, ResourceJson, ResourceOutputPotentialJson } from '@toolproof-core/schema';
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
export function generatePath(resourceTypeHandle: ResourceTypeIdentityJson, identity: ResourceIdentityJson): string {
|
|
5
|
+
return `${resourceTypeHandle}/${identity}.json`;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function generateMaterializedFromOutputPotential(
|
|
9
|
+
outputPotential: ResourceOutputPotentialJson,
|
|
10
|
+
nucleus: unknown,
|
|
11
|
+
timestamp?: string
|
|
12
|
+
): ResourceJson {
|
|
13
|
+
const { identity, resourceTypeHandle, creationContext } = outputPotential;
|
|
14
|
+
|
|
15
|
+
const path = generatePath(resourceTypeHandle, identity);
|
|
16
|
+
|
|
17
|
+
return {
|
|
18
|
+
identity,
|
|
19
|
+
resourceTypeHandle,
|
|
20
|
+
creationContext,
|
|
21
|
+
resourceShellKind: 'materialized',
|
|
22
|
+
version: 1,
|
|
23
|
+
timestamp: timestamp ?? new Date().toISOString(), // Preserve original timestamp when copying
|
|
24
|
+
path,
|
|
25
|
+
nucleus,
|
|
26
|
+
};
|
|
27
27
|
}
|
package/tsconfig.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../tsconfig.base.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"rootDir": "./src",
|
|
5
|
-
"outDir": "./dist",
|
|
6
|
-
"types": ["node"]
|
|
7
|
-
},
|
|
8
|
-
"include": [
|
|
9
|
-
"src"
|
|
10
|
-
],
|
|
11
|
-
"exclude": [
|
|
12
|
-
"dist",
|
|
13
|
-
"node_modules"
|
|
14
|
-
]
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../tsconfig.base.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"rootDir": "./src",
|
|
5
|
+
"outDir": "./dist",
|
|
6
|
+
"types": ["node"]
|
|
7
|
+
},
|
|
8
|
+
"include": [
|
|
9
|
+
"src"
|
|
10
|
+
],
|
|
11
|
+
"exclude": [
|
|
12
|
+
"dist",
|
|
13
|
+
"node_modules"
|
|
14
|
+
]
|
|
15
15
|
}
|
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["./src/_lib/setup/
|
|
1
|
+
{"root":["./src/_lib/setup/firebaseadmininit.ts","./src/artifacts/artifacts.ts","./src/firebase/firebaseadminhelpers.ts","./src/types/types.ts","./src/utils/extractfrom.ts","./src/utils/extractfromresourcesbyresourcetypehandle.ts","./src/utils/generatefrom.ts"],"version":"5.9.3"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ResourceIdentityJson,
|
|
3
|
-
ResourceTypeIdentityJson,
|
|
4
|
-
ResourceJson,
|
|
5
|
-
} from '@toolproof-core/schema';
|
|
6
|
-
import type { ResourceMap } from '../types/types.js';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export function extractResourcesByType<TResource extends ResourceJson = ResourceJson>(
|
|
10
|
-
resourceMap: ResourceMap,
|
|
11
|
-
resourceTypeHandle: ResourceTypeIdentityJson
|
|
12
|
-
): Record<ResourceIdentityJson, TResource> {
|
|
13
|
-
const resources = (resourceMap[resourceTypeHandle] ?? []) as TResource[];
|
|
14
|
-
const result: Record<ResourceIdentityJson, TResource> = {} as Record<ResourceIdentityJson, TResource>;
|
|
15
|
-
|
|
16
|
-
for (const resource of resources) {
|
|
17
|
-
result[resource.identity] = resource;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
return result;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
-
*/
|
|
26
|
-
export function extractNucleusMap<
|
|
27
|
-
TKey extends string = string,
|
|
28
|
-
TNucleus extends { identity: string | number | boolean } = { identity: string | number | boolean },
|
|
29
|
-
TResource extends ResourceJson = ResourceJson
|
|
30
|
-
>(
|
|
31
|
-
resourceMap: ResourceMap,
|
|
32
|
-
resourceTypeHandle: ResourceTypeIdentityJson,
|
|
33
|
-
): Map<TKey, TNucleus> {
|
|
34
|
-
const resources = extractResourcesByType<TResource>(resourceMap, resourceTypeHandle);
|
|
35
|
-
const out = new Map<TKey, TNucleus>();
|
|
36
|
-
|
|
37
|
-
for (const resource of Object.values(resources)) {
|
|
38
|
-
const data = (resource as any).nucleus as unknown;
|
|
39
|
-
|
|
40
|
-
const value = data as TNucleus;
|
|
41
|
-
const key = String(value.identity) as TKey;
|
|
42
|
-
|
|
43
|
-
out.set(key, value);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
return out;
|
|
47
|
-
}
|