packtory 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 (143) hide show
  1. package/LICENSE +21 -0
  2. package/artifacts/artifacts-builder.d.ts +20 -0
  3. package/artifacts/artifacts-builder.d.ts.map +1 -0
  4. package/artifacts/artifacts-builder.js +43 -0
  5. package/artifacts/artifacts-builder.js.map +1 -0
  6. package/artifacts/file-manager.d.ts +18 -0
  7. package/artifacts/file-manager.d.ts.map +1 -0
  8. package/artifacts/file-manager.js +35 -0
  9. package/artifacts/file-manager.js.map +1 -0
  10. package/bundler/bundle-build-options.d.ts +19 -0
  11. package/bundler/bundle-build-options.d.ts.map +1 -0
  12. package/bundler/bundle-build-options.js +25 -0
  13. package/bundler/bundle-build-options.js.map +1 -0
  14. package/bundler/bundle-description.d.ts +27 -0
  15. package/bundler/bundle-description.d.ts.map +1 -0
  16. package/bundler/bundler.d.ts +11 -0
  17. package/bundler/bundler.d.ts.map +1 -0
  18. package/bundler/bundler.js +98 -0
  19. package/bundler/bundler.js.map +1 -0
  20. package/bundler/content.js +53 -0
  21. package/bundler/content.js.map +1 -0
  22. package/bundler/substitute-bundles.js +73 -0
  23. package/bundler/substitute-bundles.js.map +1 -0
  24. package/config/additional-files.d.ts +13 -0
  25. package/config/additional-files.d.ts.map +1 -0
  26. package/config/additional-files.js +8 -0
  27. package/config/additional-files.js.map +1 -0
  28. package/config/base-validations.d.ts +5 -0
  29. package/config/base-validations.d.ts.map +1 -0
  30. package/config/base-validations.js +3 -0
  31. package/config/base-validations.js.map +1 -0
  32. package/config/config.d.ts +470 -0
  33. package/config/config.d.ts.map +1 -0
  34. package/config/config.js +65 -0
  35. package/config/config.js.map +1 -0
  36. package/config/entry-point.d.ts +13 -0
  37. package/config/entry-point.d.ts.map +1 -0
  38. package/config/entry-point.js +8 -0
  39. package/config/entry-point.js.map +1 -0
  40. package/config/package-json.d.ts +33 -0
  41. package/config/package-json.d.ts.map +1 -0
  42. package/config/package-json.js +34 -0
  43. package/config/package-json.js.map +1 -0
  44. package/config/registry-settings.d.ts +13 -0
  45. package/config/registry-settings.d.ts.map +1 -0
  46. package/config/registry-settings.js +8 -0
  47. package/config/registry-settings.js.map +1 -0
  48. package/config/validation.d.ts +13 -0
  49. package/config/validation.d.ts.map +1 -0
  50. package/config/validation.js +99 -0
  51. package/config/validation.js.map +1 -0
  52. package/config/versioning-settings.d.ts +23 -0
  53. package/config/versioning-settings.d.ts.map +1 -0
  54. package/config/versioning-settings.js +15 -0
  55. package/config/versioning-settings.js.map +1 -0
  56. package/dependency-scanner/dependency-graph.d.ts +33 -0
  57. package/dependency-scanner/dependency-graph.d.ts.map +1 -0
  58. package/dependency-scanner/dependency-graph.js +60 -0
  59. package/dependency-scanner/dependency-graph.js.map +1 -0
  60. package/dependency-scanner/scanner.d.ts +34 -0
  61. package/dependency-scanner/scanner.d.ts.map +1 -0
  62. package/dependency-scanner/scanner.js +131 -0
  63. package/dependency-scanner/scanner.js.map +1 -0
  64. package/dependency-scanner/source-file-references.js +68 -0
  65. package/dependency-scanner/source-file-references.js.map +1 -0
  66. package/dependency-scanner/source-map-file-locator.d.ts +10 -0
  67. package/dependency-scanner/source-map-file-locator.d.ts.map +1 -0
  68. package/dependency-scanner/source-map-file-locator.js +23 -0
  69. package/dependency-scanner/source-map-file-locator.js.map +1 -0
  70. package/dependency-scanner/typescript-file-host.d.ts +10 -0
  71. package/dependency-scanner/typescript-file-host.d.ts.map +1 -0
  72. package/dependency-scanner/typescript-file-host.js +50 -0
  73. package/dependency-scanner/typescript-file-host.js.map +1 -0
  74. package/dependency-scanner/typescript-project-analyzer.d.ts +23 -0
  75. package/dependency-scanner/typescript-project-analyzer.d.ts.map +1 -0
  76. package/dependency-scanner/typescript-project-analyzer.js +64 -0
  77. package/dependency-scanner/typescript-project-analyzer.js.map +1 -0
  78. package/directed-graph/graph.d.ts +27 -0
  79. package/directed-graph/graph.d.ts.map +1 -0
  80. package/directed-graph/graph.js +183 -0
  81. package/directed-graph/graph.js.map +1 -0
  82. package/file-description/compare.js +18 -0
  83. package/file-description/compare.js.map +1 -0
  84. package/file-description/equal.js +4 -0
  85. package/file-description/equal.js.map +1 -0
  86. package/file-description/file-description.d.ts +5 -0
  87. package/file-description/file-description.d.ts.map +1 -0
  88. package/file-description/sort.js +13 -0
  89. package/file-description/sort.js.map +1 -0
  90. package/package-json.js +33 -0
  91. package/package-json.js.map +1 -0
  92. package/package.json +48 -0
  93. package/packages/bundler/bundler.entry-point.js +21 -0
  94. package/packages/bundler/bundler.entry-point.js.map +1 -0
  95. package/packages/packtory/packtory.entry-point.d.ts +7 -0
  96. package/packages/packtory/packtory.entry-point.d.ts.map +1 -0
  97. package/packages/packtory/packtory.entry-point.js +32 -0
  98. package/packages/packtory/packtory.entry-point.js.map +1 -0
  99. package/packtory/map-config.js +55 -0
  100. package/packtory/map-config.js.map +1 -0
  101. package/packtory/normalize-paths.js +26 -0
  102. package/packtory/normalize-paths.js.map +1 -0
  103. package/packtory/packtory.d.ts +25 -0
  104. package/packtory/packtory.d.ts.map +1 -0
  105. package/packtory/packtory.js +30 -0
  106. package/packtory/packtory.js.map +1 -0
  107. package/packtory/scheduler.d.ts +18 -0
  108. package/packtory/scheduler.d.ts.map +1 -0
  109. package/packtory/scheduler.js +74 -0
  110. package/packtory/scheduler.js.map +1 -0
  111. package/progress/progress-broadcaster.d.ts +40 -0
  112. package/progress/progress-broadcaster.d.ts.map +1 -0
  113. package/progress/progress-broadcaster.js +16 -0
  114. package/progress/progress-broadcaster.js.map +1 -0
  115. package/publisher/extract-package-tarball.js +12 -0
  116. package/publisher/extract-package-tarball.js.map +1 -0
  117. package/publisher/publisher.d.ts +40 -0
  118. package/publisher/publisher.d.ts.map +1 -0
  119. package/publisher/publisher.js +73 -0
  120. package/publisher/publisher.js.map +1 -0
  121. package/publisher/registry-client.d.ts +24 -0
  122. package/publisher/registry-client.d.ts.map +1 -0
  123. package/publisher/registry-client.js +90 -0
  124. package/publisher/registry-client.js.map +1 -0
  125. package/publisher/version.js +35 -0
  126. package/publisher/version.js.map +1 -0
  127. package/readme.md +38 -0
  128. package/source-modifier/import-paths.js +17 -0
  129. package/source-modifier/import-paths.js.map +1 -0
  130. package/tar/extract-tar.js +17 -0
  131. package/tar/extract-tar.js.map +1 -0
  132. package/tar/tarball-builder.d.ts +7 -0
  133. package/tar/tarball-builder.d.ts.map +1 -0
  134. package/tar/tarball-builder.js +35 -0
  135. package/tar/tarball-builder.js.map +1 -0
  136. package/validation/capitalize.js +7 -0
  137. package/validation/capitalize.js.map +1 -0
  138. package/validation/formatting/ast.js +113 -0
  139. package/validation/formatting/ast.js.map +1 -0
  140. package/validation/formatting.js +98 -0
  141. package/validation/formatting.js.map +1 -0
  142. package/validation/validate.js +17 -0
  143. package/validation/validate.js.map +1 -0
