tfts 0.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.
Files changed (187) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +171 -0
  3. package/dist/bin/tfts.d.ts +3 -0
  4. package/dist/bin/tfts.d.ts.map +1 -0
  5. package/dist/bin/tfts.js +5 -0
  6. package/dist/bin/tfts.js.map +1 -0
  7. package/dist/src/cli/config.d.ts +43 -0
  8. package/dist/src/cli/config.d.ts.map +1 -0
  9. package/dist/src/cli/config.js +63 -0
  10. package/dist/src/cli/config.js.map +1 -0
  11. package/dist/src/cli/diff.d.ts +25 -0
  12. package/dist/src/cli/diff.d.ts.map +1 -0
  13. package/dist/src/cli/diff.js +105 -0
  14. package/dist/src/cli/diff.js.map +1 -0
  15. package/dist/src/cli/get.d.ts +24 -0
  16. package/dist/src/cli/get.d.ts.map +1 -0
  17. package/dist/src/cli/get.js +41 -0
  18. package/dist/src/cli/get.js.map +1 -0
  19. package/dist/src/cli/index.d.ts +2 -0
  20. package/dist/src/cli/index.d.ts.map +1 -0
  21. package/dist/src/cli/index.js +157 -0
  22. package/dist/src/cli/index.js.map +1 -0
  23. package/dist/src/cli/synth.d.ts +32 -0
  24. package/dist/src/cli/synth.d.ts.map +1 -0
  25. package/dist/src/cli/synth.js +52 -0
  26. package/dist/src/cli/synth.js.map +1 -0
  27. package/dist/src/codegen/__tests__/generator.spec.d.ts +2 -0
  28. package/dist/src/codegen/__tests__/generator.spec.d.ts.map +1 -0
  29. package/dist/src/codegen/__tests__/generator.spec.js +22 -0
  30. package/dist/src/codegen/__tests__/generator.spec.js.map +1 -0
  31. package/dist/src/codegen/generator.d.ts +7 -0
  32. package/dist/src/codegen/generator.d.ts.map +1 -0
  33. package/dist/src/codegen/generator.js +160 -0
  34. package/dist/src/codegen/generator.js.map +1 -0
  35. package/dist/src/codegen/schema.d.ts +46 -0
  36. package/dist/src/codegen/schema.d.ts.map +1 -0
  37. package/dist/src/codegen/schema.js +141 -0
  38. package/dist/src/codegen/schema.js.map +1 -0
  39. package/dist/src/codegen/templates.d.ts +14 -0
  40. package/dist/src/codegen/templates.d.ts.map +1 -0
  41. package/dist/src/codegen/templates.js +74 -0
  42. package/dist/src/codegen/templates.js.map +1 -0
  43. package/dist/src/core/backend.d.ts +5 -0
  44. package/dist/src/core/backend.d.ts.map +1 -0
  45. package/dist/src/core/backend.js +2 -0
  46. package/dist/src/core/backend.js.map +1 -0
  47. package/dist/src/core/construct.d.ts +42 -0
  48. package/dist/src/core/construct.d.ts.map +1 -0
  49. package/dist/src/core/construct.js +2 -0
  50. package/dist/src/core/construct.js.map +1 -0
  51. package/dist/src/core/datasource.d.ts +8 -0
  52. package/dist/src/core/datasource.d.ts.map +1 -0
  53. package/dist/src/core/datasource.js +2 -0
  54. package/dist/src/core/datasource.js.map +1 -0
  55. package/dist/src/core/errors.d.ts +29 -0
  56. package/dist/src/core/errors.d.ts.map +1 -0
  57. package/dist/src/core/errors.js +2 -0
  58. package/dist/src/core/errors.js.map +1 -0
  59. package/dist/src/core/local.d.ts +4 -0
  60. package/dist/src/core/local.d.ts.map +1 -0
  61. package/dist/src/core/local.js +2 -0
  62. package/dist/src/core/local.js.map +1 -0
  63. package/dist/src/core/logical-id.d.ts +3 -0
  64. package/dist/src/core/logical-id.d.ts.map +1 -0
  65. package/dist/src/core/logical-id.js +48 -0
  66. package/dist/src/core/logical-id.js.map +1 -0
  67. package/dist/src/core/output.d.ts +8 -0
  68. package/dist/src/core/output.d.ts.map +1 -0
  69. package/dist/src/core/output.js +2 -0
  70. package/dist/src/core/output.js.map +1 -0
  71. package/dist/src/core/provider.d.ts +7 -0
  72. package/dist/src/core/provider.d.ts.map +1 -0
  73. package/dist/src/core/provider.js +2 -0
  74. package/dist/src/core/provider.js.map +1 -0
  75. package/dist/src/core/resource.d.ts +30 -0
  76. package/dist/src/core/resource.d.ts.map +1 -0
  77. package/dist/src/core/resource.js +2 -0
  78. package/dist/src/core/resource.js.map +1 -0
  79. package/dist/src/core/synthesize.d.ts +78 -0
  80. package/dist/src/core/synthesize.d.ts.map +1 -0
  81. package/dist/src/core/synthesize.js +293 -0
  82. package/dist/src/core/synthesize.js.map +1 -0
  83. package/dist/src/core/synthesize.spec.d.ts +2 -0
  84. package/dist/src/core/synthesize.spec.d.ts.map +1 -0
  85. package/dist/src/core/synthesize.spec.js +506 -0
  86. package/dist/src/core/synthesize.spec.js.map +1 -0
  87. package/dist/src/core/terraform-json.d.ts +36 -0
  88. package/dist/src/core/terraform-json.d.ts.map +1 -0
  89. package/dist/src/core/terraform-json.js +2 -0
  90. package/dist/src/core/terraform-json.js.map +1 -0
  91. package/dist/src/core/tokens.d.ts +55 -0
  92. package/dist/src/core/tokens.d.ts.map +1 -0
  93. package/dist/src/core/tokens.js +98 -0
  94. package/dist/src/core/tokens.js.map +1 -0
  95. package/dist/src/core/tokens.spec.d.ts +2 -0
  96. package/dist/src/core/tokens.spec.d.ts.map +1 -0
  97. package/dist/src/core/tokens.spec.js +119 -0
  98. package/dist/src/core/tokens.spec.js.map +1 -0
  99. package/dist/src/core/tree.d.ts +6 -0
  100. package/dist/src/core/tree.d.ts.map +1 -0
  101. package/dist/src/core/tree.js +52 -0
  102. package/dist/src/core/tree.js.map +1 -0
  103. package/dist/src/core/tree.spec.d.ts +2 -0
  104. package/dist/src/core/tree.spec.d.ts.map +1 -0
  105. package/dist/src/core/tree.spec.js +138 -0
  106. package/dist/src/core/tree.spec.js.map +1 -0
  107. package/dist/src/core/validate.d.ts +5 -0
  108. package/dist/src/core/validate.d.ts.map +1 -0
  109. package/dist/src/core/validate.js +94 -0
  110. package/dist/src/core/validate.js.map +1 -0
  111. package/dist/src/core/validate.spec.d.ts +2 -0
  112. package/dist/src/core/validate.spec.d.ts.map +1 -0
  113. package/dist/src/core/validate.spec.js +69 -0
  114. package/dist/src/core/validate.spec.js.map +1 -0
  115. package/dist/src/core/variable.d.ts +14 -0
  116. package/dist/src/core/variable.d.ts.map +1 -0
  117. package/dist/src/core/variable.js +2 -0
  118. package/dist/src/core/variable.js.map +1 -0
  119. package/dist/src/facade/app.d.ts +23 -0
  120. package/dist/src/facade/app.d.ts.map +1 -0
  121. package/dist/src/facade/app.js +55 -0
  122. package/dist/src/facade/app.js.map +1 -0
  123. package/dist/src/facade/backends/backend.d.ts +7 -0
  124. package/dist/src/facade/backends/backend.d.ts.map +1 -0
  125. package/dist/src/facade/backends/backend.js +15 -0
  126. package/dist/src/facade/backends/backend.js.map +1 -0
  127. package/dist/src/facade/backends/gcs.d.ts +18 -0
  128. package/dist/src/facade/backends/gcs.d.ts.map +1 -0
  129. package/dist/src/facade/backends/gcs.js +28 -0
  130. package/dist/src/facade/backends/gcs.js.map +1 -0
  131. package/dist/src/facade/backends/index.d.ts +6 -0
  132. package/dist/src/facade/backends/index.d.ts.map +1 -0
  133. package/dist/src/facade/backends/index.js +6 -0
  134. package/dist/src/facade/backends/index.js.map +1 -0
  135. package/dist/src/facade/backends/local.d.ts +12 -0
  136. package/dist/src/facade/backends/local.d.ts.map +1 -0
  137. package/dist/src/facade/backends/local.js +16 -0
  138. package/dist/src/facade/backends/local.js.map +1 -0
  139. package/dist/src/facade/backends/remote.d.ts +22 -0
  140. package/dist/src/facade/backends/remote.d.ts.map +1 -0
  141. package/dist/src/facade/backends/remote.js +23 -0
  142. package/dist/src/facade/backends/remote.js.map +1 -0
  143. package/dist/src/facade/backends/s3.d.ts +24 -0
  144. package/dist/src/facade/backends/s3.d.ts.map +1 -0
  145. package/dist/src/facade/backends/s3.js +39 -0
  146. package/dist/src/facade/backends/s3.js.map +1 -0
  147. package/dist/src/facade/construct.d.ts +9 -0
  148. package/dist/src/facade/construct.d.ts.map +1 -0
  149. package/dist/src/facade/construct.js +32 -0
  150. package/dist/src/facade/construct.js.map +1 -0
  151. package/dist/src/facade/datasource.d.ts +20 -0
  152. package/dist/src/facade/datasource.d.ts.map +1 -0
  153. package/dist/src/facade/datasource.js +33 -0
  154. package/dist/src/facade/datasource.js.map +1 -0
  155. package/dist/src/facade/facade.spec.d.ts +2 -0
  156. package/dist/src/facade/facade.spec.d.ts.map +1 -0
  157. package/dist/src/facade/facade.spec.js +434 -0
  158. package/dist/src/facade/facade.spec.js.map +1 -0
  159. package/dist/src/facade/local.d.ts +15 -0
  160. package/dist/src/facade/local.d.ts.map +1 -0
  161. package/dist/src/facade/local.js +27 -0
  162. package/dist/src/facade/local.js.map +1 -0
  163. package/dist/src/facade/output.d.ts +18 -0
  164. package/dist/src/facade/output.d.ts.map +1 -0
  165. package/dist/src/facade/output.js +29 -0
  166. package/dist/src/facade/output.js.map +1 -0
  167. package/dist/src/facade/provider.d.ts +14 -0
  168. package/dist/src/facade/provider.d.ts.map +1 -0
  169. package/dist/src/facade/provider.js +25 -0
  170. package/dist/src/facade/provider.js.map +1 -0
  171. package/dist/src/facade/resource.d.ts +32 -0
  172. package/dist/src/facade/resource.d.ts.map +1 -0
  173. package/dist/src/facade/resource.js +49 -0
  174. package/dist/src/facade/resource.js.map +1 -0
  175. package/dist/src/facade/stack.d.ts +12 -0
  176. package/dist/src/facade/stack.d.ts.map +1 -0
  177. package/dist/src/facade/stack.js +26 -0
  178. package/dist/src/facade/stack.js.map +1 -0
  179. package/dist/src/facade/variable.d.ts +27 -0
  180. package/dist/src/facade/variable.d.ts.map +1 -0
  181. package/dist/src/facade/variable.js +45 -0
  182. package/dist/src/facade/variable.js.map +1 -0
  183. package/dist/src/index.d.ts +34 -0
  184. package/dist/src/index.d.ts.map +1 -0
  185. package/dist/src/index.js +22 -0
  186. package/dist/src/index.js.map +1 -0
  187. package/package.json +62 -0
