@milaboratories/pl-model-backend 1.0.3 → 1.1.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/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +96 -53
- package/dist/index.mjs.map +1 -1
- package/dist/serde.d.ts +5 -0
- package/dist/serde.d.ts.map +1 -0
- package/dist/template_data_v2.d.ts +0 -2
- package/dist/template_data_v2.d.ts.map +1 -1
- package/dist/template_data_v3.d.ts +53 -0
- package/dist/template_data_v3.d.ts.map +1 -0
- package/dist/template_resources_v1.d.ts +5 -0
- package/dist/template_resources_v1.d.ts.map +1 -1
- package/package.json +4 -3
- package/src/index.ts +3 -0
- package/src/serde.ts +26 -0
- package/src/template_data_v2.ts +0 -19
- package/src/template_data_v3.ts +61 -0
- package/src/template_resources_v1.ts +43 -1
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("node:zlib"),m=require("canonicalize"),s=require("zod"),o=require("@milaboratories/pl-client"),c=s.z.object({type:s.z.string()}).passthrough(),l=new TextEncoder,p=new TextDecoder;function v(e){const n=c.parse(JSON.parse(p.decode(u.gunzipSync(e))));if(n.type!=="pl.tengo-template.v2"&&n.type!=="pl.tengo-template.v3")throw new Error("malformed template");return n}function h(e){return u.gzipSync(l.encode(m(e)),{chunkSize:256*1024,level:9})}exports.PlTemplateLibV1=void 0;(e=>{e.type=o.resourceType("TengoLib","1");function n(r){return{data:{Name:r.name,Version:r.version,Code:Buffer.from(r.src,"utf8").toString("base64")}}}e.fromV2Data=n;function i(r,t){return{data:{Name:r.name,Version:r.version,Code:Buffer.from(t,"utf8").toString("base64")}}}e.fromV3Data=i})(exports.PlTemplateLibV1||(exports.PlTemplateLibV1={}));exports.PlTemplateSoftwareV1=void 0;(e=>{e.type=o.resourceType("SoftwareInfo","1"),e.metaNameKey="ctl/runner/package/name";function n(r){return{data:r.src,name:{Name:r.name,Version:r.version}}}e.fromV2Data=n;function i(r,t){return{data:t,name:{Name:r.name,Version:r.version}}}e.fromV3Data=i})(exports.PlTemplateSoftwareV1||(exports.PlTemplateSoftwareV1={}));exports.PlTemplateV1=void 0;(e=>{e.type=o.resourceType("TengoTemplate","1"),e.libPrefix="lib",e.softPrefix="soft",e.tplPrefix="tpl";function n(a,f){return o.field(a,`${e.libPrefix}/${f}`)}e.libField=n;function i(a,f){return o.field(a,`${e.tplPrefix}/${f}`)}e.tplField=i;function r(a,f){return o.field(a,`${e.softPrefix}/${f}`)}e.swField=r;function t(a){return{data:{Name:a.name,Version:a.version,Code:Buffer.from(a.src,"utf8").toString("base64")}}}e.fromV2Data=t;function d(a,f){return{data:{Name:a.name,Version:a.version,Code:Buffer.from(f,"utf8").toString("base64")}}}e.fromV3Data=d})(exports.PlTemplateV1||(exports.PlTemplateV1={}));exports.PlTemplateOverrideV1=void 0;(e=>{e.type=o.resourceType("TengoTemplateOverride","1");function n(t){return o.field(t,"tpl")}e.tplField=n;function i(t){if(!t.hashOverride)throw new Error("template tree rendering error: template has no hash override, cannot generate PlTemplateOverrideV1.ResourceStructure from template data");return{data:{OverrideUUID:t.hashOverride}}}e.fromV2Data=i;function r(t){if(!t.hashOverride)throw new Error("template tree rendering error: template has no hash override, cannot generate PlTemplateOverrideV1.ResourceStructure from template data");return{data:{OverrideUUID:t.hashOverride}}}e.fromV3Data=r})(exports.PlTemplateOverrideV1||(exports.PlTemplateOverrideV1={}));exports.parseTemplate=v;exports.serializeTemplate=h;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/serde.ts","../src/template_resources_v1.ts"],"sourcesContent":["import { gunzipSync, gzipSync } from 'node:zlib';\nimport canonicalize from 'canonicalize';\nimport { TemplateData } from './template_data_v2';\nimport { CompiledTemplateV3 } from './template_data_v3';\nimport { z } from 'zod';\n\nconst TypeSchema = z.object({\n type: z.string(),\n}).passthrough();\n\nconst templateArchiveEncoder = new TextEncoder();\nconst templateArchiveDecoder = new TextDecoder();\n\nexport function parseTemplate(content: Uint8Array): TemplateData | CompiledTemplateV3 {\n const data = TypeSchema.parse(JSON.parse(templateArchiveDecoder.decode(gunzipSync(content))));\n if (data.type !== 'pl.tengo-template.v2' &&\n data.type !== 'pl.tengo-template.v3') {\n throw new Error('malformed template');\n }\n\n return data as unknown as TemplateData | CompiledTemplateV3;\n}\n\nexport function serializeTemplate(data: TemplateData | CompiledTemplateV3): Uint8Array {\n return gzipSync(templateArchiveEncoder.encode(canonicalize(data)), { chunkSize: 256 * 1024, level: 9 });\n}\n","import type { AnyFieldRef, AnyResourceRef } from '@milaboratories/pl-client';\nimport { field, resourceType } from '@milaboratories/pl-client';\nimport type * as infoV2 from './template_data_v2';\nimport type * as infoV3 from './template_data_v3';\nexport namespace PlTemplateLibV1 {\n export const type = resourceType('TengoLib', '1');\n\n export type ResourceStructure = {\n data: Data;\n };\n\n export type Data = {\n /** i.e. @milaboratory/some-package:lib1 */\n Name: string;\n /** i.e. 1.2.3 */\n Version: string;\n /** Full source code encoded with Base64 */\n Code: string;\n };\n\n export function fromV2Data(info: infoV2.TemplateLibData): ResourceStructure {\n return {\n data: {\n Name: info.name,\n Version: info.version,\n Code: Buffer.from(info.src, 'utf8').toString('base64'),\n },\n };\n }\n\n export function fromV3Data(info: infoV3.TemplateLibDataV3, sourceCode: string): ResourceStructure {\n return {\n data: {\n Name: info.name,\n Version: info.version,\n Code: Buffer.from(sourceCode, 'utf8').toString('base64'),\n },\n };\n }\n}\n\nexport namespace PlTemplateSoftwareV1 {\n export const type = resourceType('SoftwareInfo', '1');\n\n export type ResourceStructure = {\n data: Data;\n name: MetaName;\n };\n\n /** Raw entrypoint descriptor encoded with Base64 */\n export type Data = string;\n\n export const metaNameKey = 'ctl/runner/package/name';\n export type MetaName = {\n /** i.e. @milaboratory/some-package:sw1 */\n Name: string;\n /** i.e. 1.2.3 */\n Version: string;\n };\n\n export function fromV2Data(info: infoV2.TemplateSoftwareData | infoV2.TemplateAssetData): ResourceStructure {\n return {\n data: info.src,\n name: {\n Name: info.name,\n Version: info.version,\n },\n };\n }\n\n export function fromV3Data(info: infoV3.TemplateSoftwareDataV3, sourceCode: string): ResourceStructure {\n return {\n data: sourceCode,\n name: {\n Name: info.name,\n Version: info.version,\n },\n };\n }\n}\n\nexport namespace PlTemplateV1 {\n export const type = resourceType('TengoTemplate', '1');\n\n export type ResourceStructure = {\n data: Data;\n };\n\n export const libPrefix = 'lib';\n export const softPrefix = 'soft';\n export const tplPrefix = 'tpl';\n\n export function libField(ref: AnyResourceRef, libId: string): AnyFieldRef {\n return field(ref, `${libPrefix}/${libId}`);\n }\n export function tplField(ref: AnyResourceRef, tplId: string): AnyFieldRef {\n return field(ref, `${tplPrefix}/${tplId}`);\n }\n export function swField(ref: AnyResourceRef, softwareId: string): AnyFieldRef {\n return field(ref, `${softPrefix}/${softwareId}`);\n }\n\n export type Data = {\n /** i.e. @milaboratory/some-package:tpl1 */\n Name: string;\n /** i.e. 1.2.3 */\n Version: string;\n /** Full source code encoded with Base64 */\n Code: string;\n };\n\n export function fromV2Data(info: infoV2.TemplateData): ResourceStructure {\n return {\n data: {\n Name: info.name,\n Version: info.version,\n Code: Buffer.from(info.src, 'utf8').toString('base64'),\n },\n };\n }\n\n export function fromV3Data(info: infoV3.TemplateDataV3, sourceCode: string): ResourceStructure {\n return {\n data: {\n Name: info.name,\n Version: info.version,\n Code: Buffer.from(sourceCode, 'utf8').toString('base64'),\n },\n };\n }\n}\n\nexport namespace PlTemplateOverrideV1 {\n export const type = resourceType('TengoTemplateOverride', '1');\n\n export type ResourceStructure = {\n data: Data;\n };\n\n export function tplField(ref: AnyResourceRef): AnyFieldRef {\n return field(ref, 'tpl');\n }\n\n export type Data = {\n OverrideUUID: string;\n };\n\n export function fromV2Data(info: infoV2.TemplateData): ResourceStructure {\n if (!info.hashOverride) {\n throw new Error(`template tree rendering error: template has no hash override, cannot generate PlTemplateOverrideV1.ResourceStructure from template data`);\n }\n\n return {\n data: {\n OverrideUUID: info.hashOverride,\n },\n };\n }\n\n export function fromV3Data(info: infoV3.TemplateDataV3): ResourceStructure {\n if (!info.hashOverride) {\n throw new Error(`template tree rendering error: template has no hash override, cannot generate PlTemplateOverrideV1.ResourceStructure from template data`);\n }\n\n return {\n data: {\n OverrideUUID: info.hashOverride,\n },\n };\n }\n}\n"],"names":["TypeSchema","z","templateArchiveEncoder","templateArchiveDecoder","parseTemplate","content","data","gunzipSync","serializeTemplate","gzipSync","canonicalize","PlTemplateLibV1","resourceType","fromV2Data","info","fromV3Data","sourceCode","PlTemplateSoftwareV1","PlTemplateV1","libField","ref","libId","field","tplField","tplId","swField","softwareId","PlTemplateOverrideV1"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
|
-
import { gunzipSync as
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { gunzipSync as h, gzipSync as D } from "node:zlib";
|
|
2
|
+
import l from "canonicalize";
|
|
3
|
+
import { z as u } from "zod";
|
|
4
|
+
import { resourceType as m, field as f } from "@milaboratories/pl-client";
|
|
5
|
+
const g = u.object({
|
|
6
|
+
type: u.string()
|
|
7
|
+
}).passthrough(), y = new TextEncoder(), b = new TextDecoder();
|
|
8
|
+
function F(e) {
|
|
9
|
+
const n = g.parse(JSON.parse(b.decode(h(e))));
|
|
10
|
+
if (n.type !== "pl.tengo-template.v2" && n.type !== "pl.tengo-template.v3")
|
|
8
11
|
throw new Error("malformed template");
|
|
9
|
-
return
|
|
12
|
+
return n;
|
|
10
13
|
}
|
|
11
|
-
function
|
|
12
|
-
return
|
|
14
|
+
function N(e) {
|
|
15
|
+
return D(y.encode(l(e)), { chunkSize: 256 * 1024, level: 9 });
|
|
13
16
|
}
|
|
14
|
-
var
|
|
17
|
+
var s;
|
|
15
18
|
((e) => {
|
|
16
|
-
e.type =
|
|
17
|
-
function
|
|
19
|
+
e.type = m("TengoLib", "1");
|
|
20
|
+
function n(r) {
|
|
18
21
|
return {
|
|
19
22
|
data: {
|
|
20
23
|
Name: r.name,
|
|
@@ -23,12 +26,22 @@ var c;
|
|
|
23
26
|
}
|
|
24
27
|
};
|
|
25
28
|
}
|
|
26
|
-
e.fromV2Data =
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
e.fromV2Data = n;
|
|
30
|
+
function o(r, t) {
|
|
31
|
+
return {
|
|
32
|
+
data: {
|
|
33
|
+
Name: r.name,
|
|
34
|
+
Version: r.version,
|
|
35
|
+
Code: Buffer.from(t, "utf8").toString("base64")
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
e.fromV3Data = o;
|
|
40
|
+
})(s || (s = {}));
|
|
41
|
+
var c;
|
|
29
42
|
((e) => {
|
|
30
|
-
e.type =
|
|
31
|
-
function
|
|
43
|
+
e.type = m("SoftwareInfo", "1"), e.metaNameKey = "ctl/runner/package/name";
|
|
44
|
+
function n(r) {
|
|
32
45
|
return {
|
|
33
46
|
data: r.src,
|
|
34
47
|
name: {
|
|
@@ -37,58 +50,88 @@ var d;
|
|
|
37
50
|
}
|
|
38
51
|
};
|
|
39
52
|
}
|
|
40
|
-
e.fromV2Data =
|
|
41
|
-
|
|
42
|
-
|
|
53
|
+
e.fromV2Data = n;
|
|
54
|
+
function o(r, t) {
|
|
55
|
+
return {
|
|
56
|
+
data: t,
|
|
57
|
+
name: {
|
|
58
|
+
Name: r.name,
|
|
59
|
+
Version: r.version
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
e.fromV3Data = o;
|
|
64
|
+
})(c || (c = {}));
|
|
65
|
+
var d;
|
|
43
66
|
((e) => {
|
|
44
|
-
e.type =
|
|
45
|
-
function
|
|
46
|
-
return
|
|
67
|
+
e.type = m("TengoTemplate", "1"), e.libPrefix = "lib", e.softPrefix = "soft", e.tplPrefix = "tpl";
|
|
68
|
+
function n(a, i) {
|
|
69
|
+
return f(a, `${e.libPrefix}/${i}`);
|
|
47
70
|
}
|
|
48
|
-
e.libField =
|
|
49
|
-
function
|
|
50
|
-
return
|
|
71
|
+
e.libField = n;
|
|
72
|
+
function o(a, i) {
|
|
73
|
+
return f(a, `${e.tplPrefix}/${i}`);
|
|
51
74
|
}
|
|
52
|
-
e.tplField =
|
|
53
|
-
function
|
|
54
|
-
return
|
|
75
|
+
e.tplField = o;
|
|
76
|
+
function r(a, i) {
|
|
77
|
+
return f(a, `${e.softPrefix}/${i}`);
|
|
78
|
+
}
|
|
79
|
+
e.swField = r;
|
|
80
|
+
function t(a) {
|
|
81
|
+
return {
|
|
82
|
+
data: {
|
|
83
|
+
Name: a.name,
|
|
84
|
+
Version: a.version,
|
|
85
|
+
Code: Buffer.from(a.src, "utf8").toString("base64")
|
|
86
|
+
}
|
|
87
|
+
};
|
|
55
88
|
}
|
|
56
|
-
e.
|
|
57
|
-
function
|
|
89
|
+
e.fromV2Data = t;
|
|
90
|
+
function v(a, i) {
|
|
58
91
|
return {
|
|
59
92
|
data: {
|
|
60
|
-
Name:
|
|
61
|
-
Version:
|
|
62
|
-
Code: Buffer.from(
|
|
93
|
+
Name: a.name,
|
|
94
|
+
Version: a.version,
|
|
95
|
+
Code: Buffer.from(i, "utf8").toString("base64")
|
|
63
96
|
}
|
|
64
97
|
};
|
|
65
98
|
}
|
|
66
|
-
e.
|
|
67
|
-
})(
|
|
68
|
-
var
|
|
99
|
+
e.fromV3Data = v;
|
|
100
|
+
})(d || (d = {}));
|
|
101
|
+
var p;
|
|
69
102
|
((e) => {
|
|
70
|
-
e.type =
|
|
71
|
-
function t
|
|
72
|
-
return
|
|
103
|
+
e.type = m("TengoTemplateOverride", "1");
|
|
104
|
+
function n(t) {
|
|
105
|
+
return f(t, "tpl");
|
|
106
|
+
}
|
|
107
|
+
e.tplField = n;
|
|
108
|
+
function o(t) {
|
|
109
|
+
if (!t.hashOverride)
|
|
110
|
+
throw new Error("template tree rendering error: template has no hash override, cannot generate PlTemplateOverrideV1.ResourceStructure from template data");
|
|
111
|
+
return {
|
|
112
|
+
data: {
|
|
113
|
+
OverrideUUID: t.hashOverride
|
|
114
|
+
}
|
|
115
|
+
};
|
|
73
116
|
}
|
|
74
|
-
e.
|
|
75
|
-
function r(
|
|
76
|
-
if (!
|
|
117
|
+
e.fromV2Data = o;
|
|
118
|
+
function r(t) {
|
|
119
|
+
if (!t.hashOverride)
|
|
77
120
|
throw new Error("template tree rendering error: template has no hash override, cannot generate PlTemplateOverrideV1.ResourceStructure from template data");
|
|
78
121
|
return {
|
|
79
122
|
data: {
|
|
80
|
-
OverrideUUID:
|
|
123
|
+
OverrideUUID: t.hashOverride
|
|
81
124
|
}
|
|
82
125
|
};
|
|
83
126
|
}
|
|
84
|
-
e.
|
|
85
|
-
})(
|
|
127
|
+
e.fromV3Data = r;
|
|
128
|
+
})(p || (p = {}));
|
|
86
129
|
export {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
130
|
+
s as PlTemplateLibV1,
|
|
131
|
+
p as PlTemplateOverrideV1,
|
|
132
|
+
c as PlTemplateSoftwareV1,
|
|
133
|
+
d as PlTemplateV1,
|
|
134
|
+
F as parseTemplate,
|
|
135
|
+
N as serializeTemplate
|
|
93
136
|
};
|
|
94
137
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/serde.ts","../src/template_resources_v1.ts"],"sourcesContent":["import { gunzipSync, gzipSync } from 'node:zlib';\nimport canonicalize from 'canonicalize';\nimport { TemplateData } from './template_data_v2';\nimport { CompiledTemplateV3 } from './template_data_v3';\nimport { z } from 'zod';\n\nconst TypeSchema = z.object({\n type: z.string(),\n}).passthrough();\n\nconst templateArchiveEncoder = new TextEncoder();\nconst templateArchiveDecoder = new TextDecoder();\n\nexport function parseTemplate(content: Uint8Array): TemplateData | CompiledTemplateV3 {\n const data = TypeSchema.parse(JSON.parse(templateArchiveDecoder.decode(gunzipSync(content))));\n if (data.type !== 'pl.tengo-template.v2' &&\n data.type !== 'pl.tengo-template.v3') {\n throw new Error('malformed template');\n }\n\n return data as unknown as TemplateData | CompiledTemplateV3;\n}\n\nexport function serializeTemplate(data: TemplateData | CompiledTemplateV3): Uint8Array {\n return gzipSync(templateArchiveEncoder.encode(canonicalize(data)), { chunkSize: 256 * 1024, level: 9 });\n}\n","import type { AnyFieldRef, AnyResourceRef } from '@milaboratories/pl-client';\nimport { field, resourceType } from '@milaboratories/pl-client';\nimport type * as infoV2 from './template_data_v2';\nimport type * as infoV3 from './template_data_v3';\nexport namespace PlTemplateLibV1 {\n export const type = resourceType('TengoLib', '1');\n\n export type ResourceStructure = {\n data: Data;\n };\n\n export type Data = {\n /** i.e. @milaboratory/some-package:lib1 */\n Name: string;\n /** i.e. 1.2.3 */\n Version: string;\n /** Full source code encoded with Base64 */\n Code: string;\n };\n\n export function fromV2Data(info: infoV2.TemplateLibData): ResourceStructure {\n return {\n data: {\n Name: info.name,\n Version: info.version,\n Code: Buffer.from(info.src, 'utf8').toString('base64'),\n },\n };\n }\n\n export function fromV3Data(info: infoV3.TemplateLibDataV3, sourceCode: string): ResourceStructure {\n return {\n data: {\n Name: info.name,\n Version: info.version,\n Code: Buffer.from(sourceCode, 'utf8').toString('base64'),\n },\n };\n }\n}\n\nexport namespace PlTemplateSoftwareV1 {\n export const type = resourceType('SoftwareInfo', '1');\n\n export type ResourceStructure = {\n data: Data;\n name: MetaName;\n };\n\n /** Raw entrypoint descriptor encoded with Base64 */\n export type Data = string;\n\n export const metaNameKey = 'ctl/runner/package/name';\n export type MetaName = {\n /** i.e. @milaboratory/some-package:sw1 */\n Name: string;\n /** i.e. 1.2.3 */\n Version: string;\n };\n\n export function fromV2Data(info: infoV2.TemplateSoftwareData | infoV2.TemplateAssetData): ResourceStructure {\n return {\n data: info.src,\n name: {\n Name: info.name,\n Version: info.version,\n },\n };\n }\n\n export function fromV3Data(info: infoV3.TemplateSoftwareDataV3, sourceCode: string): ResourceStructure {\n return {\n data: sourceCode,\n name: {\n Name: info.name,\n Version: info.version,\n },\n };\n }\n}\n\nexport namespace PlTemplateV1 {\n export const type = resourceType('TengoTemplate', '1');\n\n export type ResourceStructure = {\n data: Data;\n };\n\n export const libPrefix = 'lib';\n export const softPrefix = 'soft';\n export const tplPrefix = 'tpl';\n\n export function libField(ref: AnyResourceRef, libId: string): AnyFieldRef {\n return field(ref, `${libPrefix}/${libId}`);\n }\n export function tplField(ref: AnyResourceRef, tplId: string): AnyFieldRef {\n return field(ref, `${tplPrefix}/${tplId}`);\n }\n export function swField(ref: AnyResourceRef, softwareId: string): AnyFieldRef {\n return field(ref, `${softPrefix}/${softwareId}`);\n }\n\n export type Data = {\n /** i.e. @milaboratory/some-package:tpl1 */\n Name: string;\n /** i.e. 1.2.3 */\n Version: string;\n /** Full source code encoded with Base64 */\n Code: string;\n };\n\n export function fromV2Data(info: infoV2.TemplateData): ResourceStructure {\n return {\n data: {\n Name: info.name,\n Version: info.version,\n Code: Buffer.from(info.src, 'utf8').toString('base64'),\n },\n };\n }\n\n export function fromV3Data(info: infoV3.TemplateDataV3, sourceCode: string): ResourceStructure {\n return {\n data: {\n Name: info.name,\n Version: info.version,\n Code: Buffer.from(sourceCode, 'utf8').toString('base64'),\n },\n };\n }\n}\n\nexport namespace PlTemplateOverrideV1 {\n export const type = resourceType('TengoTemplateOverride', '1');\n\n export type ResourceStructure = {\n data: Data;\n };\n\n export function tplField(ref: AnyResourceRef): AnyFieldRef {\n return field(ref, 'tpl');\n }\n\n export type Data = {\n OverrideUUID: string;\n };\n\n export function fromV2Data(info: infoV2.TemplateData): ResourceStructure {\n if (!info.hashOverride) {\n throw new Error(`template tree rendering error: template has no hash override, cannot generate PlTemplateOverrideV1.ResourceStructure from template data`);\n }\n\n return {\n data: {\n OverrideUUID: info.hashOverride,\n },\n };\n }\n\n export function fromV3Data(info: infoV3.TemplateDataV3): ResourceStructure {\n if (!info.hashOverride) {\n throw new Error(`template tree rendering error: template has no hash override, cannot generate PlTemplateOverrideV1.ResourceStructure from template data`);\n }\n\n return {\n data: {\n OverrideUUID: info.hashOverride,\n },\n };\n }\n}\n"],"names":["TypeSchema","z","templateArchiveEncoder","templateArchiveDecoder","parseTemplate","content","data","gunzipSync","serializeTemplate","gzipSync","canonicalize","PlTemplateLibV1","resourceType","fromV2Data","info","fromV3Data","sourceCode","PlTemplateSoftwareV1","PlTemplateV1","libField","ref","libId","field","tplField","tplId","swField","softwareId","PlTemplateOverrideV1"],"mappings":"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"}
|
package/dist/serde.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { TemplateData } from './template_data_v2';
|
|
2
|
+
import { CompiledTemplateV3 } from './template_data_v3';
|
|
3
|
+
export declare function parseTemplate(content: Uint8Array): TemplateData | CompiledTemplateV3;
|
|
4
|
+
export declare function serializeTemplate(data: TemplateData | CompiledTemplateV3): Uint8Array;
|
|
5
|
+
//# sourceMappingURL=serde.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serde.d.ts","sourceRoot":"","sources":["../src/serde.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAUxD,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,YAAY,GAAG,kBAAkB,CAQpF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,kBAAkB,GAAG,UAAU,CAErF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template_data_v2.d.ts","sourceRoot":"","sources":["../src/template_data_v2.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"template_data_v2.d.ts","sourceRoot":"","sources":["../src/template_data_v2.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,IAAI,EAAE,sBAAsB,CAAC;IAE7B,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACtC,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACxC,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC/C,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC1C,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export interface TemplateLibDataV3 {
|
|
2
|
+
/** i.e. @milaboratory/some-package:lib1 */
|
|
3
|
+
name: string;
|
|
4
|
+
/** i.e. 1.2.3 */
|
|
5
|
+
version: string;
|
|
6
|
+
/** hash of the source code */
|
|
7
|
+
sourceHash: string;
|
|
8
|
+
}
|
|
9
|
+
export interface TemplateSoftwareDataV3 {
|
|
10
|
+
/** i.e. @milaboratory/mixcr:main */
|
|
11
|
+
name: string;
|
|
12
|
+
/** i.e. 4.2.3 */
|
|
13
|
+
version: string;
|
|
14
|
+
/** hash of the source code */
|
|
15
|
+
sourceHash: string;
|
|
16
|
+
}
|
|
17
|
+
export interface TemplateAssetDataV3 {
|
|
18
|
+
/** i.e. @milaboratory/mixcr:main */
|
|
19
|
+
name: string;
|
|
20
|
+
/** i.e. 4.2.3 */
|
|
21
|
+
version: string;
|
|
22
|
+
/** hash of the full contents of asset dependency description */
|
|
23
|
+
sourceHash: string;
|
|
24
|
+
}
|
|
25
|
+
export interface TemplateDataV3 {
|
|
26
|
+
/** i.e. @milaboratory/some-package:template */
|
|
27
|
+
name: string;
|
|
28
|
+
/** i.e. 1.2.3 */
|
|
29
|
+
version: string;
|
|
30
|
+
/** Hash of the source from the `sources` field. */
|
|
31
|
+
sourceHash: string;
|
|
32
|
+
/**
|
|
33
|
+
* Custom hash token of the template for deduplication purposes. Can be set with 'hash_override' compiler option.
|
|
34
|
+
* Dangerous! Remember: great power comes with great responsibility.
|
|
35
|
+
*/
|
|
36
|
+
hashOverride?: string;
|
|
37
|
+
/** i.e. @milaboratory/some-package:some-lib -> the library source code */
|
|
38
|
+
libs: Record<string, TemplateLibDataV3>;
|
|
39
|
+
/** i.e. @milaboratory/some-package:some-template -> the nested template source code */
|
|
40
|
+
templates: Record<string, TemplateDataV3>;
|
|
41
|
+
/** i.e. @milaboratory/mixcr:main -> the software metadata */
|
|
42
|
+
software: Record<string, TemplateSoftwareDataV3>;
|
|
43
|
+
/** i.e. @milaboratory/genome:human -> the asset metadata */
|
|
44
|
+
assets: Record<string, TemplateAssetDataV3>;
|
|
45
|
+
}
|
|
46
|
+
export interface CompiledTemplateV3 {
|
|
47
|
+
/** Discriminator for future use */
|
|
48
|
+
type: 'pl.tengo-template.v3';
|
|
49
|
+
/** Hashes of all artifacts to sources itself. */
|
|
50
|
+
hashToSource: Record<string, string>;
|
|
51
|
+
template: TemplateDataV3;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=template_data_v3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template_data_v3.d.ts","sourceRoot":"","sources":["../src/template_data_v3.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAEhB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACxC,uFAAuF;IACvF,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACjD,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,IAAI,EAAE,sBAAsB,CAAC;IAE7B,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC,QAAQ,EAAE,cAAc,CAAC;CAC1B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AnyFieldRef, AnyResourceRef } from '@milaboratories/pl-client';
|
|
2
2
|
import type * as infoV2 from './template_data_v2';
|
|
3
|
+
import type * as infoV3 from './template_data_v3';
|
|
3
4
|
export declare namespace PlTemplateLibV1 {
|
|
4
5
|
const type: import("@milaboratories/pl-client").ResourceType;
|
|
5
6
|
type ResourceStructure = {
|
|
@@ -14,6 +15,7 @@ export declare namespace PlTemplateLibV1 {
|
|
|
14
15
|
Code: string;
|
|
15
16
|
};
|
|
16
17
|
function fromV2Data(info: infoV2.TemplateLibData): ResourceStructure;
|
|
18
|
+
function fromV3Data(info: infoV3.TemplateLibDataV3, sourceCode: string): ResourceStructure;
|
|
17
19
|
}
|
|
18
20
|
export declare namespace PlTemplateSoftwareV1 {
|
|
19
21
|
const type: import("@milaboratories/pl-client").ResourceType;
|
|
@@ -31,6 +33,7 @@ export declare namespace PlTemplateSoftwareV1 {
|
|
|
31
33
|
Version: string;
|
|
32
34
|
};
|
|
33
35
|
function fromV2Data(info: infoV2.TemplateSoftwareData | infoV2.TemplateAssetData): ResourceStructure;
|
|
36
|
+
function fromV3Data(info: infoV3.TemplateSoftwareDataV3, sourceCode: string): ResourceStructure;
|
|
34
37
|
}
|
|
35
38
|
export declare namespace PlTemplateV1 {
|
|
36
39
|
const type: import("@milaboratories/pl-client").ResourceType;
|
|
@@ -52,6 +55,7 @@ export declare namespace PlTemplateV1 {
|
|
|
52
55
|
Code: string;
|
|
53
56
|
};
|
|
54
57
|
function fromV2Data(info: infoV2.TemplateData): ResourceStructure;
|
|
58
|
+
function fromV3Data(info: infoV3.TemplateDataV3, sourceCode: string): ResourceStructure;
|
|
55
59
|
}
|
|
56
60
|
export declare namespace PlTemplateOverrideV1 {
|
|
57
61
|
const type: import("@milaboratories/pl-client").ResourceType;
|
|
@@ -63,5 +67,6 @@ export declare namespace PlTemplateOverrideV1 {
|
|
|
63
67
|
OverrideUUID: string;
|
|
64
68
|
};
|
|
65
69
|
function fromV2Data(info: infoV2.TemplateData): ResourceStructure;
|
|
70
|
+
function fromV3Data(info: infoV3.TemplateDataV3): ResourceStructure;
|
|
66
71
|
}
|
|
67
72
|
//# sourceMappingURL=template_resources_v1.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template_resources_v1.d.ts","sourceRoot":"","sources":["../src/template_resources_v1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE7E,OAAO,KAAK,KAAK,MAAM,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"template_resources_v1.d.ts","sourceRoot":"","sources":["../src/template_resources_v1.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milaboratories/pl-model-backend",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Backend model for Platforma.bio",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"./src/**/*"
|
|
18
18
|
],
|
|
19
19
|
"dependencies": {
|
|
20
|
+
"zod": "~3.23.8",
|
|
20
21
|
"canonicalize": "~2.1.0",
|
|
21
22
|
"@milaboratories/pl-client": ""
|
|
22
23
|
},
|
|
@@ -24,8 +25,8 @@
|
|
|
24
25
|
"@types/node": "~20.16.15",
|
|
25
26
|
"typescript": "~5.5.4",
|
|
26
27
|
"vite": "^5.4.11",
|
|
27
|
-
"@milaboratories/
|
|
28
|
-
"@milaboratories/
|
|
28
|
+
"@milaboratories/platforma-build-configs": "1.0.3",
|
|
29
|
+
"@milaboratories/eslint-config": "^1.0.4"
|
|
29
30
|
},
|
|
30
31
|
"scripts": {
|
|
31
32
|
"type-check": "tsc --noEmit --composite false",
|
package/src/index.ts
CHANGED
package/src/serde.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { gunzipSync, gzipSync } from 'node:zlib';
|
|
2
|
+
import canonicalize from 'canonicalize';
|
|
3
|
+
import { TemplateData } from './template_data_v2';
|
|
4
|
+
import { CompiledTemplateV3 } from './template_data_v3';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
|
|
7
|
+
const TypeSchema = z.object({
|
|
8
|
+
type: z.string(),
|
|
9
|
+
}).passthrough();
|
|
10
|
+
|
|
11
|
+
const templateArchiveEncoder = new TextEncoder();
|
|
12
|
+
const templateArchiveDecoder = new TextDecoder();
|
|
13
|
+
|
|
14
|
+
export function parseTemplate(content: Uint8Array): TemplateData | CompiledTemplateV3 {
|
|
15
|
+
const data = TypeSchema.parse(JSON.parse(templateArchiveDecoder.decode(gunzipSync(content))));
|
|
16
|
+
if (data.type !== 'pl.tengo-template.v2' &&
|
|
17
|
+
data.type !== 'pl.tengo-template.v3') {
|
|
18
|
+
throw new Error('malformed template');
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return data as unknown as TemplateData | CompiledTemplateV3;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function serializeTemplate(data: TemplateData | CompiledTemplateV3): Uint8Array {
|
|
25
|
+
return gzipSync(templateArchiveEncoder.encode(canonicalize(data)), { chunkSize: 256 * 1024, level: 9 });
|
|
26
|
+
}
|
package/src/template_data_v2.ts
CHANGED
|
@@ -1,22 +1,3 @@
|
|
|
1
|
-
import { gunzipSync, gzipSync } from 'node:zlib';
|
|
2
|
-
import canonicalize from 'canonicalize';
|
|
3
|
-
|
|
4
|
-
const templateArchiveEncoder = new TextEncoder();
|
|
5
|
-
const templateArchiveDecoder = new TextDecoder();
|
|
6
|
-
|
|
7
|
-
export function parseTemplate(content: Uint8Array): TemplateData {
|
|
8
|
-
const data = JSON.parse(templateArchiveDecoder.decode(gunzipSync(content))) as TemplateData;
|
|
9
|
-
if (data.type !== 'pl.tengo-template.v2') {
|
|
10
|
-
throw new Error('malformed template');
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
return data;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function serializeTemplate(data: TemplateData): Uint8Array {
|
|
17
|
-
return gzipSync(templateArchiveEncoder.encode(canonicalize(data)), { chunkSize: 256 * 1024, level: 9 });
|
|
18
|
-
}
|
|
19
|
-
|
|
20
1
|
export interface TemplateLibData {
|
|
21
2
|
/** i.e. @milaboratory/some-package:lib1 */
|
|
22
3
|
name: string;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export interface TemplateLibDataV3 {
|
|
2
|
+
/** i.e. @milaboratory/some-package:lib1 */
|
|
3
|
+
name: string;
|
|
4
|
+
/** i.e. 1.2.3 */
|
|
5
|
+
version: string;
|
|
6
|
+
/** hash of the source code */
|
|
7
|
+
sourceHash: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface TemplateSoftwareDataV3 {
|
|
11
|
+
/** i.e. @milaboratory/mixcr:main */
|
|
12
|
+
name: string;
|
|
13
|
+
/** i.e. 4.2.3 */
|
|
14
|
+
version: string;
|
|
15
|
+
/** hash of the source code */
|
|
16
|
+
sourceHash: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface TemplateAssetDataV3 {
|
|
20
|
+
/** i.e. @milaboratory/mixcr:main */
|
|
21
|
+
name: string;
|
|
22
|
+
/** i.e. 4.2.3 */
|
|
23
|
+
version: string;
|
|
24
|
+
/** hash of the full contents of asset dependency description */
|
|
25
|
+
sourceHash: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface TemplateDataV3 {
|
|
29
|
+
/** i.e. @milaboratory/some-package:template */
|
|
30
|
+
name: string;
|
|
31
|
+
/** i.e. 1.2.3 */
|
|
32
|
+
version: string;
|
|
33
|
+
|
|
34
|
+
/** Hash of the source from the `sources` field. */
|
|
35
|
+
sourceHash: string;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Custom hash token of the template for deduplication purposes. Can be set with 'hash_override' compiler option.
|
|
39
|
+
* Dangerous! Remember: great power comes with great responsibility.
|
|
40
|
+
*/
|
|
41
|
+
hashOverride?: string;
|
|
42
|
+
|
|
43
|
+
/** i.e. @milaboratory/some-package:some-lib -> the library source code */
|
|
44
|
+
libs: Record<string, TemplateLibDataV3>;
|
|
45
|
+
/** i.e. @milaboratory/some-package:some-template -> the nested template source code */
|
|
46
|
+
templates: Record<string, TemplateDataV3>;
|
|
47
|
+
/** i.e. @milaboratory/mixcr:main -> the software metadata */
|
|
48
|
+
software: Record<string, TemplateSoftwareDataV3>;
|
|
49
|
+
/** i.e. @milaboratory/genome:human -> the asset metadata */
|
|
50
|
+
assets: Record<string, TemplateAssetDataV3>;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface CompiledTemplateV3 {
|
|
54
|
+
/** Discriminator for future use */
|
|
55
|
+
type: 'pl.tengo-template.v3';
|
|
56
|
+
|
|
57
|
+
/** Hashes of all artifacts to sources itself. */
|
|
58
|
+
hashToSource: Record<string, string>;
|
|
59
|
+
|
|
60
|
+
template: TemplateDataV3;
|
|
61
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AnyFieldRef, AnyResourceRef } from '@milaboratories/pl-client';
|
|
2
2
|
import { field, resourceType } from '@milaboratories/pl-client';
|
|
3
3
|
import type * as infoV2 from './template_data_v2';
|
|
4
|
-
|
|
4
|
+
import type * as infoV3 from './template_data_v3';
|
|
5
5
|
export namespace PlTemplateLibV1 {
|
|
6
6
|
export const type = resourceType('TengoLib', '1');
|
|
7
7
|
|
|
@@ -27,6 +27,16 @@ export namespace PlTemplateLibV1 {
|
|
|
27
27
|
},
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
|
+
|
|
31
|
+
export function fromV3Data(info: infoV3.TemplateLibDataV3, sourceCode: string): ResourceStructure {
|
|
32
|
+
return {
|
|
33
|
+
data: {
|
|
34
|
+
Name: info.name,
|
|
35
|
+
Version: info.version,
|
|
36
|
+
Code: Buffer.from(sourceCode, 'utf8').toString('base64'),
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
30
40
|
}
|
|
31
41
|
|
|
32
42
|
export namespace PlTemplateSoftwareV1 {
|
|
@@ -57,6 +67,16 @@ export namespace PlTemplateSoftwareV1 {
|
|
|
57
67
|
},
|
|
58
68
|
};
|
|
59
69
|
}
|
|
70
|
+
|
|
71
|
+
export function fromV3Data(info: infoV3.TemplateSoftwareDataV3, sourceCode: string): ResourceStructure {
|
|
72
|
+
return {
|
|
73
|
+
data: sourceCode,
|
|
74
|
+
name: {
|
|
75
|
+
Name: info.name,
|
|
76
|
+
Version: info.version,
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
60
80
|
}
|
|
61
81
|
|
|
62
82
|
export namespace PlTemplateV1 {
|
|
@@ -98,6 +118,16 @@ export namespace PlTemplateV1 {
|
|
|
98
118
|
},
|
|
99
119
|
};
|
|
100
120
|
}
|
|
121
|
+
|
|
122
|
+
export function fromV3Data(info: infoV3.TemplateDataV3, sourceCode: string): ResourceStructure {
|
|
123
|
+
return {
|
|
124
|
+
data: {
|
|
125
|
+
Name: info.name,
|
|
126
|
+
Version: info.version,
|
|
127
|
+
Code: Buffer.from(sourceCode, 'utf8').toString('base64'),
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
}
|
|
101
131
|
}
|
|
102
132
|
|
|
103
133
|
export namespace PlTemplateOverrideV1 {
|
|
@@ -126,4 +156,16 @@ export namespace PlTemplateOverrideV1 {
|
|
|
126
156
|
},
|
|
127
157
|
};
|
|
128
158
|
}
|
|
159
|
+
|
|
160
|
+
export function fromV3Data(info: infoV3.TemplateDataV3): ResourceStructure {
|
|
161
|
+
if (!info.hashOverride) {
|
|
162
|
+
throw new Error(`template tree rendering error: template has no hash override, cannot generate PlTemplateOverrideV1.ResourceStructure from template data`);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return {
|
|
166
|
+
data: {
|
|
167
|
+
OverrideUUID: info.hashOverride,
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
}
|
|
129
171
|
}
|