@@ -0,0 +1,35 @@
1
+ import semver from 'semver';
2
+ import { serializePackageJson } from '../package-json.js';
3
+ export function increaseVersion(version, minimumVersion) {
4
+ if (minimumVersion !== undefined && semver.valid(minimumVersion) === null) {
5
+ throw new Error(`Invalid minimumVersion ${minimumVersion} provided`);
6
+ }
7
+ const newVersion = semver.inc(version, 'patch');
8
+ if (newVersion === null) {
9
+ throw new Error(`Unable to increase version number ${version}`);
10
+ }
11
+ if (minimumVersion !== undefined && semver.lt(newVersion, minimumVersion)) {
12
+ return minimumVersion;
13
+ }
14
+ return newVersion;
15
+ }
16
+ function isNotPackageJsonContentEntry(entry) {
17
+ return entry.targetFilePath !== 'package.json';
18
+ }
19
+ export function replaceBundleVersion(bundle, newVersion) {
20
+ const newPackageJson = { ...bundle.packageJson };
21
+ newPackageJson.version = newVersion;
22
+ const newContents = [
23
+ {
24
+ kind: 'source',
25
+ targetFilePath: 'package.json',
26
+ source: serializePackageJson(newPackageJson)
27
+ },
28
+ ...bundle.contents.filter(isNotPackageJsonContentEntry)
29
+ ];
30
+ return {
31
+ contents: newContents,
32
+ packageJson: newPackageJson
33
+ };
34
+ }
35
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../../source/publisher/version.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI1D,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,cAAwB;IACrE,IAAI,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,0BAA0B,cAAc,WAAW,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEhD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC;QACxE,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAoB;IACtD,OAAO,KAAK,CAAC,cAAc,KAAK,cAAc,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAyB,EAAE,UAAkB;IAC9E,MAAM,cAAc,GAAgC,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAC9E,cAAc,CAAC,OAAO,GAAG,UAAU,CAAC;IAEpC,MAAM,WAAW,GAAoB;QACjC;YACI,IAAI,EAAE,QAAQ;YACd,cAAc,EAAE,cAAc;YAC9B,MAAM,EAAE,oBAAoB,CAAC,cAAc,CAAC;SAC/C;QACD,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,4BAA4B,CAAC;KAC1D,CAAC;IAEF,OAAO;QACH,QAAQ,EAAE,WAAW;QACrB,WAAW,EAAE,cAAmC;KACnD,CAAC;AACN,CAAC"}
package/readme.md ADDED
@@ -0,0 +1,38 @@
1
+ ### packtory
2
+
3
+ **API Package for packtory**
4
+
5
+ This package provides an API for the `packtory` tool, enabling programmatic usage. It exposes a single function, `buildAndPublishAll(config, options)`, allowing you to integrate packtory into your custom workflows.
6
+
7
+ **Installation:**
8
+
9
+ ```bash
10
+ npm install packtory
11
+ ```
12
+
13
+ **Usage:**
14
+
15
+ ```javascript
16
+ import { buildAndPublishAll } from 'packtory';
17
+
18
+ const config = {
19
+ /* your packtory configuration */
20
+ };
21
+ const options = { dryRun: true }; // Example options
22
+
23
+ (async () => {
24
+ const result = await buildAndPublishAll(config, options);
25
+ console.log(result);
26
+ })();
27
+ ```
28
+
29
+ **Parameters:**
30
+
31
+ - **config:** The packtory configuration object.
32
+ - **options:** An options object, currently supporting a `dryRun` boolean.
33
+
34
+ **Return Value:**
35
+
36
+ - A `PublishAllResult` object containing either a list of successful publish results or a partial error if some packages have failed.
37
+
38
+ **Note:** Refer to the [full documentation](https://github.com/enormora/packtory/blob/main/readme.md) for additional details.
@@ -0,0 +1,17 @@
1
+ import { resolveSourceFileForLiteral } from '../dependency-scanner/source-file-references.js';
2
+ import { getSourcePathFromSourceFile } from '../dependency-scanner/typescript-project-analyzer.js';
3
+ export function replaceImportPaths(sourceFile, replacements) {
4
+ const importStringLiterals = sourceFile.getImportStringLiterals();
5
+ for (const literal of importStringLiterals) {
6
+ const sourceFileForLiteral = resolveSourceFileForLiteral(literal, sourceFile);
7
+ if (sourceFileForLiteral !== undefined) {
8
+ const fullPathForLiteral = getSourcePathFromSourceFile(sourceFileForLiteral);
9
+ const replacement = replacements.get(fullPathForLiteral);
10
+ if (replacement !== undefined) {
11
+ literal.setLiteralValue(replacement);
12
+ }
13
+ }
14
+ }
15
+ return sourceFile.getText();
16
+ }
17
+ //# sourceMappingURL=import-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-paths.js","sourceRoot":"","sources":["../../../../source/source-modifier/import-paths.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,iDAAiD,CAAC;AAC9F,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AAInG,MAAM,UAAU,kBAAkB,CAAC,UAAgC,EAAE,YAAoC;IACrG,MAAM,oBAAoB,GAAG,UAAU,CAAC,uBAAuB,EAAE,CAAC;IAElE,KAAK,MAAM,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACzC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC9E,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,kBAAkB,GAAG,2BAA2B,CAAC,oBAAoB,CAAC,CAAC;YAC7E,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAEzD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC5B,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC,OAAO,EAAE,CAAC;AAChC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { createGunzip } from 'node:zlib';
2
+ import { Readable } from 'node:stream';
3
+ import { extract } from 'tar-stream';
4
+ export async function extractTarEntries(buffer) {
5
+ const extractStream = extract();
6
+ const stream = Readable.from(buffer).pipe(createGunzip()).pipe(extractStream);
7
+ const entries = [];
8
+ for await (const entry of stream) {
9
+ let result = '';
10
+ for await (const chunk of entry) {
11
+ result += chunk.toString();
12
+ }
13
+ entries.push({ header: entry.header, content: result });
14
+ }
15
+ return entries;
16
+ }
17
+ //# sourceMappingURL=extract-tar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-tar.js","sourceRoot":"","sources":["../../../../source/tar/extract-tar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAmC,MAAM,YAAY,CAAC;AAOtE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAc;IAClD,MAAM,aAAa,GAAG,OAAO,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAe,EAAE,CAAC;IAE/B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC/B,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import type { FileDescription } from '../file-description/file-description.js';
3
+ export type TarballBuilder = {
4
+ build(fileDescriptions: readonly FileDescription[]): Promise<Buffer>;
5
+ };
6
+ export declare function createTarballBuilder(): TarballBuilder;
7
+ //# sourceMappingURL=tarball-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tarball-builder.d.ts","sourceRoot":"","sources":["../../../../source/tar/tarball-builder.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE/E,MAAM,MAAM,cAAc,GAAG;IACzB,KAAK,CAAC,gBAAgB,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACxE,CAAC;AAYF,wBAAgB,oBAAoB,IAAI,cAAc,CAkCrD"}
@@ -0,0 +1,35 @@
1
+ import zlib from 'node:zlib';
2
+ import tar, {} from 'tar-stream';
3
+ const gzipHeaderOperationSystemTypeFieldIndex = 9;
4
+ const gzipHeaderOperationSystemTypeUnknown = 255;
5
+ function unsetOperatingSystemGzipHeaderField(data) {
6
+ // eslint-disable-next-line no-param-reassign -- copying the whole buffer would be really inefficient
7
+ data[gzipHeaderOperationSystemTypeFieldIndex] = gzipHeaderOperationSystemTypeUnknown;
8
+ }
9
+ const staticFileModificationTime = new Date(0);
10
+ export function createTarballBuilder() {
11
+ function createPack(fileDescriptions) {
12
+ const pack = tar.pack();
13
+ for (const fileDescription of fileDescriptions) {
14
+ const entry = pack.entry({ name: fileDescription.filePath, mtime: staticFileModificationTime }, fileDescription.content);
15
+ entry.end();
16
+ }
17
+ pack.finalize();
18
+ return pack;
19
+ }
20
+ return {
21
+ async build(fileDescriptions) {
22
+ const pack = createPack(fileDescriptions);
23
+ const gzipStream = zlib.createGzip({ level: 9 });
24
+ const tarballStream = pack.pipe(gzipStream);
25
+ const chunks = [];
26
+ for await (const chunk of tarballStream) {
27
+ chunks.push(chunk);
28
+ }
29
+ const tarData = Buffer.concat(chunks);
30
+ unsetOperatingSystemGzipHeaderField(tarData);
31
+ return tarData;
32
+ }
33
+ };
34
+ }
35
+ //# sourceMappingURL=tarball-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tarball-builder.js","sourceRoot":"","sources":["../../../../source/tar/tarball-builder.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,GAAG,EAAE,EAAa,MAAM,YAAY,CAAC;AAO5C,MAAM,uCAAuC,GAAG,CAAC,CAAC;AAClD,MAAM,oCAAoC,GAAG,GAAG,CAAC;AAEjD,SAAS,mCAAmC,CAAC,IAAY;IACrD,qGAAqG;IACrG,IAAI,CAAC,uCAAuC,CAAC,GAAG,oCAAoC,CAAC;AACzF,CAAC;AAED,MAAM,0BAA0B,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;AAE/C,MAAM,UAAU,oBAAoB;IAChC,SAAS,UAAU,CAAC,gBAA4C;QAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAExB,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CACpB,EAAE,IAAI,EAAE,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,0BAA0B,EAAE,EACrE,eAAe,CAAC,OAAO,CAC1B,CAAC;YACF,KAAK,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO;QACH,KAAK,CAAC,KAAK,CAAC,gBAAgB;YACxB,MAAM,IAAI,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;YAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAa,EAAE,CAAC;YAE5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;gBACtC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;YACjC,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtC,mCAAmC,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO,OAAO,CAAC;QACnB,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,7 @@
1
+ export function capitalize(value) {
2
+ const firstLetterCodePoint = value.codePointAt(0);
3
+ const firstLetter = firstLetterCodePoint === undefined ? '' : String.fromCodePoint(firstLetterCodePoint);
4
+ const remainingLetters = value.slice(firstLetter.length);
5
+ return `${firstLetter.toUpperCase()}${remainingLetters}`;
6
+ }
7
+ //# sourceMappingURL=capitalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capitalize.js","sourceRoot":"","sources":["../../../../source/validation/capitalize.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,KAAa;IACpC,MAAM,oBAAoB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACzG,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACzD,OAAO,GAAG,WAAW,CAAC,WAAW,EAAE,GAAG,gBAAgB,EAAE,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,113 @@
1
+ import * as Option from 'effect/Option';
2
+ import { map, isNonEmptyReadonlyArray, flatMap } from 'effect/ReadonlyArray';
3
+ import { getIdentifierAnnotation, getTitleAnnotation, getDescriptionAnnotation, isLiteral } from '@effect/schema/AST';
4
+ function getNameFromAnnotation(ast, fallback) {
5
+ return getIdentifierAnnotation(ast).pipe(Option.orElse(() => {
6
+ return getTitleAnnotation(ast);
7
+ }), Option.orElse(() => {
8
+ return getDescriptionAnnotation(ast);
9
+ }), Option.getOrElse(() => {
10
+ return fallback;
11
+ }));
12
+ }
13
+ const astTypeToFormattedType = {
14
+ TypeLiteral: 'object',
15
+ Tuple: 'array',
16
+ StringKeyword: 'string',
17
+ NumberKeyword: 'number',
18
+ BooleanKeyword: 'boolean',
19
+ UndefinedKeyword: 'undefined',
20
+ NeverKeyword: 'never',
21
+ UnknownKeyword: 'unknown',
22
+ AnyKeyword: 'any',
23
+ BigIntKeyword: 'bigint',
24
+ VoidKeyword: 'void',
25
+ UniqueSymbol: 'symbol',
26
+ SymbolKeyword: 'symbol',
27
+ ObjectKeyword: 'object'
28
+ };
29
+ function isTupleOfLength(list, length) {
30
+ return list.length === length;
31
+ }
32
+ function isLiteralValue(type, expectedValue) {
33
+ return isLiteral(type) && type.literal === expectedValue;
34
+ }
35
+ export function isBooleanLiteralUnion(types) {
36
+ const amountOfMembersInBooleanLiteralUnion = 2;
37
+ if (!isTupleOfLength(types, amountOfMembersInBooleanLiteralUnion)) {
38
+ return false;
39
+ }
40
+ const [firstType, secondType] = types;
41
+ const isTrueOrFalse = isLiteralValue(firstType, true) && isLiteralValue(secondType, false);
42
+ const isFalseOrTrue = isLiteralValue(firstType, false) && isLiteralValue(secondType, true);
43
+ return isTrueOrFalse || isFalseOrTrue;
44
+ }
45
+ function formatTemplateLiteralSpan(span) {
46
+ const { _tag: tag } = span.type;
47
+ const formattedType = astTypeToFormattedType[tag];
48
+ return `\${${formattedType}}${span.literal}`;
49
+ }
50
+ function formatTemplateLiteralSpans(head, spans) {
51
+ const formattedSpans = spans.map(formatTemplateLiteralSpan);
52
+ return `${head}${formattedSpans.join('')}`;
53
+ }
54
+ function formatSimpleAst(ast) {
55
+ const { _tag: tag } = ast;
56
+ return [astTypeToFormattedType[tag]];
57
+ }
58
+ const formatters = {
59
+ Declaration(ast) {
60
+ return [getNameFromAnnotation(ast, '<anonymous declaration schema>')];
61
+ },
62
+ Literal(ast) {
63
+ return [JSON.stringify(ast.literal)];
64
+ },
65
+ Transform(ast) {
66
+ return [getNameFromAnnotation(ast, '<anonymous transform schema>')];
67
+ },
68
+ Union(ast) {
69
+ if (isBooleanLiteralUnion(ast.types)) {
70
+ return ['boolean'];
71
+ }
72
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define -- indirect recursion
73
+ return flatMap(ast.types, formatAst);
74
+ },
75
+ Enums(ast) {
76
+ if (isNonEmptyReadonlyArray(ast.enums)) {
77
+ return map(ast.enums, (value) => {
78
+ return JSON.stringify(value);
79
+ });
80
+ }
81
+ return ['empty enum'];
82
+ },
83
+ TemplateLiteral(ast) {
84
+ return [formatTemplateLiteralSpans(ast.head, ast.spans)];
85
+ },
86
+ Refinement(ast) {
87
+ return [getNameFromAnnotation(ast, '<anonymous refinement schema>')];
88
+ },
89
+ Suspend(ast) {
90
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define -- indirect recursion
91
+ return formatAst(ast.f());
92
+ },
93
+ TypeLiteral: formatSimpleAst,
94
+ Tuple: formatSimpleAst,
95
+ StringKeyword: formatSimpleAst,
96
+ NumberKeyword: formatSimpleAst,
97
+ BooleanKeyword: formatSimpleAst,
98
+ UndefinedKeyword: formatSimpleAst,
99
+ NeverKeyword: formatSimpleAst,
100
+ UnknownKeyword: formatSimpleAst,
101
+ AnyKeyword: formatSimpleAst,
102
+ BigIntKeyword: formatSimpleAst,
103
+ VoidKeyword: formatSimpleAst,
104
+ UniqueSymbol: formatSimpleAst,
105
+ SymbolKeyword: formatSimpleAst,
106
+ ObjectKeyword: formatSimpleAst
107
+ };
108
+ export function formatAst(ast) {
109
+ const { _tag: tag } = ast;
110
+ const formatter = formatters[tag];
111
+ return formatter(ast);
112
+ }
113
+ //# sourceMappingURL=ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../../../source/validation/formatting/ast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import { map, flatMap, initNonEmpty, lastNonEmpty } from 'effect/ReadonlyArray';
2
+ import { capitalize } from './capitalize.js';
3
+ import { formatAst, isBooleanLiteralUnion } from './formatting/ast.js';
4
+ function uniqueList(values) {
5
+ return Array.from(new Set(values));
6
+ }
7
+ function hasTag(value, expectedTag) {
8
+ const { _tag: tag } = value;
9
+ return tag === expectedTag;
10
+ }
11
+ function formatOneOrMany(values) {
12
+ const uniqueValues = uniqueList(values);
13
+ const last = lastNonEmpty(uniqueValues);
14
+ const init = initNonEmpty(uniqueValues);
15
+ if (init.length > 0) {
16
+ return `one of ${init.join(', ')} or ${last}`;
17
+ }
18
+ return last;
19
+ }
20
+ function formatActual(value) {
21
+ if (Array.isArray(value)) {
22
+ return 'array';
23
+ }
24
+ if (value === null) {
25
+ return 'null';
26
+ }
27
+ return typeof value;
28
+ }
29
+ function formatMessageWithPath(path, message) {
30
+ if (path.length > 0) {
31
+ const formattedPath = path.join('.');
32
+ return `At ${formattedPath}: ${message}`;
33
+ }
34
+ return capitalize(message);
35
+ }
36
+ function formatMessage(expected, actual) {
37
+ return `expected ${formatOneOrMany(expected)}; but got ${formatActual(actual)}`;
38
+ }
39
+ function isTypeIssue(issue) {
40
+ return hasTag(issue, 'Type');
41
+ }
42
+ function formatUnionIssues(issues, path) {
43
+ const parseIssues = map(issues, (issue) => {
44
+ if (hasTag(issue, 'Member')) {
45
+ return issue.error;
46
+ }
47
+ return issue;
48
+ });
49
+ if (parseIssues.every(isTypeIssue)) {
50
+ const expectedAsts = map(parseIssues, (issue) => {
51
+ return issue.ast;
52
+ });
53
+ const list = isBooleanLiteralUnion(expectedAsts)
54
+ ? ['boolean']
55
+ : flatMap(expectedAsts, formatAst);
56
+ return [formatMessageWithPath(path, formatMessage(list, parseIssues[0].actual))];
57
+ }
58
+ return flatMap(parseIssues, (issue) => {
59
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define -- indirect recursion
60
+ return format(issue, path);
61
+ });
62
+ }
63
+ function isContainerIssue(parseIssue) {
64
+ return hasTag(parseIssue, 'Tuple') || hasTag(parseIssue, 'TypeLiteral');
65
+ }
66
+ function formatContainerIssue(issue, path) {
67
+ const newPathItem = hasTag(issue, 'Key') ? issue.key : issue.index;
68
+ const newPath = [...path, newPathItem];
69
+ if (hasTag(issue.error, 'Missing')) {
70
+ return [formatMessageWithPath(newPath, 'missing key or index')];
71
+ }
72
+ if (hasTag(issue.error, 'Unexpected')) {
73
+ return [formatMessageWithPath(newPath, 'unexpected extra key or index')];
74
+ }
75
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define -- indirect recursion
76
+ return format(issue.error, newPath);
77
+ }
78
+ function format(parseIssue, path) {
79
+ if (hasTag(parseIssue, 'Refinement') || hasTag(parseIssue, 'Transform')) {
80
+ return format(parseIssue.error, path);
81
+ }
82
+ if (hasTag(parseIssue, 'Forbidden')) {
83
+ return [formatMessageWithPath(path, 'forbidden')];
84
+ }
85
+ if (isContainerIssue(parseIssue)) {
86
+ return flatMap(parseIssue.errors, (error) => {
87
+ return formatContainerIssue(error, path);
88
+ });
89
+ }
90
+ if (hasTag(parseIssue, 'Union')) {
91
+ return formatUnionIssues(parseIssue.errors, path);
92
+ }
93
+ return [formatMessageWithPath(path, formatMessage(formatAst(parseIssue.ast), parseIssue.actual))];
94
+ }
95
+ export function formatAllParseIssues(parseError) {
96
+ return uniqueList(format(parseError.error, []));
97
+ }
98
+ //# sourceMappingURL=formatting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../../../source/validation/formatting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { parseEither } from '@effect/schema/Schema';
2
+ import { Result } from 'true-myth';
3
+ import { isRight } from 'effect/Either';
4
+ import { formatAllParseIssues } from './formatting.js';
5
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- https://github.com/microsoft/TypeScript/issues/1213
6
+ export function validateAgainstSchema(schema, data) {
7
+ const result = parseEither(schema)(data, { errors: 'all', onExcessProperty: 'error' });
8
+ if (isRight(result)) {
9
+ return Result.ok(result.right);
10
+ }
11
+ const issues = formatAllParseIssues(result.left);
12
+ return Result.err({
13
+ issues,
14
+ summary: `Validation failed with ${issues.length} issue(s):\n* ${issues.join('\n* ')}`
15
+ });
16
+ }
17
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../../source/validation/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAOvD,qHAAqH;AACrH,MAAM,UAAU,qBAAqB,CACjC,MAAe,EACf,IAAa;IAEb,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC;IAEvF,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEjD,OAAO,MAAM,CAAC,GAAG,CAAC;QACd,MAAM;QACN,OAAO,EAAE,0BAA0B,MAAM,CAAC,MAAM,iBAAiB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;KACzF,CAAC,CAAC;AACP,CAAC"}