@skastr0/pulsar-project-module-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/definition.d.ts +49 -0
  2. package/dist/definition.d.ts.map +1 -0
  3. package/dist/definition.js +73 -0
  4. package/dist/definition.js.map +1 -0
  5. package/dist/factor-policy-helper.d.ts +26 -0
  6. package/dist/factor-policy-helper.d.ts.map +1 -0
  7. package/dist/factor-policy-helper.js +34 -0
  8. package/dist/factor-policy-helper.js.map +1 -0
  9. package/dist/helpers.d.ts +70 -0
  10. package/dist/helpers.d.ts.map +1 -0
  11. package/dist/helpers.js +132 -0
  12. package/dist/helpers.js.map +1 -0
  13. package/dist/index.d.ts +8 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +7 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/loader-bundle.d.ts +5 -0
  18. package/dist/loader-bundle.d.ts.map +1 -0
  19. package/dist/loader-bundle.js +49 -0
  20. package/dist/loader-bundle.js.map +1 -0
  21. package/dist/loader-fs.d.ts +5 -0
  22. package/dist/loader-fs.d.ts.map +1 -0
  23. package/dist/loader-fs.js +13 -0
  24. package/dist/loader-fs.js.map +1 -0
  25. package/dist/loader-materialize.d.ts +7 -0
  26. package/dist/loader-materialize.d.ts.map +1 -0
  27. package/dist/loader-materialize.js +179 -0
  28. package/dist/loader-materialize.js.map +1 -0
  29. package/dist/loader-paths.d.ts +13 -0
  30. package/dist/loader-paths.d.ts.map +1 -0
  31. package/dist/loader-paths.js +59 -0
  32. package/dist/loader-paths.js.map +1 -0
  33. package/dist/loader-realpath.d.ts +5 -0
  34. package/dist/loader-realpath.d.ts.map +1 -0
  35. package/dist/loader-realpath.js +13 -0
  36. package/dist/loader-realpath.js.map +1 -0
  37. package/dist/loader-resolution.d.ts +12 -0
  38. package/dist/loader-resolution.d.ts.map +1 -0
  39. package/dist/loader-resolution.js +168 -0
  40. package/dist/loader-resolution.js.map +1 -0
  41. package/dist/loader-source-files.d.ts +9 -0
  42. package/dist/loader-source-files.d.ts.map +1 -0
  43. package/dist/loader-source-files.js +167 -0
  44. package/dist/loader-source-files.js.map +1 -0
  45. package/dist/loader-types.d.ts +17 -0
  46. package/dist/loader-types.d.ts.map +1 -0
  47. package/dist/loader-types.js +9 -0
  48. package/dist/loader-types.js.map +1 -0
  49. package/dist/loader.d.ts +7 -0
  50. package/dist/loader.d.ts.map +1 -0
  51. package/dist/loader.js +66 -0
  52. package/dist/loader.js.map +1 -0
  53. package/dist/manifest.d.ts +148 -0
  54. package/dist/manifest.d.ts.map +1 -0
  55. package/dist/manifest.js +51 -0
  56. package/dist/manifest.js.map +1 -0
  57. package/package.json +49 -0