@@ -0,0 +1,141 @@
1
+ import { ok, err } from "neverthrow";
2
+ import { mkdtemp, rm } from "node:fs/promises";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { z } from "zod";
6
+ const SchemaTypeSchema = z.lazy(() => z.union([
7
+ z.literal("string"),
8
+ z.literal("number"),
9
+ z.literal("bool"),
10
+ z.literal("dynamic"),
11
+ z.tuple([z.literal("list"), SchemaTypeSchema]),
12
+ z.tuple([z.literal("set"), SchemaTypeSchema]),
13
+ z.tuple([z.literal("map"), SchemaTypeSchema]),
14
+ z.tuple([z.literal("object"), z.record(z.string(), SchemaTypeSchema)]),
15
+ z.tuple([z.literal("tuple"), z.array(SchemaTypeSchema)]),
16
+ ]));
17
+ const AttributeSchemaSchema = z.object({
18
+ type: SchemaTypeSchema,
19
+ description: z.string().optional(),
20
+ description_kind: z.enum(["plain", "markdown"]).optional(),
21
+ required: z.boolean().optional(),
22
+ optional: z.boolean().optional(),
23
+ computed: z.boolean().optional(),
24
+ sensitive: z.boolean().optional(),
25
+ deprecated: z.boolean().optional(),
26
+ });
27
+ const BlockTypeSchemaSchema = z.lazy(() => z.object({
28
+ nesting_mode: z.enum(["single", "list", "set", "map"]),
29
+ block: SchemaBlockSchema,
30
+ min_items: z.number().optional(),
31
+ max_items: z.number().optional(),
32
+ }));
33
+ const SchemaBlockSchema = z.lazy(() => z.object({
34
+ attributes: z.record(z.string(), AttributeSchemaSchema).optional(),
35
+ block_types: z.record(z.string(), BlockTypeSchemaSchema).optional(),
36
+ description: z.string().optional(),
37
+ description_kind: z.enum(["plain", "markdown"]).optional(),
38
+ deprecated: z.boolean().optional(),
39
+ }));
40
+ const ResourceSchemaSchema = z.object({
41
+ version: z.number(),
42
+ block: SchemaBlockSchema,
43
+ });
44
+ const ProviderSchemaEntrySchema = z.object({
45
+ provider: SchemaBlockSchema,
46
+ resource_schemas: z.record(z.string(), ResourceSchemaSchema),
47
+ data_source_schemas: z.record(z.string(), ResourceSchemaSchema),
48
+ });
49
+ const ProviderSchemaSchema = z.object({
50
+ format_version: z.string(),
51
+ provider_schemas: z.record(z.string(), ProviderSchemaEntrySchema),
52
+ });
53
+ export const parseProviderSchema = (data) => {
54
+ const result = ProviderSchemaSchema.safeParse(data);
55
+ if (!result.success) {
56
+ return err({
57
+ kind: "parse",
58
+ message: result.error.message,
59
+ });
60
+ }
61
+ return ok(result.data);
62
+ };
63
+ const withTempDir = async (prefix, fn) => {
64
+ const dir = await mkdtemp(join(tmpdir(), `${prefix}-`));
65
+ try {
66
+ return await fn(dir);
67
+ }
68
+ finally {
69
+ await rm(dir, { recursive: true, force: true });
70
+ }
71
+ };
72
+ export const fetchProviderSchema = async (source, version) => {
73
+ const parts = source.split("/");
74
+ const name = parts[parts.length - 1] ?? source;
75
+ return withTempDir("tfts-schema", async (dir) => {
76
+ const config = {
77
+ terraform: {
78
+ required_providers: {
79
+ [name]: {
80
+ source,
81
+ ...(version !== undefined ? { version } : {}),
82
+ },
83
+ },
84
+ },
85
+ };
86
+ await Bun.write(join(dir, "main.tf.json"), JSON.stringify(config));
87
+ const initResult = await Bun.$ `terraform -chdir=${dir} init`.quiet();
88
+ if (initResult.exitCode !== 0) {
89
+ return err({
90
+ kind: "init",
91
+ message: `terraform init failed: ${initResult.stderr.toString()}`,
92
+ });
93
+ }
94
+ const schemaResult = await Bun.$ `terraform -chdir=${dir} providers schema -json`.quiet();
95
+ if (schemaResult.exitCode !== 0) {
96
+ return err({
97
+ kind: "schema",
98
+ message: `terraform providers schema failed: ${schemaResult.stderr.toString()}`,
99
+ });
100
+ }
101
+ const parsed = JSON.parse(schemaResult.stdout.toString());
102
+ return parseProviderSchema(parsed);
103
+ });
104
+ };
105
+ export const parseSchemaType = (type) => {
106
+ if (typeof type === "string") {
107
+ switch (type) {
108
+ case "string":
109
+ return "TfString";
110
+ case "number":
111
+ return "TfNumber";
112
+ case "bool":
113
+ return "TfBoolean";
114
+ case "dynamic":
115
+ return "unknown";
116
+ }
117
+ }
118
+ const [kind, inner] = type;
119
+ switch (kind) {
120
+ case "list":
121
+ case "set":
122
+ if (inner === "string")
123
+ return "TfStringList";
124
+ if (inner === "number")
125
+ return "TfNumberList";
126
+ return `readonly ${parseSchemaType(inner)}[]`;
127
+ case "map":
128
+ if (inner === "string")
129
+ return "TfStringMap";
130
+ return `Readonly<Record<string, ${parseSchemaType(inner)}>>`;
131
+ case "object": {
132
+ const props = Object.entries(inner)
133
+ .map(([k, v]) => `readonly ${k}: ${parseSchemaType(v)}`)
134
+ .join("; ");
135
+ return `{ ${props} }`;
136
+ }
137
+ case "tuple":
138
+ return `readonly [${inner.map(parseSchemaType).join(", ")}]`;
139
+ }
140
+ };
141
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/codegen/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type PropMapping = {
2
+ readonly tfName: string;
3
+ readonly tsName: string;
4
+ };
5
+ export type AttributeGetter = {
6
+ readonly tfName: string;
7
+ readonly tsName: string;
8
+ };
9
+ export declare const resourceTemplate: (className: string, terraformType: string, props: readonly PropMapping[], getters?: readonly AttributeGetter[]) => string;
10
+ export declare const providerTemplate: (className: string, source: string, props: readonly PropMapping[]) => string;
11
+ export declare const dataSourceTemplate: (className: string, terraformType: string, props: readonly PropMapping[], getters?: readonly AttributeGetter[]) => string;
12
+ export declare const configInterfaceTemplate: (name: string, lines: readonly string[], baseType?: string) => string;
13
+ export declare const indexTemplate: (resources: readonly string[], dataSources: readonly string[]) => string;
14
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/codegen/templates.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,WAAW,MAAM,EACjB,eAAe,MAAM,EACrB,OAAO,SAAS,WAAW,EAAE,EAC7B,UAAS,SAAS,eAAe,EAAO,KACvC,MAoBF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,WAAW,MAAM,EACjB,QAAQ,MAAM,EACd,OAAO,SAAS,WAAW,EAAE,KAC5B,MAUF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,WAAW,MAAM,EACjB,eAAe,MAAM,EACrB,OAAO,SAAS,WAAW,EAAE,EAC7B,UAAS,SAAS,eAAe,EAAO,KACvC,MAoBF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,MAAM,MAAM,EACZ,OAAO,SAAS,MAAM,EAAE,EACxB,WAAW,MAAM,KAChB,MAUF,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,WAAW,SAAS,MAAM,EAAE,EAC5B,aAAa,SAAS,MAAM,EAAE,KAC7B,MAYF,CAAC"}
@@ -0,0 +1,74 @@
1
+ export const resourceTemplate = (className, terraformType, props, getters = []) => {
2
+ const attrsObject = props.map((p) => ` ${p.tfName}: config.${p.tsName},`).join("\n");
3
+ const getterMethods = getters
4
+ .map((g) => {
5
+ return ` get ${g.tsName}(): TokenString {
6
+ return this.getStringAttribute("${g.tfName}");
7
+ }`;
8
+ })
9
+ .join("\n\n");
10
+ const gettersSection = getterMethods.length > 0 ? `\n\n${getterMethods}` : "";
11
+ return `export class ${className} extends TerraformResource {
12
+ constructor(scope: TerraformStack, id: string, config: ${className}Config) {
13
+ super(scope, id, "${terraformType}", {
14
+ ${attrsObject}
15
+ }, config);
16
+ }${gettersSection}
17
+ }`;
18
+ };
19
+ export const providerTemplate = (className, source, props) => {
20
+ const attrsObject = props.map((p) => ` ${p.tfName}: config.${p.tsName},`).join("\n");
21
+ return `export class ${className}Provider extends TerraformProvider {
22
+ constructor(scope: TerraformStack, id: string, config: ${className}Config = {}) {
23
+ super(scope, id, "${source}", {
24
+ ${attrsObject}
25
+ }, config);
26
+ }
27
+ }`;
28
+ };
29
+ export const dataSourceTemplate = (className, terraformType, props, getters = []) => {
30
+ const attrsObject = props.map((p) => ` ${p.tfName}: config.${p.tsName},`).join("\n");
31
+ const getterMethods = getters
32
+ .map((g) => {
33
+ return ` get ${g.tsName}(): TokenString {
34
+ return this.getStringAttribute("${g.tfName}");
35
+ }`;
36
+ })
37
+ .join("\n\n");
38
+ const gettersSection = getterMethods.length > 0 ? `\n\n${getterMethods}` : "";
39
+ return `export class ${className} extends TerraformDataSource {
40
+ constructor(scope: TerraformStack, id: string, config: ${className}Config) {
41
+ super(scope, id, "${terraformType}", {
42
+ ${attrsObject}
43
+ }, config);
44
+ }${gettersSection}
45
+ }`;
46
+ };
47
+ export const configInterfaceTemplate = (name, lines, baseType) => {
48
+ const extendsClause = baseType !== undefined ? ` & ${baseType}` : "";
49
+ if (lines.length === 0) {
50
+ return baseType !== undefined
51
+ ? `export type ${name} = ${baseType};`
52
+ : `export type ${name} = Record<string, never>;`;
53
+ }
54
+ return `export type ${name} = {
55
+ ${lines.join("\n")}
56
+ }${extendsClause};`;
57
+ };
58
+ export const indexTemplate = (resources, dataSources) => {
59
+ const exports = [];
60
+ for (const resource of resources) {
61
+ exports.push(`export { ${resource} } from "./${toFileName(resource)}.js";`);
62
+ }
63
+ for (const dataSource of dataSources) {
64
+ exports.push(`export { ${dataSource} } from "./${toFileName(dataSource)}.js";`);
65
+ }
66
+ return exports.join("\n");
67
+ };
68
+ const toFileName = (className) => {
69
+ return className
70
+ .replace(/([A-Z])/g, "-$1")
71
+ .toLowerCase()
72
+ .replace(/^-/, "");
73
+ };
74
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/codegen/templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export type BackendDef = {
2
+ readonly type: string;
3
+ readonly config: Readonly<Record<string, unknown>>;
4
+ };
5
+ //# sourceMappingURL=backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../src/core/backend.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACpD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../../src/core/backend.ts"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ import type { BackendDef } from "./backend.js";
2
+ import type { DataSourceDef } from "./datasource.js";
3
+ import type { LocalDef } from "./local.js";
4
+ import type { OutputDef } from "./output.js";
5
+ import type { ProviderDef } from "./provider.js";
6
+ import type { ResourceDef } from "./resource.js";
7
+ import type { VariableDef } from "./variable.js";
8
+ export type ConstructNode = {
9
+ readonly id: string;
10
+ readonly path: readonly string[];
11
+ readonly children: readonly ConstructNode[];
12
+ readonly metadata: ConstructMetadata;
13
+ };
14
+ export type ConstructMetadata = {
15
+ readonly kind: "app";
16
+ readonly outdir: string;
17
+ } | {
18
+ readonly kind: "stack";
19
+ readonly stackName: string;
20
+ } | {
21
+ readonly kind: "resource";
22
+ readonly resource: ResourceDef;
23
+ } | {
24
+ readonly kind: "provider";
25
+ readonly provider: ProviderDef;
26
+ } | {
27
+ readonly kind: "datasource";
28
+ readonly datasource: DataSourceDef;
29
+ } | {
30
+ readonly kind: "variable";
31
+ readonly variable: VariableDef;
32
+ } | {
33
+ readonly kind: "output";
34
+ readonly output: OutputDef;
35
+ } | {
36
+ readonly kind: "backend";
37
+ readonly backend: BackendDef;
38
+ } | {
39
+ readonly kind: "local";
40
+ readonly local: LocalDef;
41
+ };
42
+ //# sourceMappingURL=construct.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"construct.d.ts","sourceRoot":"","sources":["../../../src/core/construct.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,GAC7D;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,GAC7D;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAA;CAAE,GACnE;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,GAC7D;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GACvD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=construct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"construct.js","sourceRoot":"","sources":["../../../src/core/construct.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { Token } from "./tokens.js";
2
+ export type DataSourceDef = {
3
+ readonly terraformResourceType: string;
4
+ readonly provider?: string;
5
+ readonly dependsOn?: readonly Token[];
6
+ readonly config: Readonly<Record<string, unknown>>;
7
+ };
8
+ //# sourceMappingURL=datasource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../../../src/core/datasource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACpD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=datasource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasource.js","sourceRoot":"","sources":["../../../src/core/datasource.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ export type TftsError = {
2
+ readonly kind: "validation";
3
+ readonly errors: readonly ValidationError[];
4
+ } | {
5
+ readonly kind: "synthesis";
6
+ readonly message: string;
7
+ readonly path: readonly string[];
8
+ } | {
9
+ readonly kind: "circular_dependency";
10
+ readonly cycle: readonly string[];
11
+ } | {
12
+ readonly kind: "config";
13
+ readonly message: string;
14
+ } | {
15
+ readonly kind: "codegen";
16
+ readonly message: string;
17
+ readonly provider: string;
18
+ } | {
19
+ readonly kind: "io";
20
+ readonly message: string;
21
+ readonly path: string;
22
+ };
23
+ export type ValidationError = {
24
+ readonly path: readonly string[];
25
+ readonly message: string;
26
+ readonly code: ValidationErrorCode;
27
+ };
28
+ export type ValidationErrorCode = "MISSING_REQUIRED_FIELD" | "INVALID_FIELD_TYPE" | "INVALID_REFERENCE" | "DUPLICATE_ID" | "INVALID_LIFECYCLE" | "INVALID_PROVIDER" | "CIRCULAR_DEPENDENCY" | "UNKNOWN";
29
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE,GAC5E;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC1F;IAAE,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC3E;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACjF;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC3B,wBAAwB,GACxB,oBAAoB,GACpB,mBAAmB,GACnB,cAAc,GACd,mBAAmB,GACnB,kBAAkB,GAClB,qBAAqB,GACrB,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export type LocalDef = {
2
+ readonly expression: unknown;
3
+ };
4
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/core/local.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/core/local.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export declare const generateLogicalId: (path: readonly string[]) => string;
2
+ export declare const generateFqn: (resourceType: string, logicalId: string) => string;
3
+ //# sourceMappingURL=logical-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logical-id.d.ts","sourceRoot":"","sources":["../../../src/core/logical-id.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,iBAAiB,GAAI,MAAM,SAAS,MAAM,EAAE,KAAG,MA0B3D,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,cAAc,MAAM,EAAE,WAAW,MAAM,KAAG,MACtC,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { createHash } from "crypto";
2
+ const HIDDEN_ID = "Default";
3
+ const HIDDEN_FROM_HUMAN_ID = "Resource";
4
+ const PATH_SEP = "/";
5
+ const UNIQUE_SEP = "_";
6
+ const HASH_LEN = 8;
7
+ const MAX_HUMAN_LEN = 240;
8
+ const MAX_ID_LEN = 255;
9
+ const removeNonAlphanumeric = (s) => s.replace(/[^A-Za-z0-9_-]/g, "");
10
+ const pathHash = (path) => {
11
+ const md5 = createHash("md5").update(path.join(PATH_SEP)).digest("hex");
12
+ return md5.slice(0, HASH_LEN).toUpperCase();
13
+ };
14
+ const removeDupes = (path) => {
15
+ const ret = [];
16
+ for (const component of path) {
17
+ const last = ret[ret.length - 1];
18
+ if (last === undefined || !last.endsWith(component)) {
19
+ ret.push(component);
20
+ }
21
+ }
22
+ return ret;
23
+ };
24
+ export const generateLogicalId = (path) => {
25
+ const components = path.slice(1).filter((x) => x !== HIDDEN_ID);
26
+ if (components.length === 0) {
27
+ return "";
28
+ }
29
+ if (components.length === 1) {
30
+ const first = components[0];
31
+ if (first === undefined) {
32
+ return "";
33
+ }
34
+ const candidate = removeNonAlphanumeric(first);
35
+ if (candidate.length <= MAX_ID_LEN) {
36
+ return candidate;
37
+ }
38
+ }
39
+ const hash = pathHash(components);
40
+ const human = removeDupes(components)
41
+ .filter((x) => x !== HIDDEN_FROM_HUMAN_ID)
42
+ .map(removeNonAlphanumeric)
43
+ .join(UNIQUE_SEP)
44
+ .slice(0, MAX_HUMAN_LEN);
45
+ return human + UNIQUE_SEP + hash;
46
+ };
47
+ export const generateFqn = (resourceType, logicalId) => `${resourceType}.${logicalId}`;
48
+ //# sourceMappingURL=logical-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logical-id.js","sourceRoot":"","sources":["../../../src/core/logical-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,SAAS,GAAG,SAAS,CAAC;AAC5B,MAAM,oBAAoB,GAAG,UAAU,CAAC;AACxC,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB,MAAM,qBAAqB,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAEtF,MAAM,QAAQ,GAAG,CAAC,IAAuB,EAAU,EAAE;IACnD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAuB,EAAqB,EAAE;IACjE,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACpD,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAuB,EAAU,EAAE;IACnE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IAEhE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,SAAS,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;YACnC,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC;SAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,oBAAoB,CAAC;SACzC,GAAG,CAAC,qBAAqB,CAAC;SAC1B,IAAI,CAAC,UAAU,CAAC;SAChB,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IAE3B,OAAO,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,YAAoB,EAAE,SAAiB,EAAU,EAAE,CAC7E,GAAG,YAAY,IAAI,SAAS,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Token } from "./tokens.js";
2
+ export type OutputDef = {
3
+ readonly value: unknown;
4
+ readonly description?: string;
5
+ readonly sensitive?: boolean;
6
+ readonly dependsOn?: readonly Token[];
7
+ };
8
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/core/output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;CACvC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/core/output.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export type ProviderDef = {
2
+ readonly terraformProviderSource: string;
3
+ readonly version?: string;
4
+ readonly alias?: string;
5
+ readonly config: Readonly<Record<string, unknown>>;
6
+ };
7
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/core/provider.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACpD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/core/provider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ import type { Token } from "./tokens.js";
2
+ export type ResourceDef = {
3
+ readonly terraformResourceType: string;
4
+ readonly provider?: string;
5
+ readonly dependsOn?: readonly Token[];
6
+ readonly count?: number | Token;
7
+ readonly forEach?: Token;
8
+ readonly lifecycle?: LifecycleDef;
9
+ readonly provisioners?: readonly ProvisionerDef[];
10
+ readonly config: Readonly<Record<string, unknown>>;
11
+ };
12
+ export type LifecycleDef = {
13
+ readonly createBeforeDestroy?: boolean;
14
+ readonly preventDestroy?: boolean;
15
+ readonly ignoreChanges?: readonly string[] | "all";
16
+ readonly replaceTriggeredBy?: readonly Token[];
17
+ readonly precondition?: readonly ConditionDef[];
18
+ readonly postcondition?: readonly ConditionDef[];
19
+ };
20
+ export type ConditionDef = {
21
+ readonly condition: Token;
22
+ readonly errorMessage: string;
23
+ };
24
+ export type ProvisionerDef = {
25
+ readonly type: "local-exec" | "remote-exec" | "file";
26
+ readonly config: Readonly<Record<string, unknown>>;
27
+ readonly when?: "create" | "destroy";
28
+ readonly onFailure?: "continue" | "fail";
29
+ };
30
+ //# sourceMappingURL=resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../src/core/resource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,CAAC;IACnD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;IAC/C,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAChD,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,GAAG,MAAM,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CAC1C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../src/core/resource.ts"],"names":[],"mappings":""}