@opcat-labs/scrypt-ts-transpiler-opcat 1.0.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/compile/compilerWrapper.d.ts +203 -0
- package/dist/compile/compilerWrapper.d.ts.map +1 -0
- package/dist/compile/compilerWrapper.js +1019 -0
- package/dist/compile/compilerWrapper.js.map +1 -0
- package/dist/compile/findCompiler.d.ts +3 -0
- package/dist/compile/findCompiler.d.ts.map +1 -0
- package/dist/compile/findCompiler.js +102 -0
- package/dist/compile/findCompiler.js.map +1 -0
- package/dist/compile/getBinary.d.ts +3 -0
- package/dist/compile/getBinary.d.ts.map +1 -0
- package/dist/compile/getBinary.js +94 -0
- package/dist/compile/getBinary.js.map +1 -0
- package/dist/debug.d.ts +25 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +110 -0
- package/dist/debug.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +110 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer.d.ts +52 -0
- package/dist/indexer.d.ts.map +1 -0
- package/dist/indexer.js +189 -0
- package/dist/indexer.js.map +1 -0
- package/dist/relinker.d.ts +44 -0
- package/dist/relinker.d.ts.map +1 -0
- package/dist/relinker.js +321 -0
- package/dist/relinker.js.map +1 -0
- package/dist/resolver.d.ts +3 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/resolver.js +280 -0
- package/dist/resolver.js.map +1 -0
- package/dist/scryptParser.d.ts +31 -0
- package/dist/scryptParser.d.ts.map +1 -0
- package/dist/scryptParser.js +372 -0
- package/dist/scryptParser.js.map +1 -0
- package/dist/snippets.d.ts +39 -0
- package/dist/snippets.d.ts.map +1 -0
- package/dist/snippets.js +54 -0
- package/dist/snippets.js.map +1 -0
- package/dist/transpiler.d.ts +314 -0
- package/dist/transpiler.d.ts.map +1 -0
- package/dist/transpiler.js +4239 -0
- package/dist/transpiler.js.map +1 -0
- package/dist/types.d.ts +33 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +31 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +23 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +352 -0
- package/dist/utils.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Artifact, SmartContract } from '@opcat-labs/scrypt-ts-opcat';
|
|
2
|
+
import { Range } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* @ignore
|
|
5
|
+
*/
|
|
6
|
+
export type Symbol = string & {
|
|
7
|
+
__type: 'sCryptSymbol';
|
|
8
|
+
};
|
|
9
|
+
export type FilePath = string;
|
|
10
|
+
export type Content = {
|
|
11
|
+
scryptBase: string;
|
|
12
|
+
bindings: {
|
|
13
|
+
symbol: Symbol;
|
|
14
|
+
path: FilePath;
|
|
15
|
+
stateType?: Symbol;
|
|
16
|
+
md5: string;
|
|
17
|
+
}[];
|
|
18
|
+
};
|
|
19
|
+
export declare const INDEX_FILE_NAME = "scrypt.index.json";
|
|
20
|
+
/**
|
|
21
|
+
* @ignore
|
|
22
|
+
*/
|
|
23
|
+
export declare class Indexer {
|
|
24
|
+
filePath: string;
|
|
25
|
+
scryptBasePath: string;
|
|
26
|
+
symbolInfos: Map<Symbol, {
|
|
27
|
+
md5: string;
|
|
28
|
+
path: FilePath;
|
|
29
|
+
stateType?: Symbol;
|
|
30
|
+
}>;
|
|
31
|
+
static readonly TEMPLATE_FILE_NAME = ".templates";
|
|
32
|
+
constructor(filePath?: FilePath);
|
|
33
|
+
setScryptBasePath(scryptBasePath: string): void;
|
|
34
|
+
clean(): void;
|
|
35
|
+
load(): void;
|
|
36
|
+
getRelativePath(symbol: Symbol): FilePath | undefined;
|
|
37
|
+
getMd5(symbol: Symbol): FilePath | undefined;
|
|
38
|
+
updateMd5(symbol: Symbol, md5: string): void;
|
|
39
|
+
getFullPath(symbol: Symbol): FilePath | undefined;
|
|
40
|
+
getPackageFilePath(packageName: string, symbol: Symbol): FilePath | undefined;
|
|
41
|
+
static queryIndexFile(fromPath: FilePath, toPath?: FilePath): FilePath | undefined;
|
|
42
|
+
query(symbol: Symbol, includeBase?: boolean): FilePath | undefined;
|
|
43
|
+
save(): this;
|
|
44
|
+
addSymbols(symbolsWithRange: {
|
|
45
|
+
name: Symbol;
|
|
46
|
+
srcRange: Range;
|
|
47
|
+
stateType?: Symbol;
|
|
48
|
+
}[], symbolPath: FilePath): void;
|
|
49
|
+
static create(tsconfigDir: string, scryptOutDir: string): Indexer;
|
|
50
|
+
}
|
|
51
|
+
export declare function readArtifact(cls: typeof SmartContract): Artifact;
|
|
52
|
+
//# sourceMappingURL=indexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGtE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC;AACzD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC9B,MAAM,MAAM,OAAO,GAAG;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACjF,CAAC;AAEF,eAAO,MAAM,eAAe,sBAAsB,CAAC;AAEnD;;GAEG;AACH,qBAAa,OAAO;IAElB,QAAQ,EAAE,MAAM,CAAC;IAEjB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,GAAG,CACd,MAAM,EACN;QACE,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,QAAQ,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CACF,CAAa;IAEd,gBAAuB,kBAAkB,gBAAgB;gBAE7C,QAAQ,CAAC,EAAE,QAAQ;IAO/B,iBAAiB,CAAC,cAAc,EAAE,MAAM;IAIxC,KAAK;IAIL,IAAI;IAwBJ,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAQrD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAQ5C,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IASrC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAQjD,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAQ5E,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;IA0BlF,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,QAAQ,GAAG,SAAS;IAKhE,IAAI,IAAI,IAAI;IAYZ,UAAU,CACR,gBAAgB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,EACzE,UAAU,EAAE,QAAQ;IA6BtB,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;CAQlE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,aAAa,GAAG,QAAQ,CAoBhE"}
|
package/dist/indexer.js
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.readArtifact = exports.Indexer = exports.INDEX_FILE_NAME = void 0;
|
|
27
|
+
const fs_1 = require("fs");
|
|
28
|
+
const path_1 = __importStar(require("path"));
|
|
29
|
+
const utils_1 = require("./utils");
|
|
30
|
+
exports.INDEX_FILE_NAME = 'scrypt.index.json';
|
|
31
|
+
/**
|
|
32
|
+
* @ignore
|
|
33
|
+
*/
|
|
34
|
+
class Indexer {
|
|
35
|
+
constructor(filePath) {
|
|
36
|
+
this.symbolInfos = new Map();
|
|
37
|
+
// find indexer file of the contract
|
|
38
|
+
const indexFile = filePath || (0, path_1.join)(process.cwd(), exports.INDEX_FILE_NAME);
|
|
39
|
+
this.filePath = indexFile;
|
|
40
|
+
this.load();
|
|
41
|
+
}
|
|
42
|
+
setScryptBasePath(scryptBasePath) {
|
|
43
|
+
this.scryptBasePath = scryptBasePath;
|
|
44
|
+
}
|
|
45
|
+
clean() {
|
|
46
|
+
this.symbolInfos.clear();
|
|
47
|
+
}
|
|
48
|
+
load() {
|
|
49
|
+
if (!(0, fs_1.existsSync)(this.filePath)) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const content = JSON.parse((0, fs_1.readFileSync)(this.filePath).toString());
|
|
53
|
+
if (!content.scryptBase) {
|
|
54
|
+
throw new Error(`missing \`scryptBase\` in index file ${this.filePath}`);
|
|
55
|
+
}
|
|
56
|
+
this.scryptBasePath = content.scryptBase;
|
|
57
|
+
if (!content.bindings) {
|
|
58
|
+
throw new Error(`missing \`bindings\` in index file ${this.filePath}`);
|
|
59
|
+
}
|
|
60
|
+
content.bindings.forEach((binding) => {
|
|
61
|
+
if (binding.symbol && binding.path) {
|
|
62
|
+
this.symbolInfos.set(binding.symbol, {
|
|
63
|
+
path: binding.path,
|
|
64
|
+
md5: binding.md5,
|
|
65
|
+
stateType: binding.stateType,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
getRelativePath(symbol) {
|
|
71
|
+
if (this.symbolInfos.has(symbol)) {
|
|
72
|
+
return this.symbolInfos.get(symbol).path;
|
|
73
|
+
}
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
getMd5(symbol) {
|
|
77
|
+
if (this.symbolInfos.has(symbol)) {
|
|
78
|
+
return this.symbolInfos.get(symbol).md5;
|
|
79
|
+
}
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
updateMd5(symbol, md5) {
|
|
83
|
+
const infos = this.symbolInfos.get(symbol);
|
|
84
|
+
if (infos) {
|
|
85
|
+
this.symbolInfos.set(symbol, {
|
|
86
|
+
...infos,
|
|
87
|
+
md5,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
getFullPath(symbol) {
|
|
92
|
+
const relativePath = this.getRelativePath(symbol);
|
|
93
|
+
if (!relativePath) {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
return (0, path_1.join)((0, path_1.dirname)(this.filePath), this.scryptBasePath, relativePath);
|
|
97
|
+
}
|
|
98
|
+
getPackageFilePath(packageName, symbol) {
|
|
99
|
+
const relativePath = this.getRelativePath(symbol);
|
|
100
|
+
if (!relativePath) {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
return path_1.default.join(`${packageName}/${this.scryptBasePath}`, `${relativePath}`);
|
|
104
|
+
}
|
|
105
|
+
static queryIndexFile(fromPath, toPath) {
|
|
106
|
+
let searchDir = fromPath;
|
|
107
|
+
toPath = toPath === undefined ? process.cwd() : toPath;
|
|
108
|
+
const isSamePath = (pathA, pathB) => {
|
|
109
|
+
return (0, path_1.resolve)(pathA).toLowerCase() == (0, path_1.resolve)(pathB).toLowerCase();
|
|
110
|
+
};
|
|
111
|
+
while (true) {
|
|
112
|
+
const indexFile = (0, path_1.join)(searchDir, exports.INDEX_FILE_NAME);
|
|
113
|
+
if ((0, fs_1.existsSync)(indexFile)) {
|
|
114
|
+
return indexFile;
|
|
115
|
+
}
|
|
116
|
+
const parentDir = (0, path_1.join)(searchDir, '..');
|
|
117
|
+
if (isSamePath(searchDir, toPath) || isSamePath(searchDir, parentDir)) {
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
searchDir = parentDir;
|
|
121
|
+
}
|
|
122
|
+
const indexFile = (0, path_1.join)(toPath, exports.INDEX_FILE_NAME);
|
|
123
|
+
if ((0, fs_1.existsSync)(indexFile)) {
|
|
124
|
+
return indexFile;
|
|
125
|
+
}
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
query(symbol, includeBase = false) {
|
|
129
|
+
const sInfo = this.symbolInfos.get(symbol);
|
|
130
|
+
return sInfo && includeBase ? (0, path_1.join)(this.scryptBasePath, sInfo.path) : sInfo.path;
|
|
131
|
+
}
|
|
132
|
+
save() {
|
|
133
|
+
const content = {
|
|
134
|
+
scryptBase: (0, utils_1.toPosixPath)(this.scryptBasePath),
|
|
135
|
+
bindings: Array.from(this.symbolInfos.keys()).map((symbol) => {
|
|
136
|
+
const infos = this.symbolInfos.get(symbol);
|
|
137
|
+
return { symbol, ...(0, utils_1.filterUndefinedFields)(infos) };
|
|
138
|
+
}),
|
|
139
|
+
};
|
|
140
|
+
(0, fs_1.writeFileSync)(this.filePath, JSON.stringify(content, null, 1));
|
|
141
|
+
return this;
|
|
142
|
+
}
|
|
143
|
+
addSymbols(symbolsWithRange, symbolPath) {
|
|
144
|
+
symbolsWithRange.forEach((symbolWithRange) => {
|
|
145
|
+
const infos = this.symbolInfos.get(symbolWithRange.name);
|
|
146
|
+
if (infos && infos.path !== symbolPath) {
|
|
147
|
+
const srcFileName = symbolWithRange.srcRange.fileName;
|
|
148
|
+
const startLine = symbolWithRange.srcRange.start.line + 1;
|
|
149
|
+
const startCol = symbolWithRange.srcRange.start.character + 1;
|
|
150
|
+
const endLine = symbolWithRange.srcRange.end.line + 1;
|
|
151
|
+
const endCol = symbolWithRange.srcRange.end.character + 1;
|
|
152
|
+
console.log(`scrypt-ts ERROR - ${srcFileName}:${startLine}:${startCol}:${endLine}:${endCol} - symbol \`${symbolWithRange.name}\` already has been defined in \`${infos.path.replace('.scrypt', '.ts')}\` in ${this.filePath}\n`);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
this.symbolInfos.set(symbolWithRange.name, {
|
|
156
|
+
...infos,
|
|
157
|
+
stateType: symbolWithRange.stateType,
|
|
158
|
+
path: symbolPath,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
this.save();
|
|
163
|
+
}
|
|
164
|
+
static create(tsconfigDir, scryptOutDir) {
|
|
165
|
+
const filePath = (0, path_1.join)(tsconfigDir, exports.INDEX_FILE_NAME);
|
|
166
|
+
const scryptBasePath = (0, path_1.relative)(tsconfigDir, scryptOutDir);
|
|
167
|
+
const indexer = new Indexer(filePath);
|
|
168
|
+
indexer.setScryptBasePath(scryptBasePath);
|
|
169
|
+
indexer.clean();
|
|
170
|
+
return indexer.save();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
exports.Indexer = Indexer;
|
|
174
|
+
Indexer.TEMPLATE_FILE_NAME = '.templates';
|
|
175
|
+
function readArtifact(cls) {
|
|
176
|
+
// find scrypt file path in the indexer
|
|
177
|
+
const indexer = new Indexer();
|
|
178
|
+
const scryptFile = indexer.getFullPath(cls.name);
|
|
179
|
+
if (!scryptFile) {
|
|
180
|
+
throw new Error(`Cannot find the bundled artifact file for contract \`${this.name}\`, run \`npx scrypt-cli-btc compile\` to generate it.`);
|
|
181
|
+
}
|
|
182
|
+
const artifactFile = (0, utils_1.alterFileExt)(scryptFile, 'json');
|
|
183
|
+
if (!(0, fs_1.existsSync)(scryptFile)) {
|
|
184
|
+
throw new Error(`Cannot find the bundled artifact file for contract \`${this.name}\`, run \`npx scrypt-cli-btc compile\` to generate it.`);
|
|
185
|
+
}
|
|
186
|
+
return JSON.parse((0, fs_1.readFileSync)(artifactFile).toString());
|
|
187
|
+
}
|
|
188
|
+
exports.readArtifact = readArtifact;
|
|
189
|
+
//# sourceMappingURL=indexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ImportExpression, ExportSymbol } from './scryptParser';
|
|
2
|
+
export declare const TEMPLATE_FOLDER_NAME = ".templates";
|
|
3
|
+
export declare const TPL_FILE_EXTENSION = ".tpl";
|
|
4
|
+
export declare const RENAME_SYMBOL_SEP = "__rs__";
|
|
5
|
+
type ScryptFile = {
|
|
6
|
+
importExpressions: ImportExpression[];
|
|
7
|
+
exportSymbols: ExportSymbol[];
|
|
8
|
+
originFilePath: string;
|
|
9
|
+
relinkedFilePath: string;
|
|
10
|
+
packageName: string;
|
|
11
|
+
packageVersion: string;
|
|
12
|
+
};
|
|
13
|
+
type ScryptFileMap = Map<string, ScryptFile>;
|
|
14
|
+
export declare class Relinker {
|
|
15
|
+
readonly projectRoot: string;
|
|
16
|
+
readonly scryptBasePath: string;
|
|
17
|
+
fileMap: ScryptFileMap;
|
|
18
|
+
constructor(projectRoot: string, scryptBasePath: string);
|
|
19
|
+
static getUnRenamedSymbol(symbol: string): string;
|
|
20
|
+
static getRenamedSymbol(symbol: string, packageName: string, packageVersion: string): string;
|
|
21
|
+
static getFilePackageInfo(filePath: string): {
|
|
22
|
+
packageDir: string;
|
|
23
|
+
packageName: string;
|
|
24
|
+
packageVersion: string;
|
|
25
|
+
};
|
|
26
|
+
get currentProjectArtifactDir(): string;
|
|
27
|
+
relink(currentScryptFilePath: string): void;
|
|
28
|
+
relinkDeps(parentFile: string, importExpressions: ImportExpression[]): void;
|
|
29
|
+
findImportedSymobleSource(symbol: string, currentScryptFilePath: string, importExpressions: ImportExpression[]): ScryptFile;
|
|
30
|
+
/**
|
|
31
|
+
* get the relinked file path by the absolute scrypt.tpl file path;
|
|
32
|
+
* @param absoluteScryptFilePath absolute scrypt.tpl file path
|
|
33
|
+
* @returns relinked file path
|
|
34
|
+
*/
|
|
35
|
+
getRelinkedFilePath(absoluteScryptFilePath: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* remove the .tpl extension from the file path;
|
|
38
|
+
* @param filePath file path
|
|
39
|
+
* @returns
|
|
40
|
+
*/
|
|
41
|
+
removeTplExt(filePath: string): string;
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=relinker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relinker.d.ts","sourceRoot":"","sources":["../src/relinker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AAGlF,eAAO,MAAM,oBAAoB,eAAe,CAAC;AACjD,eAAO,MAAM,kBAAkB,SAAS,CAAC;AACzC,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,KAAK,UAAU,GAAG;IAChB,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,aAAa,EAAE,YAAY,EAAE,CAAC;IAE9B,cAAc,EAAE,MAAM,CAAC;IAEvB,gBAAgB,EAAE,MAAM,CAAC;IAEzB,WAAW,EAAE,MAAM,CAAC;IAEpB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAE7C,qBAAa,QAAQ;aAID,WAAW,EAAE,MAAM;aACnB,cAAc,EAAE,MAAM;IAJjC,OAAO,EAAE,aAAa,CAAC;gBAGZ,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM;IAKxC,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAOjD,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IASnF,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM;;;;;IAI1C,IAAI,yBAAyB,WAE5B;IAED,MAAM,CAAC,qBAAqB,EAAE,MAAM;IAiGpC,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE;IAYpE,yBAAyB,CACvB,MAAM,EAAE,MAAM,EACd,qBAAqB,EAAE,MAAM,EAC7B,iBAAiB,EAAE,gBAAgB,EAAE;IAevC;;;;OAIG;IACH,mBAAmB,CAAC,sBAAsB,EAAE,MAAM;IAuBlD;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM;CAM9B"}
|
package/dist/relinker.js
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Relinker = exports.RENAME_SYMBOL_SEP = exports.TPL_FILE_EXTENSION = exports.TEMPLATE_FOLDER_NAME = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const mlly_1 = require("mlly");
|
|
10
|
+
const scryptParser_1 = require("./scryptParser");
|
|
11
|
+
const utils_1 = require("./utils");
|
|
12
|
+
exports.TEMPLATE_FOLDER_NAME = '.templates';
|
|
13
|
+
exports.TPL_FILE_EXTENSION = '.tpl';
|
|
14
|
+
exports.RENAME_SYMBOL_SEP = '__rs__';
|
|
15
|
+
class Relinker {
|
|
16
|
+
constructor(projectRoot, scryptBasePath) {
|
|
17
|
+
this.projectRoot = projectRoot;
|
|
18
|
+
this.scryptBasePath = scryptBasePath;
|
|
19
|
+
this.fileMap = new Map();
|
|
20
|
+
}
|
|
21
|
+
static getUnRenamedSymbol(symbol) {
|
|
22
|
+
const parts = symbol.split(exports.RENAME_SYMBOL_SEP);
|
|
23
|
+
if (parts.length === 1) {
|
|
24
|
+
return parts[0];
|
|
25
|
+
}
|
|
26
|
+
return parts[parts.length - 1];
|
|
27
|
+
}
|
|
28
|
+
static getRenamedSymbol(symbol, packageName, packageVersion) {
|
|
29
|
+
return Utils.getRenamedSymbol(symbol, {
|
|
30
|
+
packageName,
|
|
31
|
+
packageVersion,
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/// get the package info by a file in that package
|
|
36
|
+
static getFilePackageInfo(filePath) {
|
|
37
|
+
return Utils.getFilePackageInfo(filePath);
|
|
38
|
+
}
|
|
39
|
+
get currentProjectArtifactDir() {
|
|
40
|
+
return path_1.default.resolve(this.projectRoot, this.scryptBasePath, '..');
|
|
41
|
+
}
|
|
42
|
+
relink(currentScryptFilePath) {
|
|
43
|
+
const relinkedFilePath = this.getRelinkedFilePath(currentScryptFilePath);
|
|
44
|
+
console.log(`relink ${currentScryptFilePath} to ${relinkedFilePath}`);
|
|
45
|
+
// parse import expressions in the .scrypt.tpl file;
|
|
46
|
+
const fileContent = fs_1.default.readFileSync(currentScryptFilePath, 'utf-8');
|
|
47
|
+
const { importExpressions, exportSymbols, usedSymbols } = scryptParser_1.ScryptFileParser.parseScryptFile(fileContent);
|
|
48
|
+
// relink the dependencies first;
|
|
49
|
+
if (importExpressions.length > 0) {
|
|
50
|
+
this.relinkDeps(currentScryptFilePath, importExpressions);
|
|
51
|
+
}
|
|
52
|
+
// generate a new .scrypt file content;
|
|
53
|
+
let relinkedFileContent = '';
|
|
54
|
+
// replace import paths;
|
|
55
|
+
importExpressions.sort((a, b) => a.index - b.index);
|
|
56
|
+
let lastIndex = 0;
|
|
57
|
+
for (const importExpression of importExpressions) {
|
|
58
|
+
const newImportPath = importExpression.importPath;
|
|
59
|
+
const absolutePath = Utils.toAbsolutePath(newImportPath, currentScryptFilePath);
|
|
60
|
+
const dep = this.fileMap.get(absolutePath);
|
|
61
|
+
if (!dep) {
|
|
62
|
+
throw new Error(`Dependency ${absolutePath} not found`);
|
|
63
|
+
}
|
|
64
|
+
relinkedFileContent += fileContent.slice(lastIndex, importExpression.index);
|
|
65
|
+
const rewritePath = Utils.convertToPosixPath(path_1.default.relative(path_1.default.dirname(relinkedFilePath), dep.relinkedFilePath));
|
|
66
|
+
relinkedFileContent += importExpression.expression.replace(importExpression.importPath, rewritePath);
|
|
67
|
+
lastIndex = importExpression.index + importExpression.expression.length;
|
|
68
|
+
}
|
|
69
|
+
relinkedFileContent += '\n\n';
|
|
70
|
+
// rename symbols
|
|
71
|
+
let renamedSymbols = [
|
|
72
|
+
...exportSymbols,
|
|
73
|
+
...usedSymbols.exportedSymbols,
|
|
74
|
+
...usedSymbols.importedSymbols,
|
|
75
|
+
];
|
|
76
|
+
renamedSymbols.sort((a, b) => a.index - b.index);
|
|
77
|
+
renamedSymbols = renamedSymbols.filter((0, utils_1.removeDuplicateFilter)((a, b) => a.index === b.index));
|
|
78
|
+
const packageInfo = Utils.getFilePackageInfo(currentScryptFilePath);
|
|
79
|
+
const currentParsedFile = {
|
|
80
|
+
importExpressions,
|
|
81
|
+
exportSymbols,
|
|
82
|
+
originFilePath: currentScryptFilePath,
|
|
83
|
+
relinkedFilePath: this.getRelinkedFilePath(currentScryptFilePath),
|
|
84
|
+
packageName: packageInfo.packageName,
|
|
85
|
+
packageVersion: packageInfo.packageVersion,
|
|
86
|
+
};
|
|
87
|
+
for (const symbol of renamedSymbols) {
|
|
88
|
+
if ((0, utils_1.arrayIncludes)(exportSymbols, symbol, (a, b) => a.value === b.value)) {
|
|
89
|
+
// rename exported symbol
|
|
90
|
+
relinkedFileContent += fileContent.slice(lastIndex, symbol.index);
|
|
91
|
+
const renamedSymbol = Utils.getRenamedSymbol(symbol.value, currentParsedFile);
|
|
92
|
+
relinkedFileContent += renamedSymbol;
|
|
93
|
+
lastIndex = symbol.index + symbol.value.length;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
// rename imported symbol
|
|
97
|
+
relinkedFileContent += fileContent.slice(lastIndex, symbol.index);
|
|
98
|
+
const sourceFile = this.findImportedSymobleSource(symbol.value, currentScryptFilePath, currentParsedFile.importExpressions);
|
|
99
|
+
if (!sourceFile) {
|
|
100
|
+
throw new Error(`Imported symbol ${symbol.value} not found in all imported files`);
|
|
101
|
+
}
|
|
102
|
+
const renamedSymbol = Utils.getRenamedSymbol(symbol.value, sourceFile);
|
|
103
|
+
relinkedFileContent += renamedSymbol;
|
|
104
|
+
lastIndex = symbol.index + symbol.value.length;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
relinkedFileContent += fileContent.slice(lastIndex);
|
|
108
|
+
// write to the artifacts directory;
|
|
109
|
+
Utils.writeFile(relinkedFilePath, relinkedFileContent);
|
|
110
|
+
this.fileMap.set(currentScryptFilePath, {
|
|
111
|
+
importExpressions,
|
|
112
|
+
exportSymbols,
|
|
113
|
+
originFilePath: currentScryptFilePath,
|
|
114
|
+
relinkedFilePath,
|
|
115
|
+
packageName: packageInfo.packageName,
|
|
116
|
+
packageVersion: packageInfo.packageVersion,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
relinkDeps(parentFile, importExpressions) {
|
|
120
|
+
// for each import expression, do relink;
|
|
121
|
+
for (const importExpression of importExpressions) {
|
|
122
|
+
const importPath = importExpression.importPath;
|
|
123
|
+
const absolutePath = Utils.toAbsolutePath(importPath, parentFile);
|
|
124
|
+
if (this.fileMap.has(absolutePath)) {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
this.relink(absolutePath);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
findImportedSymobleSource(symbol, currentScryptFilePath, importExpressions) {
|
|
131
|
+
for (const importExpression of importExpressions) {
|
|
132
|
+
const absolutePath = Utils.toAbsolutePath(importExpression.importPath, currentScryptFilePath);
|
|
133
|
+
const dep = this.fileMap.get(absolutePath);
|
|
134
|
+
if (!dep) {
|
|
135
|
+
throw new Error(`Dependency ${absolutePath} not found`);
|
|
136
|
+
}
|
|
137
|
+
if ((0, utils_1.arrayIncludes)(dep.exportSymbols, symbol, (a, b) => a.value === b)) {
|
|
138
|
+
return dep;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* get the relinked file path by the absolute scrypt.tpl file path;
|
|
145
|
+
* @param absoluteScryptFilePath absolute scrypt.tpl file path
|
|
146
|
+
* @returns relinked file path
|
|
147
|
+
*/
|
|
148
|
+
getRelinkedFilePath(absoluteScryptFilePath) {
|
|
149
|
+
// file struct:
|
|
150
|
+
const currentProjectTemplateDir = path_1.default.resolve(this.projectRoot, this.scryptBasePath);
|
|
151
|
+
const currentProjectArtifactDir = path_1.default.resolve(this.projectRoot, this.scryptBasePath, '..');
|
|
152
|
+
// file is under the current project template directory, the relinked file is under the current project artifacts directory;
|
|
153
|
+
if (absoluteScryptFilePath.startsWith(currentProjectTemplateDir)) {
|
|
154
|
+
return path_1.default.resolve(currentProjectArtifactDir, path_1.default.relative(currentProjectTemplateDir, this.removeTplExt(absoluteScryptFilePath)));
|
|
155
|
+
}
|
|
156
|
+
// file is under node_modules, the relinked file is under the currentProject/artifacts/.node_modules/packageName/.../relinkedFile;
|
|
157
|
+
// use `.node_modules` instead of `node_modules` to avoid module resolution error;
|
|
158
|
+
let relativePath = path_1.default.relative(this.projectRoot, absoluteScryptFilePath);
|
|
159
|
+
relativePath = Utils.removeLeadingDot(Utils.removeFolder(relativePath, exports.TEMPLATE_FOLDER_NAME));
|
|
160
|
+
relativePath = this.removeTplExt(relativePath);
|
|
161
|
+
relativePath = relativePath.replace('node_modules', '.node_modules');
|
|
162
|
+
return path_1.default.resolve(this.projectRoot, this.currentProjectArtifactDir, relativePath);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* remove the .tpl extension from the file path;
|
|
166
|
+
* @param filePath file path
|
|
167
|
+
* @returns
|
|
168
|
+
*/
|
|
169
|
+
removeTplExt(filePath) {
|
|
170
|
+
if (filePath.endsWith(exports.TPL_FILE_EXTENSION)) {
|
|
171
|
+
return filePath.substring(0, filePath.length - exports.TPL_FILE_EXTENSION.length);
|
|
172
|
+
}
|
|
173
|
+
return filePath;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
exports.Relinker = Relinker;
|
|
177
|
+
class Utils {
|
|
178
|
+
/**
|
|
179
|
+
* get the package info from the absolute file path;
|
|
180
|
+
* search the package.json file in the current directory and its parent directories;
|
|
181
|
+
* @param absoluteFilePath
|
|
182
|
+
* @returns
|
|
183
|
+
*/
|
|
184
|
+
static getFilePackageInfo(absoluteFilePath) {
|
|
185
|
+
let dir = path_1.default.resolve(absoluteFilePath, '..');
|
|
186
|
+
while (true) {
|
|
187
|
+
if (fs_1.default.existsSync(path_1.default.resolve(dir, './package.json'))) {
|
|
188
|
+
const packageJson = JSON.parse(fs_1.default.readFileSync(path_1.default.resolve(dir, './package.json'), 'utf-8'));
|
|
189
|
+
return {
|
|
190
|
+
packageDir: dir,
|
|
191
|
+
packageName: packageJson.name,
|
|
192
|
+
packageVersion: packageJson.version,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
const parentDir = path_1.default.resolve(dir, '..');
|
|
196
|
+
if (parentDir === dir) {
|
|
197
|
+
throw new Error(`Package info not found for ${absoluteFilePath}`);
|
|
198
|
+
}
|
|
199
|
+
dir = parentDir;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* get the renamed symbol;
|
|
204
|
+
* @param symbol original symbol
|
|
205
|
+
* @param parsedFile parsed file
|
|
206
|
+
* @returns renamed symbol
|
|
207
|
+
*/
|
|
208
|
+
static getRenamedSymbol(symbol, parsedFile) {
|
|
209
|
+
return `${parsedFile.packageName.replace(/\W/g, '_')}_${parsedFile.packageVersion.replace(/\W/g, '_')}${exports.RENAME_SYMBOL_SEP}${symbol}`;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* convert the import relative path to the absolute path;
|
|
213
|
+
* @param importPath
|
|
214
|
+
* @param baseFileAbsolutePath
|
|
215
|
+
* @returns
|
|
216
|
+
*/
|
|
217
|
+
static toAbsolutePath(importPath, baseFileAbsolutePath) {
|
|
218
|
+
// relative path
|
|
219
|
+
if (importPath.startsWith('.')) {
|
|
220
|
+
return path_1.default.resolve(baseFileAbsolutePath, '..', importPath);
|
|
221
|
+
}
|
|
222
|
+
// npm package
|
|
223
|
+
const { pkgName, file } = this.parseNpmPkgFile(importPath);
|
|
224
|
+
const pkgRoot = this.findPackageRoot(pkgName, baseFileAbsolutePath);
|
|
225
|
+
return path_1.default.resolve(pkgRoot, file);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* find the package root by the package name and the parent file that contains the import expression;
|
|
229
|
+
* @param pkgName package name
|
|
230
|
+
* @param baseFilePath parent file that contains the import expression
|
|
231
|
+
* @returns package root, that contains the package.json file
|
|
232
|
+
*/
|
|
233
|
+
static findPackageRoot(pkgName, baseFilePath) {
|
|
234
|
+
let mainFile;
|
|
235
|
+
try {
|
|
236
|
+
mainFile = (0, mlly_1.resolvePathSync)(pkgName, { url: baseFilePath });
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
error.message = `findPackageRoot failed: ` + error.message;
|
|
240
|
+
throw error;
|
|
241
|
+
}
|
|
242
|
+
let dir = path_1.default.dirname(mainFile);
|
|
243
|
+
while (true) {
|
|
244
|
+
if (fs_1.default.existsSync(path_1.default.resolve(dir, 'package.json'))) {
|
|
245
|
+
return dir;
|
|
246
|
+
}
|
|
247
|
+
const parentDir = path_1.default.resolve(dir, '..');
|
|
248
|
+
if (parentDir === dir) {
|
|
249
|
+
throw new Error(`Package root not found for ${pkgName}`);
|
|
250
|
+
}
|
|
251
|
+
dir = parentDir;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* parse the npm package file path by a import path;
|
|
256
|
+
* @param filePath import path
|
|
257
|
+
* @returns package name and the rest relative file path
|
|
258
|
+
*/
|
|
259
|
+
static parseNpmPkgFile(filePath) {
|
|
260
|
+
const parts = filePath.split('/');
|
|
261
|
+
let pkgName = parts[0];
|
|
262
|
+
if (pkgName.startsWith('@')) {
|
|
263
|
+
pkgName = pkgName + '/' + parts[1];
|
|
264
|
+
}
|
|
265
|
+
let file = filePath.substring(pkgName.length);
|
|
266
|
+
if (file.startsWith('/')) {
|
|
267
|
+
file = '.' + file;
|
|
268
|
+
}
|
|
269
|
+
return {
|
|
270
|
+
pkgName,
|
|
271
|
+
file,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* write the content to the file; create the directory if not exists;
|
|
276
|
+
* @param filePath
|
|
277
|
+
* @param content
|
|
278
|
+
*/
|
|
279
|
+
static writeFile(filePath, content) {
|
|
280
|
+
const dirPath = path_1.default.dirname(filePath);
|
|
281
|
+
if (!fs_1.default.existsSync(dirPath)) {
|
|
282
|
+
fs_1.default.mkdirSync(dirPath, { recursive: true });
|
|
283
|
+
}
|
|
284
|
+
fs_1.default.writeFileSync(filePath, content);
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* remove the leading dot from the relative file path;
|
|
288
|
+
* for example: ../../node_modules/xxx/yyy.zz -> node_modules/xxx/yyy.zz
|
|
289
|
+
* @param relativeFilePath relative file path
|
|
290
|
+
* @returns
|
|
291
|
+
*/
|
|
292
|
+
static removeLeadingDot(relativeFilePath) {
|
|
293
|
+
const normalized = path_1.default.normalize(relativeFilePath);
|
|
294
|
+
const parts = normalized.split(path_1.default.sep).filter((part) => part != '..');
|
|
295
|
+
return path_1.default.join(...parts);
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* remove the folder from the file path;
|
|
299
|
+
*
|
|
300
|
+
* for example: (filePath = node_modules/xxx/yyy.zz, folderName = xxx) -> node_modules/yyy.zz
|
|
301
|
+
*
|
|
302
|
+
* @param filePath file path
|
|
303
|
+
* @param folderName folder name
|
|
304
|
+
* @returns
|
|
305
|
+
*/
|
|
306
|
+
static removeFolder(filePath, folderName) {
|
|
307
|
+
const normalized = path_1.default.normalize(filePath);
|
|
308
|
+
const parts = normalized.split(path_1.default.sep).filter((part) => part !== folderName);
|
|
309
|
+
return path_1.default.join(...parts);
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* convert the file path to the posix path;
|
|
313
|
+
* for example: xxx\yyy.zz -> xxx/yyy.zz
|
|
314
|
+
* @param filePath file path
|
|
315
|
+
* @returns
|
|
316
|
+
*/
|
|
317
|
+
static convertToPosixPath(filePath) {
|
|
318
|
+
return filePath.replaceAll(path_1.default.sep, path_1.default.posix.sep);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=relinker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relinker.js","sourceRoot":"","sources":["../src/relinker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { AliasEntity, ContractEntity, LibraryEntity, StaticEntity, StructEntity, TypeResolver } from '@opcat-labs/scrypt-ts-opcat';
|
|
2
|
+
export declare function buildTypeResolver(contract: string, alias: AliasEntity[], structs: StructEntity[], library: LibraryEntity[], contracts?: ContractEntity[], statics?: StaticEntity[]): TypeResolver;
|
|
3
|
+
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EAEd,aAAa,EACb,YAAY,EACZ,YAAY,EAGZ,YAAY,EACb,MAAM,6BAA6B,CAAC;AAGrC,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,EAAE,EACpB,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,aAAa,EAAE,EACxB,SAAS,GAAE,cAAc,EAAO,EAChC,OAAO,GAAE,YAAY,EAAO,GAC3B,YAAY,CAqHd"}
|