From f8dd5b402dc1cd3c77774dc2763973c82c5af57f Mon Sep 17 00:00:00 2001 From: "Marcus R. Brown" Date: Fri, 28 Jan 2022 02:09:10 -0700 Subject: [PATCH] feat: remove the `lib` directory from source control; add `types` meta --- .gitignore | 1 + lib/index.d.ts | 1 - lib/index.js | 42 ------------ lib/index.js.map | 1 - lib/publish.d.ts | 15 ----- lib/publish.js | 162 --------------------------------------------- lib/publish.js.map | 1 - lib/resolve.d.ts | 12 ---- lib/resolve.js | 141 --------------------------------------- lib/resolve.js.map | 1 - lib/utils.d.ts | 1 - lib/utils.js | 9 --- lib/utils.js.map | 1 - package.json | 6 +- 14 files changed, 5 insertions(+), 389 deletions(-) delete mode 100644 lib/index.d.ts delete mode 100644 lib/index.js delete mode 100644 lib/index.js.map delete mode 100644 lib/publish.d.ts delete mode 100644 lib/publish.js delete mode 100644 lib/publish.js.map delete mode 100644 lib/resolve.d.ts delete mode 100644 lib/resolve.js delete mode 100644 lib/resolve.js.map delete mode 100644 lib/utils.d.ts delete mode 100644 lib/utils.js delete mode 100644 lib/utils.js.map diff --git a/.gitignore b/.gitignore index 6400a10..17f21c6 100644 --- a/.gitignore +++ b/.gitignore @@ -106,3 +106,4 @@ dist # Project ignores tests/**/@types tests/**/dist +/lib diff --git a/lib/index.d.ts b/lib/index.d.ts deleted file mode 100644 index cb0ff5c..0000000 --- a/lib/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 661ed76..0000000 --- a/lib/index.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const path_1 = __importDefault(require("path")); -const yargs_1 = __importDefault(require("yargs")); -const publish_1 = __importDefault(require("./publish")); -const resolve_1 = __importDefault(require("./resolve")); -yargs_1.default - .scriptName('') - .usage('Usage: $0 [options]') - .nargs('src', 1) - .default('src', './') - .describe('src', 'Source directory') - .nargs('out', 1) - .default('out', '') - .describe('out', 'Output directory') - .command('publish', 'Publish library types from a library source', () => null, async (argv) => { - var _a, _b; - const src = path_1.default.resolve((_a = process.env.INIT_CWD) !== null && _a !== void 0 ? _a : process.cwd(), argv.src); - const out = path_1.default.resolve((_b = process.env.INIT_CWD) !== null && _b !== void 0 ? _b : process.cwd(), argv.out || './dist'); - const err = await (0, publish_1.default)(src, out).catch((e) => e); - if (err) { - console.error(err); - process.exit(1); - } -}) - .command('resolve', 'Resolve library types for a project', () => null, async (argv) => { - var _a, _b; - const src = path_1.default.resolve((_a = process.env.INIT_CWD) !== null && _a !== void 0 ? _a : process.cwd(), argv.src); - const out = path_1.default.resolve((_b = process.env.INIT_CWD) !== null && _b !== void 0 ? _b : process.cwd(), argv.out || "./@types"); - const err = await (0, resolve_1.default)(src, out).catch((e) => e); - if (err) { - console.error(err); - process.exit(1); - } -}) - .demandCommand(1, 'You need at least one command before moving on') - .version() - .help().argv; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/index.js.map b/lib/index.js.map deleted file mode 100644 index 3189ef8..0000000 --- a/lib/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,kDAA0B;AAC1B,wDAAgC;AAChC,wDAAgC;AAEhC,eAAK;KACF,UAAU,CAAC,EAAE,CAAC;KACd,KAAK,CAAC,+BAA+B,CAAC;KACtC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;KACf,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;KACpB,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;KACnC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;KACf,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;KAClB,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;KACnC,OAAO,CAAC,SAAS,EAAE,6CAA6C,EAAE,GAAG,EAAE,CAAC,IAAI,EAC3E,KAAK,EAAE,IAAI,EAAE,EAAE;;IACb,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,MAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,mCAAI,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,MAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,mCAAI,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC;IAEtF,MAAM,GAAG,GAAG,MAAM,IAAA,iBAAO,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACpD,IAAI,GAAG,EAAE;QACP,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;AACH,CAAC,CAAC;KACH,OAAO,CAAC,SAAS,EAAE,qCAAqC,EAAE,GAAG,EAAE,CAAC,IAAI,EACnE,KAAK,EAAE,IAAI,EAAE,EAAE;;IACb,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,MAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,mCAAI,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,MAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,mCAAI,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC;IAExF,MAAM,GAAG,GAAG,MAAM,IAAA,iBAAO,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACpD,IAAI,GAAG,EAAE;QACP,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;AACH,CAAC,CAAC;KACH,aAAa,CAAC,CAAC,EAAE,gDAAgD,CAAC;KAClE,OAAO,EAAE;KACT,IAAI,EAAE,CAAC,IAAI,CAAC"} \ No newline at end of file diff --git a/lib/publish.d.ts b/lib/publish.d.ts deleted file mode 100644 index faa2de6..0000000 --- a/lib/publish.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -export interface Library { - name?: string; - url?: string; -} -export interface Version { - version: string; - url: string; - hash: string; - path: string; - checksum: string; -} -export interface Index extends Library { - versions: Version[]; -} -export default function publish(src: string, dest: string): Promise; diff --git a/lib/publish.js b/lib/publish.js deleted file mode 100644 index a2bd0bf..0000000 --- a/lib/publish.js +++ /dev/null @@ -1,162 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const await_to_js_1 = require("await-to-js"); -const crypto_1 = require("crypto"); -const promises_1 = __importDefault(require("fs/promises")); -const path = __importStar(require("path")); -const xml2js_1 = require("xml2js"); -var PublishStep; -(function (PublishStep) { - PublishStep[PublishStep["Init"] = 0] = "Init"; - PublishStep[PublishStep["Packages"] = 1] = "Packages"; - PublishStep[PublishStep["Libraries"] = 2] = "Libraries"; - PublishStep[PublishStep["Amalgamate"] = 3] = "Amalgamate"; - PublishStep[PublishStep["Index"] = 4] = "Index"; - PublishStep[PublishStep["Registry"] = 5] = "Registry"; -})(PublishStep || (PublishStep = {})); -async function publish(src, dest) { - let step = PublishStep.Init; - try { - //* Walk directories in packages - step = PublishStep.Packages; - //* ------------------------------------------------------------ - const packages = []; - for await (const d of await promises_1.default.opendir(src)) { - if (d.isDirectory()) - packages.push(path.join(src, d.name)); - } - //* Collect library metadata - step = PublishStep.Libraries; - //* ------------------------------------------------------------ - const modules = {}; - for (const m of packages) { - try { - //* Parse and verify library.json - const [err, libFile] = await (0, await_to_js_1.to)(promises_1.default.readFile(path.join(m, "library.json"))); - if (err || !libFile) - throw new Error('Missing library.json'); - const lib = JSON.parse(libFile.toString()); - if (!lib.name) - throw new Error('Missing library name'); - if (!lib.url) - throw new Error('Missing library url'); - //* Insert library index - const key = m; - modules[key] = { - name: lib.name, - url: lib.url, - versions: [], - }; - //* Collect *.d.ts files that have a library comment header - for await (const d of await promises_1.default.opendir(m)) { - if (d.isFile() && d.name.endsWith(".d.ts")) { - const file = path.join(m, d.name); - const data = await promises_1.default.readFile(file, "utf8"); - const match = data.match(/^\/\/\/\s*()$/m); - if (match) { - const { library } = await (0, xml2js_1.parseStringPromise)(match[1]); - if (library.$ && library.$["version"] && library.$["src"]) { - var shasum = (0, crypto_1.createHash)('sha1'); - shasum.update(library.$["src"]); - modules[key].versions.push({ - version: library.$["version"], - url: library.$["src"], - hash: shasum.digest('hex'), - path: path.join(m, d.name), - checksum: "", - }); - } - } - } - } - } - catch (e) { - throw new Error(`Skipping ${path.basename(m)}, ${e.message}`); - } - } - ; - //* Amalgamate referenced types into library versions - step = PublishStep.Amalgamate; - //* ------------------------------------------------------------ - for (const key of Object.keys(modules)) { - const lib = modules[key]; - const cache = {}; - for (const version of lib.versions) { - // Read in typing and replace references to other files - let data = await promises_1.default.readFile(version.path, "utf8"); - let match; - do { - match = data.match(/^\/\/\/\s*()$/m); - if (match) { - const { reference } = await (0, xml2js_1.parseStringPromise)(match[1]); - if (reference.$ && reference.$["path"]) { - const ref = path.join(path.dirname(version.path), reference.$["path"]); - if (!cache[ref]) { - const refData = await promises_1.default.readFile(ref, "utf8"); - cache[ref] = refData; - } - data = data.replace(match[0], cache[ref]); - } - } - } while (match); - data = data.trimEnd() + "\n"; - // compute checksum - version.checksum = (0, crypto_1.createHash)('md5').update(data).digest('hex'); - // make path relative - version.path = path.basename(version.path); - // Write typing file to out directory - const output = path.join(dest, path.basename(key)); - await promises_1.default.mkdir(output, { recursive: true }); - await promises_1.default.writeFile(path.join(output, version.path), data); - } - } - //* Generate an index.json for each module - step = PublishStep.Index; - //* ------------------------------------------------------------ - for (const key of Object.keys(modules)) { - const lib = modules[key]; - await promises_1.default.mkdir(path.join(dest, path.basename(key)), { recursive: true }); - await promises_1.default.writeFile(path.join(dest, path.basename(key), "index.json"), JSON.stringify(lib, null, 2)); - } - //* Generate a package registry index.json for each module - step = PublishStep.Registry; - //* ------------------------------------------------------------ - const registry = {}; - for (const key of Object.keys(modules)) { - const lib = modules[key]; - registry[path.basename(key)] = { - name: lib.name, - url: lib.url, - }; - } - await promises_1.default.writeFile(path.join(dest, "index.json"), JSON.stringify(registry, null, 2)); - } - catch (e) { - console.error(`${PublishStep[step]}:`, e.message); - process.exit(1); - } -} -exports.default = publish; -//# sourceMappingURL=publish.js.map \ No newline at end of file diff --git a/lib/publish.js.map b/lib/publish.js.map deleted file mode 100644 index 92bd3e2..0000000 --- a/lib/publish.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/resolve.d.ts b/lib/resolve.d.ts deleted file mode 100644 index 81db12e..0000000 --- a/lib/resolve.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export declare function findProject(root: string): Promise; -export declare type Dependencies = Array<{ - name: string; - version: string; - url: string; - cache: string; -}>; -export declare function gatherDependencies(projectPath: string): Promise; -export default function resolve(projectDir: string, types: string, log?: { - (...data: any[]): void; - (message?: any, ...optionalParams: any[]): void; -}): Promise; diff --git a/lib/resolve.js b/lib/resolve.js deleted file mode 100644 index dff39c3..0000000 --- a/lib/resolve.js +++ /dev/null @@ -1,141 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.gatherDependencies = exports.findProject = void 0; -const await_to_js_1 = require("await-to-js"); -const crypto_1 = require("crypto"); -const promises_1 = __importDefault(require("fs/promises")); -const node_fetch_1 = __importDefault(require("node-fetch")); -const path = __importStar(require("path")); -const semver = __importStar(require("semver")); -const TYPES_REGISTRY = "https://ts-defold.dev/library"; -async function findProject(root) { - for await (const d of await promises_1.default.opendir(root)) { - if (d.isDirectory()) { - const projectPath = await findProject(path.join(root, d.name)); - if (projectPath) - return projectPath; - } - else if (d.isFile() && d.name === "game.project") { - return path.join(root, d.name); - } - } - return ""; -} -exports.findProject = findProject; -async function gatherDependencies(projectPath) { - const [err, project] = await (0, await_to_js_1.to)(promises_1.default.readFile(projectPath, "utf8")); - if (err || !project) - throw new Error(`Failed to read project file: ${projectPath}`); - // Parse deps from project file - const deps = project - .split('\n') - .filter((l) => l.startsWith('dependencies')) - .map((dep) => { - return dep.split('=')[1].trim(); - }); - // Extract name, version, cache from deps - const results = []; - for (const url of deps) { - const parts = new URL(url).pathname.split('/'); - if (parts.length < 3) - throw new Error(`Can not parse dependency`); - const name = parts[2]; - const version = (parts.find((p) => p.match(/^\d+\.\d+\.\d+.*/) !== null) || 'latest').replace('.zip', ''); - const cache = path.join(path.dirname(projectPath), '.internal', `${(0, crypto_1.createHash)('sha1').update(url).digest('hex')}.zip`); - results.push({ - name, - version, - url, - cache, - }); - } - return results; -} -exports.gatherDependencies = gatherDependencies; -async function resolve(projectDir, types, log = console.log) { - //* Find a game.project file - const project = await findProject(projectDir); - if (!project) - throw new Error(`No game.project file found in ${projectDir}`); - //* Fetch dependencies from game.project file - const deps = await gatherDependencies(project); - //* Resolve dependencies against registry https://ts-defold.dev/library - const resolved = new Map(); - for (const dep of deps) { - const [_err, index] = await (0, await_to_js_1.to)((0, node_fetch_1.default)(`${TYPES_REGISTRY}/${dep.name}/`).then((res) => res.json())); - if (!index || _err) { - log(`No suitable types found for ${dep.name}`); - continue; - } - //* Find the best version - const ordered = index.versions.sort((a, b) => semver.compare(a.version, b.version)); - const target = ordered.find((v) => semver.satisfies(v.version, dep.version)); - const latest = ordered.length > 0 ? ordered[ordered.length - 1] : undefined; - const version = target || latest; - if (!version) { - log(`No suitable version found for ${dep.name}`); - continue; - } - //* If the version exists and matches the checksum we can skip downloading - const localPath = path.join(types, version.path); - const [err, type] = await (0, await_to_js_1.to)(promises_1.default.readFile(localPath, 'utf8')); - if (!err && type) { - if (version.checksum === (0, crypto_1.createHash)('md5').update(type).digest('hex')) { - log(`Using cached types for ${dep.name}@${version.version}`); - resolved.set(dep.name, { version: version.version, index }); - continue; - } - } - //* Download the target version - log(`Downloading types for ${dep.name}@${version.version}`); - const data = await (await (0, node_fetch_1.default)(`${TYPES_REGISTRY}/${dep.name}/${version.path}`)).buffer(); - //* Write the types to disk - await promises_1.default.mkdir(path.dirname(localPath), { recursive: true }); - await promises_1.default.writeFile(localPath, data); - resolved.set(dep.name, { version: version.version, index }); - } - //* Try to generate types from the dependencies directly if still unresolved - const needsTypes = deps.filter((d) => !resolved.has(d.name)); - for (const dep of needsTypes) { - void dep; - // TODO: Search for a script_api.yaml in either the cached dep or from the url - // TODO: Run the script_api.yaml through type-gen - } - // TODO: Log and request types from the library service for any unresolved dependencies - //* Prune old versions of types if known - const hasTypes = deps.filter((d) => resolved.has(d.name)); - for (const dep of hasTypes) { - const { version, index } = resolved.get(dep.name); - const prune = index.versions.filter((v) => v.version !== version); - for (const v of prune) { - const localPath = path.join(types, v.path); - const [err] = await (0, await_to_js_1.to)(promises_1.default.unlink(localPath)); - if (!err) - log(`Pruned types ${dep.name}@${v.version}`); - } - } -} -exports.default = resolve; -//# sourceMappingURL=resolve.js.map \ No newline at end of file diff --git a/lib/resolve.js.map b/lib/resolve.js.map deleted file mode 100644 index cbf268d..0000000 --- a/lib/resolve.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/utils.d.ts b/lib/utils.d.ts deleted file mode 100644 index 969cae8..0000000 --- a/lib/utils.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function to(promise: Promise): Promise<[U, undefined] | [undefined, T]>; diff --git a/lib/utils.js b/lib/utils.js deleted file mode 100644 index 117fa68..0000000 --- a/lib/utils.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.to = void 0; -function to(promise) { - return promise.then((data) => [undefined, data]) - .catch((err) => [err, undefined]); -} -exports.to = to; -//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/lib/utils.js.map b/lib/utils.js.map deleted file mode 100644 index edb395e..0000000 --- a/lib/utils.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAAA,SAAgB,EAAE,CAAgB,OAAmB;IACnD,OAAO,OAAO,CAAC,IAAI,CAAiB,CAAC,IAAO,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SAChE,KAAK,CAAiB,CAAC,GAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;AACzD,CAAC;AAHD,gBAGC"} \ No newline at end of file diff --git a/package.json b/package.json index 64a25a2..5ee7186 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,12 @@ "version": "0.1.2", "description": "Type library for Defold", "main": "lib/index.js", + "types": "lib/index.d.ts", "bin": "bin/library.js", "files": [ - "lib/**/*.{js,d.ts}", - "bin/**/*.js" + "lib", + "bin", + "!/**/*.js.map" ], "scripts": { "resolve": "npm run build && ./bin/library.js resolve --src ./tests/resolve --out ./tests/resolve/@types",