@subql/common-solana 0.0.0-1

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 (68) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +674 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/codegen/codegen.d.ts +4 -0
  5. package/dist/codegen/codegen.js +68 -0
  6. package/dist/codegen/codegen.js.map +1 -0
  7. package/dist/codegen/codegen.spec.d.ts +1 -0
  8. package/dist/codegen/codegen.spec.js +130 -0
  9. package/dist/codegen/codegen.spec.js.map +1 -0
  10. package/dist/codegen/idl.d.ts +11 -0
  11. package/dist/codegen/idl.js +88 -0
  12. package/dist/codegen/idl.js.map +1 -0
  13. package/dist/codegen/index.d.ts +2 -0
  14. package/dist/codegen/index.js +21 -0
  15. package/dist/codegen/index.js.map +1 -0
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.js +51 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/project/index.d.ts +7 -0
  20. package/dist/project/index.js +27 -0
  21. package/dist/project/index.js.map +1 -0
  22. package/dist/project/load.d.ts +2 -0
  23. package/dist/project/load.js +12 -0
  24. package/dist/project/load.js.map +1 -0
  25. package/dist/project/models.d.ts +81 -0
  26. package/dist/project/models.js +270 -0
  27. package/dist/project/models.js.map +1 -0
  28. package/dist/project/project.spec.d.ts +1 -0
  29. package/dist/project/project.spec.js +109 -0
  30. package/dist/project/project.spec.js.map +1 -0
  31. package/dist/project/types.d.ts +4 -0
  32. package/dist/project/types.js +5 -0
  33. package/dist/project/types.js.map +1 -0
  34. package/dist/project/utils.d.ts +9 -0
  35. package/dist/project/utils.js +30 -0
  36. package/dist/project/utils.js.map +1 -0
  37. package/dist/project/versioned/ProjectManifestVersioned.d.ts +26 -0
  38. package/dist/project/versioned/ProjectManifestVersioned.js +56 -0
  39. package/dist/project/versioned/ProjectManifestVersioned.js.map +1 -0
  40. package/dist/project/versioned/index.d.ts +2 -0
  41. package/dist/project/versioned/index.js +21 -0
  42. package/dist/project/versioned/index.js.map +1 -0
  43. package/dist/project/versioned/v1_0_0/index.d.ts +1 -0
  44. package/dist/project/versioned/v1_0_0/index.js +20 -0
  45. package/dist/project/versioned/v1_0_0/index.js.map +1 -0
  46. package/dist/project/versioned/v1_0_0/model.d.ts +52 -0
  47. package/dist/project/versioned/v1_0_0/model.js +236 -0
  48. package/dist/project/versioned/v1_0_0/model.js.map +1 -0
  49. package/package.json +40 -0
  50. package/src/codegen/codegen.spec.ts +145 -0
  51. package/src/codegen/codegen.ts +90 -0
  52. package/src/codegen/idl.ts +89 -0
  53. package/src/codegen/index.ts +5 -0
  54. package/src/index.ts +16 -0
  55. package/src/project/index.ts +11 -0
  56. package/src/project/load.ts +10 -0
  57. package/src/project/models.ts +213 -0
  58. package/src/project/project.spec.ts +123 -0
  59. package/src/project/types.ts +19 -0
  60. package/src/project/utils.ts +50 -0
  61. package/src/project/versioned/ProjectManifestVersioned.ts +71 -0
  62. package/src/project/versioned/index.ts +5 -0
  63. package/src/project/versioned/v1_0_0/index.ts +4 -0
  64. package/src/project/versioned/v1_0_0/model.ts +200 -0
  65. package/templates/idl.ts.ejs +10 -0
  66. package/test/abiTest/project.yaml +51 -0
  67. package/test/project_1.0.0.yaml +91 -0
  68. package/tsconfig.json +12 -0
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
+ // SPDX-License-Identifier: GPL-3.0
4
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
9
+ };
10
+ var __metadata = (this && this.__metadata) || function (k, v) {
11
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.CustomDataSourceBase = exports.FileReferenceImpl = exports.RuntimeDataSourceBase = exports.CustomMapping = exports.SolanaMapping = exports.CustomHandler = exports.LogHandler = exports.InstructionHandler = exports.TransactionHandler = exports.BlockHandler = exports.LogFilter = exports.InstructionFilter = exports.TransactionFilter = exports.BlockFilter = void 0;
15
+ const common_1 = require("@subql/common");
16
+ const types_solana_1 = require("@subql/types-solana");
17
+ const class_transformer_1 = require("class-transformer");
18
+ const class_validator_1 = require("class-validator");
19
+ class BlockFilter extends common_1.BlockFilterImpl {
20
+ }
21
+ exports.BlockFilter = BlockFilter;
22
+ class TransactionFilter {
23
+ signerAccountKey;
24
+ }
25
+ exports.TransactionFilter = TransactionFilter;
26
+ __decorate([
27
+ (0, class_validator_1.IsOptional)(),
28
+ (0, class_validator_1.IsString)(),
29
+ __metadata("design:type", String)
30
+ ], TransactionFilter.prototype, "signerAccountKey", void 0);
31
+ class InstructionFilter {
32
+ programId;
33
+ discriminator;
34
+ accounts;
35
+ includeFalied;
36
+ }
37
+ exports.InstructionFilter = InstructionFilter;
38
+ __decorate([
39
+ (0, class_validator_1.ValidateIf)((o) => o.discriminator !== undefined),
40
+ (0, class_validator_1.IsDefined)({ message: 'programId is required if discriminator is set' }),
41
+ (0, class_validator_1.IsString)(),
42
+ __metadata("design:type", String)
43
+ ], InstructionFilter.prototype, "programId", void 0);
44
+ __decorate([
45
+ (0, class_validator_1.IsOptional)(),
46
+ (0, class_validator_1.IsString)(),
47
+ __metadata("design:type", String)
48
+ ], InstructionFilter.prototype, "discriminator", void 0);
49
+ __decorate([
50
+ (0, class_validator_1.IsOptional)(),
51
+ (0, class_validator_1.IsArray)(),
52
+ __metadata("design:type", Array)
53
+ ], InstructionFilter.prototype, "accounts", void 0);
54
+ __decorate([
55
+ (0, class_validator_1.IsOptional)(),
56
+ (0, class_validator_1.IsBoolean)(),
57
+ __metadata("design:type", Boolean)
58
+ ], InstructionFilter.prototype, "includeFalied", void 0);
59
+ class LogFilter {
60
+ programId;
61
+ }
62
+ exports.LogFilter = LogFilter;
63
+ __decorate([
64
+ (0, class_validator_1.IsOptional)(),
65
+ (0, class_validator_1.IsString)(),
66
+ __metadata("design:type", String)
67
+ ], LogFilter.prototype, "programId", void 0);
68
+ class BlockHandler {
69
+ filter;
70
+ kind;
71
+ handler;
72
+ }
73
+ exports.BlockHandler = BlockHandler;
74
+ __decorate([
75
+ (0, class_validator_1.IsObject)(),
76
+ (0, class_validator_1.IsOptional)(),
77
+ (0, class_transformer_1.Type)(() => BlockFilter),
78
+ __metadata("design:type", BlockFilter)
79
+ ], BlockHandler.prototype, "filter", void 0);
80
+ __decorate([
81
+ (0, class_validator_1.IsEnum)(types_solana_1.SolanaHandlerKind, { groups: [types_solana_1.SolanaHandlerKind.Block] }),
82
+ __metadata("design:type", String)
83
+ ], BlockHandler.prototype, "kind", void 0);
84
+ __decorate([
85
+ (0, class_validator_1.IsString)(),
86
+ __metadata("design:type", String)
87
+ ], BlockHandler.prototype, "handler", void 0);
88
+ class TransactionHandler {
89
+ filter;
90
+ kind;
91
+ handler;
92
+ }
93
+ exports.TransactionHandler = TransactionHandler;
94
+ __decorate([
95
+ (0, class_validator_1.IsOptional)(),
96
+ (0, class_validator_1.ValidateNested)(),
97
+ (0, class_transformer_1.Type)(() => TransactionFilter),
98
+ __metadata("design:type", Object)
99
+ ], TransactionHandler.prototype, "filter", void 0);
100
+ __decorate([
101
+ (0, class_validator_1.IsEnum)(types_solana_1.SolanaHandlerKind, { groups: [types_solana_1.SolanaHandlerKind.Transaction] }),
102
+ __metadata("design:type", String)
103
+ ], TransactionHandler.prototype, "kind", void 0);
104
+ __decorate([
105
+ (0, class_validator_1.IsString)(),
106
+ __metadata("design:type", String)
107
+ ], TransactionHandler.prototype, "handler", void 0);
108
+ class InstructionHandler {
109
+ filter;
110
+ kind;
111
+ handler;
112
+ }
113
+ exports.InstructionHandler = InstructionHandler;
114
+ __decorate([
115
+ (0, class_validator_1.IsOptional)(),
116
+ (0, class_validator_1.ValidateNested)(),
117
+ (0, class_transformer_1.Type)(() => InstructionFilter),
118
+ __metadata("design:type", Object)
119
+ ], InstructionHandler.prototype, "filter", void 0);
120
+ __decorate([
121
+ (0, class_validator_1.IsEnum)(types_solana_1.SolanaHandlerKind, { groups: [types_solana_1.SolanaHandlerKind.Instruction] }),
122
+ __metadata("design:type", String)
123
+ ], InstructionHandler.prototype, "kind", void 0);
124
+ __decorate([
125
+ (0, class_validator_1.IsString)(),
126
+ __metadata("design:type", String)
127
+ ], InstructionHandler.prototype, "handler", void 0);
128
+ class LogHandler {
129
+ filter;
130
+ kind;
131
+ handler;
132
+ }
133
+ exports.LogHandler = LogHandler;
134
+ __decorate([
135
+ (0, class_validator_1.IsOptional)(),
136
+ (0, class_validator_1.ValidateNested)(),
137
+ (0, class_transformer_1.Type)(() => LogFilter),
138
+ __metadata("design:type", Object)
139
+ ], LogHandler.prototype, "filter", void 0);
140
+ __decorate([
141
+ (0, class_validator_1.IsEnum)(types_solana_1.SolanaHandlerKind, { groups: [types_solana_1.SolanaHandlerKind.Log] }),
142
+ __metadata("design:type", String)
143
+ ], LogHandler.prototype, "kind", void 0);
144
+ __decorate([
145
+ (0, class_validator_1.IsString)(),
146
+ __metadata("design:type", String)
147
+ ], LogHandler.prototype, "handler", void 0);
148
+ class CustomHandler {
149
+ kind;
150
+ handler;
151
+ filter;
152
+ }
153
+ exports.CustomHandler = CustomHandler;
154
+ __decorate([
155
+ (0, class_validator_1.IsString)(),
156
+ __metadata("design:type", String)
157
+ ], CustomHandler.prototype, "kind", void 0);
158
+ __decorate([
159
+ (0, class_validator_1.IsString)(),
160
+ __metadata("design:type", String)
161
+ ], CustomHandler.prototype, "handler", void 0);
162
+ __decorate([
163
+ (0, class_validator_1.IsObject)(),
164
+ (0, class_validator_1.IsOptional)(),
165
+ __metadata("design:type", Object)
166
+ ], CustomHandler.prototype, "filter", void 0);
167
+ class SolanaMapping {
168
+ handlers;
169
+ file;
170
+ }
171
+ exports.SolanaMapping = SolanaMapping;
172
+ __decorate([
173
+ (0, class_transformer_1.Transform)((params) => {
174
+ const handlers = params.value;
175
+ return handlers.map((handler) => {
176
+ switch (handler.kind) {
177
+ case types_solana_1.SolanaHandlerKind.Log:
178
+ return (0, class_transformer_1.plainToClass)(LogHandler, handler);
179
+ case types_solana_1.SolanaHandlerKind.Instruction:
180
+ return (0, class_transformer_1.plainToClass)(InstructionHandler, handler);
181
+ case types_solana_1.SolanaHandlerKind.Transaction:
182
+ return (0, class_transformer_1.plainToClass)(TransactionHandler, handler);
183
+ case types_solana_1.SolanaHandlerKind.Block:
184
+ return (0, class_transformer_1.plainToClass)(BlockHandler, handler);
185
+ default:
186
+ throw new Error(`handler ${handler.kind} not supported`);
187
+ }
188
+ });
189
+ }),
190
+ (0, class_validator_1.IsArray)(),
191
+ (0, class_validator_1.ValidateNested)(),
192
+ __metadata("design:type", Array)
193
+ ], SolanaMapping.prototype, "handlers", void 0);
194
+ __decorate([
195
+ (0, class_validator_1.IsString)(),
196
+ __metadata("design:type", String)
197
+ ], SolanaMapping.prototype, "file", void 0);
198
+ class CustomMapping {
199
+ handlers;
200
+ file;
201
+ }
202
+ exports.CustomMapping = CustomMapping;
203
+ __decorate([
204
+ (0, class_validator_1.IsArray)(),
205
+ (0, class_transformer_1.Type)(() => CustomHandler),
206
+ (0, class_validator_1.ValidateNested)(),
207
+ __metadata("design:type", Array)
208
+ ], CustomMapping.prototype, "handlers", void 0);
209
+ __decorate([
210
+ (0, class_validator_1.IsString)(),
211
+ __metadata("design:type", String)
212
+ ], CustomMapping.prototype, "file", void 0);
213
+ class RuntimeDataSourceBase extends common_1.BaseDataSource {
214
+ kind;
215
+ mapping;
216
+ assets;
217
+ }
218
+ exports.RuntimeDataSourceBase = RuntimeDataSourceBase;
219
+ __decorate([
220
+ (0, class_validator_1.IsEnum)(types_solana_1.SolanaDatasourceKind, {
221
+ groups: [types_solana_1.SolanaDatasourceKind.Runtime],
222
+ }),
223
+ __metadata("design:type", String)
224
+ ], RuntimeDataSourceBase.prototype, "kind", void 0);
225
+ __decorate([
226
+ (0, class_transformer_1.Type)(() => SolanaMapping),
227
+ (0, class_validator_1.ValidateNested)(),
228
+ __metadata("design:type", Object)
229
+ ], RuntimeDataSourceBase.prototype, "mapping", void 0);
230
+ __decorate([
231
+ (0, class_transformer_1.Type)(() => FileReferenceImpl),
232
+ (0, class_validator_1.ValidateNested)({ each: true }),
233
+ (0, class_validator_1.IsOptional)(),
234
+ __metadata("design:type", Map)
235
+ ], RuntimeDataSourceBase.prototype, "assets", void 0);
236
+ class FileReferenceImpl {
237
+ file;
238
+ }
239
+ exports.FileReferenceImpl = FileReferenceImpl;
240
+ __decorate([
241
+ (0, class_validator_1.IsString)(),
242
+ __metadata("design:type", String)
243
+ ], FileReferenceImpl.prototype, "file", void 0);
244
+ class CustomDataSourceBase extends common_1.BaseDataSource {
245
+ kind;
246
+ mapping;
247
+ assets;
248
+ processor;
249
+ }
250
+ exports.CustomDataSourceBase = CustomDataSourceBase;
251
+ __decorate([
252
+ (0, class_validator_1.IsString)(),
253
+ __metadata("design:type", String)
254
+ ], CustomDataSourceBase.prototype, "kind", void 0);
255
+ __decorate([
256
+ (0, class_transformer_1.Type)(() => CustomMapping),
257
+ (0, class_validator_1.ValidateNested)(),
258
+ __metadata("design:type", Object)
259
+ ], CustomDataSourceBase.prototype, "mapping", void 0);
260
+ __decorate([
261
+ (0, class_transformer_1.Type)(() => FileReferenceImpl),
262
+ (0, class_validator_1.ValidateNested)({ each: true }),
263
+ __metadata("design:type", Map)
264
+ ], CustomDataSourceBase.prototype, "assets", void 0);
265
+ __decorate([
266
+ (0, class_transformer_1.Type)(() => FileReferenceImpl),
267
+ (0, class_validator_1.IsObject)(),
268
+ __metadata("design:type", Object)
269
+ ], CustomDataSourceBase.prototype, "processor", void 0);
270
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/project/models.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport {BaseDataSource, BlockFilterImpl, forbidNonWhitelisted} from '@subql/common';\nimport {FileReference} from '@subql/types-core';\nimport {\n SolanaHandlerKind,\n SolanaDatasourceKind,\n SolanaLogFilter,\n SubqlCustomHandler,\n SubqlMapping,\n SubqlHandler,\n SubqlRuntimeHandler,\n SubqlRuntimeDatasource,\n SubqlCustomDatasource,\n SubqlBlockHandler,\n SubqlTransactionHandler,\n SolanaTransactionFilter,\n SolanaBlockFilter,\n SolanaInstructionFilter,\n SubqlInstructionHandler,\n SubqlLogHandler,\n InstructionAccountFilter,\n} from '@subql/types-solana';\nimport {plainToClass, Transform, Type} from 'class-transformer';\nimport {\n IsArray,\n IsEnum,\n IsOptional,\n IsString,\n IsObject,\n ValidateNested,\n ValidateIf,\n IsDefined,\n IsBoolean,\n} from 'class-validator';\n\nexport class BlockFilter extends BlockFilterImpl implements SolanaBlockFilter {}\n\nexport class TransactionFilter implements SolanaTransactionFilter {\n @IsOptional()\n @IsString()\n signerAccountKey?: string;\n}\n\nexport class InstructionFilter implements SolanaInstructionFilter {\n @ValidateIf((o) => o.discriminator !== undefined)\n @IsDefined({message: 'programId is required if discriminator is set'})\n @IsString()\n programId?: string;\n\n @IsOptional()\n @IsString()\n discriminator?: string;\n\n @IsOptional()\n @IsArray()\n accounts?: [\n InstructionAccountFilter,\n InstructionAccountFilter?,\n InstructionAccountFilter?,\n InstructionAccountFilter?,\n InstructionAccountFilter?,\n InstructionAccountFilter?,\n InstructionAccountFilter?,\n InstructionAccountFilter?,\n InstructionAccountFilter?,\n InstructionAccountFilter?,\n InstructionAccountFilter?,\n InstructionAccountFilter?,\n InstructionAccountFilter?,\n InstructionAccountFilter?,\n InstructionAccountFilter?,\n InstructionAccountFilter?\n ];\n\n @IsOptional()\n @IsBoolean()\n includeFalied?: boolean;\n}\n\nexport class LogFilter implements SolanaLogFilter {\n @IsOptional()\n @IsString()\n programId?: string;\n}\n\nexport class BlockHandler implements SubqlBlockHandler {\n @IsObject()\n @IsOptional()\n @Type(() => BlockFilter)\n filter?: BlockFilter;\n @IsEnum(SolanaHandlerKind, {groups: [SolanaHandlerKind.Block]})\n kind!: SolanaHandlerKind.Block;\n @IsString()\n handler!: string;\n}\n\nexport class TransactionHandler implements SubqlTransactionHandler {\n @IsOptional()\n @ValidateNested()\n @Type(() => TransactionFilter)\n filter?: SolanaTransactionFilter;\n @IsEnum(SolanaHandlerKind, {groups: [SolanaHandlerKind.Transaction]})\n kind!: SolanaHandlerKind.Transaction;\n @IsString()\n handler!: string;\n}\n\nexport class InstructionHandler implements SubqlInstructionHandler {\n @IsOptional()\n @ValidateNested()\n @Type(() => InstructionFilter)\n filter?: SolanaInstructionFilter;\n @IsEnum(SolanaHandlerKind, {groups: [SolanaHandlerKind.Instruction]})\n kind!: SolanaHandlerKind.Instruction;\n @IsString()\n handler!: string;\n}\n\nexport class LogHandler implements SubqlLogHandler {\n @IsOptional()\n @ValidateNested()\n @Type(() => LogFilter)\n filter?: SolanaLogFilter;\n @IsEnum(SolanaHandlerKind, {groups: [SolanaHandlerKind.Log]})\n kind!: SolanaHandlerKind.Log;\n @IsString()\n handler!: string;\n}\n\nexport class CustomHandler implements SubqlCustomHandler {\n @IsString()\n kind!: string;\n @IsString()\n handler!: string;\n @IsObject()\n @IsOptional()\n filter?: Record<string, unknown>;\n}\n\nexport class SolanaMapping implements SubqlMapping {\n @Transform((params) => {\n const handlers: SubqlHandler[] = params.value;\n return handlers.map((handler) => {\n switch (handler.kind) {\n case SolanaHandlerKind.Log:\n return plainToClass(LogHandler, handler);\n case SolanaHandlerKind.Instruction:\n return plainToClass(InstructionHandler, handler);\n case SolanaHandlerKind.Transaction:\n return plainToClass(TransactionHandler, handler);\n case SolanaHandlerKind.Block:\n return plainToClass(BlockHandler, handler);\n default:\n throw new Error(`handler ${(handler as any).kind} not supported`);\n }\n });\n })\n @IsArray()\n @ValidateNested()\n handlers!: SubqlHandler[];\n @IsString()\n file!: string;\n}\n\nexport class CustomMapping implements SubqlMapping<SubqlCustomHandler> {\n @IsArray()\n @Type(() => CustomHandler)\n @ValidateNested()\n handlers!: CustomHandler[];\n @IsString()\n file!: string;\n}\n\nexport class RuntimeDataSourceBase<M extends SubqlMapping<SubqlRuntimeHandler>>\n extends BaseDataSource\n implements SubqlRuntimeDatasource<M>\n{\n @IsEnum(SolanaDatasourceKind, {\n groups: [SolanaDatasourceKind.Runtime],\n })\n kind!: SolanaDatasourceKind.Runtime;\n @Type(() => SolanaMapping)\n @ValidateNested()\n mapping!: M;\n @Type(() => FileReferenceImpl)\n @ValidateNested({each: true})\n @IsOptional()\n assets?: Map<string, FileReference>;\n}\n\nexport class FileReferenceImpl implements FileReference {\n @IsString()\n file!: string;\n}\n\nexport class CustomDataSourceBase<K extends string, M extends SubqlMapping = SubqlMapping<SubqlCustomHandler>>\n extends BaseDataSource\n implements SubqlCustomDatasource<K, M>\n{\n @IsString()\n kind!: K;\n @Type(() => CustomMapping)\n @ValidateNested()\n mapping!: M;\n @Type(() => FileReferenceImpl)\n @ValidateNested({each: true})\n assets!: Map<string, FileReference>;\n @Type(() => FileReferenceImpl)\n @IsObject()\n processor!: FileReference;\n}\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
+ // SPDX-License-Identifier: GPL-3.0
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const common_1 = require("@subql/common");
11
+ const class_validator_1 = require("class-validator");
12
+ const v1_0_0_1 = require("../project/versioned/v1_0_0");
13
+ const versioned_1 = require("./versioned");
14
+ const projectsDir = path_1.default.join(__dirname, '../../test');
15
+ function loadSolanaProjectManifest(file) {
16
+ let manifestPath = file;
17
+ if (fs_1.default.existsSync(file) && fs_1.default.lstatSync(file).isDirectory()) {
18
+ const yamlFilePath = path_1.default.join(file, 'project.yaml');
19
+ const jsonFilePath = path_1.default.join(file, 'project.json');
20
+ if (fs_1.default.existsSync(yamlFilePath)) {
21
+ manifestPath = yamlFilePath;
22
+ }
23
+ else if (fs_1.default.existsSync(jsonFilePath)) {
24
+ manifestPath = jsonFilePath;
25
+ }
26
+ else {
27
+ throw new Error(`Could not find project manifest under dir ${file}`);
28
+ }
29
+ }
30
+ const doc = (0, common_1.loadFromJsonOrYaml)(manifestPath);
31
+ const projectManifest = new versioned_1.SolanaProjectManifestVersioned(doc);
32
+ projectManifest.validate();
33
+ return projectManifest;
34
+ }
35
+ describe('test solana project.yaml', () => {
36
+ it('could get solana project template name from its deployment', () => {
37
+ const manifest = loadSolanaProjectManifest(path_1.default.join(projectsDir, 'project_1.0.0.yaml'));
38
+ const deployment = manifest.toDeployment();
39
+ expect(deployment).toContain('name: Pool');
40
+ });
41
+ it('could get options in template from its deployment', () => {
42
+ const manifest = loadSolanaProjectManifest(path_1.default.join(projectsDir, 'project_1.0.0.yaml'));
43
+ const deployment = manifest.toDeployment();
44
+ expect(deployment).toContain('abi: Pool');
45
+ });
46
+ });
47
+ describe('project.yaml', () => {
48
+ it('can validate project.yaml', () => {
49
+ // TODO this should catch a specific error, the file doesn't currently exist
50
+ throw new Error('Not implemented');
51
+ expect(() => loadSolanaProjectManifest(path_1.default.join(projectsDir, 'project_falsy.yaml'))).toThrow();
52
+ expect(() => loadSolanaProjectManifest(path_1.default.join(projectsDir, 'project_falsy_array.yaml'))).toThrow();
53
+ });
54
+ it('can fail validation if version not supported', () => {
55
+ // TODO this should catch a specific error, the file doesn't currently exist
56
+ throw new Error('Not implemented');
57
+ expect(() => loadSolanaProjectManifest(path_1.default.join(projectsDir, 'project_invalid_version.yaml'))).toThrow('');
58
+ });
59
+ it('can validate a v1.0.0 project.yaml with templates', () => {
60
+ expect(() => loadSolanaProjectManifest(path_1.default.join(projectsDir, 'project_1.0.0.yaml'))).not.toThrow();
61
+ });
62
+ it('get v1.0.0 deployment mapping filter', () => {
63
+ const manifestVersioned = loadSolanaProjectManifest(path_1.default.join(projectsDir, 'project_1.0.0.yaml'));
64
+ const deployment = manifestVersioned.asV1_0_0.deployment;
65
+ const filter = deployment.dataSources[0].mapping.handlers[0].filter;
66
+ const deploymentString = manifestVersioned.toDeployment();
67
+ expect(filter).not.toBeNull();
68
+ expect(deploymentString).toContain('Transfer (address from, address to, uint256 tokenId)');
69
+ });
70
+ it('can convert genesis hash in v1.0.0 to chainId in deployment', () => {
71
+ const deployment = loadSolanaProjectManifest(path_1.default.join(projectsDir, 'project_1.0.0.yaml')).asV1_0_0.deployment;
72
+ expect(deployment.network.chainId).not.toBeNull();
73
+ console.log(deployment.network.chainId);
74
+ });
75
+ it.skip('can get chainId for deployment', () => {
76
+ const deployment = loadSolanaProjectManifest(path_1.default.join(projectsDir, 'project_1.0.0_chainId.yaml')).asV1_0_0
77
+ .deployment;
78
+ expect(deployment.network.chainId).toBe('moonbeamChainId');
79
+ });
80
+ it('can validate deployment runner versions', () => {
81
+ const deployment = new v1_0_0_1.DeploymentV1_0_0();
82
+ const nodeImp = new v1_0_0_1.SolanaRunnerNodeImpl();
83
+ const queryImp = new common_1.RunnerQueryBaseModel();
84
+ deployment.specVersion = '1.0.0';
85
+ deployment.runner = new v1_0_0_1.SolanaRunnerSpecsImpl();
86
+ nodeImp.name = '@subql/node-solana';
87
+ nodeImp.version = '*';
88
+ deployment.runner.node = nodeImp;
89
+ queryImp.name = '@subql/query';
90
+ queryImp.version = '0.213.1';
91
+ deployment.runner.query = queryImp;
92
+ const errors = (0, class_validator_1.validateSync)(deployment.runner, { whitelist: true, forbidNonWhitelisted: true });
93
+ expect(errors.length).toBe(0);
94
+ });
95
+ it('can validate a v1.0.0 project.yaml with unsupported runner node', () => {
96
+ expect(() => loadSolanaProjectManifest(path_1.default.join(projectsDir, 'project_1.0.0_bad_runner.yaml'))).toThrow();
97
+ });
98
+ //TODO, pre-release should be excluded
99
+ it.skip('can throw error with unsupported runner version', () => {
100
+ expect(() => loadSolanaProjectManifest(path_1.default.join(projectsDir, 'project_1.0.0_bad_runner_version.yaml'))).toThrow();
101
+ });
102
+ it('can validate a v1.0.0 project.yaml runner and datasource mismatches', () => {
103
+ expect(() => loadSolanaProjectManifest(path_1.default.join(projectsDir, 'project_1.0.0_runner_ds_mismatch.yaml'))).toThrow();
104
+ });
105
+ it('can fail validation if custom ds missing processor', () => {
106
+ expect(() => loadSolanaProjectManifest(path_1.default.join(projectsDir, 'project_0.2.0_invalid_custom_ds.yaml'))).toThrow();
107
+ });
108
+ });
109
+ //# sourceMappingURL=project.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.spec.js","sourceRoot":"","sources":["../../src/project/project.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport fs from 'fs';\nimport path from 'path';\nimport {loadFromJsonOrYaml, RunnerQueryBaseModel} from '@subql/common';\nimport {validateSync} from 'class-validator';\nimport {DeploymentV1_0_0, SolanaRunnerNodeImpl, SolanaRunnerSpecsImpl} from '../project/versioned/v1_0_0';\nimport {SolanaProjectManifestVersioned, VersionedProjectManifest} from './versioned';\n\nconst projectsDir = path.join(__dirname, '../../test');\n\nfunction loadSolanaProjectManifest(file: string): SolanaProjectManifestVersioned {\n let manifestPath = file;\n if (fs.existsSync(file) && fs.lstatSync(file).isDirectory()) {\n const yamlFilePath = path.join(file, 'project.yaml');\n const jsonFilePath = path.join(file, 'project.json');\n if (fs.existsSync(yamlFilePath)) {\n manifestPath = yamlFilePath;\n } else if (fs.existsSync(jsonFilePath)) {\n manifestPath = jsonFilePath;\n } else {\n throw new Error(`Could not find project manifest under dir ${file}`);\n }\n }\n\n const doc = loadFromJsonOrYaml(manifestPath);\n const projectManifest = new SolanaProjectManifestVersioned(doc as VersionedProjectManifest);\n projectManifest.validate();\n return projectManifest;\n}\n\ndescribe('test solana project.yaml', () => {\n it('could get solana project template name from its deployment', () => {\n const manifest = loadSolanaProjectManifest(path.join(projectsDir, 'project_1.0.0.yaml'));\n const deployment = manifest.toDeployment();\n expect(deployment).toContain('name: Pool');\n });\n\n it('could get options in template from its deployment', () => {\n const manifest = loadSolanaProjectManifest(path.join(projectsDir, 'project_1.0.0.yaml'));\n const deployment = manifest.toDeployment();\n expect(deployment).toContain('abi: Pool');\n });\n});\n\ndescribe('project.yaml', () => {\n it('can validate project.yaml', () => {\n // TODO this should catch a specific error, the file doesn't currently exist\n throw new Error('Not implemented');\n expect(() => loadSolanaProjectManifest(path.join(projectsDir, 'project_falsy.yaml'))).toThrow();\n expect(() => loadSolanaProjectManifest(path.join(projectsDir, 'project_falsy_array.yaml'))).toThrow();\n });\n\n it('can fail validation if version not supported', () => {\n // TODO this should catch a specific error, the file doesn't currently exist\n throw new Error('Not implemented');\n expect(() => loadSolanaProjectManifest(path.join(projectsDir, 'project_invalid_version.yaml'))).toThrow('');\n });\n\n it('can validate a v1.0.0 project.yaml with templates', () => {\n expect(() => loadSolanaProjectManifest(path.join(projectsDir, 'project_1.0.0.yaml'))).not.toThrow();\n });\n\n it('get v1.0.0 deployment mapping filter', () => {\n const manifestVersioned = loadSolanaProjectManifest(path.join(projectsDir, 'project_1.0.0.yaml'));\n\n const deployment = manifestVersioned.asV1_0_0.deployment;\n const filter = deployment.dataSources[0].mapping.handlers[0].filter;\n const deploymentString = manifestVersioned.toDeployment();\n expect(filter).not.toBeNull();\n expect(deploymentString).toContain('Transfer (address from, address to, uint256 tokenId)');\n });\n\n it('can convert genesis hash in v1.0.0 to chainId in deployment', () => {\n const deployment = loadSolanaProjectManifest(path.join(projectsDir, 'project_1.0.0.yaml')).asV1_0_0.deployment;\n expect(deployment.network.chainId).not.toBeNull();\n console.log(deployment.network.chainId);\n });\n\n it.skip('can get chainId for deployment', () => {\n const deployment = loadSolanaProjectManifest(path.join(projectsDir, 'project_1.0.0_chainId.yaml')).asV1_0_0\n .deployment;\n expect(deployment.network.chainId).toBe('moonbeamChainId');\n });\n\n it('can validate deployment runner versions', () => {\n const deployment = new DeploymentV1_0_0();\n const nodeImp = new SolanaRunnerNodeImpl();\n const queryImp = new RunnerQueryBaseModel();\n deployment.specVersion = '1.0.0';\n deployment.runner = new SolanaRunnerSpecsImpl();\n\n nodeImp.name = '@subql/node-solana';\n nodeImp.version = '*';\n deployment.runner.node = nodeImp;\n\n queryImp.name = '@subql/query';\n queryImp.version = '0.213.1';\n\n deployment.runner.query = queryImp;\n\n const errors = validateSync(deployment.runner, {whitelist: true, forbidNonWhitelisted: true});\n expect(errors.length).toBe(0);\n });\n\n it('can validate a v1.0.0 project.yaml with unsupported runner node', () => {\n expect(() => loadSolanaProjectManifest(path.join(projectsDir, 'project_1.0.0_bad_runner.yaml'))).toThrow();\n });\n\n //TODO, pre-release should be excluded\n it.skip('can throw error with unsupported runner version', () => {\n expect(() => loadSolanaProjectManifest(path.join(projectsDir, 'project_1.0.0_bad_runner_version.yaml'))).toThrow();\n });\n\n it('can validate a v1.0.0 project.yaml runner and datasource mismatches', () => {\n expect(() => loadSolanaProjectManifest(path.join(projectsDir, 'project_1.0.0_runner_ds_mismatch.yaml'))).toThrow();\n });\n\n it('can fail validation if custom ds missing processor', () => {\n expect(() => loadSolanaProjectManifest(path.join(projectsDir, 'project_0.2.0_invalid_custom_ds.yaml'))).toThrow();\n });\n});\n"]}
@@ -0,0 +1,4 @@
1
+ import { IProjectManifest } from '@subql/types-core';
2
+ import { SubqlDatasource } from '@subql/types-solana';
3
+ export { SubqlRuntimeHandler, SubqlCustomHandler, SubqlHandler, SubqlDatasource as SubqlSolanaDataSource, SubqlCustomDatasource as SubqlSolanaCustomDataSource, SubqlDatasourceProcessor, SubqlHandlerFilter, } from '@subql/types-solana';
4
+ export type ISolanaProjectManifest = IProjectManifest<SubqlDatasource>;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
+ // SPDX-License-Identifier: GPL-3.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/project/types.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { IProjectManifest } from '@subql/types-core';\nimport { SubqlDatasource } from '@subql/types-solana';\n\n// All of these used to be redefined in this file, re-exporting for simplicity\nexport {\n SubqlRuntimeHandler,\n SubqlCustomHandler,\n SubqlHandler,\n SubqlDatasource as SubqlSolanaDataSource,\n SubqlCustomDatasource as SubqlSolanaCustomDataSource,\n SubqlDatasourceProcessor,\n SubqlHandlerFilter,\n} from '@subql/types-solana';\n\nexport type ISolanaProjectManifest = IProjectManifest<SubqlDatasource>;\n\n"]}
@@ -0,0 +1,9 @@
1
+ import { SecondLayerHandlerProcessor, SubqlCustomDatasource, SubqlDatasource, SolanaHandlerKind, SubqlRuntimeDatasource, SecondLayerHandlerProcessorArray, SubqlCustomHandler, SubqlMapping } from '@subql/types-solana';
2
+ type DefaultFilter = Record<string, unknown>;
3
+ export declare function isBlockHandlerProcessor<E>(hp: SecondLayerHandlerProcessorArray<SolanaHandlerKind, DefaultFilter, unknown>): hp is SecondLayerHandlerProcessor<SolanaHandlerKind.Block, DefaultFilter, E>;
4
+ export declare function isTransactionHandlerProcessor<E>(hp: SecondLayerHandlerProcessorArray<SolanaHandlerKind, DefaultFilter, unknown>): hp is SecondLayerHandlerProcessor<SolanaHandlerKind.Transaction, DefaultFilter, E>;
5
+ export declare function isInstructionHandlerProcessor<E>(hp: SecondLayerHandlerProcessorArray<SolanaHandlerKind, DefaultFilter, unknown>): hp is SecondLayerHandlerProcessor<SolanaHandlerKind.Instruction, DefaultFilter, E>;
6
+ export declare function isLogHandlerProcessor<E>(hp: SecondLayerHandlerProcessorArray<SolanaHandlerKind, DefaultFilter, unknown>): hp is SecondLayerHandlerProcessor<SolanaHandlerKind.Log, DefaultFilter, E>;
7
+ export declare function isCustomDs<F extends SubqlMapping<SubqlCustomHandler>>(ds: SubqlDatasource): ds is SubqlCustomDatasource<string, F>;
8
+ export declare function isRuntimeDs(ds: SubqlDatasource): ds is SubqlRuntimeDatasource;
9
+ export {};
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
+ // SPDX-License-Identifier: GPL-3.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.isBlockHandlerProcessor = isBlockHandlerProcessor;
6
+ exports.isTransactionHandlerProcessor = isTransactionHandlerProcessor;
7
+ exports.isInstructionHandlerProcessor = isInstructionHandlerProcessor;
8
+ exports.isLogHandlerProcessor = isLogHandlerProcessor;
9
+ exports.isCustomDs = isCustomDs;
10
+ exports.isRuntimeDs = isRuntimeDs;
11
+ const types_solana_1 = require("@subql/types-solana");
12
+ function isBlockHandlerProcessor(hp) {
13
+ return hp.baseHandlerKind === types_solana_1.SolanaHandlerKind.Block;
14
+ }
15
+ function isTransactionHandlerProcessor(hp) {
16
+ return hp.baseHandlerKind === types_solana_1.SolanaHandlerKind.Transaction;
17
+ }
18
+ function isInstructionHandlerProcessor(hp) {
19
+ return hp.baseHandlerKind === types_solana_1.SolanaHandlerKind.Instruction;
20
+ }
21
+ function isLogHandlerProcessor(hp) {
22
+ return hp.baseHandlerKind === types_solana_1.SolanaHandlerKind.Log;
23
+ }
24
+ function isCustomDs(ds) {
25
+ return ds.kind !== types_solana_1.SolanaDatasourceKind.Runtime && !!ds.processor;
26
+ }
27
+ function isRuntimeDs(ds) {
28
+ return ds.kind === types_solana_1.SolanaDatasourceKind.Runtime;
29
+ }
30
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/project/utils.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAgBnC,0DAIC;AAED,sEAIC;AAED,sEAIC;AAED,sDAIC;AAED,gCAIC;AAED,kCAEC;AA9CD,sDAU6B;AAI7B,SAAgB,uBAAuB,CACrC,EAA+E;IAE/E,OAAO,EAAE,CAAC,eAAe,KAAK,gCAAiB,CAAC,KAAK,CAAC;AACxD,CAAC;AAED,SAAgB,6BAA6B,CAC3C,EAA+E;IAE/E,OAAO,EAAE,CAAC,eAAe,KAAK,gCAAiB,CAAC,WAAW,CAAC;AAC9D,CAAC;AAED,SAAgB,6BAA6B,CAC3C,EAA+E;IAE/E,OAAO,EAAE,CAAC,eAAe,KAAK,gCAAiB,CAAC,WAAW,CAAC;AAC9D,CAAC;AAED,SAAgB,qBAAqB,CACnC,EAA+E;IAE/E,OAAO,EAAE,CAAC,eAAe,KAAK,gCAAiB,CAAC,GAAG,CAAC;AACtD,CAAC;AAED,SAAgB,UAAU,CACxB,EAAmB;IAEnB,OAAO,EAAE,CAAC,IAAI,KAAK,mCAAoB,CAAC,OAAO,IAAI,CAAC,CAAE,EAAoC,CAAC,SAAS,CAAC;AACvG,CAAC;AAED,SAAgB,WAAW,CAAC,EAAmB;IAC7C,OAAO,EAAE,CAAC,IAAI,KAAK,mCAAoB,CAAC,OAAO,CAAC;AAClD,CAAC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport {\n SecondLayerHandlerProcessor,\n SubqlCustomDatasource,\n SubqlDatasource,\n SolanaDatasourceKind,\n SolanaHandlerKind,\n SubqlRuntimeDatasource,\n SecondLayerHandlerProcessorArray,\n SubqlCustomHandler,\n SubqlMapping,\n} from '@subql/types-solana';\n\ntype DefaultFilter = Record<string, unknown>;\n\nexport function isBlockHandlerProcessor<E>(\n hp: SecondLayerHandlerProcessorArray<SolanaHandlerKind, DefaultFilter, unknown>\n): hp is SecondLayerHandlerProcessor<SolanaHandlerKind.Block, DefaultFilter, E> {\n return hp.baseHandlerKind === SolanaHandlerKind.Block;\n}\n\nexport function isTransactionHandlerProcessor<E>(\n hp: SecondLayerHandlerProcessorArray<SolanaHandlerKind, DefaultFilter, unknown>\n): hp is SecondLayerHandlerProcessor<SolanaHandlerKind.Transaction, DefaultFilter, E> {\n return hp.baseHandlerKind === SolanaHandlerKind.Transaction;\n}\n\nexport function isInstructionHandlerProcessor<E>(\n hp: SecondLayerHandlerProcessorArray<SolanaHandlerKind, DefaultFilter, unknown>\n): hp is SecondLayerHandlerProcessor<SolanaHandlerKind.Instruction, DefaultFilter, E> {\n return hp.baseHandlerKind === SolanaHandlerKind.Instruction;\n}\n\nexport function isLogHandlerProcessor<E>(\n hp: SecondLayerHandlerProcessorArray<SolanaHandlerKind, DefaultFilter, unknown>\n): hp is SecondLayerHandlerProcessor<SolanaHandlerKind.Log, DefaultFilter, E> {\n return hp.baseHandlerKind === SolanaHandlerKind.Log;\n}\n\nexport function isCustomDs<F extends SubqlMapping<SubqlCustomHandler>>(\n ds: SubqlDatasource\n): ds is SubqlCustomDatasource<string, F> {\n return ds.kind !== SolanaDatasourceKind.Runtime && !!(ds as SubqlCustomDatasource<string>).processor;\n}\n\nexport function isRuntimeDs(ds: SubqlDatasource): ds is SubqlRuntimeDatasource {\n return ds.kind === SolanaDatasourceKind.Runtime;\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import { ISolanaProjectManifest, SubqlSolanaDataSource } from '../types';
2
+ import { ProjectManifestV1_0_0Impl } from './v1_0_0';
3
+ export type VersionedProjectManifest = {
4
+ specVersion: string;
5
+ };
6
+ declare const SOLANA_SUPPORTED_VERSIONS: {
7
+ '1.0.0': typeof ProjectManifestV1_0_0Impl;
8
+ };
9
+ type Versions = keyof typeof SOLANA_SUPPORTED_VERSIONS;
10
+ type ProjectManifestImpls = InstanceType<(typeof SOLANA_SUPPORTED_VERSIONS)[Versions]>;
11
+ export declare function manifestIsV1_0_0(manifest: ISolanaProjectManifest): manifest is ProjectManifestV1_0_0Impl;
12
+ export declare class SolanaProjectManifestVersioned implements ISolanaProjectManifest {
13
+ private _impl;
14
+ constructor(projectManifest: VersionedProjectManifest);
15
+ get asImpl(): ProjectManifestImpls;
16
+ get isV1_0_0(): boolean;
17
+ get asV1_0_0(): ProjectManifestV1_0_0Impl;
18
+ toDeployment(): string;
19
+ validate(): void;
20
+ get dataSources(): SubqlSolanaDataSource[];
21
+ get schema(): string;
22
+ get specVersion(): string;
23
+ get description(): string | undefined;
24
+ get repository(): string | undefined;
25
+ }
26
+ export {};
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
+ // SPDX-License-Identifier: GPL-3.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.SolanaProjectManifestVersioned = void 0;
6
+ exports.manifestIsV1_0_0 = manifestIsV1_0_0;
7
+ const class_transformer_1 = require("class-transformer");
8
+ const v1_0_0_1 = require("./v1_0_0");
9
+ const SOLANA_SUPPORTED_VERSIONS = {
10
+ '1.0.0': v1_0_0_1.ProjectManifestV1_0_0Impl,
11
+ };
12
+ function manifestIsV1_0_0(manifest) {
13
+ return manifest.specVersion === '1.0.0';
14
+ }
15
+ class SolanaProjectManifestVersioned {
16
+ _impl;
17
+ constructor(projectManifest) {
18
+ const klass = SOLANA_SUPPORTED_VERSIONS[projectManifest.specVersion];
19
+ if (!klass) {
20
+ throw new Error('specVersion not supported for project manifest file');
21
+ }
22
+ this._impl = (0, class_transformer_1.plainToClass)(klass, projectManifest);
23
+ }
24
+ get asImpl() {
25
+ return this._impl;
26
+ }
27
+ get isV1_0_0() {
28
+ return this.specVersion === '1.0.0';
29
+ }
30
+ get asV1_0_0() {
31
+ return this._impl;
32
+ }
33
+ toDeployment() {
34
+ return this._impl.deployment.toYaml();
35
+ }
36
+ validate() {
37
+ return this._impl.validate();
38
+ }
39
+ get dataSources() {
40
+ return this._impl.dataSources;
41
+ }
42
+ get schema() {
43
+ return this._impl.schema.file;
44
+ }
45
+ get specVersion() {
46
+ return this._impl.specVersion;
47
+ }
48
+ get description() {
49
+ return this._impl.description;
50
+ }
51
+ get repository() {
52
+ return this._impl.repository;
53
+ }
54
+ }
55
+ exports.SolanaProjectManifestVersioned = SolanaProjectManifestVersioned;
56
+ //# sourceMappingURL=ProjectManifestVersioned.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectManifestVersioned.js","sourceRoot":"","sources":["../../../src/project/versioned/ProjectManifestVersioned.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAenC,4CAEC;AAfD,yDAAiD;AAEjD,qCAAqD;AAGrD,MAAM,yBAAyB,GAAG;IAChC,OAAO,EAAE,kCAAyB;CACnC,CAAC;AAMF,SAAgB,gBAAgB,CAAC,QAAgC;IAC/D,OAAO,QAAQ,CAAC,WAAW,KAAK,OAAO,CAAC;AAC1C,CAAC;AAED,MAAa,8BAA8B;IACjC,KAAK,CAAuB;IAEpC,YAAY,eAAyC;QACnD,MAAM,KAAK,GAAG,yBAAyB,CAAC,eAAe,CAAC,WAAuB,CAAC,CAAC;QACjF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,IAAA,gCAAY,EAAiD,KAAK,EAAE,eAAe,CAAC,CAAC;IACpG,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC;IACtC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,KAAkC,CAAC;IACjD,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IACxC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;IAChC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;IAChC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;IAChC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;IAChC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;IAC/B,CAAC;CACF;AAlDD,wEAkDC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { plainToClass } from 'class-transformer';\nimport { ISolanaProjectManifest, SubqlSolanaDataSource } from '../types';\nimport { ProjectManifestV1_0_0Impl } from './v1_0_0';\nexport type VersionedProjectManifest = { specVersion: string };\n\nconst SOLANA_SUPPORTED_VERSIONS = {\n '1.0.0': ProjectManifestV1_0_0Impl,\n};\n\ntype Versions = keyof typeof SOLANA_SUPPORTED_VERSIONS;\n\ntype ProjectManifestImpls = InstanceType<(typeof SOLANA_SUPPORTED_VERSIONS)[Versions]>;\n\nexport function manifestIsV1_0_0(manifest: ISolanaProjectManifest): manifest is ProjectManifestV1_0_0Impl {\n return manifest.specVersion === '1.0.0';\n}\n\nexport class SolanaProjectManifestVersioned implements ISolanaProjectManifest {\n private _impl: ProjectManifestImpls;\n\n constructor(projectManifest: VersionedProjectManifest) {\n const klass = SOLANA_SUPPORTED_VERSIONS[projectManifest.specVersion as Versions];\n if (!klass) {\n throw new Error('specVersion not supported for project manifest file');\n }\n this._impl = plainToClass<ProjectManifestImpls, VersionedProjectManifest>(klass, projectManifest);\n }\n\n get asImpl(): ProjectManifestImpls {\n return this._impl;\n }\n\n get isV1_0_0(): boolean {\n return this.specVersion === '1.0.0';\n }\n\n get asV1_0_0(): ProjectManifestV1_0_0Impl {\n return this._impl as ProjectManifestV1_0_0Impl;\n }\n\n toDeployment(): string {\n return this._impl.deployment.toYaml();\n }\n\n validate(): void {\n return this._impl.validate();\n }\n\n get dataSources(): SubqlSolanaDataSource[] {\n return this._impl.dataSources;\n }\n\n get schema(): string {\n return this._impl.schema.file;\n }\n\n get specVersion(): string {\n return this._impl.specVersion;\n }\n\n get description(): string | undefined {\n return this._impl.description;\n }\n\n get repository(): string | undefined {\n return this._impl.repository;\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './ProjectManifestVersioned';
2
+ export * from './v1_0_0';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
+ // SPDX-License-Identifier: GPL-3.0
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ __exportStar(require("./ProjectManifestVersioned"), exports);
20
+ __exportStar(require("./v1_0_0"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/project/versioned/index.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;;AAEnC,6DAA2C;AAC3C,2CAAyB","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nexport * from './ProjectManifestVersioned';\nexport * from './v1_0_0';\n"]}
@@ -0,0 +1 @@
1
+ export * from './model';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
+ // SPDX-License-Identifier: GPL-3.0
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ __exportStar(require("./model"), exports);
20
+ //# sourceMappingURL=index.js.map