@@ -0,0 +1,167 @@
1
+ import { createRequire } from "node:module";
2
+ import { dirname, extname, resolve } from "node:path";
3
+ import { Effect } from "effect";
4
+ import { preProcessFile } from "typescript";
5
+ import { ProjectModuleLoadError } from "./loader-types.js";
6
+ import { isPathInside, isRecord, realFileOption, } from "./loader-paths.js";
7
+ const PROJECT_MODULE_SOURCE_EXTENSIONS = [
8
+ ".js",
9
+ ".mjs",
10
+ ".cjs",
11
+ ".ts",
12
+ ".tsx",
13
+ ".mts",
14
+ ".cts",
15
+ ".json",
16
+ ];
17
+ export const collectProjectModuleSourceFiles = (ref, target, sourceRoot, sourceRefForPath) => Effect.gen(function* () {
18
+ const files = [];
19
+ const seen = new Set();
20
+ const sourcePackageName = yield* readProjectModulePackageNameOption(ref, target, sourceRoot);
21
+ const addFile = (path) => {
22
+ if (seen.has(path))
23
+ return;
24
+ seen.add(path);
25
+ files.push({
26
+ sourceRef: sourceRefForPath(path),
27
+ path,
28
+ });
29
+ };
30
+ const visit = (path) => Effect.gen(function* () {
31
+ const resolvedPath = yield* realpathOrSourceError(ref, target, path);
32
+ if (!isPathInside(sourceRoot, resolvedPath)) {
33
+ return yield* new ProjectModuleLoadError({
34
+ refId: ref.id,
35
+ target,
36
+ message: `Project module ${ref.id} imports source outside its owned source root`,
37
+ });
38
+ }
39
+ if (seen.has(resolvedPath))
40
+ return;
41
+ addFile(resolvedPath);
42
+ if (!isJavaScriptLikeProjectModuleSource(resolvedPath))
43
+ return;
44
+ const content = yield* readSourceFile(ref, target, resolvedPath);
45
+ for (const specifier of projectModuleSourceSpecifiers(content)) {
46
+ const importedPath = yield* resolveOwnedProjectModuleSourceSpecifier(ref, target, sourceRoot, resolvedPath, specifier, sourcePackageName);
47
+ if (importedPath !== undefined) {
48
+ yield* visit(importedPath);
49
+ }
50
+ }
51
+ });
52
+ yield* visit(target);
53
+ const packageJsonPath = yield* realFileOption(resolve(sourceRoot, "package.json"));
54
+ if (packageJsonPath !== undefined && isPathInside(sourceRoot, packageJsonPath)) {
55
+ addFile(packageJsonPath);
56
+ }
57
+ return files;
58
+ });
59
+ const projectModuleSourceSpecifiers = (content) => {
60
+ const info = preProcessFile(content, true, true);
61
+ return [
62
+ ...new Set([...info.importedFiles, ...info.referencedFiles].map((file) => file.fileName)),
63
+ ].sort();
64
+ };
65
+ const resolveOwnedProjectModuleSourceSpecifier = (ref, target, sourceRoot, fromFile, specifier, sourcePackageName) => {
66
+ if (isRelativeModuleSpecifier(specifier)) {
67
+ return resolveLocalProjectModuleSourceFile(ref, target, sourceRoot, dirname(fromFile), specifier);
68
+ }
69
+ if (!isOwnedPackageModuleSpecifier(specifier, sourcePackageName)) {
70
+ return Effect.succeed(undefined);
71
+ }
72
+ return resolvePackageLocalProjectModuleSourceFile(ref, target, sourceRoot, fromFile, specifier);
73
+ };
74
+ const resolveLocalProjectModuleSourceFile = (ref, target, sourceRoot, fromDirectory, specifier) => Effect.gen(function* () {
75
+ const requestedPath = resolve(fromDirectory, specifier);
76
+ if (!isPathInside(sourceRoot, requestedPath)) {
77
+ return yield* outsideOwnedSourceError(ref, target);
78
+ }
79
+ for (const candidate of localProjectModuleSourceCandidates(requestedPath)) {
80
+ const file = yield* realFileOption(candidate);
81
+ if (file === undefined)
82
+ continue;
83
+ if (!isPathInside(sourceRoot, file)) {
84
+ return yield* outsideOwnedSourceError(ref, target);
85
+ }
86
+ return file;
87
+ }
88
+ return undefined;
89
+ });
90
+ const resolvePackageLocalProjectModuleSourceFile = (ref, target, sourceRoot, fromFile, specifier) => Effect.gen(function* () {
91
+ const resolved = yield* Effect.sync(() => {
92
+ try {
93
+ return createRequire(fromFile).resolve(specifier);
94
+ }
95
+ catch {
96
+ return undefined;
97
+ }
98
+ });
99
+ if (resolved === undefined)
100
+ return undefined;
101
+ const file = yield* realFileOption(resolved);
102
+ if (file === undefined)
103
+ return undefined;
104
+ if (!isPathInside(sourceRoot, file))
105
+ return undefined;
106
+ return file;
107
+ });
108
+ const readProjectModulePackageNameOption = (ref, target, sourceRoot) => Effect.gen(function* () {
109
+ const packageJsonPath = yield* realFileOption(resolve(sourceRoot, "package.json"));
110
+ if (packageJsonPath === undefined)
111
+ return undefined;
112
+ const packageJson = yield* readSourceFile(ref, target, packageJsonPath);
113
+ const parsed = yield* Effect.try({
114
+ try: () => JSON.parse(packageJson),
115
+ catch: (cause) => new ProjectModuleLoadError({
116
+ refId: ref.id,
117
+ target,
118
+ message: `Failed to parse project module package scope manifest`,
119
+ cause,
120
+ }),
121
+ });
122
+ const name = isRecord(parsed) ? parsed.name : undefined;
123
+ return typeof name === "string" ? name : undefined;
124
+ });
125
+ const localProjectModuleSourceCandidates = (requestedPath) => {
126
+ const candidates = new Set([requestedPath]);
127
+ for (const extension of PROJECT_MODULE_SOURCE_EXTENSIONS) {
128
+ candidates.add(`${requestedPath}${extension}`);
129
+ candidates.add(resolve(requestedPath, `index${extension}`));
130
+ }
131
+ return [...candidates];
132
+ };
133
+ const isJavaScriptLikeProjectModuleSource = (path) => new Set(PROJECT_MODULE_SOURCE_EXTENSIONS).has(extname(path)) && extname(path) !== ".json";
134
+ const isRelativeModuleSpecifier = (specifier) => specifier.startsWith("./") || specifier.startsWith("../");
135
+ const isOwnedPackageModuleSpecifier = (specifier, sourcePackageName) => specifier.startsWith("#") ||
136
+ (sourcePackageName !== undefined &&
137
+ (specifier === sourcePackageName || specifier.startsWith(`${sourcePackageName}/`)));
138
+ const realpathOrSourceError = (ref, target, path) => Effect.tryPromise({
139
+ try: async () => {
140
+ const { realpath } = await import("node:fs/promises");
141
+ return realpath(path);
142
+ },
143
+ catch: (cause) => new ProjectModuleLoadError({
144
+ refId: ref.id,
145
+ target,
146
+ message: `Failed to resolve project module source file ${path}`,
147
+ cause,
148
+ }),
149
+ });
150
+ const readSourceFile = (ref, target, path) => Effect.tryPromise({
151
+ try: async () => {
152
+ const { readFile } = await import("node:fs/promises");
153
+ return readFile(path, "utf8");
154
+ },
155
+ catch: (cause) => new ProjectModuleLoadError({
156
+ refId: ref.id,
157
+ target,
158
+ message: `Failed to read project module source file ${path}`,
159
+ cause,
160
+ }),
161
+ });
162
+ const outsideOwnedSourceError = (ref, target) => new ProjectModuleLoadError({
163
+ refId: ref.id,
164
+ target,
165
+ message: `Project module ${ref.id} imports local source outside its owned source root`,
166
+ });
167
+ //# sourceMappingURL=loader-source-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader-source-files.js","sourceRoot":"","sources":["../src/loader-source-files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { Schema } from "effect";
2
+ declare const ProjectModuleLoadError_base: Schema.TaggedErrorClass<ProjectModuleLoadError, "ProjectModuleLoadError", {
3
+ readonly _tag: Schema.tag<"ProjectModuleLoadError">;
4
+ } & {
5
+ refId: typeof Schema.String;
6
+ target: typeof Schema.String;
7
+ message: typeof Schema.String;
8
+ cause: Schema.optional<typeof Schema.Unknown>;
9
+ }>;
10
+ export declare class ProjectModuleLoadError extends ProjectModuleLoadError_base {
11
+ }
12
+ export interface ProjectModuleLoadOptions {
13
+ readonly repoRoot: string;
14
+ readonly dependencyRoot?: string;
15
+ }
16
+ export {};
17
+ //# sourceMappingURL=loader-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader-types.d.ts","sourceRoot":"","sources":["../src/loader-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;;;;;;;;;AAE/B,qBAAa,sBAAuB,SAAQ,2BAQ3C;CAAG;AAEJ,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CACjC"}
@@ -0,0 +1,9 @@
1
+ import { Schema } from "effect";
2
+ export class ProjectModuleLoadError extends Schema.TaggedError()("ProjectModuleLoadError", {
3
+ refId: Schema.String,
4
+ target: Schema.String,
5
+ message: Schema.String,
6
+ cause: Schema.optional(Schema.Unknown),
7
+ }) {
8
+ }
9
+ //# sourceMappingURL=loader-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader-types.js","sourceRoot":"","sources":["../src/loader-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,MAAM,OAAO,sBAAuB,SAAQ,MAAM,CAAC,WAAW,EAA0B,CACtF,wBAAwB,EACxB;IACE,KAAK,EAAE,MAAM,CAAC,MAAM;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;CACvC,CACF;CAAG"}
@@ -0,0 +1,7 @@
1
+ import { Effect } from "effect";
2
+ import { type DefinedProjectModule } from "./definition.js";
3
+ import type { ProjectModuleManifest, ProjectModuleRef } from "./manifest.js";
4
+ import { ProjectModuleLoadError, type ProjectModuleLoadOptions } from "./loader-types.js";
5
+ export declare const loadProjectModuleRef: (ref: ProjectModuleRef, options: ProjectModuleLoadOptions) => Effect.Effect<DefinedProjectModule, ProjectModuleLoadError>;
6
+ export declare const loadEnabledProjectModules: (manifest: ProjectModuleManifest, options: ProjectModuleLoadOptions) => Effect.Effect<ReadonlyArray<DefinedProjectModule>, ProjectModuleLoadError>;
7
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAK/B,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5E,OAAO,EACL,sBAAsB,EACtB,KAAK,wBAAwB,EAC9B,MAAM,mBAAmB,CAAA;AAM1B,eAAO,MAAM,oBAAoB,GAC/B,KAAK,gBAAgB,EACrB,SAAS,wBAAwB,KAChC,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,sBAAsB,CAwCzD,CAAA;AAEJ,eAAO,MAAM,yBAAyB,GACpC,UAAU,qBAAqB,EAC/B,SAAS,wBAAwB,KAChC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE,sBAAsB,CAKzE,CAAA"}
package/dist/loader.js ADDED
@@ -0,0 +1,66 @@
1
+ import { Effect } from "effect";
2
+ import { activateProjectModule, } from "@skastr0/pulsar-core/calibration";
3
+ import { defineProjectModule, isDefinedProjectModule, isProjectModuleDefinitionInput, } from "./definition.js";
4
+ import { ProjectModuleLoadError, } from "./loader-types.js";
5
+ import { resolveProjectModuleRefTarget, } from "./loader-resolution.js";
6
+ export const loadProjectModuleRef = (ref, options) => Effect.gen(function* () {
7
+ const resolvedTarget = yield* resolveProjectModuleRefTarget(ref, options);
8
+ const target = resolvedTarget.target;
9
+ const imported = yield* Effect.tryPromise({
10
+ try: () => import(target),
11
+ catch: (cause) => new ProjectModuleLoadError({
12
+ refId: ref.id,
13
+ target,
14
+ message: `Failed to import project module ${ref.id}`,
15
+ cause,
16
+ }),
17
+ });
18
+ const exportName = ref.exportName ?? "default";
19
+ const exported = imported[exportName];
20
+ if (exported === undefined) {
21
+ return yield* new ProjectModuleLoadError({
22
+ refId: ref.id,
23
+ target,
24
+ message: `Project module ${ref.id} does not export ${exportName}`,
25
+ });
26
+ }
27
+ const value = typeof exported === "function"
28
+ ? yield* Effect.tryPromise({
29
+ try: () => Promise.resolve(exported({ ref, config: ref.config ?? {}, options })),
30
+ catch: (cause) => new ProjectModuleLoadError({
31
+ refId: ref.id,
32
+ target,
33
+ message: `Project module ${ref.id} factory failed`,
34
+ cause,
35
+ }),
36
+ })
37
+ : exported;
38
+ const module = yield* normalizeLoadedProjectModule(ref, target, value);
39
+ return withLoadedProjectModuleSourceIdentity(module, resolvedTarget);
40
+ });
41
+ export const loadEnabledProjectModules = (manifest, options) => Effect.forEach(manifest.modules.filter((ref) => ref.enabled), (ref) => loadProjectModuleRef(ref, options), { concurrency: 4 });
42
+ const normalizeLoadedProjectModule = (ref, target, value) => {
43
+ if (isDefinedProjectModule(value))
44
+ return Effect.succeed(value);
45
+ if (isProjectModuleDefinitionInput(value))
46
+ return Effect.succeed(defineProjectModule(value));
47
+ return Effect.fail(new ProjectModuleLoadError({
48
+ refId: ref.id,
49
+ target,
50
+ message: `Project module ${ref.id} must export a DefinedProjectModule or ProjectModuleDefinitionInput`,
51
+ }));
52
+ };
53
+ const withLoadedProjectModuleSourceIdentity = (module, target) => {
54
+ const descriptor = {
55
+ ...module.descriptor,
56
+ source: target.source,
57
+ sourceRef: target.sourceRef,
58
+ sourceFingerprint: target.sourceFingerprint,
59
+ };
60
+ return {
61
+ descriptor,
62
+ activeModule: activateProjectModule(descriptor),
63
+ processors: module.processors,
64
+ };
65
+ };
66
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ import { Schema } from "effect";
2
+ export declare const ProjectModuleRefConfig: Schema.Record$<typeof Schema.String, typeof Schema.Unknown>;
3
+ export type ProjectModuleRefConfig = typeof ProjectModuleRefConfig.Type;
4
+ export declare const RepoLocalProjectModuleRef: Schema.extend<Schema.Struct<{
5
+ id: Schema.filter<typeof Schema.String>;
6
+ enabled: Schema.optionalWith<typeof Schema.Boolean, {
7
+ default: () => true;
8
+ }>;
9
+ exportName: Schema.optional<Schema.filter<typeof Schema.String>>;
10
+ config: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.Unknown>>;
11
+ }>, Schema.Struct<{
12
+ kind: Schema.Literal<["repo-local"]>;
13
+ path: Schema.filter<typeof Schema.String>;
14
+ }>>;
15
+ export type RepoLocalProjectModuleRef = typeof RepoLocalProjectModuleRef.Type;
16
+ export declare const WorkspaceProjectModuleRef: Schema.extend<Schema.Struct<{
17
+ id: Schema.filter<typeof Schema.String>;
18
+ enabled: Schema.optionalWith<typeof Schema.Boolean, {
19
+ default: () => true;
20
+ }>;
21
+ exportName: Schema.optional<Schema.filter<typeof Schema.String>>;
22
+ config: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.Unknown>>;
23
+ }>, Schema.Struct<{
24
+ kind: Schema.Literal<["workspace"]>;
25
+ packageName: Schema.filter<typeof Schema.String>;
26
+ }>>;
27
+ export type WorkspaceProjectModuleRef = typeof WorkspaceProjectModuleRef.Type;
28
+ export declare const PackageProjectModuleRef: Schema.extend<Schema.Struct<{
29
+ id: Schema.filter<typeof Schema.String>;
30
+ enabled: Schema.optionalWith<typeof Schema.Boolean, {
31
+ default: () => true;
32
+ }>;
33
+ exportName: Schema.optional<Schema.filter<typeof Schema.String>>;
34
+ config: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.Unknown>>;
35
+ }>, Schema.Struct<{
36
+ kind: Schema.Literal<["package"]>;
37
+ packageName: Schema.filter<typeof Schema.String>;
38
+ version: Schema.optional<Schema.filter<typeof Schema.String>>;
39
+ }>>;
40
+ export type PackageProjectModuleRef = typeof PackageProjectModuleRef.Type;
41
+ export declare const ProjectModuleRef: Schema.Union<[Schema.extend<Schema.Struct<{
42
+ id: Schema.filter<typeof Schema.String>;
43
+ enabled: Schema.optionalWith<typeof Schema.Boolean, {
44
+ default: () => true;
45
+ }>;
46
+ exportName: Schema.optional<Schema.filter<typeof Schema.String>>;
47
+ config: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.Unknown>>;
48
+ }>, Schema.Struct<{
49
+ kind: Schema.Literal<["repo-local"]>;
50
+ path: Schema.filter<typeof Schema.String>;
51
+ }>>, Schema.extend<Schema.Struct<{
52
+ id: Schema.filter<typeof Schema.String>;
53
+ enabled: Schema.optionalWith<typeof Schema.Boolean, {
54
+ default: () => true;
55
+ }>;
56
+ exportName: Schema.optional<Schema.filter<typeof Schema.String>>;
57
+ config: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.Unknown>>;
58
+ }>, Schema.Struct<{
59
+ kind: Schema.Literal<["workspace"]>;
60
+ packageName: Schema.filter<typeof Schema.String>;
61
+ }>>, Schema.extend<Schema.Struct<{
62
+ id: Schema.filter<typeof Schema.String>;
63
+ enabled: Schema.optionalWith<typeof Schema.Boolean, {
64
+ default: () => true;
65
+ }>;
66
+ exportName: Schema.optional<Schema.filter<typeof Schema.String>>;
67
+ config: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.Unknown>>;
68
+ }>, Schema.Struct<{
69
+ kind: Schema.Literal<["package"]>;
70
+ packageName: Schema.filter<typeof Schema.String>;
71
+ version: Schema.optional<Schema.filter<typeof Schema.String>>;
72
+ }>>]>;
73
+ export type ProjectModuleRef = typeof ProjectModuleRef.Type;
74
+ export declare const ProjectModuleManifest: Schema.Struct<{
75
+ schema: Schema.optionalWith<Schema.Literal<["pulsar/project-modules/v1"]>, {
76
+ default: () => "pulsar/project-modules/v1";
77
+ }>;
78
+ modules: Schema.Array$<Schema.Union<[Schema.extend<Schema.Struct<{
79
+ id: Schema.filter<typeof Schema.String>;
80
+ enabled: Schema.optionalWith<typeof Schema.Boolean, {
81
+ default: () => true;
82
+ }>;
83
+ exportName: Schema.optional<Schema.filter<typeof Schema.String>>;
84
+ config: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.Unknown>>;
85
+ }>, Schema.Struct<{
86
+ kind: Schema.Literal<["repo-local"]>;
87
+ path: Schema.filter<typeof Schema.String>;
88
+ }>>, Schema.extend<Schema.Struct<{
89
+ id: Schema.filter<typeof Schema.String>;
90
+ enabled: Schema.optionalWith<typeof Schema.Boolean, {
91
+ default: () => true;
92
+ }>;
93
+ exportName: Schema.optional<Schema.filter<typeof Schema.String>>;
94
+ config: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.Unknown>>;
95
+ }>, Schema.Struct<{
96
+ kind: Schema.Literal<["workspace"]>;
97
+ packageName: Schema.filter<typeof Schema.String>;
98
+ }>>, Schema.extend<Schema.Struct<{
99
+ id: Schema.filter<typeof Schema.String>;
100
+ enabled: Schema.optionalWith<typeof Schema.Boolean, {
101
+ default: () => true;
102
+ }>;
103
+ exportName: Schema.optional<Schema.filter<typeof Schema.String>>;
104
+ config: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.Unknown>>;
105
+ }>, Schema.Struct<{
106
+ kind: Schema.Literal<["package"]>;
107
+ packageName: Schema.filter<typeof Schema.String>;
108
+ version: Schema.optional<Schema.filter<typeof Schema.String>>;
109
+ }>>]>>;
110
+ }>;
111
+ export type ProjectModuleManifest = typeof ProjectModuleManifest.Type;
112
+ export declare const decodeProjectModuleManifest: (u: unknown, overrideOptions?: import("effect/SchemaAST").ParseOptions) => import("effect/Effect").Effect<{
113
+ readonly schema: "pulsar/project-modules/v1";
114
+ readonly modules: readonly (({
115
+ readonly id: string;
116
+ readonly enabled: boolean;
117
+ readonly exportName?: string | undefined;
118
+ readonly config?: {
119
+ readonly [x: string]: unknown;
120
+ } | undefined;
121
+ } & {
122
+ readonly path: string;
123
+ readonly kind: "repo-local";
124
+ }) | ({
125
+ readonly id: string;
126
+ readonly enabled: boolean;
127
+ readonly exportName?: string | undefined;
128
+ readonly config?: {
129
+ readonly [x: string]: unknown;
130
+ } | undefined;
131
+ } & {
132
+ readonly kind: "workspace";
133
+ readonly packageName: string;
134
+ }) | ({
135
+ readonly id: string;
136
+ readonly enabled: boolean;
137
+ readonly exportName?: string | undefined;
138
+ readonly config?: {
139
+ readonly [x: string]: unknown;
140
+ } | undefined;
141
+ } & {
142
+ readonly version?: string | undefined;
143
+ readonly kind: "package";
144
+ readonly packageName: string;
145
+ }))[];
146
+ }, import("effect/ParseResult").ParseError, never>;
147
+ export declare const fingerprintProjectModuleManifest: (manifest: ProjectModuleManifest) => string;
148
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAK/B,eAAO,MAAM,sBAAsB,6DAGjC,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,IAAI,CAAA;AASvE,eAAO,MAAM,yBAAyB;;;;;;;;;;GAMrC,CAAA;AACD,MAAM,MAAM,yBAAyB,GAAG,OAAO,yBAAyB,CAAC,IAAI,CAAA;AAE7E,eAAO,MAAM,yBAAyB;;;;;;;;;;GAMrC,CAAA;AACD,MAAM,MAAM,yBAAyB,GAAG,OAAO,yBAAyB,CAAC,IAAI,CAAA;AAE7E,eAAO,MAAM,uBAAuB;;;;;;;;;;;GAOnC,CAAA;AACD,MAAM,MAAM,uBAAuB,GAAG,OAAO,uBAAuB,CAAC,IAAI,CAAA;AAEzE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAI5B,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAA;AAE3D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKhC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAA;AAErE,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDACK,CAAA;AAE7C,eAAO,MAAM,gCAAgC,GAC3C,UAAU,qBAAqB,KAC9B,MAIC,CAAA"}
@@ -0,0 +1,51 @@
1
+ import { Schema } from "effect";
2
+ import { hashCalibrationValue } from "@skastr0/pulsar-core/calibration";
3
+ const NonEmptyString = Schema.String.pipe(Schema.pattern(/.+/));
4
+ export const ProjectModuleRefConfig = Schema.Record({
5
+ key: Schema.String,
6
+ value: Schema.Unknown,
7
+ });
8
+ const ProjectModuleRefBase = Schema.Struct({
9
+ id: NonEmptyString,
10
+ enabled: Schema.optionalWith(Schema.Boolean, { default: () => true }),
11
+ exportName: Schema.optional(NonEmptyString),
12
+ config: Schema.optional(ProjectModuleRefConfig),
13
+ });
14
+ export const RepoLocalProjectModuleRef = Schema.extend(ProjectModuleRefBase, Schema.Struct({
15
+ kind: Schema.Literal("repo-local"),
16
+ path: NonEmptyString,
17
+ }));
18
+ export const WorkspaceProjectModuleRef = Schema.extend(ProjectModuleRefBase, Schema.Struct({
19
+ kind: Schema.Literal("workspace"),
20
+ packageName: NonEmptyString,
21
+ }));
22
+ export const PackageProjectModuleRef = Schema.extend(ProjectModuleRefBase, Schema.Struct({
23
+ kind: Schema.Literal("package"),
24
+ packageName: NonEmptyString,
25
+ version: Schema.optional(NonEmptyString),
26
+ }));
27
+ export const ProjectModuleRef = Schema.Union(RepoLocalProjectModuleRef, WorkspaceProjectModuleRef, PackageProjectModuleRef);
28
+ export const ProjectModuleManifest = Schema.Struct({
29
+ schema: Schema.optionalWith(Schema.Literal("pulsar/project-modules/v1"), {
30
+ default: () => "pulsar/project-modules/v1",
31
+ }),
32
+ modules: Schema.Array(ProjectModuleRef),
33
+ });
34
+ export const decodeProjectModuleManifest = Schema.decodeUnknown(ProjectModuleManifest);
35
+ export const fingerprintProjectModuleManifest = (manifest) => hashCalibrationValue({
36
+ schema: manifest.schema,
37
+ modules: normalizeProjectModuleRefs(manifest.modules),
38
+ });
39
+ const normalizeProjectModuleRefs = (refs) => [...refs].sort((left, right) => left.id.localeCompare(right.id) ||
40
+ left.kind.localeCompare(right.kind) ||
41
+ moduleRefTarget(left).localeCompare(moduleRefTarget(right)));
42
+ const moduleRefTarget = (ref) => {
43
+ switch (ref.kind) {
44
+ case "repo-local":
45
+ return ref.path;
46
+ case "workspace":
47
+ case "package":
48
+ return ref.packageName;
49
+ }
50
+ };
51
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@skastr0/pulsar-project-module-sdk",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "Project module authoring SDK for Pulsar calibration processors",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/skastr0/pulsar.git",
10
+ "directory": "packages/project-module-sdk"
11
+ },
12
+ "homepage": "https://github.com/skastr0/pulsar#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/skastr0/pulsar/issues"
15
+ },
16
+ "keywords": [
17
+ "pulsar",
18
+ "calibration",
19
+ "project-module",
20
+ "sdk"
21
+ ],
22
+ "publishConfig": {
23
+ "access": "public"
24
+ },
25
+ "main": "./dist/index.js",
26
+ "types": "./dist/index.d.ts",
27
+ "exports": {
28
+ ".": {
29
+ "types": "./dist/index.d.ts",
30
+ "default": "./dist/index.js"
31
+ }
32
+ },
33
+ "files": [
34
+ "dist",
35
+ "!dist/__tests__",
36
+ "!dist/__tests__/**"
37
+ ],
38
+ "scripts": {
39
+ "build": "tsc -b",
40
+ "typecheck": "tsc -b",
41
+ "test": "bun test ./src",
42
+ "clean": "rm -rf dist tsconfig.tsbuildinfo"
43
+ },
44
+ "dependencies": {
45
+ "@skastr0/pulsar-core": "0.1.0",
46
+ "effect": "^3.0.0",
47
+ "typescript": "^5.8.0"
48
+ }
49
+ }