@epic-web/workshop-utils 6.14.2 → 6.14.4

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.
@@ -8,7 +8,7 @@ declare const schema: z.ZodEffects<z.ZodObject<{
8
8
  EPICSHOP_PARENT_PORT: z.ZodOptional<z.ZodString>;
9
9
  EPICSHOP_PARENT_TOKEN: z.ZodOptional<z.ZodString>;
10
10
  EPICSHOP_APP_LOCATION: z.ZodOptional<z.ZodString>;
11
- EPICSHOP_IS_PUBLISHED: z.ZodOptional<z.ZodString>;
11
+ EPICSHOP_IS_PUBLISHED: z.ZodDefault<z.ZodString>;
12
12
  SENTRY_DSN: z.ZodDefault<z.ZodString>;
13
13
  SENTRY_ORG: z.ZodDefault<z.ZodString>;
14
14
  SENTRY_PROJECT: z.ZodDefault<z.ZodString>;
@@ -19,6 +19,7 @@ declare const schema: z.ZodEffects<z.ZodObject<{
19
19
  EPICSHOP_GITHUB_REPO: string;
20
20
  EPICSHOP_GITHUB_ROOT: string;
21
21
  EPICSHOP_APP_VERSION: string;
22
+ EPICSHOP_IS_PUBLISHED: string;
22
23
  SENTRY_DSN: string;
23
24
  SENTRY_ORG: string;
24
25
  SENTRY_PROJECT: string;
@@ -26,7 +27,6 @@ declare const schema: z.ZodEffects<z.ZodObject<{
26
27
  EPICSHOP_PARENT_PORT?: string | undefined;
27
28
  EPICSHOP_PARENT_TOKEN?: string | undefined;
28
29
  EPICSHOP_APP_LOCATION?: string | undefined;
29
- EPICSHOP_IS_PUBLISHED?: string | undefined;
30
30
  }, {
31
31
  EPICSHOP_CONTEXT_CWD?: string | undefined;
32
32
  NODE_ENV?: "production" | "development" | "test" | undefined;
@@ -47,6 +47,7 @@ declare const schema: z.ZodEffects<z.ZodObject<{
47
47
  EPICSHOP_GITHUB_REPO: string;
48
48
  EPICSHOP_GITHUB_ROOT: string;
49
49
  EPICSHOP_APP_VERSION: string;
50
+ EPICSHOP_IS_PUBLISHED: string;
50
51
  SENTRY_DSN: string;
51
52
  SENTRY_ORG: string;
52
53
  SENTRY_PROJECT: string;
@@ -54,7 +55,6 @@ declare const schema: z.ZodEffects<z.ZodObject<{
54
55
  EPICSHOP_PARENT_PORT?: string | undefined;
55
56
  EPICSHOP_PARENT_TOKEN?: string | undefined;
56
57
  EPICSHOP_APP_LOCATION?: string | undefined;
57
- EPICSHOP_IS_PUBLISHED?: string | undefined;
58
58
  }, {
59
59
  EPICSHOP_CONTEXT_CWD?: string | undefined;
60
60
  NODE_ENV?: "production" | "development" | "test" | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"env.server.d.ts","sourceRoot":"","sources":["../../src/env.server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmDT,CAAA;AAEH,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,MAAM,CAAC;QAChB,UAAU,UAAW,SAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC;SAAG;KACtD;CACD;AAED,wBAAsB,IAAI,kBAazB;AAED;;;;;;;;GAQG;AACH,wBAAgB,MAAM;;;;;;;;;;;;EAgBrB;AAED,KAAK,GAAG,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAA;AAEpC,OAAO,CAAC,MAAM,CAAC;IACd,IAAI,GAAG,EAAE,GAAG,CAAA;IACZ,UAAU,MAAM;QACf,GAAG,EAAE,GAAG,CAAA;KACR;CACD"}
1
+ {"version":3,"file":"env.server.d.ts","sourceRoot":"","sources":["../../src/env.server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgET,CAAA;AAEH,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,MAAM,CAAC;QAChB,UAAU,UAAW,SAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC;SAAG;KACtD;CACD;AAED,wBAAsB,IAAI,kBAazB;AAED;;;;;;;;GAQG;AACH,wBAAgB,MAAM;;;;;;;;;;;;EAgBrB;AAED,KAAK,GAAG,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAA;AAEpC,OAAO,CAAC,MAAM,CAAC;IACd,IAAI,GAAG,EAAE,GAAG,CAAA;IACZ,UAAU,MAAM;QACf,GAAG,EAAE,GAAG,CAAA;KACR;CACD"}
@@ -1,7 +1,9 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
3
4
  import { z } from 'zod';
4
5
  import { handleGitHubRepoAndRoot } from './utils.js';
6
+ const __dirname = path.dirname(new URL(import.meta.url).pathname);
5
7
  const schema = z
6
8
  .object({
7
9
  EPICSHOP_CONTEXT_CWD: z.string().default(process.cwd()),
@@ -14,7 +16,9 @@ const schema = z
14
16
  EPICSHOP_PARENT_PORT: z.string().optional(),
15
17
  EPICSHOP_PARENT_TOKEN: z.string().optional(),
16
18
  EPICSHOP_APP_LOCATION: z.string().optional(),
17
- EPICSHOP_IS_PUBLISHED: z.string().optional(),
19
+ EPICSHOP_IS_PUBLISHED: z
20
+ .string()
21
+ .default(__dirname.includes('node_modules') ? 'true' : 'false'),
18
22
  // Sentry configuration
19
23
  SENTRY_DSN: z
20
24
  .string()
@@ -30,10 +34,14 @@ const schema = z
30
34
  if (!epicshopConfig) {
31
35
  throw new Error(`No epicshop configuration found in "${pkgJsonPath}". If this is a workshop directory, please add an "epicshop" section to your package.json. If this is not a workshop directory, please set the EPICSHOP_CONTEXT_CWD environment variable to the directory containing your package.json with the "epicshop" config section.`);
32
36
  }
33
- if (env.EPICSHOP_IS_PUBLISHED === undefined) {
34
- env.EPICSHOP_IS_PUBLISHED = env.EPICSHOP_APP_VERSION.includes('0.0.0')
35
- ? 'false'
36
- : 'true';
37
+ if (env.EPICSHOP_APP_LOCATION === undefined) {
38
+ const workshopAppPath = import.meta.resolve('@epic-web/workshop-app/package.json');
39
+ const packagePath = fileURLToPath(workshopAppPath);
40
+ env.EPICSHOP_APP_LOCATION = path.dirname(packagePath);
41
+ }
42
+ if (env.EPICSHOP_APP_VERSION === '0.0.0-unknown') {
43
+ const packageJson = JSON.parse(await fs.readFile(path.join(env.EPICSHOP_APP_LOCATION, 'package.json'), 'utf-8'));
44
+ env.EPICSHOP_APP_VERSION = packageJson.version;
37
45
  }
38
46
  if (!env.EPICSHOP_GITHUB_REPO || !env.EPICSHOP_GITHUB_ROOT) {
39
47
  const { githubRepo, githubRoot } = handleGitHubRepoAndRoot({
@@ -1 +1 @@
1
- {"version":3,"file":"env.server.js","sourceRoot":"","sources":["../../src/env.server.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'node:fs/promises'\nimport path from 'node:path'\nimport { z } from 'zod'\nimport { handleGitHubRepoAndRoot } from './utils.js'\n\nconst schema = z\n\t.object({\n\t\tEPICSHOP_CONTEXT_CWD: z.string().default(process.cwd()),\n\t\tNODE_ENV: z\n\t\t\t.enum(['production', 'development', 'test'] as const)\n\t\t\t.default('development'),\n\t\tEPICSHOP_GITHUB_REPO: z.string().default(''),\n\t\tEPICSHOP_GITHUB_ROOT: z.string().default(''),\n\t\tEPICSHOP_APP_VERSION: z.string().default('0.0.0-unknown'),\n\t\tEPICSHOP_PARENT_PORT: z.string().optional(),\n\t\tEPICSHOP_PARENT_TOKEN: z.string().optional(),\n\t\tEPICSHOP_APP_LOCATION: z.string().optional(),\n\t\tEPICSHOP_IS_PUBLISHED: z.string().optional(),\n\t\t// Sentry configuration\n\t\tSENTRY_DSN: z\n\t\t\t.string()\n\t\t\t.default(\n\t\t\t\t'https://cd51fbf4ca0834f7b3529a478a8ece4c@o913766.ingest.us.sentry.io/4509630082252800',\n\t\t\t),\n\t\tSENTRY_ORG: z.string().default('kent-c-dodds-tech-llc'),\n\t\tSENTRY_PROJECT: z.string().default('epicshop'),\n\t\tSENTRY_PROJECT_ID: z.string().default('4509630082252800'),\n\t})\n\t.transform(async (env) => {\n\t\tconst pkgJsonPath = path.join(env.EPICSHOP_CONTEXT_CWD, 'package.json')\n\t\tconst pkgJson = JSON.parse(await fs.readFile(pkgJsonPath, 'utf-8')) as {\n\t\t\tepicshop?: {\n\t\t\t\tgithubRepo?: string\n\t\t\t\tgithubRoot?: string\n\t\t\t}\n\t\t}\n\t\tconst epicshopConfig = pkgJson.epicshop ?? {}\n\t\tif (!epicshopConfig) {\n\t\t\tthrow new Error(\n\t\t\t\t`No epicshop configuration found in \"${pkgJsonPath}\". If this is a workshop directory, please add an \"epicshop\" section to your package.json. If this is not a workshop directory, please set the EPICSHOP_CONTEXT_CWD environment variable to the directory containing your package.json with the \"epicshop\" config section.`,\n\t\t\t)\n\t\t}\n\t\tif (env.EPICSHOP_IS_PUBLISHED === undefined) {\n\t\t\tenv.EPICSHOP_IS_PUBLISHED = env.EPICSHOP_APP_VERSION.includes('0.0.0')\n\t\t\t\t? 'false'\n\t\t\t\t: 'true'\n\t\t}\n\t\tif (!env.EPICSHOP_GITHUB_REPO || !env.EPICSHOP_GITHUB_ROOT) {\n\t\t\tconst { githubRepo, githubRoot } = handleGitHubRepoAndRoot({\n\t\t\t\tgithubRepo: epicshopConfig.githubRepo,\n\t\t\t\tgithubRoot: epicshopConfig.githubRoot,\n\t\t\t})\n\t\t\tenv.EPICSHOP_GITHUB_REPO = githubRepo\n\t\t\tenv.EPICSHOP_GITHUB_ROOT = githubRoot\n\t\t}\n\t\treturn env\n\t})\n\ndeclare global {\n\tnamespace NodeJS {\n\t\tinterface ProcessEnv extends z.infer<typeof schema> {}\n\t}\n}\n\nexport async function init() {\n\tconst parsed = await schema.safeParseAsync(process.env)\n\n\tif (!parsed.success) {\n\t\tconsole.error(\n\t\t\t'❌ Invalid environment variables:',\n\t\t\tparsed.error.flatten().fieldErrors,\n\t\t)\n\n\t\tthrow new Error('Invalid environment variables')\n\t}\n\n\tObject.assign(process.env, parsed.data)\n}\n\n/**\n * This is used in both `entry.server.ts` and `root.tsx` to ensure that\n * the environment variables are set and globally available before the app is\n * started.\n *\n * NOTE: Do *not* add any environment variables in here that you do not wish to\n * be included in the client.\n * @returns all public ENV variables\n */\nexport function getEnv() {\n\treturn {\n\t\tMODE: process.env.NODE_ENV,\n\t\tEPICSHOP_CONTEXT_CWD: process.env.EPICSHOP_CONTEXT_CWD,\n\t\tEPICSHOP_GITHUB_REPO: process.env.EPICSHOP_GITHUB_REPO,\n\t\tEPICSHOP_GITHUB_ROOT: process.env.EPICSHOP_GITHUB_ROOT,\n\t\tEPICSHOP_DEPLOYED:\n\t\t\tprocess.env.EPICSHOP_DEPLOYED === 'true' ||\n\t\t\tprocess.env.EPICSHOP_DEPLOYED === '1',\n\t\tEPICSHOP_APP_VERSION: process.env.EPICSHOP_APP_VERSION,\n\t\tEPICSHOP_PARENT_PORT: process.env.EPICSHOP_PARENT_PORT,\n\t\tEPICSHOP_PARENT_TOKEN: process.env.EPICSHOP_PARENT_TOKEN,\n\t\tEPICSHOP_IS_PUBLISHED: process.env.EPICSHOP_IS_PUBLISHED === 'true',\n\t\tSENTRY_DSN: process.env.SENTRY_DSN,\n\t\tSENTRY_PROJECT_ID: process.env.SENTRY_PROJECT_ID,\n\t}\n}\n\ntype ENV = ReturnType<typeof getEnv>\n\ndeclare global {\n\tvar ENV: ENV\n\tinterface Window {\n\t\tENV: ENV\n\t}\n}\n"]}
1
+ {"version":3,"file":"env.server.js","sourceRoot":"","sources":["../../src/env.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAEpD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;AAEjE,MAAM,MAAM,GAAG,CAAC;KACd,MAAM,CAAC;IACP,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IACvD,QAAQ,EAAE,CAAC;SACT,IAAI,CAAC,CAAC,YAAY,EAAE,aAAa,EAAE,MAAM,CAAU,CAAC;SACpD,OAAO,CAAC,aAAa,CAAC;IACxB,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5C,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5C,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC;IACzD,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3C,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5C,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5C,qBAAqB,EAAE,CAAC;SACtB,MAAM,EAAE;SACR,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAChE,uBAAuB;IACvB,UAAU,EAAE,CAAC;SACX,MAAM,EAAE;SACR,OAAO,CACP,uFAAuF,CACvF;IACF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC;IACvD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;IAC9C,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC;CACzD,CAAC;KACD,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACxB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAA;IACvE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAKjE,CAAA;IACD,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAA;IAC7C,IAAI,CAAC,cAAc,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACd,uCAAuC,WAAW,4QAA4Q,CAC9T,CAAA;IACF,CAAC;IACD,IAAI,GAAG,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAC1C,qCAAqC,CACrC,CAAA;QACD,MAAM,WAAW,GAAG,aAAa,CAAC,eAAe,CAAC,CAAA;QAClD,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACtD,CAAC;IACD,IAAI,GAAG,CAAC,oBAAoB,KAAK,eAAe,EAAE,CAAC;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC7B,MAAM,EAAE,CAAC,QAAQ,CAChB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,cAAc,CAAC,EACpD,OAAO,CACP,CACsB,CAAA;QACxB,GAAG,CAAC,oBAAoB,GAAG,WAAW,CAAC,OAAO,CAAA;IAC/C,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QAC5D,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,uBAAuB,CAAC;YAC1D,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,UAAU,EAAE,cAAc,CAAC,UAAU;SACrC,CAAC,CAAA;QACF,GAAG,CAAC,oBAAoB,GAAG,UAAU,CAAA;QACrC,GAAG,CAAC,oBAAoB,GAAG,UAAU,CAAA;IACtC,CAAC;IACD,OAAO,GAAG,CAAA;AACX,CAAC,CAAC,CAAA;AAQH,MAAM,CAAC,KAAK,UAAU,IAAI;IACzB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAEvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CACZ,kCAAkC,EAClC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,WAAW,CAClC,CAAA;QAED,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IACjD,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;AACxC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,MAAM;IACrB,OAAO;QACN,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;QAC1B,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;QACtD,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;QACtD,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;QACtD,iBAAiB,EAChB,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM;YACxC,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,GAAG;QACtC,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;QACtD,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;QACtD,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;QACxD,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,MAAM;QACnE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;QAClC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;KAChD,CAAA;AACF,CAAC","sourcesContent":["import fs from 'node:fs/promises'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { z } from 'zod'\nimport { handleGitHubRepoAndRoot } from './utils.js'\n\nconst __dirname = path.dirname(new URL(import.meta.url).pathname)\n\nconst schema = z\n\t.object({\n\t\tEPICSHOP_CONTEXT_CWD: z.string().default(process.cwd()),\n\t\tNODE_ENV: z\n\t\t\t.enum(['production', 'development', 'test'] as const)\n\t\t\t.default('development'),\n\t\tEPICSHOP_GITHUB_REPO: z.string().default(''),\n\t\tEPICSHOP_GITHUB_ROOT: z.string().default(''),\n\t\tEPICSHOP_APP_VERSION: z.string().default('0.0.0-unknown'),\n\t\tEPICSHOP_PARENT_PORT: z.string().optional(),\n\t\tEPICSHOP_PARENT_TOKEN: z.string().optional(),\n\t\tEPICSHOP_APP_LOCATION: z.string().optional(),\n\t\tEPICSHOP_IS_PUBLISHED: z\n\t\t\t.string()\n\t\t\t.default(__dirname.includes('node_modules') ? 'true' : 'false'),\n\t\t// Sentry configuration\n\t\tSENTRY_DSN: z\n\t\t\t.string()\n\t\t\t.default(\n\t\t\t\t'https://cd51fbf4ca0834f7b3529a478a8ece4c@o913766.ingest.us.sentry.io/4509630082252800',\n\t\t\t),\n\t\tSENTRY_ORG: z.string().default('kent-c-dodds-tech-llc'),\n\t\tSENTRY_PROJECT: z.string().default('epicshop'),\n\t\tSENTRY_PROJECT_ID: z.string().default('4509630082252800'),\n\t})\n\t.transform(async (env) => {\n\t\tconst pkgJsonPath = path.join(env.EPICSHOP_CONTEXT_CWD, 'package.json')\n\t\tconst pkgJson = JSON.parse(await fs.readFile(pkgJsonPath, 'utf-8')) as {\n\t\t\tepicshop?: {\n\t\t\t\tgithubRepo?: string\n\t\t\t\tgithubRoot?: string\n\t\t\t}\n\t\t}\n\t\tconst epicshopConfig = pkgJson.epicshop ?? {}\n\t\tif (!epicshopConfig) {\n\t\t\tthrow new Error(\n\t\t\t\t`No epicshop configuration found in \"${pkgJsonPath}\". If this is a workshop directory, please add an \"epicshop\" section to your package.json. If this is not a workshop directory, please set the EPICSHOP_CONTEXT_CWD environment variable to the directory containing your package.json with the \"epicshop\" config section.`,\n\t\t\t)\n\t\t}\n\t\tif (env.EPICSHOP_APP_LOCATION === undefined) {\n\t\t\tconst workshopAppPath = import.meta.resolve(\n\t\t\t\t'@epic-web/workshop-app/package.json',\n\t\t\t)\n\t\t\tconst packagePath = fileURLToPath(workshopAppPath)\n\t\t\tenv.EPICSHOP_APP_LOCATION = path.dirname(packagePath)\n\t\t}\n\t\tif (env.EPICSHOP_APP_VERSION === '0.0.0-unknown') {\n\t\t\tconst packageJson = JSON.parse(\n\t\t\t\tawait fs.readFile(\n\t\t\t\t\tpath.join(env.EPICSHOP_APP_LOCATION, 'package.json'),\n\t\t\t\t\t'utf-8',\n\t\t\t\t),\n\t\t\t) as { version: string }\n\t\t\tenv.EPICSHOP_APP_VERSION = packageJson.version\n\t\t}\n\t\tif (!env.EPICSHOP_GITHUB_REPO || !env.EPICSHOP_GITHUB_ROOT) {\n\t\t\tconst { githubRepo, githubRoot } = handleGitHubRepoAndRoot({\n\t\t\t\tgithubRepo: epicshopConfig.githubRepo,\n\t\t\t\tgithubRoot: epicshopConfig.githubRoot,\n\t\t\t})\n\t\t\tenv.EPICSHOP_GITHUB_REPO = githubRepo\n\t\t\tenv.EPICSHOP_GITHUB_ROOT = githubRoot\n\t\t}\n\t\treturn env\n\t})\n\ndeclare global {\n\tnamespace NodeJS {\n\t\tinterface ProcessEnv extends z.infer<typeof schema> {}\n\t}\n}\n\nexport async function init() {\n\tconst parsed = await schema.safeParseAsync(process.env)\n\n\tif (!parsed.success) {\n\t\tconsole.error(\n\t\t\t'❌ Invalid environment variables:',\n\t\t\tparsed.error.flatten().fieldErrors,\n\t\t)\n\n\t\tthrow new Error('Invalid environment variables')\n\t}\n\n\tObject.assign(process.env, parsed.data)\n}\n\n/**\n * This is used in both `entry.server.ts` and `root.tsx` to ensure that\n * the environment variables are set and globally available before the app is\n * started.\n *\n * NOTE: Do *not* add any environment variables in here that you do not wish to\n * be included in the client.\n * @returns all public ENV variables\n */\nexport function getEnv() {\n\treturn {\n\t\tMODE: process.env.NODE_ENV,\n\t\tEPICSHOP_CONTEXT_CWD: process.env.EPICSHOP_CONTEXT_CWD,\n\t\tEPICSHOP_GITHUB_REPO: process.env.EPICSHOP_GITHUB_REPO,\n\t\tEPICSHOP_GITHUB_ROOT: process.env.EPICSHOP_GITHUB_ROOT,\n\t\tEPICSHOP_DEPLOYED:\n\t\t\tprocess.env.EPICSHOP_DEPLOYED === 'true' ||\n\t\t\tprocess.env.EPICSHOP_DEPLOYED === '1',\n\t\tEPICSHOP_APP_VERSION: process.env.EPICSHOP_APP_VERSION,\n\t\tEPICSHOP_PARENT_PORT: process.env.EPICSHOP_PARENT_PORT,\n\t\tEPICSHOP_PARENT_TOKEN: process.env.EPICSHOP_PARENT_TOKEN,\n\t\tEPICSHOP_IS_PUBLISHED: process.env.EPICSHOP_IS_PUBLISHED === 'true',\n\t\tSENTRY_DSN: process.env.SENTRY_DSN,\n\t\tSENTRY_PROJECT_ID: process.env.SENTRY_PROJECT_ID,\n\t}\n}\n\ntype ENV = ReturnType<typeof getEnv>\n\ndeclare global {\n\tvar ENV: ENV\n\tinterface Window {\n\t\tENV: ENV\n\t}\n}\n"]}
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@epic-web/workshop-utils","version":"6.14.2","publishConfig":{"access":"public"},"type":"module","tshy":{"project":"./tsconfig.build.json","dialects":["esm"],"exports":{"./package.json":"./package.json","./apps.server":"./src/apps.server.ts","./diff.server":"./src/diff.server.ts","./env.server":"./src/env.server.ts","./epic-api.server":"./src/epic-api.server.ts","./user.server":"./src/user.server.ts","./cache.server":"./src/cache.server.ts","./config.server":"./src/config.server.ts","./db.server":"./src/db.server.ts","./timing.server":"./src/timing.server.ts","./modified-time.server":"./src/modified-time.server.ts","./compile-mdx.server":"./src/compile-mdx.server.ts","./git.server":"./src/git.server.ts","./iframe-sync":"./src/iframe-sync.ts","./playwright.server":"./src/playwright.server.ts","./notifications.server":"./src/notifications.server.ts","./process-manager.server":"./src/process-manager.server.ts","./test":"./src/test.ts","./request-context.server":"./src/request-context.server.ts","./utils.server":"./src/utils.server.ts","./utils":"./src/utils.ts"}},"exports":{"./package.json":"./package.json","./apps.server":{"import":{"types":"./dist/esm/apps.server.d.ts","default":"./dist/esm/apps.server.js"}},"./diff.server":{"import":{"types":"./dist/esm/diff.server.d.ts","default":"./dist/esm/diff.server.js"}},"./env.server":{"import":{"types":"./dist/esm/env.server.d.ts","default":"./dist/esm/env.server.js"}},"./epic-api.server":{"import":{"types":"./dist/esm/epic-api.server.d.ts","default":"./dist/esm/epic-api.server.js"}},"./user.server":{"import":{"types":"./dist/esm/user.server.d.ts","default":"./dist/esm/user.server.js"}},"./cache.server":{"import":{"types":"./dist/esm/cache.server.d.ts","default":"./dist/esm/cache.server.js"}},"./config.server":{"import":{"types":"./dist/esm/config.server.d.ts","default":"./dist/esm/config.server.js"}},"./db.server":{"import":{"types":"./dist/esm/db.server.d.ts","default":"./dist/esm/db.server.js"}},"./timing.server":{"import":{"types":"./dist/esm/timing.server.d.ts","default":"./dist/esm/timing.server.js"}},"./modified-time.server":{"import":{"types":"./dist/esm/modified-time.server.d.ts","default":"./dist/esm/modified-time.server.js"}},"./compile-mdx.server":{"import":{"types":"./dist/esm/compile-mdx.server.d.ts","default":"./dist/esm/compile-mdx.server.js"}},"./git.server":{"import":{"types":"./dist/esm/git.server.d.ts","default":"./dist/esm/git.server.js"}},"./iframe-sync":{"import":{"types":"./dist/esm/iframe-sync.d.ts","default":"./dist/esm/iframe-sync.js"}},"./playwright.server":{"import":{"types":"./dist/esm/playwright.server.d.ts","default":"./dist/esm/playwright.server.js"}},"./notifications.server":{"import":{"types":"./dist/esm/notifications.server.d.ts","default":"./dist/esm/notifications.server.js"}},"./process-manager.server":{"import":{"types":"./dist/esm/process-manager.server.d.ts","default":"./dist/esm/process-manager.server.js"}},"./test":{"import":{"types":"./dist/esm/test.d.ts","default":"./dist/esm/test.js"}},"./request-context.server":{"import":{"types":"./dist/esm/request-context.server.d.ts","default":"./dist/esm/request-context.server.js"}},"./utils.server":{"import":{"types":"./dist/esm/utils.server.d.ts","default":"./dist/esm/utils.server.js"}},"./utils":{"import":{"types":"./dist/esm/utils.d.ts","default":"./dist/esm/utils.js"}}},"files":["dist"],"scripts":{"typecheck":"tsc --noEmit","build":"tshy","build:watch":"nx watch --projects=@epic-web/workshop-utils -- nx run \\$NX_PROJECT_NAME:build"},"dependencies":{"@epic-web/cachified":"^5.6.0","@epic-web/invariant":"^1.0.0","@epic-web/remember":"^1.1.0","@kentcdodds/md-temp":"^10.0.1","@mdx-js/mdx":"^3.1.0","@paralleldrive/cuid2":"^2.2.2","@playwright/test":"^1.53.2","@react-router/node":"^7.6.3","@testing-library/dom":"^10.4.0","@testing-library/jest-dom":"^6.6.3","@total-typescript/ts-reset":"^0.6.1","@types/chai":"^5.2.2","@types/chai-dom":"^1.11.3","@vitest/expect":"^3.2.4","chai":"^5.2.0","chai-dom":"^1.12.1","chalk":"^5.4.1","chokidar":"^4.0.3","close-with-grace":"^2.2.0","cookie":"^1.0.2","cross-spawn":"^7.0.6","dayjs":"^1.11.13","esbuild":"^0.25.5","execa":"^9.6.0","find-process":"^1.4.10","fkill":"^9.0.0","fs-extra":"^11.3.0","globby":"^14.1.0","ignore":"^7.0.5","json5":"^2.2.3","lru-cache":"^11.1.0","lz-string":"^1.5.0","md5-hex":"^5.0.0","mdast-util-mdx-jsx":"^3.2.0","mdx-bundler":"^10.1.1","p-queue":"^8.1.0","parse-git-diff":"^0.0.19","rehype":"^13.0.2","rehype-autolink-headings":"^7.1.0","remark":"^15.0.1","remark-emoji":"^5.0.1","remark-gfm":"^4.0.1","shiki":"^3.7.0","unified":"^11.0.5","unist-util-remove-position":"^5.0.0","unist-util-visit":"^5.0.0","zod":"^3.25.71"},"devDependencies":{"@types/hast":"^3.0.4","@types/mdast":"^4.0.4","@types/node":"^24.0.10","tshy":"^3.0.2"},"repository":{"type":"git","url":"https://github.com/epicweb-dev/epicshop.git","directory":"packages/workshop-utils"}}
1
+ {"name":"@epic-web/workshop-utils","version":"6.14.4","publishConfig":{"access":"public"},"type":"module","tshy":{"project":"./tsconfig.build.json","dialects":["esm"],"exports":{"./package.json":"./package.json","./apps.server":"./src/apps.server.ts","./diff.server":"./src/diff.server.ts","./env.server":"./src/env.server.ts","./epic-api.server":"./src/epic-api.server.ts","./user.server":"./src/user.server.ts","./cache.server":"./src/cache.server.ts","./config.server":"./src/config.server.ts","./db.server":"./src/db.server.ts","./timing.server":"./src/timing.server.ts","./modified-time.server":"./src/modified-time.server.ts","./compile-mdx.server":"./src/compile-mdx.server.ts","./git.server":"./src/git.server.ts","./iframe-sync":"./src/iframe-sync.ts","./playwright.server":"./src/playwright.server.ts","./notifications.server":"./src/notifications.server.ts","./process-manager.server":"./src/process-manager.server.ts","./test":"./src/test.ts","./request-context.server":"./src/request-context.server.ts","./utils.server":"./src/utils.server.ts","./utils":"./src/utils.ts"}},"exports":{"./package.json":"./package.json","./apps.server":{"import":{"types":"./dist/esm/apps.server.d.ts","default":"./dist/esm/apps.server.js"}},"./diff.server":{"import":{"types":"./dist/esm/diff.server.d.ts","default":"./dist/esm/diff.server.js"}},"./env.server":{"import":{"types":"./dist/esm/env.server.d.ts","default":"./dist/esm/env.server.js"}},"./epic-api.server":{"import":{"types":"./dist/esm/epic-api.server.d.ts","default":"./dist/esm/epic-api.server.js"}},"./user.server":{"import":{"types":"./dist/esm/user.server.d.ts","default":"./dist/esm/user.server.js"}},"./cache.server":{"import":{"types":"./dist/esm/cache.server.d.ts","default":"./dist/esm/cache.server.js"}},"./config.server":{"import":{"types":"./dist/esm/config.server.d.ts","default":"./dist/esm/config.server.js"}},"./db.server":{"import":{"types":"./dist/esm/db.server.d.ts","default":"./dist/esm/db.server.js"}},"./timing.server":{"import":{"types":"./dist/esm/timing.server.d.ts","default":"./dist/esm/timing.server.js"}},"./modified-time.server":{"import":{"types":"./dist/esm/modified-time.server.d.ts","default":"./dist/esm/modified-time.server.js"}},"./compile-mdx.server":{"import":{"types":"./dist/esm/compile-mdx.server.d.ts","default":"./dist/esm/compile-mdx.server.js"}},"./git.server":{"import":{"types":"./dist/esm/git.server.d.ts","default":"./dist/esm/git.server.js"}},"./iframe-sync":{"import":{"types":"./dist/esm/iframe-sync.d.ts","default":"./dist/esm/iframe-sync.js"}},"./playwright.server":{"import":{"types":"./dist/esm/playwright.server.d.ts","default":"./dist/esm/playwright.server.js"}},"./notifications.server":{"import":{"types":"./dist/esm/notifications.server.d.ts","default":"./dist/esm/notifications.server.js"}},"./process-manager.server":{"import":{"types":"./dist/esm/process-manager.server.d.ts","default":"./dist/esm/process-manager.server.js"}},"./test":{"import":{"types":"./dist/esm/test.d.ts","default":"./dist/esm/test.js"}},"./request-context.server":{"import":{"types":"./dist/esm/request-context.server.d.ts","default":"./dist/esm/request-context.server.js"}},"./utils.server":{"import":{"types":"./dist/esm/utils.server.d.ts","default":"./dist/esm/utils.server.js"}},"./utils":{"import":{"types":"./dist/esm/utils.d.ts","default":"./dist/esm/utils.js"}}},"files":["dist"],"scripts":{"typecheck":"tsc --noEmit","build":"tshy","build:watch":"nx watch --projects=@epic-web/workshop-utils -- nx run \\$NX_PROJECT_NAME:build"},"dependencies":{"@epic-web/cachified":"^5.6.0","@epic-web/invariant":"^1.0.0","@epic-web/remember":"^1.1.0","@kentcdodds/md-temp":"^10.0.1","@mdx-js/mdx":"^3.1.0","@paralleldrive/cuid2":"^2.2.2","@playwright/test":"^1.53.2","@react-router/node":"^7.6.3","@testing-library/dom":"^10.4.0","@testing-library/jest-dom":"^6.6.3","@total-typescript/ts-reset":"^0.6.1","@types/chai":"^5.2.2","@types/chai-dom":"^1.11.3","@vitest/expect":"^3.2.4","chai":"^5.2.0","chai-dom":"^1.12.1","chalk":"^5.4.1","chokidar":"^4.0.3","close-with-grace":"^2.2.0","cookie":"^1.0.2","cross-spawn":"^7.0.6","dayjs":"^1.11.13","esbuild":"^0.25.5","execa":"^9.6.0","find-process":"^1.4.10","fkill":"^9.0.0","fs-extra":"^11.3.0","globby":"^14.1.0","ignore":"^7.0.5","json5":"^2.2.3","lru-cache":"^11.1.0","lz-string":"^1.5.0","md5-hex":"^5.0.0","mdast-util-mdx-jsx":"^3.2.0","mdx-bundler":"^10.1.1","p-queue":"^8.1.0","parse-git-diff":"^0.0.19","rehype":"^13.0.2","rehype-autolink-headings":"^7.1.0","remark":"^15.0.1","remark-emoji":"^5.0.1","remark-gfm":"^4.0.1","shiki":"^3.7.0","unified":"^11.0.5","unist-util-remove-position":"^5.0.0","unist-util-visit":"^5.0.0","zod":"^3.25.71"},"devDependencies":{"@types/hast":"^3.0.4","@types/mdast":"^4.0.4","@types/node":"^24.0.10","tshy":"^3.0.2"},"repository":{"type":"git","url":"https://github.com/epicweb-dev/epicshop.git","directory":"packages/workshop-utils"}}